diff --git a/README.md b/README.md
index 0a969ed0a74..e1e94874b13 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@ This file is tarball, and may need to be extracted twice depending on which prog
We recommend extracting to a new folder rather than on top of an existing installation.
**For users who have played Forge before all of your user data is stored separately so you don't have to worry about losing it on upgrade.**
-Java 8 or later is required to run Forge. Please make sure is the right version is installed in your enviroment. Check the user guide for more info.
+Java 8 or later is required to run Forge. Please make sure is the right version is installed in your environment. Check the user guide for more info.
For Android users, download the APK file from [Snapshot Build](https://downloads.cardforge.org/dailysnapshots/) to your device.
On first run, Forge will download all needed data.
@@ -47,4 +47,4 @@ You can also play against the AI in a variety of formats, such as Sealed, Draft,
## Questions
If you have any questions, please join the Discord channel. Read the #rules and the frequently-asked-questions.
-If your question is not answered there, feel free to ask in the #help channel.
\ No newline at end of file
+If your question is not answered there, feel free to ask in the #help channel.
diff --git a/forge-adventure/pom.xml b/forge-adventure/pom.xml
index 50623a0175c..1cdc2f9b211 100644
--- a/forge-adventure/pom.xml
+++ b/forge-adventure/pom.xml
@@ -3,7 +3,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
4.0.0
diff --git a/forge-ai/pom.xml b/forge-ai/pom.xml
index 9cae8944433..8b2743db97b 100644
--- a/forge-ai/pom.xml
+++ b/forge-ai/pom.xml
@@ -6,7 +6,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-ai
diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java
index 966300ee475..14915df4a79 100644
--- a/forge-ai/src/main/java/forge/ai/AiController.java
+++ b/forge-ai/src/main/java/forge/ai/AiController.java
@@ -923,6 +923,10 @@ public class AiController {
if (checkCurseEffects(sa)) {
return AiPlayDecision.CurseEffects;
}
+ // TODO maybe other location for this?
+ if (!sa.isLegalAfterStack()) {
+ return AiPlayDecision.AnotherTime;
+ }
Card spellHost = card;
if (sa.isSpell()) {
spellHost = CardCopyService.getLKICopy(spellHost);
@@ -930,10 +934,6 @@ public class AiController {
spellHost.setLastKnownZone(game.getStackZone()); // need to add to stack to make check Restrictions respect stack cmc
spellHost.setCastFrom(card.getZone());
}
- // TODO maybe other location for this?
- if (!sa.isLegalAfterStack()) {
- return AiPlayDecision.AnotherTime;
- }
if (!sa.checkRestrictions(spellHost, player)) {
return AiPlayDecision.AnotherTime;
}
@@ -946,7 +946,7 @@ public class AiController {
}
}
if (sa instanceof Spell) {
- if (card.isPermanent()) {
+ if (sa.getApi() == ApiType.PermanentCreature || sa.getApi() == ApiType.PermanentNoncreature) {
return canPlayFromEffectAI((Spell) sa, false, true);
}
if (!player.cantLoseForZeroOrLessLife() && player.canLoseLife() &&
diff --git a/forge-ai/src/main/java/forge/ai/AiCostDecision.java b/forge-ai/src/main/java/forge/ai/AiCostDecision.java
index 0da8034e52f..fd176603ff0 100644
--- a/forge-ai/src/main/java/forge/ai/AiCostDecision.java
+++ b/forge-ai/src/main/java/forge/ai/AiCostDecision.java
@@ -651,7 +651,7 @@ public class AiCostDecision extends CostDecisionMakerBase {
// TODO sort negatives to remove from best Cards first?
for (final Card crd : negatives) {
for (Map.Entry e : table.filterToRemove(crd).entrySet()) {
- if (ComputerUtil.isNegativeCounter(e.getKey(), crd)) {
+ if (ComputerUtil.isNegativeCounter(e.getKey(), crd) && crd.canRemoveCounters(e.getKey())) {
int over = Math.min(e.getValue(), c - toRemove);
if (over > 0) {
toRemove += over;
@@ -762,7 +762,7 @@ public class AiCostDecision extends CostDecisionMakerBase {
}
}
- // if table is empty, than no counter was removed
+ // if table is empty, then no counter was removed
return table.isEmpty() ? null : PaymentDecision.counters(table);
}
diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java
index af51c5afa0b..3af26c3358f 100644
--- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java
+++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java
@@ -836,10 +836,9 @@ public class ComputerUtil {
}
public static CardCollection chooseUntapType(final Player ai, final String type, final Card activate, final boolean untap, final int amount, SpellAbility sa) {
- CardCollection typeList =
- CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), activate.getController(), activate, sa);
+ CardCollection typeList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), type.split(";"), activate.getController(), activate, sa);
- typeList = CardLists.filter(typeList, Presets.TAPPED);
+ typeList = CardLists.filter(typeList, Presets.TAPPED, c -> c.getCounters(CounterEnumType.STUN) == 0 || c.canRemoveCounters(CounterType.get(CounterEnumType.STUN)));
if (untap) {
typeList.remove(activate);
@@ -851,12 +850,7 @@ public class ComputerUtil {
CardLists.sortByPowerDesc(typeList);
- final CardCollection untapList = new CardCollection();
-
- for (int i = 0; i < amount; i++) {
- untapList.add(typeList.get(i));
- }
- return untapList;
+ return typeList.subList(0, amount);
}
public static CardCollection chooseReturnType(final Player ai, final String type, final Card activate, final Card target, final int amount, SpellAbility sa) {
diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java
index 6a307d80773..d386ad08d87 100644
--- a/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java
+++ b/forge-ai/src/main/java/forge/ai/ability/CountersRemoveAi.java
@@ -221,6 +221,8 @@ public class CountersRemoveAi extends SpellAbilityAi {
sa.getTargets().add(ComputerUtilCard.getBestCreatureAI(aiUndyingList));
return true;
}
+
+ // TODO stun counters with canRemoveCounters check
// remove P1P1 counters from opposing creatures
CardCollection oppP1P1List = CardLists.filter(list,
diff --git a/forge-core/pom.xml b/forge-core/pom.xml
index 7499150ba81..7d1ec0902c0 100644
--- a/forge-core/pom.xml
+++ b/forge-core/pom.xml
@@ -6,7 +6,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-core
diff --git a/forge-core/src/main/java/forge/card/DeckHints.java b/forge-core/src/main/java/forge/card/DeckHints.java
index ef38a23da89..6b7d2b0435a 100644
--- a/forge-core/src/main/java/forge/card/DeckHints.java
+++ b/forge-core/src/main/java/forge/card/DeckHints.java
@@ -224,7 +224,7 @@ public class DeckHints {
return true;
}
for (String tok : card.getTokens()) {
- if (tdb != null && tdb.containsRule(tok) && predicate.apply(tdb.getToken(tok).getRules())) {
+ if (tdb != null && tdb.containsRule(tok) && rulesWithTokens(predicate).apply(tdb.getToken(tok).getRules())) {
return true;
}
}
diff --git a/forge-game/pom.xml b/forge-game/pom.xml
index 653a151451c..4bf1976d31e 100644
--- a/forge-game/pom.xml
+++ b/forge-game/pom.xml
@@ -6,7 +6,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-game
diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java
index 285514b2189..a6c986b9d94 100644
--- a/forge-game/src/main/java/forge/game/GameEntity.java
+++ b/forge-game/src/main/java/forge/game/GameEntity.java
@@ -309,8 +309,10 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
abstract public void setCounters(final Map allCounters);
+ abstract public boolean canRemoveCounters(final CounterType type);
+
abstract public boolean canReceiveCounters(final CounterType type);
- abstract public void subtractCounter(final CounterType counterName, final int n, final Player remover);
+ abstract public int subtractCounter(final CounterType counterName, final int n, final Player remover);
abstract public void clearCounters();
public boolean canReceiveCounters(final CounterEnumType type) {
@@ -331,8 +333,8 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
addCounter(CounterType.get(counterType), n, source, table);
}
- public void subtractCounter(final CounterEnumType counterName, final int n, final Player remover) {
- subtractCounter(CounterType.get(counterName), n, remover);
+ public int subtractCounter(final CounterEnumType counterName, final int n, final Player remover) {
+ return subtractCounter(CounterType.get(counterName), n, remover);
}
abstract public void addCounterInternal(final CounterType counterType, final int n, final Player source, final boolean fireEvents, GameEntityCounterTable table, Map params);
diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java
index 13a3c0697f7..2896cb0ada7 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java
@@ -4,7 +4,6 @@ import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-
import forge.card.CardStateName;
import forge.card.CardType;
import forge.game.*;
@@ -27,7 +26,9 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
public class ChangeZoneEffect extends SpellAbilityEffect {
@@ -1085,8 +1086,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : MessageUtil.formatMessage(Localizer.getInstance().getMessage("lblSelectCardFromPlayerZone", "{player's}", Lang.joinHomogenous(origin, ZoneType::getTranslatedName).toLowerCase()), decider, player);
final String totalcmc = sa.getParam("WithTotalCMC");
final String totalpower = sa.getParam("WithTotalPower");
+ final String totalCardTypes = sa.getParam("WithTotalCardTypes");
int totcmc = AbilityUtils.calculateAmount(source, totalcmc, sa);
int totpower = AbilityUtils.calculateAmount(source, totalpower, sa);
+ int totCardTypes = AbilityUtils.calculateAmount(source, totalCardTypes, sa);
CardCollection chosenCards = new CardCollection();
if (changeType.startsWith("EACH")) {
@@ -1160,6 +1163,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
}
}
+
// If we're choosing multiple cards, only need to show the reveal dialog the first time through.
boolean shouldReveal = (i == 0);
Card c = null;
@@ -1170,6 +1174,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
c = Aggregates.random(fetchList);
} else if (defined && !chooseFromDef) {
c = Iterables.getFirst(fetchList, null);
+ } else if (totalCardTypes != null) {
+ String title = selectPrompt;
+ title += "\nCard types left: " + Math.max(totCardTypes, 0);
+ c = decider.getController().chooseSingleCardForZoneChange(destination, origin, sa, fetchList, shouldReveal ? delayedReveal : null, title, !mandatory, decider);
} else {
String title = selectPrompt;
if (changeNum > 1) { //indicate progress if multiple cards being chosen
@@ -1202,6 +1210,13 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (totalpower != null) {
totpower -= c.getCurrentPower();
}
+ if (totalCardTypes != null) {
+ totCardTypes -= Iterables.size(c.getType().getCoreTypes());
+ }
+ }
+
+ if (totalCardTypes != null && totCardTypes > 0) {
+ chosenCards.clear();
}
}
@@ -1537,7 +1552,8 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
&& !sa.hasParam("AtRandom")
&& (!sa.hasParam("Defined") || sa.hasParam("ChooseFromDefined"))
&& !sa.hasParam("WithTotalCMC")
- && !sa.hasParam("WithTotalPower");
+ && !sa.hasParam("WithTotalPower")
+ && !sa.hasParam("WithTotalCardTypes");
}
/**
diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java
index 1f22a9db209..55f85d87356 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/CountersMoveEffect.java
@@ -101,8 +101,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
// uses for multi sources -> one defined/target
// this needs given counter type
if (sa.hasParam("ValidSource")) {
- CardCollectionView srcCards = game.getCardsIn(ZoneType.Battlefield);
- srcCards = CardLists.getValidCards(srcCards, sa.getParam("ValidSource"), activator, host, sa);
+ CardCollectionView srcCards = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("ValidSource"), activator, host, sa);
List tgtCards = getDefinedCardsOrTargeted(sa);
if (tgtCards.isEmpty()) {
@@ -147,11 +146,6 @@ public class CountersMoveEffect extends SpellAbilityEffect {
Map countersToAdd = Maps.newHashMap();
for (Card src : srcCards) {
- // rule 121.5: If the first and second objects are the same object, nothing happens
- if (src.equals(dest)) {
- continue;
- }
-
if ("All".equals(counterName)) {
final Map tgtCounters = Maps.newHashMap(src.getCounters());
for (Map.Entry e : tgtCounters.entrySet()) {
@@ -183,8 +177,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
params.put("CounterType", cType);
params.put("Source", source);
- CardCollectionView tgtCards = game.getCardsIn(ZoneType.Battlefield);
- tgtCards = CardLists.getValidCards(tgtCards, sa.getParam("ValidDefined"), activator, host, sa);
+ CardCollectionView tgtCards = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("ValidDefined"), activator, host, sa);
if (counterNum.equals("Any")) {
tgtCards = activator.getController().chooseCardsForEffect(
@@ -203,6 +196,9 @@ public class CountersMoveEffect extends SpellAbilityEffect {
if (!dest.canReceiveCounters(cType)) {
continue;
}
+ if (!source.canRemoveCounters(cType)) {
+ continue;
+ }
Card cur = game.getCardState(dest, null);
if (cur == null || !cur.equalsWithGameTimestamp(dest)) {
@@ -287,7 +283,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
final List typeChoices = Lists.newArrayList();
// get types of counters
for (CounterType ct : tgtCounters.keySet()) {
- if (dest.canReceiveCounters(ct)) {
+ if (dest.canReceiveCounters(ct) && source.canRemoveCounters(cType)) {
typeChoices.add(ct);
}
}
@@ -337,6 +333,9 @@ public class CountersMoveEffect extends SpellAbilityEffect {
if (!dest.canReceiveCounters(cType)) {
return;
}
+ if (!src.canRemoveCounters(cType)) {
+ return;
+ }
int cmax = src.getCounters(cType);
if (cmax <= 0) {
diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersPutOrRemoveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersPutOrRemoveEffect.java
index 0b4f50aa69f..90c56c66c70 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/CountersPutOrRemoveEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/CountersPutOrRemoveEffect.java
@@ -127,7 +127,18 @@ public class CountersPutOrRemoveEffect extends SpellAbilityEffect {
putCounter = !Expressions.compare(value, operator, operandValue);
} else {
- putCounter = pc.chooseBinary(sa, prompt, BinaryChoiceType.AddOrRemove, params);
+ boolean canReceive = tgtCard.canReceiveCounters(ctype);
+ boolean canRemove = tgtCard.canRemoveCounters(ctype);
+ if (!canReceive && !canRemove) {
+ return;
+ }
+ if (canReceive && !canRemove) {
+ putCounter = true;
+ } else if (!canReceive && canRemove) {
+ putCounter = false;
+ } else {
+ putCounter = pc.chooseBinary(sa, prompt, BinaryChoiceType.AddOrRemove, params);
+ }
}
if (putCounter) {
diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveAllEffect.java
index 459b6d7371f..4a9de811f88 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveAllEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveAllEffect.java
@@ -63,8 +63,7 @@ public class CountersRemoveAllEffect extends SpellAbilityEffect {
for (final Card tgtCard : cards) {
if (sa.hasParam("AllCounterTypes")) {
for (Map.Entry e : Lists.newArrayList(tgtCard.getCounters().entrySet())) {
- numberRemoved += e.getValue();
- tgtCard.subtractCounter(e.getKey(), e.getValue(), sa.getActivatingPlayer());
+ numberRemoved += tgtCard.subtractCounter(e.getKey(), e.getValue(), sa.getActivatingPlayer());
}
//tgtCard.getCounters().clear();
continue;
@@ -74,7 +73,7 @@ public class CountersRemoveAllEffect extends SpellAbilityEffect {
}
if (counterAmount > 0) {
- tgtCard.subtractCounter(CounterType.getType(type), counterAmount, sa.getActivatingPlayer());
+ numberRemoved += tgtCard.subtractCounter(CounterType.getType(type), counterAmount, sa.getActivatingPlayer());
game.updateLastStateForCard(tgtCard);
}
}
diff --git a/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveEffect.java
index d2baf42e9e3..524d430a95d 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/CountersRemoveEffect.java
@@ -110,8 +110,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
// Removing energy
if (type.equals("All")) {
for (Map.Entry e : Lists.newArrayList(tgtPlayer.getCounters().entrySet())) {
- tgtPlayer.subtractCounter(e.getKey(), e.getValue(), activator);
- totalRemoved += e.getValue();
+ totalRemoved += tgtPlayer.subtractCounter(e.getKey(), e.getValue(), activator);
}
} else {
if (num.equals("All")) {
@@ -120,8 +119,7 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
if (type.equals("Any")) {
totalRemoved += removeAnyType(tgtPlayer, cntToRemove, sa);
} else {
- tgtPlayer.subtractCounter(counterType, cntToRemove, activator);
- totalRemoved += cntToRemove;
+ totalRemoved += tgtPlayer.subtractCounter(counterType, cntToRemove, activator);
}
}
}
@@ -165,11 +163,11 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
if (gameCard == null || !tgtCard.equalsWithGameTimestamp(gameCard)) {
continue;
}
+
final Zone zone = game.getZoneOf(gameCard);
if (type.equals("All")) {
for (Map.Entry e : Lists.newArrayList(gameCard.getCounters().entrySet())) {
- gameCard.subtractCounter(e.getKey(), e.getValue(), activator);
- totalRemoved += e.getValue();
+ totalRemoved += gameCard.subtractCounter(e.getKey(), e.getValue(), activator);
}
game.updateLastStateForCard(gameCard);
continue;
@@ -180,6 +178,9 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
if (type.equals("Any")) {
totalRemoved += removeAnyType(gameCard, cntToRemove, sa);
} else {
+ if (!tgtCard.canRemoveCounters(counterType)) {
+ continue;
+ }
cntToRemove = Math.min(cntToRemove, gameCard.getCounters(counterType));
if (zone.is(ZoneType.Battlefield) || zone.is(ZoneType.Exile)) {
@@ -221,14 +222,18 @@ public class CountersRemoveEffect extends SpellAbilityEffect {
final Player activator = sa.getActivatingPlayer();
final PlayerController pc = activator.getController();
final Map tgtCounters = Maps.newHashMap(entity.getCounters());
+ for (CounterType ct : ImmutableList.copyOf(tgtCounters.keySet())) {
+ if (!entity.canRemoveCounters(ct)) {
+ tgtCounters.remove(ct);
+ }
+ }
while (cntToRemove > 0 && !tgtCounters.isEmpty()) {
Map params = Maps.newHashMap();
params.put("Target", entity);
String prompt = Localizer.getInstance().getMessage("lblSelectCountersTypeToRemove");
- CounterType chosenType = pc.chooseCounterType(
- ImmutableList.copyOf(tgtCounters.keySet()), sa, prompt, params);
+ CounterType chosenType = pc.chooseCounterType(ImmutableList.copyOf(tgtCounters.keySet()), sa, prompt, params);
int max = Math.min(cntToRemove, tgtCounters.get(chosenType));
// remove selection so player can't cheat additional trigger by choosing the same type multiple times
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 e7ffd5e6ff1..f413b32e8f3 100644
--- a/forge-game/src/main/java/forge/game/card/Card.java
+++ b/forge-game/src/main/java/forge/game/card/Card.java
@@ -1600,6 +1600,21 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr
return true;
}
+ @Override
+ public final boolean canRemoveCounters(final CounterType type) {
+ if (isPhasedOut()) {
+ return false;
+ }
+ final Map repParams = AbilityKey.mapFromAffected(this);
+ repParams.put(AbilityKey.CounterType, type);
+ repParams.put(AbilityKey.Result, 0);
+ repParams.put(AbilityKey.IsDamage, false);
+ if (game.getReplacementHandler().cantHappenCheck(ReplacementType.RemoveCounter, repParams)) {
+ return false;
+ }
+ return true;
+ }
+
@Override
public void addCounterInternal(final CounterType counterType, final int n, final Player source, final boolean fireEvents, GameEntityCounterTable table, Map params) {
int addAmount = n;
@@ -1736,11 +1751,11 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr
}
@Override
- public final void subtractCounter(final CounterType counterName, final int n, final Player remover) {
- subtractCounter(counterName, n, remover, false);
+ public final int subtractCounter(final CounterType counterName, final int n, final Player remover) {
+ return subtractCounter(counterName, n, remover, false);
}
- public final void subtractCounter(final CounterType counterName, final int n, final Player remover, final boolean isDamage) {
+ public final int subtractCounter(final CounterType counterName, final int n, final Player remover, final boolean isDamage) {
int oldValue = getCounters(counterName);
int newValue = Math.max(oldValue - n, 0);
@@ -1758,12 +1773,14 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr
newValue = 0;
}
break;
+ case Replaced:
+ return 0;
default:
break;
}
final int delta = oldValue - newValue;
- if (delta == 0) { return; }
+ if (delta == 0) { return 0; }
int powerBonusBefore = getPowerBonusFromCounters();
int toughnessBonusBefore = getToughnessBonusFromCounters();
@@ -1800,6 +1817,8 @@ public class Card extends GameEntity implements Comparable, IHasSVars, ITr
runParams.put(AbilityKey.CounterAmount, delta);
runParams.put(AbilityKey.NewCounterAmount, newValue);
getGame().getTriggerHandler().runTrigger(TriggerType.CounterRemovedOnce, runParams, false);
+
+ return delta;
}
@Override
diff --git a/forge-game/src/main/java/forge/game/cost/CostRemoveAnyCounter.java b/forge-game/src/main/java/forge/game/cost/CostRemoveAnyCounter.java
index 95818b6eff9..c68f97212ff 100644
--- a/forge-game/src/main/java/forge/game/cost/CostRemoveAnyCounter.java
+++ b/forge-game/src/main/java/forge/game/cost/CostRemoveAnyCounter.java
@@ -70,10 +70,16 @@ public class CostRemoveAnyCounter extends CostPart {
int allCounters = 0;
for (Card c : validCards) {
if (this.counter != null) {
+ if (!c.canRemoveCounters(this.counter)) {
+ continue;
+ }
allCounters += c.getCounters(this.counter);
} else {
- for (Integer value : c.getCounters().values()) {
- allCounters += value;
+ for (Map.Entry entry : c.getCounters().entrySet()) {
+ if (!c.canRemoveCounters(entry.getKey())) {
+ continue;
+ }
+ allCounters += entry.getValue();
}
}
}
diff --git a/forge-game/src/main/java/forge/game/cost/CostUntap.java b/forge-game/src/main/java/forge/game/cost/CostUntap.java
index 0fbebd0bbed..2a4a800be0c 100644
--- a/forge-game/src/main/java/forge/game/cost/CostUntap.java
+++ b/forge-game/src/main/java/forge/game/cost/CostUntap.java
@@ -21,6 +21,8 @@ import com.google.common.collect.Maps;
import forge.game.ability.AbilityKey;
import forge.game.card.Card;
import forge.game.card.CardCollection;
+import forge.game.card.CounterEnumType;
+import forge.game.card.CounterType;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerType;
@@ -78,7 +80,8 @@ public class CostUntap extends CostPart {
@Override
public final boolean canPay(final SpellAbility ability, final Player payer, final boolean effect) {
final Card source = ability.getHostCard();
- return source.isTapped() && !source.isAbilitySick();
+ return source.isTapped() && !source.isAbilitySick() &&
+ (source.getCounters(CounterEnumType.STUN) == 0 || source.canRemoveCounters(CounterType.get(CounterEnumType.STUN)));
}
@Override
diff --git a/forge-game/src/main/java/forge/game/cost/CostUntapType.java b/forge-game/src/main/java/forge/game/cost/CostUntapType.java
index 4fc1cbd34bc..4cc9894e32d 100644
--- a/forge-game/src/main/java/forge/game/cost/CostUntapType.java
+++ b/forge-game/src/main/java/forge/game/cost/CostUntapType.java
@@ -23,6 +23,8 @@ import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardLists;
+import forge.game.card.CounterEnumType;
+import forge.game.card.CounterType;
import forge.game.card.CardPredicates.Presets;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
@@ -90,7 +92,7 @@ public class CostUntapType extends CostPartWithList {
if (!canUntapSource) {
typeList.remove(source);
}
- typeList = CardLists.filter(typeList, Presets.TAPPED);
+ typeList = CardLists.filter(typeList, Presets.TAPPED, c -> c.getCounters(CounterEnumType.STUN) == 0 || c.canRemoveCounters(CounterType.get(CounterEnumType.STUN)));
final int amount = this.getAbilityAmount(ability);
return (typeList.size() != 0) && (typeList.size() >= amount);
diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java
index 78f7dba82e5..ce824a67032 100644
--- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java
+++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java
@@ -1049,6 +1049,7 @@ public class PhaseHandler implements java.io.Serializable {
for (SpellAbility sa : chosenSa) {
Card saHost = sa.getHostCard();
final Zone originZone = saHost.getZone();
+ final CardZoneTable triggerList = new CardZoneTable(game.getLastStateBattlefield(), game.getLastStateGraveyard());
if (pPlayerPriority.getController().playChosenSpellAbility(sa)) {
// 117.3c If a player has priority when they cast a spell, activate an ability, [play a land]
@@ -1064,7 +1065,6 @@ public class PhaseHandler implements java.io.Serializable {
// Need to check if Zone did change
if (currentZone != null && originZone != null && !currentZone.equals(originZone) && (sa.isSpell() || sa.isLandAbility())) {
// currently there can be only one Spell put on the Stack at once, or Land Abilities be played
- final CardZoneTable triggerList = new CardZoneTable(game.getLastStateBattlefield(), game.getLastStateGraveyard());
triggerList.put(originZone.getZoneType(), currentZone.getZoneType(), saHost);
triggerList.triggerChangesZoneAll(game, sa);
}
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 02d9db748e2..df35d49a727 100644
--- a/forge-game/src/main/java/forge/game/player/Player.java
+++ b/forge-game/src/main/java/forge/game/player/Player.java
@@ -855,6 +855,14 @@ public class Player extends GameEntity implements Comparable {
return true;
}
+ public final boolean canRemoveCounters(final CounterType type) {
+ if (!isInGame()) {
+ return false;
+ }
+ // no RE affecting players currently, skip check for performance
+ return true;
+ }
+
@Override
public void addCounterInternal(final CounterType counterType, final int n, final Player source, final boolean fireEvents, GameEntityCounterTable table, Map params) {
int addAmount = n;
@@ -896,12 +904,12 @@ public class Player extends GameEntity implements Comparable {
}
@Override
- public void subtractCounter(CounterType counterName, int num, final Player remover) {
+ public int subtractCounter(CounterType counterName, int num, final Player remover) {
int oldValue = getCounters(counterName);
int newValue = Math.max(oldValue - num, 0);
final int delta = oldValue - newValue;
- if (delta == 0) { return; }
+ if (delta == 0) { return 0; }
setCounters(counterName, newValue, null, true);
@@ -917,6 +925,7 @@ public class Player extends GameEntity implements Comparable {
getGame().getTriggerHandler().runTrigger(TriggerType.CounterRemoved, runParams, false);
}
*/
+ return delta;
}
public final void clearCounters() {
diff --git a/forge-gui-android/AndroidManifest.xml b/forge-gui-android/AndroidManifest.xml
index b493a8c32d9..68a2032f74a 100644
--- a/forge-gui-android/AndroidManifest.xml
+++ b/forge-gui-android/AndroidManifest.xml
@@ -1,8 +1,8 @@
+ android:versionCode="106660000"
+ android:versionName="1.6.66" >
jar
-Xms1024m
-Xmx1536m
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
keystore
alias
storepass
@@ -20,7 +20,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-gui-android
diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml
index a4d1522a3e7..5ac539ecf78 100644
--- a/forge-gui-desktop/pom.xml
+++ b/forge-gui-desktop/pom.xml
@@ -4,7 +4,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-gui-desktop
@@ -118,7 +118,7 @@
- forge-1.6.64
+ forge-1.6.65
../forge-gui/release-files/CHANGES.txt
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-gui-ios
diff --git a/forge-gui-mobile-dev/pom.xml b/forge-gui-mobile-dev/pom.xml
index 97bcf1d68bb..362dfd6860f 100644
--- a/forge-gui-mobile-dev/pom.xml
+++ b/forge-gui-mobile-dev/pom.xml
@@ -4,7 +4,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-gui-mobile-dev
diff --git a/forge-gui-mobile/pom.xml b/forge-gui-mobile/pom.xml
index 6a177762936..52bb5266678 100644
--- a/forge-gui-mobile/pom.xml
+++ b/forge-gui-mobile/pom.xml
@@ -4,7 +4,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-gui-mobile
diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java
index dae2e3edef2..9d2c72c5848 100644
--- a/forge-gui-mobile/src/forge/Forge.java
+++ b/forge-gui-mobile/src/forge/Forge.java
@@ -1,11 +1,7 @@
package forge;
-import com.badlogic.gdx.Application;
-import com.badlogic.gdx.ApplicationListener;
-import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.*;
import com.badlogic.gdx.Input.Keys;
-import com.badlogic.gdx.Input;
-import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.controllers.Controller;
import com.badlogic.gdx.controllers.ControllerAdapter;
import com.badlogic.gdx.controllers.ControllerListener;
@@ -54,7 +50,7 @@ import java.nio.file.Paths;
import java.util.*;
public class Forge implements ApplicationListener {
- public static final String CURRENT_VERSION = "1.6.65-SNAPSHOT";
+ public static final String CURRENT_VERSION = "1.6.66-SNAPSHOT";
private static ApplicationListener app = null;
static Scene currentScene = null;
diff --git a/forge-gui/pom.xml b/forge-gui/pom.xml
index 50a9263501f..9fd725c3278 100644
--- a/forge-gui/pom.xml
+++ b/forge-gui/pom.xml
@@ -4,7 +4,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-gui
diff --git a/forge-gui/res/cardsfolder/upcoming/a_premonition_of_your_demise.txt b/forge-gui/res/cardsfolder/a/a_premonition_of_your_demise.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/a_premonition_of_your_demise.txt
rename to forge-gui/res/cardsfolder/a/a_premonition_of_your_demise.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/abandoned_campground.txt b/forge-gui/res/cardsfolder/a/abandoned_campground.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/abandoned_campground.txt
rename to forge-gui/res/cardsfolder/a/abandoned_campground.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/abhorrent_oculus.txt b/forge-gui/res/cardsfolder/a/abhorrent_oculus.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/abhorrent_oculus.txt
rename to forge-gui/res/cardsfolder/a/abhorrent_oculus.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/acrobatic_cheerleader.txt b/forge-gui/res/cardsfolder/a/acrobatic_cheerleader.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/acrobatic_cheerleader.txt
rename to forge-gui/res/cardsfolder/a/acrobatic_cheerleader.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/altanak_the_thrice_called.txt b/forge-gui/res/cardsfolder/a/altanak_the_thrice_called.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/altanak_the_thrice_called.txt
rename to forge-gui/res/cardsfolder/a/altanak_the_thrice_called.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/aminatou_veil_piercer.txt b/forge-gui/res/cardsfolder/a/aminatou_veil_piercer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/aminatou_veil_piercer.txt
rename to forge-gui/res/cardsfolder/a/aminatou_veil_piercer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/ancient_cellarspawn.txt b/forge-gui/res/cardsfolder/a/ancient_cellarspawn.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/ancient_cellarspawn.txt
rename to forge-gui/res/cardsfolder/a/ancient_cellarspawn.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/anthropede.txt b/forge-gui/res/cardsfolder/a/anthropede.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/anthropede.txt
rename to forge-gui/res/cardsfolder/a/anthropede.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/appendage_amalgam.txt b/forge-gui/res/cardsfolder/a/appendage_amalgam.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/appendage_amalgam.txt
rename to forge-gui/res/cardsfolder/a/appendage_amalgam.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/arabella_abandoned_doll.txt b/forge-gui/res/cardsfolder/a/arabella_abandoned_doll.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/arabella_abandoned_doll.txt
rename to forge-gui/res/cardsfolder/a/arabella_abandoned_doll.txt
diff --git a/forge-gui/res/cardsfolder/a/ardent_dustspeaker.txt b/forge-gui/res/cardsfolder/a/ardent_dustspeaker.txt
index bdd23d331d9..d6c7dac808f 100644
--- a/forge-gui/res/cardsfolder/a/ardent_dustspeaker.txt
+++ b/forge-gui/res/cardsfolder/a/ardent_dustspeaker.txt
@@ -3,7 +3,7 @@ ManaCost:4 R
Types:Creature Minotaur Shaman
PT:3/4
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ ABImpulse | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, you may put an instant or sorcery card from your graveyard on the bottom of your library. If you do, exile the top two cards of your library. You may play those cards this turn.
-SVar:ABImpulse:AB$ Dig | Cost$ PutCardToLibFromGrave<1/-1/Sorcery;Instant> | Defined$ You | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | SubAbility$ DBEffect | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top two cards of your library. You may play those cards this turn.
+SVar:ABImpulse:AB$ Dig | Cost$ PutCardToLibFromGrave<1/-1/Sorcery;Instant> | Defined$ You | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top two cards of your library. You may play those cards this turn.
SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ Play | SubAbility$ DBCleanup | ForgetOnMoved$ Exile
SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play the exiled cards this turn.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
diff --git a/forge-gui/res/cardsfolder/a/arni_metalbrow.txt b/forge-gui/res/cardsfolder/a/arni_metalbrow.txt
index 120e098a13a..5ecd15d22a2 100644
--- a/forge-gui/res/cardsfolder/a/arni_metalbrow.txt
+++ b/forge-gui/res/cardsfolder/a/arni_metalbrow.txt
@@ -4,8 +4,8 @@ Types:Legendary Creature Human Berserker
PT:3/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl+attacking | TriggerZones$ Battlefield | Execute$ TrigChangeZoneBis | TriggerDescription$ Whenever a creature you control attacks or a creature you control enters attacking, you may pay {1}{R}. If you do, you may put a creature card with mana value less than that creature's mana value from your hand onto the battlefield tapped and attacking.
T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigChangeZone | Secondary$ True | TriggerDescription$ Whenever a creature you control attacks or a creature you control enters attacking, you may pay {1}{R}. If you do, you may put a creature card with mana value less than that creature's mana value from your hand onto the battlefield tapped and attacking.
-SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 1 R | Origin$ Hand | ChangeNum$ 1 | Destination$ Battlefield | ChangeType$ Creature.cmcLTX+YouCtrl | ChangeNum$ 1 | Tapped$ True | Attacking$ True
-SVar:TrigChangeZoneBis:AB$ ChangeZone | Cost$ 1 R | Origin$ Hand | ChangeNum$ 1 | Destination$ Battlefield | ChangeType$ Creature.cmcLTY+YouCtrl | ChangeNum$ 1 | Tapped$ True | Attacking$ True
+SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 1 R | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.cmcLTX+YouCtrl | ChangeNum$ 1 | Tapped$ True | Attacking$ True
+SVar:TrigChangeZoneBis:AB$ ChangeZone | Cost$ 1 R | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.cmcLTY+YouCtrl | ChangeNum$ 1 | Tapped$ True | Attacking$ True
SVar:X:TriggeredAttacker$CardManaCost
SVar:Y:TriggeredCard$CardManaCost
Oracle:Whenever a creature you control attacks or a creature you control enters attacking, you may pay {1}{R}. If you do, you may put a creature card with mana value less than that creature's mana value from your hand onto the battlefield tapped and attacking.
diff --git a/forge-gui/res/cardsfolder/upcoming/attack_in_the_box.txt b/forge-gui/res/cardsfolder/a/attack_in_the_box.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/attack_in_the_box.txt
rename to forge-gui/res/cardsfolder/a/attack_in_the_box.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/balemurk_leech.txt b/forge-gui/res/cardsfolder/b/balemurk_leech.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/balemurk_leech.txt
rename to forge-gui/res/cardsfolder/b/balemurk_leech.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/balustrade_wurm.txt b/forge-gui/res/cardsfolder/b/balustrade_wurm.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/balustrade_wurm.txt
rename to forge-gui/res/cardsfolder/b/balustrade_wurm.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/barbflare_gremlin.txt b/forge-gui/res/cardsfolder/b/barbflare_gremlin.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/barbflare_gremlin.txt
rename to forge-gui/res/cardsfolder/b/barbflare_gremlin.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/baseball_bat.txt b/forge-gui/res/cardsfolder/b/baseball_bat.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/baseball_bat.txt
rename to forge-gui/res/cardsfolder/b/baseball_bat.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/bashful_beastie.txt b/forge-gui/res/cardsfolder/b/bashful_beastie.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/bashful_beastie.txt
rename to forge-gui/res/cardsfolder/b/bashful_beastie.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/bear_trap.txt b/forge-gui/res/cardsfolder/b/bear_trap.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/bear_trap.txt
rename to forge-gui/res/cardsfolder/b/bear_trap.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/beastie_beatdown.txt b/forge-gui/res/cardsfolder/b/beastie_beatdown.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/beastie_beatdown.txt
rename to forge-gui/res/cardsfolder/b/beastie_beatdown.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/bedhead_beastie.txt b/forge-gui/res/cardsfolder/b/bedhead_beastie.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/bedhead_beastie.txt
rename to forge-gui/res/cardsfolder/b/bedhead_beastie.txt
diff --git a/forge-gui/res/cardsfolder/b/belligerent_whiptail.txt b/forge-gui/res/cardsfolder/b/belligerent_whiptail.txt
index c63cb7c4868..c7a9e238321 100644
--- a/forge-gui/res/cardsfolder/b/belligerent_whiptail.txt
+++ b/forge-gui/res/cardsfolder/b/belligerent_whiptail.txt
@@ -3,6 +3,6 @@ ManaCost:3 R
Types:Creature Wurm
PT:4/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Landfall — Whenever a land you control enters, CARDNAME gains first strike until end of turn.
-SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike | Defined$ Self
+SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike
SVar:BuffedBy:Land
Oracle:Landfall — Whenever a land you control enters, Belligerent Whiptail gains first strike until end of turn.
diff --git a/forge-gui/res/cardsfolder/upcoming/betrayers_bargain.txt b/forge-gui/res/cardsfolder/b/betrayers_bargain.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/betrayers_bargain.txt
rename to forge-gui/res/cardsfolder/b/betrayers_bargain.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/blazemire_verge.txt b/forge-gui/res/cardsfolder/b/blazemire_verge.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/blazemire_verge.txt
rename to forge-gui/res/cardsfolder/b/blazemire_verge.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/bleeding_woods.txt b/forge-gui/res/cardsfolder/b/bleeding_woods.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/bleeding_woods.txt
rename to forge-gui/res/cardsfolder/b/bleeding_woods.txt
diff --git a/forge-gui/res/cardsfolder/b/blight_herder.txt b/forge-gui/res/cardsfolder/b/blight_herder.txt
index 6ace632c508..92ca2444ba3 100644
--- a/forge-gui/res/cardsfolder/b/blight_herder.txt
+++ b/forge-gui/res/cardsfolder/b/blight_herder.txt
@@ -2,7 +2,7 @@ Name:Blight Herder
ManaCost:5
Types:Creature Eldrazi Processor
PT:4/5
-T:Mode$ SpellCast | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigToken | OptionalDecider$ You | TriggerDescription$ When you cast this spell, you may put two cards your opponents own from exile into their owners' graveyards. If you do, create three 1/1 colorless Eldrazi Scion creature tokens. They have "Sacrifice this creature: Add {C}."
+T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigToken | OptionalDecider$ You | TriggerDescription$ When you cast this spell, you may put two cards your opponents own from exile into their owners' graveyards. If you do, create three 1/1 colorless Eldrazi Scion creature tokens. They have "Sacrifice this creature: Add {C}."
SVar:TrigToken:AB$ Token | Cost$ ExiledMoveToGrave<2/Card.OppOwn/cards your opponents own> | TokenAmount$ 3 | TokenScript$ c_1_1_eldrazi_scion_sac | TokenOwner$ You
DeckHints:Keyword$Ingest & Type$Eldrazi
DeckHas:Ability$Mana.Colorless|Token
diff --git a/forge-gui/res/cardsfolder/b/bloodroot_apothecary.txt b/forge-gui/res/cardsfolder/b/bloodroot_apothecary.txt
index 5f18522f1eb..a95db70102f 100644
--- a/forge-gui/res/cardsfolder/b/bloodroot_apothecary.txt
+++ b/forge-gui/res/cardsfolder/b/bloodroot_apothecary.txt
@@ -4,7 +4,7 @@ Types:Creature Squirrel Druid
PT:3/3
K:Toxic:2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ WWen CARDNAME enters, you and target opponent each create a Treasure token.
-SVar:TrigToken:DB$ Token | TokenAmount$ 1 | ValidTgts$ Opponent | TokenOwner$ TargetedAndYou | TokenAmount$ 1 | TokenScript$ c_a_treasure_sac | SpellDescription$ You and target opponent each create a Food token.
+SVar:TrigToken:DB$ Token | TokenAmount$ 1 | ValidTgts$ Opponent | TokenOwner$ TargetedAndYou | TokenScript$ c_a_treasure_sac | SpellDescription$ You and target opponent each create a Food token.
T:Mode$ Sacrificed | ValidCard$ Permanent.token+nonCreature | ValidPlayer$ Opponent | Execute$ TrigPoison | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent sacrifices a noncreature token, that player gets two poison counters.
SVar:TrigPoison:DB$ Poison | Defined$ TriggeredCardController | Num$ 2
Oracle:Toxic 2 (Players dealt combat damage by this creature also get two poison counters. A player with ten or more poison counters loses the game.)\nWhen Bloodroot Apothecary enters, you and target opponent each create a Treasure token.\nWhenever an opponent sacrifices a noncreature token, that player gets two poison counters.
diff --git a/forge-gui/res/cardsfolder/upcoming/boilerbilges_ripper.txt b/forge-gui/res/cardsfolder/b/boilerbilges_ripper.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/boilerbilges_ripper.txt
rename to forge-gui/res/cardsfolder/b/boilerbilges_ripper.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/bottomless_pool_locker_room.txt b/forge-gui/res/cardsfolder/b/bottomless_pool_locker_room.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/bottomless_pool_locker_room.txt
rename to forge-gui/res/cardsfolder/b/bottomless_pool_locker_room.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/break_down_the_door.txt b/forge-gui/res/cardsfolder/b/break_down_the_door.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/break_down_the_door.txt
rename to forge-gui/res/cardsfolder/b/break_down_the_door.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/broodspinner.txt b/forge-gui/res/cardsfolder/b/broodspinner.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/broodspinner.txt
rename to forge-gui/res/cardsfolder/b/broodspinner.txt
diff --git a/forge-gui/res/cardsfolder/b/bull_rush_bruiser.txt b/forge-gui/res/cardsfolder/b/bull_rush_bruiser.txt
index 212a3050bcc..19819bafa38 100644
--- a/forge-gui/res/cardsfolder/b/bull_rush_bruiser.txt
+++ b/forge-gui/res/cardsfolder/b/bull_rush_bruiser.txt
@@ -3,6 +3,6 @@ ManaCost:3 R
Types:Creature Minotaur Warrior
PT:4/3
T:Mode$ Attacks | ValidCard$ Card.Self | IsPresent$ Warrior.Other+YourTeamCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, if your team controls another Warrior, CARDNAME gains first strike until end of turn.
-SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike | Defined$ Self
+SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ First Strike
SVar:BuffedBy:Warrior
Oracle:Whenever Bull-Rush Bruiser attacks, if your team controls another Warrior, Bull-Rush Bruiser gains first strike until end of turn.
diff --git a/forge-gui/res/cardsfolder/upcoming/cackling_slasher.txt b/forge-gui/res/cardsfolder/c/cackling_slasher.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cackling_slasher.txt
rename to forge-gui/res/cardsfolder/c/cackling_slasher.txt
diff --git a/forge-gui/res/cardsfolder/c/canonized_in_blood.txt b/forge-gui/res/cardsfolder/c/canonized_in_blood.txt
index ba0342682fa..b40be9a2f5e 100644
--- a/forge-gui/res/cardsfolder/c/canonized_in_blood.txt
+++ b/forge-gui/res/cardsfolder/c/canonized_in_blood.txt
@@ -3,7 +3,7 @@ ManaCost:1 B
Types:Enchantment
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You.descended | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, if you descended this turn, put a +1/+1 counter on target creature you control. (You descended if a permanent card was put into your graveyard from anywhere.)
SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterNum$ 1 | CounterType$ P1P1
-A:AB$ Token | Cost$ 5 B B Sac<1/CARDNAME> | TokenOwner$ You | TokenScript$ wb_4_3_vampire_demon_flying | TokenOwner$ You | SpellDescription$ Create a 4/3 white and black Vampire Demon creature token with flying.
+A:AB$ Token | Cost$ 5 B B Sac<1/CARDNAME> | TokenScript$ wb_4_3_vampire_demon_flying | TokenOwner$ You | SpellDescription$ Create a 4/3 white and black Vampire Demon creature token with flying.
DeckHas:Ability$Sacrifice|Token|Counters & Type$Vampire|Demon
DeckHints:Ability$Mill|Sacrifice
Oracle:At the beginning of your end step, if you descended this turn, put a +1/+1 counter on target creature you control. (You descended if a permanent card was put into your graveyard from anywhere.)\n{5}{B}{B}, Sacrifice Canonized in Blood: Create a 4/3 white and black Vampire Demon creature token with flying.
diff --git a/forge-gui/res/cardsfolder/upcoming/cathartic_parting.txt b/forge-gui/res/cardsfolder/c/cathartic_parting.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cathartic_parting.txt
rename to forge-gui/res/cardsfolder/c/cathartic_parting.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/cautious_survivor.txt b/forge-gui/res/cardsfolder/c/cautious_survivor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cautious_survivor.txt
rename to forge-gui/res/cardsfolder/c/cautious_survivor.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/central_elevator_promising_stairs.txt b/forge-gui/res/cardsfolder/c/central_elevator_promising_stairs.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/central_elevator_promising_stairs.txt
rename to forge-gui/res/cardsfolder/c/central_elevator_promising_stairs.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/chainsaw.txt b/forge-gui/res/cardsfolder/c/chainsaw.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/chainsaw.txt
rename to forge-gui/res/cardsfolder/c/chainsaw.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/chaos_is_my_plaything.txt b/forge-gui/res/cardsfolder/c/chaos_is_my_plaything.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/chaos_is_my_plaything.txt
rename to forge-gui/res/cardsfolder/c/chaos_is_my_plaything.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/charred_foyer_warped_space.txt b/forge-gui/res/cardsfolder/c/charred_foyer_warped_space.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/charred_foyer_warped_space.txt
rename to forge-gui/res/cardsfolder/c/charred_foyer_warped_space.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/clammy_prowler.txt b/forge-gui/res/cardsfolder/c/clammy_prowler.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/clammy_prowler.txt
rename to forge-gui/res/cardsfolder/c/clammy_prowler.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/clockwork_percussionist.txt b/forge-gui/res/cardsfolder/c/clockwork_percussionist.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/clockwork_percussionist.txt
rename to forge-gui/res/cardsfolder/c/clockwork_percussionist.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/come_back_wrong.txt b/forge-gui/res/cardsfolder/c/come_back_wrong.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/come_back_wrong.txt
rename to forge-gui/res/cardsfolder/c/come_back_wrong.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/commune_with_evil.txt b/forge-gui/res/cardsfolder/c/commune_with_evil.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/commune_with_evil.txt
rename to forge-gui/res/cardsfolder/c/commune_with_evil.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/conductive_machete.txt b/forge-gui/res/cardsfolder/c/conductive_machete.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/conductive_machete.txt
rename to forge-gui/res/cardsfolder/c/conductive_machete.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/convert_to_slime.txt b/forge-gui/res/cardsfolder/c/convert_to_slime.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/convert_to_slime.txt
rename to forge-gui/res/cardsfolder/c/convert_to_slime.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/coordinated_clobbering.txt b/forge-gui/res/cardsfolder/c/coordinated_clobbering.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/coordinated_clobbering.txt
rename to forge-gui/res/cardsfolder/c/coordinated_clobbering.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/cracked_skull.txt b/forge-gui/res/cardsfolder/c/cracked_skull.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cracked_skull.txt
rename to forge-gui/res/cardsfolder/c/cracked_skull.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/cramped_vents_access_room.txt b/forge-gui/res/cardsfolder/c/cramped_vents_access_room.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cramped_vents_access_room.txt
rename to forge-gui/res/cardsfolder/c/cramped_vents_access_room.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/creeping_peeper.txt b/forge-gui/res/cardsfolder/c/creeping_peeper.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/creeping_peeper.txt
rename to forge-gui/res/cardsfolder/c/creeping_peeper.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/cryptid_inspector.txt b/forge-gui/res/cardsfolder/c/cryptid_inspector.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cryptid_inspector.txt
rename to forge-gui/res/cardsfolder/c/cryptid_inspector.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/cult_healer.txt b/forge-gui/res/cardsfolder/c/cult_healer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cult_healer.txt
rename to forge-gui/res/cardsfolder/c/cult_healer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/curator_beastie.txt b/forge-gui/res/cardsfolder/c/curator_beastie.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/curator_beastie.txt
rename to forge-gui/res/cardsfolder/c/curator_beastie.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/cursed_recording.txt b/forge-gui/res/cardsfolder/c/cursed_recording.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cursed_recording.txt
rename to forge-gui/res/cardsfolder/c/cursed_recording.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/cursed_windbreaker.txt b/forge-gui/res/cardsfolder/c/cursed_windbreaker.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cursed_windbreaker.txt
rename to forge-gui/res/cardsfolder/c/cursed_windbreaker.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/cynical_loner.txt b/forge-gui/res/cardsfolder/c/cynical_loner.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/cynical_loner.txt
rename to forge-gui/res/cardsfolder/c/cynical_loner.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/daggermaw_megalodon.txt b/forge-gui/res/cardsfolder/d/daggermaw_megalodon.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/daggermaw_megalodon.txt
rename to forge-gui/res/cardsfolder/d/daggermaw_megalodon.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/dark_wings_bring_your_downfall.txt b/forge-gui/res/cardsfolder/d/dark_wings_bring_your_downfall.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/dark_wings_bring_your_downfall.txt
rename to forge-gui/res/cardsfolder/d/dark_wings_bring_your_downfall.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/dashing_bloodsucker.txt b/forge-gui/res/cardsfolder/d/dashing_bloodsucker.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/dashing_bloodsucker.txt
rename to forge-gui/res/cardsfolder/d/dashing_bloodsucker.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/dazzling_theater_prop_room.txt b/forge-gui/res/cardsfolder/d/dazzling_theater_prop_room.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/dazzling_theater_prop_room.txt
rename to forge-gui/res/cardsfolder/d/dazzling_theater_prop_room.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/defiant_survivor.txt b/forge-gui/res/cardsfolder/d/defiant_survivor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/defiant_survivor.txt
rename to forge-gui/res/cardsfolder/d/defiant_survivor.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/defiled_crypt_cadaver_lab.txt b/forge-gui/res/cardsfolder/d/defiled_crypt_cadaver_lab.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/defiled_crypt_cadaver_lab.txt
rename to forge-gui/res/cardsfolder/d/defiled_crypt_cadaver_lab.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/deluge_of_doom.txt b/forge-gui/res/cardsfolder/d/deluge_of_doom.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/deluge_of_doom.txt
rename to forge-gui/res/cardsfolder/d/deluge_of_doom.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/demolisher_spawn.txt b/forge-gui/res/cardsfolder/d/demolisher_spawn.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/demolisher_spawn.txt
rename to forge-gui/res/cardsfolder/d/demolisher_spawn.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/demonic_counsel.txt b/forge-gui/res/cardsfolder/d/demonic_counsel.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/demonic_counsel.txt
rename to forge-gui/res/cardsfolder/d/demonic_counsel.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/demonic_covenant.txt b/forge-gui/res/cardsfolder/d/demonic_covenant.txt
similarity index 97%
rename from forge-gui/res/cardsfolder/upcoming/demonic_covenant.txt
rename to forge-gui/res/cardsfolder/d/demonic_covenant.txt
index 36e9729e563..42e434af31d 100644
--- a/forge-gui/res/cardsfolder/upcoming/demonic_covenant.txt
+++ b/forge-gui/res/cardsfolder/d/demonic_covenant.txt
@@ -7,7 +7,7 @@ SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 1
T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigCreateAndMill | TriggerDescription$ At the beginning of your end step, create a 5/5 black Demon creature token with flying, then mill two cards. If two cards that share all their card types were milled this way, sacrifice CARDNAME.
SVar:TrigCreateAndMill:DB$ Token | TokenAmount$ 1 | TokenScript$ b_5_5_demon_flying | TokenOwner$ You | SubAbility$ DBMill
SVar:DBMill:DB$ Mill | NumCards$ 2 | RememberMilled$ True | ShowMilledCards$ True | SubAbility$ DBSacrifice
-SVar:DBSacrifice:DB$ Sacrifice | SacValid$ Self | ShowSacrificedCards$ True | ConditionCheckSVar$ MilledSharesAllTypes | ConditionSVarCompare$ GE2 | SubAbility$ Cleanup
+SVar:DBSacrifice:DB$ Sacrifice | SacValid$ Self | ShowSacrificedCards$ True | ConditionCheckSVar$ MilledSharesAllTypes | ConditionSVarCompare$ GE2 | SubAbility$ DBCleanup
SVar:MilledSharesAllTypes:Remembered$Valid Card.sharesAllCardTypesWithOther Remembered
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
DeckHas:Ability$Token|Mill|Sacrifice
diff --git a/forge-gui/res/cardsfolder/upcoming/derelict_attic_widows_walk.txt b/forge-gui/res/cardsfolder/d/derelict_attic_widows_walk.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/derelict_attic_widows_walk.txt
rename to forge-gui/res/cardsfolder/d/derelict_attic_widows_walk.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/disorienting_choice.txt b/forge-gui/res/cardsfolder/d/disorienting_choice.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/disorienting_choice.txt
rename to forge-gui/res/cardsfolder/d/disorienting_choice.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/dissection_tools.txt b/forge-gui/res/cardsfolder/d/dissection_tools.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/dissection_tools.txt
rename to forge-gui/res/cardsfolder/d/dissection_tools.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/disturbing_mirth.txt b/forge-gui/res/cardsfolder/d/disturbing_mirth.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/disturbing_mirth.txt
rename to forge-gui/res/cardsfolder/d/disturbing_mirth.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/diversion_specialist.txt b/forge-gui/res/cardsfolder/d/diversion_specialist.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/diversion_specialist.txt
rename to forge-gui/res/cardsfolder/d/diversion_specialist.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/dollmakers_shop_porcelain_gallery.txt b/forge-gui/res/cardsfolder/d/dollmakers_shop_porcelain_gallery.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/dollmakers_shop_porcelain_gallery.txt
rename to forge-gui/res/cardsfolder/d/dollmakers_shop_porcelain_gallery.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/dont_make_a_sound.txt b/forge-gui/res/cardsfolder/d/dont_make_a_sound.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/dont_make_a_sound.txt
rename to forge-gui/res/cardsfolder/d/dont_make_a_sound.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/doomsday_excruciator.txt b/forge-gui/res/cardsfolder/d/doomsday_excruciator.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/doomsday_excruciator.txt
rename to forge-gui/res/cardsfolder/d/doomsday_excruciator.txt
diff --git a/forge-gui/res/cardsfolder/d/down_for_repairs.txt b/forge-gui/res/cardsfolder/d/down_for_repairs.txt
index bf049af5c29..e0f2e3fb75d 100644
--- a/forge-gui/res/cardsfolder/d/down_for_repairs.txt
+++ b/forge-gui/res/cardsfolder/d/down_for_repairs.txt
@@ -2,5 +2,5 @@ Name:Down for Repairs
ManaCost:2 B
Types:Sorcery
A:SP$ Discard | ValidTgts$ Player | NumCards$ 1 | DiscardValid$ Card.nonLand | Mode$ RevealYouChoose | SubAbility$ DBDestroy | SpellDescription$ Target opponent reveals their hand. You choose a nonland card from it. That player discards that card. Destroy up to one target Attraction that player controls. (It's put into their junkyard.)
-SVar:DBDestroy:DB$ Destroy | TgtPrompt$ Select up to one target attraction that player controls | TgtPrompt$ Attraction.TargetedPlayerCtrl | TargetMin$ 0 | TargetMax$ 1
+SVar:DBDestroy:DB$ Destroy | TgtPrompt$ Select up to one target attraction that player controls | ValidTgts$ Attraction.TargetedPlayerCtrl | TargetMin$ 0 | TargetMax$ 1
Oracle:Target opponent reveals their hand. You choose a nonland card from it. That player discards that card. Destroy up to one target Attraction that player controls. (It's put into their junkyard.)
diff --git a/forge-gui/res/cardsfolder/upcoming/drag_to_the_roots.txt b/forge-gui/res/cardsfolder/d/drag_to_the_roots.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/drag_to_the_roots.txt
rename to forge-gui/res/cardsfolder/d/drag_to_the_roots.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/duskmourns_domination.txt b/forge-gui/res/cardsfolder/d/duskmourns_domination.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/duskmourns_domination.txt
rename to forge-gui/res/cardsfolder/d/duskmourns_domination.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/emerge_from_the_cocoon.txt b/forge-gui/res/cardsfolder/e/emerge_from_the_cocoon.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/emerge_from_the_cocoon.txt
rename to forge-gui/res/cardsfolder/e/emerge_from_the_cocoon.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/enduring_courage.txt b/forge-gui/res/cardsfolder/e/enduring_courage.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/enduring_courage.txt
rename to forge-gui/res/cardsfolder/e/enduring_courage.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/enduring_curiosity.txt b/forge-gui/res/cardsfolder/e/enduring_curiosity.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/enduring_curiosity.txt
rename to forge-gui/res/cardsfolder/e/enduring_curiosity.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/enduring_innocence.txt b/forge-gui/res/cardsfolder/e/enduring_innocence.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/enduring_innocence.txt
rename to forge-gui/res/cardsfolder/e/enduring_innocence.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/enduring_tenacity.txt b/forge-gui/res/cardsfolder/e/enduring_tenacity.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/enduring_tenacity.txt
rename to forge-gui/res/cardsfolder/e/enduring_tenacity.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/enduring_vitality.txt b/forge-gui/res/cardsfolder/e/enduring_vitality.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/enduring_vitality.txt
rename to forge-gui/res/cardsfolder/e/enduring_vitality.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/enter_the_enigma.txt b/forge-gui/res/cardsfolder/e/enter_the_enigma.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/enter_the_enigma.txt
rename to forge-gui/res/cardsfolder/e/enter_the_enigma.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/entity_tracker.txt b/forge-gui/res/cardsfolder/e/entity_tracker.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/entity_tracker.txt
rename to forge-gui/res/cardsfolder/e/entity_tracker.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/erratic_apparition.txt b/forge-gui/res/cardsfolder/e/erratic_apparition.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/erratic_apparition.txt
rename to forge-gui/res/cardsfolder/e/erratic_apparition.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/etched_cornfield.txt b/forge-gui/res/cardsfolder/e/etched_cornfield.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/etched_cornfield.txt
rename to forge-gui/res/cardsfolder/e/etched_cornfield.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/exorcise.txt b/forge-gui/res/cardsfolder/e/exorcise.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/exorcise.txt
rename to forge-gui/res/cardsfolder/e/exorcise.txt
diff --git a/forge-gui/res/cardsfolder/e/experimental_lab_staff_room.txt b/forge-gui/res/cardsfolder/e/experimental_lab_staff_room.txt
new file mode 100644
index 00000000000..05e81708bcd
--- /dev/null
+++ b/forge-gui/res/cardsfolder/e/experimental_lab_staff_room.txt
@@ -0,0 +1,20 @@
+Name:Experimental Lab
+ManaCost:3 G
+Types:Enchantment Room
+T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | ThisDoor$ True | Execute$ TrigManifest | TriggerDescription$ When you unlock this door, manifest dread, then put two +1/+1 counters and a trample counter on that creature.
+SVar:TrigManifest:DB$ ManifestDread | Amount$ 1 | RememberManifested$ True | SubAbility$ DBPutCounters
+SVar:DBPutCounters:DB$ PutCounterAll | ValidCards$ Card.IsRemembered | CounterType$ P1P1 | CounterNum$ 2 | CounterType2$ Trample | CounterNum2$ 1 | SubAbility$ DBCleanup
+SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
+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, manifest dread, then put two +1/+1 counters and a trample counter on that creature.
+
+ALTERNATE
+
+Name:Staff Room
+ManaCost:2 G
+Types:Enchantment Room
+T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTgts$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ Whenever a creature you control deals combat damage to a player, turn that creature face up or put a +1/+1 counter on it.
+SVar:TrigChoose:DB$ GenericChoice | Choices$ DBPutCounter,DBTurnFaceUp
+SVar:DBTurnFaceUp:DB$ SetState | Defined$ TriggeredSourceLKICopy | Mode$ TurnFaceUp | IsPresent$ Card.canBeTurnedFaceUp+faceDown | PresentDefined$ TriggeredSourceLKICopy | SpellDescription$ Turn it face up
+SVar:DBPutCounter:DB$ PutCounter | Defined$ TriggeredSourceLKICopy | CounterType$ P1P1 | CounterNum$ 1 | IsPresent$ Card.canReceiveCounters P1P1 | PresentDefined$ TriggeredSourceLKICopy | SpellDescription$ Put a +1/+1 counter on it
+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 a creature you control deals combat damage to a player, turn that creature face up or put a +1/+1 counter on it.
diff --git a/forge-gui/res/cardsfolder/upcoming/fanatic_of_the_harrowing.txt b/forge-gui/res/cardsfolder/f/fanatic_of_the_harrowing.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fanatic_of_the_harrowing.txt
rename to forge-gui/res/cardsfolder/f/fanatic_of_the_harrowing.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_my_authority.txt b/forge-gui/res/cardsfolder/f/fear_my_authority.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_my_authority.txt
rename to forge-gui/res/cardsfolder/f/fear_my_authority.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_abduction.txt b/forge-gui/res/cardsfolder/f/fear_of_abduction.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_abduction.txt
rename to forge-gui/res/cardsfolder/f/fear_of_abduction.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_being_hunted.txt b/forge-gui/res/cardsfolder/f/fear_of_being_hunted.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_being_hunted.txt
rename to forge-gui/res/cardsfolder/f/fear_of_being_hunted.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_burning_alive.txt b/forge-gui/res/cardsfolder/f/fear_of_burning_alive.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_burning_alive.txt
rename to forge-gui/res/cardsfolder/f/fear_of_burning_alive.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_exposure.txt b/forge-gui/res/cardsfolder/f/fear_of_exposure.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_exposure.txt
rename to forge-gui/res/cardsfolder/f/fear_of_exposure.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_failed_tests.txt b/forge-gui/res/cardsfolder/f/fear_of_failed_tests.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_failed_tests.txt
rename to forge-gui/res/cardsfolder/f/fear_of_failed_tests.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_falling.txt b/forge-gui/res/cardsfolder/f/fear_of_falling.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_falling.txt
rename to forge-gui/res/cardsfolder/f/fear_of_falling.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_immobility.txt b/forge-gui/res/cardsfolder/f/fear_of_immobility.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_immobility.txt
rename to forge-gui/res/cardsfolder/f/fear_of_immobility.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_impostors.txt b/forge-gui/res/cardsfolder/f/fear_of_impostors.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_impostors.txt
rename to forge-gui/res/cardsfolder/f/fear_of_impostors.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_infinity.txt b/forge-gui/res/cardsfolder/f/fear_of_infinity.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_infinity.txt
rename to forge-gui/res/cardsfolder/f/fear_of_infinity.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_isolation.txt b/forge-gui/res/cardsfolder/f/fear_of_isolation.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_isolation.txt
rename to forge-gui/res/cardsfolder/f/fear_of_isolation.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_lost_teeth.txt b/forge-gui/res/cardsfolder/f/fear_of_lost_teeth.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_lost_teeth.txt
rename to forge-gui/res/cardsfolder/f/fear_of_lost_teeth.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_missing_out.txt b/forge-gui/res/cardsfolder/f/fear_of_missing_out.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_missing_out.txt
rename to forge-gui/res/cardsfolder/f/fear_of_missing_out.txt
diff --git a/forge-gui/res/cardsfolder/f/fear_of_sleep_paralysis.txt b/forge-gui/res/cardsfolder/f/fear_of_sleep_paralysis.txt
new file mode 100644
index 00000000000..a750cc23ea3
--- /dev/null
+++ b/forge-gui/res/cardsfolder/f/fear_of_sleep_paralysis.txt
@@ -0,0 +1,11 @@
+Name:Fear of Sleep Paralysis
+ManaCost:5 U
+Types:Enchantment Creature Nightmare
+PT:6/6
+K:Flying
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self,Enchantment.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Eerie — Whenever CARDNAME or another enchantment you control enters and whenever you fully unlock a Room, tap up to one target creature and put a stun counter on it.
+T:Mode$ FullyUnlock | ValidCard$ Card.Room | ValidPlayer$ You | Secondary$ True | Execute$ TrigTap | TriggerZones$ Battlefield | TriggerDescription$ Eerie — Whenever CARDNAME or another enchantment you control enters and whenever you fully unlock a Room, tap up to one target creature and put a stun counter on it.
+SVar:TrigTap:DB$ Tap | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 1 | SubAbility$ DBStun
+SVar:DBStun:DB$ PutCounter | Defined$ Targeted | CounterType$ Stun | CounterNum$ 1
+R:Event$ RemoveCounter | ActiveZones$ Battlefield | ValidCard$ Permanent.OppCtrl | ValidCounterType$ STUN | Layer$ CantHappen | Description$ Stun counters can't be removed from permanents your opponents control.
+Oracle:Flying\nEerie — Whenever Fear of Sleep Paralysis or another enchantment you control enters and whenever you fully unlock a Room, tap up to one target creature and put a stun counter on it.\nStun counters can't be removed from permanents your opponents control. (They won't untap if they have stun counters.)
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_surveilance.txt b/forge-gui/res/cardsfolder/f/fear_of_surveilance.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_surveilance.txt
rename to forge-gui/res/cardsfolder/f/fear_of_surveilance.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/fear_of_the_dark.txt b/forge-gui/res/cardsfolder/f/fear_of_the_dark.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/fear_of_the_dark.txt
rename to forge-gui/res/cardsfolder/f/fear_of_the_dark.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/felidar_savior.txt b/forge-gui/res/cardsfolder/f/felidar_savior.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/felidar_savior.txt
rename to forge-gui/res/cardsfolder/f/felidar_savior.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/final_vengeance.txt b/forge-gui/res/cardsfolder/f/final_vengeance.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/final_vengeance.txt
rename to forge-gui/res/cardsfolder/f/final_vengeance.txt
diff --git a/forge-gui/res/cardsfolder/f/fledgling_griffin.txt b/forge-gui/res/cardsfolder/f/fledgling_griffin.txt
index 956f1f70fd1..1bbddb639fd 100644
--- a/forge-gui/res/cardsfolder/f/fledgling_griffin.txt
+++ b/forge-gui/res/cardsfolder/f/fledgling_griffin.txt
@@ -3,6 +3,6 @@ ManaCost:1 W
Types:Creature Griffin
PT:2/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | Execute$ TrigPump | TriggerZones$ Battlefield | TriggerDescription$ Landfall — Whenever a land you control enters, CARDNAME gains flying until end of turn.
-SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ Flying | Defined$ Self
+SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ Flying
SVar:BuffedBy:Land
Oracle:Landfall — Whenever a land you control enters, Fledgling Griffin gains flying until end of turn.
diff --git a/forge-gui/res/cardsfolder/upcoming/flesh_burrower.txt b/forge-gui/res/cardsfolder/f/flesh_burrower.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/flesh_burrower.txt
rename to forge-gui/res/cardsfolder/f/flesh_burrower.txt
diff --git a/forge-gui/res/cardsfolder/f/flood_of_tears.txt b/forge-gui/res/cardsfolder/f/flood_of_tears.txt
index e821f9257b1..529f31bdafe 100644
--- a/forge-gui/res/cardsfolder/f/flood_of_tears.txt
+++ b/forge-gui/res/cardsfolder/f/flood_of_tears.txt
@@ -2,6 +2,6 @@ Name:Flood of Tears
ManaCost:4 U U
Types:Sorcery
A:SP$ ChangeZoneAll | ChangeType$ Permanent.nonLand | Origin$ Battlefield | Destination$ Hand | RememberChanged$ True | SubAbility$ DBChangeZone | SpellDescription$ Return all nonland permanents to their owners' hands. If you return four or more nontoken permanents you control this way, you may put a permanent card from your hand onto the battlefield.
-SVar:DBChangeZone:DB$ ChangeZone | Optional$ True | Origin$ Hand | Destination$ Battlefield | ChangeType$ Permanent.YouCtrl | Optional$ True | ChangeNum$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Permanent.nonToken+YouCtrl | ConditionCompare$ GE4 | SubAbility$ DBCleanup
+SVar:DBChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Permanent.YouCtrl | Optional$ True | ChangeNum$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Permanent.nonToken+YouCtrl | ConditionCompare$ GE4 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
Oracle:Return all nonland permanents to their owners' hands. If you return four or more nontoken permanents you control this way, you may put a permanent card from your hand onto the battlefield.
diff --git a/forge-gui/res/cardsfolder/upcoming/floodfarm_verge.txt b/forge-gui/res/cardsfolder/f/floodfarm_verge.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/floodfarm_verge.txt
rename to forge-gui/res/cardsfolder/f/floodfarm_verge.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/floodpits_drowner.txt b/forge-gui/res/cardsfolder/f/floodpits_drowner.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/floodpits_drowner.txt
rename to forge-gui/res/cardsfolder/f/floodpits_drowner.txt
diff --git a/forge-gui/res/cardsfolder/f/flotsam_jetsam.txt b/forge-gui/res/cardsfolder/f/flotsam_jetsam.txt
index 85040265869..affc9da099f 100644
--- a/forge-gui/res/cardsfolder/f/flotsam_jetsam.txt
+++ b/forge-gui/res/cardsfolder/f/flotsam_jetsam.txt
@@ -13,7 +13,7 @@ ALTERNATE
Name:Jetsam
ManaCost:4 UB UB
Types:Instant
-A:SP$ Mill | Defined$ Opponent | SubAbility$ DBCast | NumCards$ 3 | SubAbility$ DBCast | SpellDescription$ Each opponent mills three cards, then you may cast a spell from each opponent's graveyard without paying its mana cost. If a spell cast this way would be put into a graveyard, exile it instead.
+A:SP$ Mill | Defined$ Opponent | NumCards$ 3 | SubAbility$ DBCast | SpellDescription$ Each opponent mills three cards, then you may cast a spell from each opponent's graveyard without paying its mana cost. If a spell cast this way would be put into a graveyard, exile it instead.
SVar:DBCast:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBChoose | SubAbility$ DBPlayAll
SVar:DBChoose:DB$ ChooseCard | Choices$ Card.RememberedPlayerCtrl+nonLand | ChoiceZone$ Graveyard | Defined$ You | Amount$ 1 | RememberChosen$ True
SVar:DBPlayAll:DB$ Play | Defined$ Remembered | Amount$ All | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | ReplaceGraveyard$ Exile | AILogic$ ReplaySpell | SubAbility$ DBCleanup
diff --git a/forge-gui/res/cardsfolder/upcoming/formless_genesis.txt b/forge-gui/res/cardsfolder/f/formless_genesis.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/formless_genesis.txt
rename to forge-gui/res/cardsfolder/f/formless_genesis.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/found_footage.txt b/forge-gui/res/cardsfolder/f/found_footage.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/found_footage.txt
rename to forge-gui/res/cardsfolder/f/found_footage.txt
diff --git a/forge-gui/res/cardsfolder/f/foundry_of_the_consuls.txt b/forge-gui/res/cardsfolder/f/foundry_of_the_consuls.txt
index 95ec4ceb5dc..5742f09e08c 100644
--- a/forge-gui/res/cardsfolder/f/foundry_of_the_consuls.txt
+++ b/forge-gui/res/cardsfolder/f/foundry_of_the_consuls.txt
@@ -2,6 +2,6 @@ Name:Foundry of the Consuls
ManaCost:no cost
Types:Land
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
-A:AB$ Token | Cost$ 5 T Sac<1/CARDNAME> | TokenOwner$ You | TokenAmount$ 2 | TokenScript$ c_1_1_a_thopter_flying | TokenOwner$ You | SpellDescription$ Create two 1/1 colorless Thopter artifact creature tokens with flying.
+A:AB$ Token | Cost$ 5 T Sac<1/CARDNAME> | TokenOwner$ You | TokenAmount$ 2 | TokenScript$ c_1_1_a_thopter_flying | SpellDescription$ Create two 1/1 colorless Thopter artifact creature tokens with flying.
DeckHas:Ability$Mana.Colorless|Token
Oracle:{T}: Add {C}.\n{5}, {T}, Sacrifice Foundry of the Consuls: Create two 1/1 colorless Thopter artifact creature tokens with flying.
diff --git a/forge-gui/res/cardsfolder/upcoming/frantic_strength.txt b/forge-gui/res/cardsfolder/f/frantic_strength.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/frantic_strength.txt
rename to forge-gui/res/cardsfolder/f/frantic_strength.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/friendly_ghost.txt b/forge-gui/res/cardsfolder/f/friendly_ghost.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/friendly_ghost.txt
rename to forge-gui/res/cardsfolder/f/friendly_ghost.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/friendly_teddy.txt b/forge-gui/res/cardsfolder/f/friendly_teddy.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/friendly_teddy.txt
rename to forge-gui/res/cardsfolder/f/friendly_teddy.txt
diff --git a/forge-gui/res/cardsfolder/f/frostling.txt b/forge-gui/res/cardsfolder/f/frostling.txt
index 09d918fd62b..3c4716b2c5c 100644
--- a/forge-gui/res/cardsfolder/f/frostling.txt
+++ b/forge-gui/res/cardsfolder/f/frostling.txt
@@ -2,5 +2,5 @@ Name:Frostling
ManaCost:R
Types:Creature Spirit
PT:1/1
-A:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 1 | TgtPrompt$ Select target creature | SpellDescription$ It deals 1 damage to target creature.
+A:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature | NumDmg$ 1 | SpellDescription$ It deals 1 damage to target creature.
Oracle:Sacrifice Frostling: It deals 1 damage to target creature.
diff --git a/forge-gui/res/cardsfolder/upcoming/funeral_room_awakening_hall.txt b/forge-gui/res/cardsfolder/f/funeral_room_awakening_hall.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/funeral_room_awakening_hall.txt
rename to forge-gui/res/cardsfolder/f/funeral_room_awakening_hall.txt
diff --git a/forge-gui/res/cardsfolder/f/furious_spinesplitter.txt b/forge-gui/res/cardsfolder/f/furious_spinesplitter.txt
index b9d77190ffa..a8eac1f3084 100644
--- a/forge-gui/res/cardsfolder/f/furious_spinesplitter.txt
+++ b/forge-gui/res/cardsfolder/f/furious_spinesplitter.txt
@@ -3,7 +3,7 @@ ManaCost:2 RG RG
Types:Creature Ogre Warrior
PT:3/3
K:Trample
-T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, put a +1/+1 counter on CARDNAME for each opponent that was dealt damage this turn.
+T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, put a +1/+1 counter on CARDNAME for each opponent that was dealt damage this turn.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ X
SVar:X:PlayerCountRegisteredOpponents$HasPropertywasDealtDamageThisTurn
DeckHas:Ability$Counters
diff --git a/forge-gui/res/cardsfolder/upcoming/get_out.txt b/forge-gui/res/cardsfolder/g/get_out.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/get_out.txt
rename to forge-gui/res/cardsfolder/g/get_out.txt
diff --git a/forge-gui/res/cardsfolder/g/ghalta_and_mavren.txt b/forge-gui/res/cardsfolder/g/ghalta_and_mavren.txt
index 12e6115b223..d4d694b017f 100644
--- a/forge-gui/res/cardsfolder/g/ghalta_and_mavren.txt
+++ b/forge-gui/res/cardsfolder/g/ghalta_and_mavren.txt
@@ -5,7 +5,7 @@ PT:12/12
K:Trample
T:Mode$ AttackersDeclared | AttackingPlayer$ You | Execute$ TrigCharm | TriggerZones$ Battlefield | TriggerDescription$ Whenever you attack, ABILITY
SVar:TrigCharm:DB$ Charm | CharmNum$ 1 | Choices$ DBDino,DBVampire
-SVar:DBDino:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ g_x_x_dinosaur_trample | TokenPower$ X | TokenToughness$ X | TokenTapped$ True | TokenAttacking$ True | TokenOwner$ You | SpellDescription$ Create a tapped and attacking X/X green Dinosaur creature token with trample, where X is the greatest power among other attacking creatures.
+SVar:DBDino:DB$ Token | TokenAmount$ 1 | TokenScript$ g_x_x_dinosaur_trample | TokenPower$ X | TokenToughness$ X | TokenTapped$ True | TokenAttacking$ True | TokenOwner$ You | SpellDescription$ Create a tapped and attacking X/X green Dinosaur creature token with trample, where X is the greatest power among other attacking creatures.
SVar:DBVampire:DB$ Token | TokenAmount$ Y | TokenScript$ w_1_1_vampire_lifelink | TokenOwner$ You | SpellDescription$ Create X 1/1 white Vampire creature tokens with lifelink, where X is the number of other attacking creatures.
SVar:X:Count$Valid Creature.YouCtrl+Other+attacking$GreatestPower
SVar:Y:Count$Valid Creature.attacking+Other
diff --git a/forge-gui/res/cardsfolder/upcoming/ghost_vacuum.txt b/forge-gui/res/cardsfolder/g/ghost_vacuum.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/ghost_vacuum.txt
rename to forge-gui/res/cardsfolder/g/ghost_vacuum.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/ghostly_dancers.txt b/forge-gui/res/cardsfolder/g/ghostly_dancers.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/ghostly_dancers.txt
rename to forge-gui/res/cardsfolder/g/ghostly_dancers.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/ghostly_keybearer.txt b/forge-gui/res/cardsfolder/g/ghostly_keybearer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/ghostly_keybearer.txt
rename to forge-gui/res/cardsfolder/g/ghostly_keybearer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/giggling_skitterspike.txt b/forge-gui/res/cardsfolder/g/giggling_skitterspike.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/giggling_skitterspike.txt
rename to forge-gui/res/cardsfolder/g/giggling_skitterspike.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/give_in_to_violence.txt b/forge-gui/res/cardsfolder/g/give_in_to_violence.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/give_in_to_violence.txt
rename to forge-gui/res/cardsfolder/g/give_in_to_violence.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/glassworks_shattered_yard.txt b/forge-gui/res/cardsfolder/g/glassworks_shattered_yard.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/glassworks_shattered_yard.txt
rename to forge-gui/res/cardsfolder/g/glassworks_shattered_yard.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/gleeful_arsonist.txt b/forge-gui/res/cardsfolder/g/gleeful_arsonist.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/gleeful_arsonist.txt
rename to forge-gui/res/cardsfolder/g/gleeful_arsonist.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/glimmer_seeker.txt b/forge-gui/res/cardsfolder/g/glimmer_seeker.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/glimmer_seeker.txt
rename to forge-gui/res/cardsfolder/g/glimmer_seeker.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/glimmerburst.txt b/forge-gui/res/cardsfolder/g/glimmerburst.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/glimmerburst.txt
rename to forge-gui/res/cardsfolder/g/glimmerburst.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/glimmerlight.txt b/forge-gui/res/cardsfolder/g/glimmerlight.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/glimmerlight.txt
rename to forge-gui/res/cardsfolder/g/glimmerlight.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/glitch_interpreter.txt b/forge-gui/res/cardsfolder/g/glitch_interpreter.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/glitch_interpreter.txt
rename to forge-gui/res/cardsfolder/g/glitch_interpreter.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/gloomlake_verge.txt b/forge-gui/res/cardsfolder/g/gloomlake_verge.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/gloomlake_verge.txt
rename to forge-gui/res/cardsfolder/g/gloomlake_verge.txt
diff --git a/forge-gui/res/cardsfolder/g/gonti_lord_of_luxury.txt b/forge-gui/res/cardsfolder/g/gonti_lord_of_luxury.txt
index 78bd96324bd..505d7b81cd9 100644
--- a/forge-gui/res/cardsfolder/g/gonti_lord_of_luxury.txt
+++ b/forge-gui/res/cardsfolder/g/gonti_lord_of_luxury.txt
@@ -4,7 +4,7 @@ Types:Legendary Creature Aetherborn Rogue
PT:2/3
K:Deathtouch
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters, look at the top four cards of target opponent's library, exile one of them face down, then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast that spell.
-SVar:TrigDig:DB$ Dig | ValidTgts$ Opponent | DigNum$ 4 | ChangeNum$ 1 | DestinationZone$ Exile | DestinationZone2$ Library | LibraryPosition$ -1 | RestRandomOrder$ True | ExileFaceDown$ True | ChangeValid$ Card | RememberChanged$ True | SubAbility$ DBEffect | RememberChanged$ True
+SVar:TrigDig:DB$ Dig | ValidTgts$ Opponent | DigNum$ 4 | ChangeNum$ 1 | DestinationZone$ Exile | DestinationZone2$ Library | LibraryPosition$ -1 | RestRandomOrder$ True | ExileFaceDown$ True | ChangeValid$ Card | RememberChanged$ True | SubAbility$ DBEffect
SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STPlay1,STPlay2 | Duration$ Permanent | ForgetOnMoved$ Exile | SubAbility$ DBCleanup
SVar:STPlay1:Mode$ Continuous | MayLookAt$ You | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may look at the card, you may cast it, and you may spend mana as though it were mana of any type to cast that spell.
SVar:STPlay2:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreType$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | Secondary$ True | Description$ You may look at the card, you may cast it, and you may spend mana as though it were mana of any type to cast that spell.
diff --git a/forge-gui/res/cardsfolder/upcoming/grab_the_prize.txt b/forge-gui/res/cardsfolder/g/grab_the_prize.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/grab_the_prize.txt
rename to forge-gui/res/cardsfolder/g/grab_the_prize.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/grand_entryway_elegant_rotunda.txt b/forge-gui/res/cardsfolder/g/grand_entryway_elegant_rotunda.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/grand_entryway_elegant_rotunda.txt
rename to forge-gui/res/cardsfolder/g/grand_entryway_elegant_rotunda.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/grasping_longneck.txt b/forge-gui/res/cardsfolder/g/grasping_longneck.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/grasping_longneck.txt
rename to forge-gui/res/cardsfolder/g/grasping_longneck.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/greenhouse_rickety_gazebo.txt b/forge-gui/res/cardsfolder/g/greenhouse_rickety_gazebo.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/greenhouse_rickety_gazebo.txt
rename to forge-gui/res/cardsfolder/g/greenhouse_rickety_gazebo.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/gremlin_tamer.txt b/forge-gui/res/cardsfolder/g/gremlin_tamer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/gremlin_tamer.txt
rename to forge-gui/res/cardsfolder/g/gremlin_tamer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/grievous_wound.txt b/forge-gui/res/cardsfolder/g/grievous_wound.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/grievous_wound.txt
rename to forge-gui/res/cardsfolder/g/grievous_wound.txt
diff --git a/forge-gui/res/cardsfolder/g/grinning_totem.txt b/forge-gui/res/cardsfolder/g/grinning_totem.txt
index 5c4bf0ef0fd..125b1c544a6 100644
--- a/forge-gui/res/cardsfolder/g/grinning_totem.txt
+++ b/forge-gui/res/cardsfolder/g/grinning_totem.txt
@@ -1,7 +1,7 @@
Name:Grinning Totem
ManaCost:4
Types:Artifact
-A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | ValidTgts$ Opponent | IsCurse$ True | Chooser$ You | Origin$ Library | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | SubAbility$ TotemEffect | SpellDescription$ Search target opponent's library for a card and exile it. Then that player shuffles. | StackDescription$ {p:You} searches {p:Targeted}'s library for a card and exiles it. Then {p:Targeted} shuffles.
+A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | ValidTgts$ Opponent | Chooser$ You | Origin$ Library | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | SubAbility$ TotemEffect | SpellDescription$ Search target opponent's library for a card and exile it. Then that player shuffles. | StackDescription$ {p:You} searches {p:Targeted}'s library for a card and exiles it. Then {p:Targeted} shuffles.
SVar:TotemEffect:DB$ Effect | StaticAbilities$ STGrinning | Duration$ UntilYourNextUpkeep | RememberObjects$ Remembered | ExileOnMoved$ Exile | SubAbility$ DBDelayedTrigger | SpellDescription$ Until the beginning of your next upkeep, you may play that card.
SVar:STGrinning:Mode$ Continuous | Affected$ Card.IsRemembered | MayPlay$ True | EffectZone$ Command | AffectedZone$ Exile | Description$ Until the beginning of your next upkeep, you may play that card.
SVar:DBDelayedTrigger:DB$ DelayedTrigger | Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | RememberObjects$ Remembered | Execute$ DBReturn | IsPresent$ Card.IsTriggerRemembered | PresentZone$ Exile | SubAbility$ DBCleanup | TriggerDescription$ At the beginning of your next upkeep, if you haven't played it, put it into its owner's graveyard.
diff --git a/forge-gui/res/cardsfolder/upcoming/growing_dread.txt b/forge-gui/res/cardsfolder/g/growing_dread.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/growing_dread.txt
rename to forge-gui/res/cardsfolder/g/growing_dread.txt
diff --git a/forge-gui/res/cardsfolder/g/gwyllion_hedge_mage.txt b/forge-gui/res/cardsfolder/g/gwyllion_hedge_mage.txt
index 47ed6dafb2e..8f17f280823 100644
--- a/forge-gui/res/cardsfolder/g/gwyllion_hedge_mage.txt
+++ b/forge-gui/res/cardsfolder/g/gwyllion_hedge_mage.txt
@@ -2,8 +2,8 @@ Name:Gwyllion Hedge-Mage
ManaCost:2 WB
Types:Creature Hag Wizard
PT:2/2
-T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Plains.YouCtrl | PresentCompare$ GE2 | OptionalDecider$ You | Execute$ TrigToken | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, if you control two or more Plains, you may create a 1/1 white Kithkin Soldier creature token.
-T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Swamp.YouCtrl | PresentCompare$ GE2 | OptionalDecider$ You | Execute$ TrigPutCounter | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, if you control two or more Swamps, you may put a -1/-1 counter on target creature.
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Plains.YouCtrl | PresentCompare$ GE2 | OptionalDecider$ You | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters, if you control two or more Plains, you may create a 1/1 white Kithkin Soldier creature token.
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Swamp.YouCtrl | PresentCompare$ GE2 | OptionalDecider$ You | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters, if you control two or more Swamps, you may put a -1/-1 counter on target creature.
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ w_1_1_kithkin_soldier | TokenOwner$ You
SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True
Oracle:When Gwyllion Hedge-Mage enters, if you control two or more Plains, you may create a 1/1 white Kithkin Soldier creature token.\nWhen Gwyllion Hedge-Mage enters, if you control two or more Swamps, you may put a -1/-1 counter on target creature.
diff --git a/forge-gui/res/cardsfolder/h/hag_hedge_mage.txt b/forge-gui/res/cardsfolder/h/hag_hedge_mage.txt
index 593e8a381c4..d0afa86f1f1 100644
--- a/forge-gui/res/cardsfolder/h/hag_hedge_mage.txt
+++ b/forge-gui/res/cardsfolder/h/hag_hedge_mage.txt
@@ -2,8 +2,8 @@ Name:Hag Hedge-Mage
ManaCost:2 BG
Types:Creature Hag Shaman
PT:2/2
-T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Swamp.YouCtrl | PresentCompare$ GE2 | OptionalDecider$ You | Execute$ TrigDiscard | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, if you control two or more Swamps, you may have target player discard a card.
-T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Forest.YouCtrl | PresentCompare$ GE2 | OptionalDecider$ You | Execute$ TrigChangeZone | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, if you control two or more Forests, you may put target card from your graveyard on top of your library.
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Swamp.YouCtrl | PresentCompare$ GE2 | OptionalDecider$ You | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters, if you control two or more Swamps, you may have target player discard a card.
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Forest.YouCtrl | PresentCompare$ GE2 | OptionalDecider$ You | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, if you control two or more Forests, you may put target card from your graveyard on top of your library.
SVar:TrigDiscard:DB$ Discard | ValidTgts$ Player | TgtPrompt$ Select target player | NumCards$ 1 | Mode$ TgtChoose
SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | LibraryPosition$ 0 | TgtPrompt$ Select target card in your graveyard | ValidTgts$ Card.YouCtrl
Oracle:When Hag Hedge-Mage enters, if you control two or more Swamps, you may have target player discard a card.\nWhen Hag Hedge-Mage enters, if you control two or more Forests, you may put target card from your graveyard on top of your library.
diff --git a/forge-gui/res/cardsfolder/upcoming/hand_that_feeds.txt b/forge-gui/res/cardsfolder/h/hand_that_feeds.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/hand_that_feeds.txt
rename to forge-gui/res/cardsfolder/h/hand_that_feeds.txt
diff --git a/forge-gui/res/cardsfolder/h/harbor_guardian.txt b/forge-gui/res/cardsfolder/h/harbor_guardian.txt
index 2e5b7069906..53a64989e00 100644
--- a/forge-gui/res/cardsfolder/h/harbor_guardian.txt
+++ b/forge-gui/res/cardsfolder/h/harbor_guardian.txt
@@ -3,6 +3,6 @@ ManaCost:2 W U
Types:Creature Gargoyle
PT:3/4
K:Reach
-T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDraw | OptionalDecider$ Opponent | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME attacks, defending player may draw a card.
-SVar:TrigDraw:DB$ Draw | Defined$ TriggeredDefendingPlayer | NumCards$ 1
+T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME attacks, defending player may draw a card.
+SVar:TrigDraw:DB$ Draw | Defined$ TriggeredDefendingPlayer | NumCards$ 1 | OptionalDecider$ True
Oracle:Reach (This creature can block creatures with flying.)\nWhenever Harbor Guardian attacks, defending player may draw a card.
diff --git a/forge-gui/res/cardsfolder/upcoming/hardened_escort.txt b/forge-gui/res/cardsfolder/h/hardened_escort.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/hardened_escort.txt
rename to forge-gui/res/cardsfolder/h/hardened_escort.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/haunted_screen.txt b/forge-gui/res/cardsfolder/h/haunted_screen.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/haunted_screen.txt
rename to forge-gui/res/cardsfolder/h/haunted_screen.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/hauntwoods_shrieker.txt b/forge-gui/res/cardsfolder/h/hauntwoods_shrieker.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/hauntwoods_shrieker.txt
rename to forge-gui/res/cardsfolder/h/hauntwoods_shrieker.txt
diff --git a/forge-gui/res/cardsfolder/h/head_games.txt b/forge-gui/res/cardsfolder/h/head_games.txt
index 092ce08f010..9c49430a57d 100644
--- a/forge-gui/res/cardsfolder/h/head_games.txt
+++ b/forge-gui/res/cardsfolder/h/head_games.txt
@@ -2,7 +2,7 @@ Name:Head Games
ManaCost:3 B B
Types:Sorcery
A:SP$ ChangeZoneAll | ValidTgts$ Opponent | Origin$ Hand | Destination$ Library | ChangeType$ Card | RememberChanged$ True | IsCurse$ True | SubAbility$ HeadChange | SpellDescription$ Target opponent puts the cards from their hand on top of their library. Search that player's library for that many cards. The player puts those cards into their hand, then shuffles.
-SVar:HeadChange:DB$ ChangeZone | DefinedPlayer$ Targeted | Origin$ Library | Destination$ Hand | ChangeNum$ X | ChangeType$ Card | Chooser$ You | SubAbility$ DBCleanup
+SVar:HeadChange:DB$ ChangeZone | DefinedPlayer$ Targeted | Origin$ Library | Destination$ Hand | ChangeNum$ X | ChangeType$ Card | Chooser$ You | Mandatory$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
AI:RemoveDeck:All
diff --git a/forge-gui/res/cardsfolder/upcoming/hedge_shredder.txt b/forge-gui/res/cardsfolder/h/hedge_shredder.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/hedge_shredder.txt
rename to forge-gui/res/cardsfolder/h/hedge_shredder.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/helpful_hunter.txt b/forge-gui/res/cardsfolder/h/helpful_hunter.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/helpful_hunter.txt
rename to forge-gui/res/cardsfolder/h/helpful_hunter.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/horrid_vigor.txt b/forge-gui/res/cardsfolder/h/horrid_vigor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/horrid_vigor.txt
rename to forge-gui/res/cardsfolder/h/horrid_vigor.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/house_cartographer.txt b/forge-gui/res/cardsfolder/h/house_cartographer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/house_cartographer.txt
rename to forge-gui/res/cardsfolder/h/house_cartographer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/hushwood_verge.txt b/forge-gui/res/cardsfolder/h/hushwood_verge.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/hushwood_verge.txt
rename to forge-gui/res/cardsfolder/h/hushwood_verge.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/i_am_duskmourn.txt b/forge-gui/res/cardsfolder/i/i_am_duskmourn.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/i_am_duskmourn.txt
rename to forge-gui/res/cardsfolder/i/i_am_duskmourn.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/i_am_never_alone.txt b/forge-gui/res/cardsfolder/i/i_am_never_alone.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/i_am_never_alone.txt
rename to forge-gui/res/cardsfolder/i/i_am_never_alone.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/i_am_untouchable.txt b/forge-gui/res/cardsfolder/i/i_am_untouchable.txt
similarity index 67%
rename from forge-gui/res/cardsfolder/upcoming/i_am_untouchable.txt
rename to forge-gui/res/cardsfolder/i/i_am_untouchable.txt
index bb2f9c148bc..71b297f5ec7 100644
--- a/forge-gui/res/cardsfolder/upcoming/i_am_untouchable.txt
+++ b/forge-gui/res/cardsfolder/i/i_am_untouchable.txt
@@ -2,7 +2,7 @@ Name:I Am Untouchable
ManaCost:no cost
Types:Ongoing Scheme
S:Mode$ Continuous | EffectZone$ Command | Affected$ You,Permanent.YouCtrl | AddKeyword$ Hexproof | Description$ You and permanents you control have hexproof.
-T:Mode$ DamageDoneOnce | ValidTarget$ You | TriggerZones$ Battlefield | CombatDamage$ True | Execute$ TrigToken | TriggerZones$ Command | TriggerDescription$ When combat damage is dealt to you, create a 4/4 colorless Scarecrow artifact creature token with vigilance, then abandon this scheme.
+T:Mode$ DamageDoneOnce | ValidTarget$ You | CombatDamage$ True | Execute$ TrigToken | TriggerZones$ Command | TriggerDescription$ When combat damage is dealt to you, create a 4/4 colorless Scarecrow artifact creature token with vigilance, then abandon this scheme.
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_4_4_a_scarecrow_vigilance | TokenOwner$ You | SubAbility$ DBAbandon
SVar:DBAbandon:DB$ Abandon
Oracle:(An ongoing scheme remains face up until it's abandoned.)\nYou and permanents you control have hexproof.\nWhen combat damage is dealt to you, create a 4/4 colorless Scarecrow artifact creature token with vigilance, then abandon this scheme.
diff --git a/forge-gui/res/cardsfolder/upcoming/i_call_for_slaughter.txt b/forge-gui/res/cardsfolder/i/i_call_for_slaughter.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/i_call_for_slaughter.txt
rename to forge-gui/res/cardsfolder/i/i_call_for_slaughter.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/i_will_savor_your_agony.txt b/forge-gui/res/cardsfolder/i/i_will_savor_your_agony.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/i_will_savor_your_agony.txt
rename to forge-gui/res/cardsfolder/i/i_will_savor_your_agony.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/impossible_inferno.txt b/forge-gui/res/cardsfolder/i/impossible_inferno.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/impossible_inferno.txt
rename to forge-gui/res/cardsfolder/i/impossible_inferno.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/infernal_phantom.txt b/forge-gui/res/cardsfolder/i/infernal_phantom.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/infernal_phantom.txt
rename to forge-gui/res/cardsfolder/i/infernal_phantom.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/innocuous_rat.txt b/forge-gui/res/cardsfolder/i/innocuous_rat.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/innocuous_rat.txt
rename to forge-gui/res/cardsfolder/i/innocuous_rat.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/inquisitive_glimmer.txt b/forge-gui/res/cardsfolder/i/inquisitive_glimmer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/inquisitive_glimmer.txt
rename to forge-gui/res/cardsfolder/i/inquisitive_glimmer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/insidious_fungus.txt b/forge-gui/res/cardsfolder/i/insidious_fungus.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/insidious_fungus.txt
rename to forge-gui/res/cardsfolder/i/insidious_fungus.txt
diff --git a/forge-gui/res/cardsfolder/i/intellect_devourer.txt b/forge-gui/res/cardsfolder/i/intellect_devourer.txt
index 73682ce3f0a..db940d9a07c 100644
--- a/forge-gui/res/cardsfolder/i/intellect_devourer.txt
+++ b/forge-gui/res/cardsfolder/i/intellect_devourer.txt
@@ -3,6 +3,6 @@ ManaCost:3 B
Types:Creature Horror
PT:2/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ Devour Intellect — When CARDNAME enters, each opponent exiles a card from their hand until CARDNAME leaves the battlefield.
-SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ChangeType$ Card | DefinedPlayer$ Opponent | Mandatory$ True | ChangeType$ Card | Hidden$ True | Duration$ UntilHostLeavesPlay | IsCurse$ True
+SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ChangeType$ Card | DefinedPlayer$ Opponent | Mandatory$ True | Hidden$ True | Duration$ UntilHostLeavesPlay | IsCurse$ True
S:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | Affected$ Card.ExiledWithSource | AffectedZone$ Exile | Description$ Body Thief — You may play lands and cast spells from among cards exiled with CARDNAME. If you cast a spell this way, you may spend mana as though it were mana of any color to cast it.
Oracle:Devour Intellect — When Intellect Devourer enters, each opponent exiles a card from their hand until Intellect Devourer leaves the battlefield.\nBody Thief — You may play lands and cast spells from among cards exiled with Intellect Devourer. If you cast a spell this way, you may spend mana as though it were mana of any color to cast it.
diff --git a/forge-gui/res/cardsfolder/upcoming/into_the_pit.txt b/forge-gui/res/cardsfolder/i/into_the_pit.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/into_the_pit.txt
rename to forge-gui/res/cardsfolder/i/into_the_pit.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/intruding_soulrager.txt b/forge-gui/res/cardsfolder/i/intruding_soulrager.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/intruding_soulrager.txt
rename to forge-gui/res/cardsfolder/i/intruding_soulrager.txt
diff --git a/forge-gui/res/cardsfolder/i/invasion_of_kylem_valors_reach_tag_team.txt b/forge-gui/res/cardsfolder/i/invasion_of_kylem_valors_reach_tag_team.txt
index 7e4386ea885..1d151bc9dc2 100644
--- a/forge-gui/res/cardsfolder/i/invasion_of_kylem_valors_reach_tag_team.txt
+++ b/forge-gui/res/cardsfolder/i/invasion_of_kylem_valors_reach_tag_team.txt
@@ -13,6 +13,6 @@ Name:Valor's Reach Tag Team
ManaCost:no cost
Colors:red,white
Types:Sorcery
-A:SP$ Token | TokenAmount$ 1 | TokenScript$ rw_3_2_warrior_symbiotic_attack | TokenAmount$ 2 | TokenOwner$ You | SpellDescription$ Create two 3/2 red and white Warrior creature tokens with "Whenever this creature and at least one other creature token attack, put a +1/+1 counter on this creature."
+A:SP$ Token | TokenScript$ rw_3_2_warrior_symbiotic_attack | TokenAmount$ 2 | TokenOwner$ You | SpellDescription$ Create two 3/2 red and white Warrior creature tokens with "Whenever this creature and at least one other creature token attack, put a +1/+1 counter on this creature."
DeckHas:Ability$Token & Type$Warrior
Oracle:Create two 3/2 red and white Warrior creature tokens with "Whenever this creature and at least one other creature token attack, put a +1/+1 counter on this creature."
diff --git a/forge-gui/res/cardsfolder/upcoming/irreverent_gremlin.txt b/forge-gui/res/cardsfolder/i/irreverent_gremlin.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/irreverent_gremlin.txt
rename to forge-gui/res/cardsfolder/i/irreverent_gremlin.txt
diff --git a/forge-gui/res/cardsfolder/j/judge_unworthy.txt b/forge-gui/res/cardsfolder/j/judge_unworthy.txt
index 30cd1ff25ef..9d1468fbe4e 100644
--- a/forge-gui/res/cardsfolder/j/judge_unworthy.txt
+++ b/forge-gui/res/cardsfolder/j/judge_unworthy.txt
@@ -3,7 +3,7 @@ ManaCost:1 W
Types:Instant
A:SP$ Scry | ScryNum$ 3 | SubAbility$ DBReveal | SpellDescription$ Choose target attacking or blocking creature. Scry 3, then reveal the top card of your library. CARDNAME deals damage equal to that card's mana value to that creature.
SVar:DBReveal:DB$ Dig | DigNum$ 1 | Reveal$ True | DestinationZone$ Library | LibraryPosition$ 0 | SubAbility$ DBDamage
-SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ X | ValidTgts$ Creature.attacking,Creature.blocking | TgtPrompt$ Select target attacking or blocking creature
+SVar:DBDamage:DB$ DealDamage | NumDmg$ X | ValidTgts$ Creature.attacking,Creature.blocking | TgtPrompt$ Select target attacking or blocking creature
SVar:X:Count$TopOfLibraryCMC
AI:RemoveDeck:All
Oracle:Choose target attacking or blocking creature. Scry 3, then reveal the top card of your library. Judge Unworthy deals damage equal to that card's mana value to that creature.
diff --git a/forge-gui/res/cardsfolder/upcoming/jump_scare.txt b/forge-gui/res/cardsfolder/j/jump_scare.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/jump_scare.txt
rename to forge-gui/res/cardsfolder/j/jump_scare.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/kaito_bane_of_nightmares.txt b/forge-gui/res/cardsfolder/k/kaito_bane_of_nightmares.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/kaito_bane_of_nightmares.txt
rename to forge-gui/res/cardsfolder/k/kaito_bane_of_nightmares.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/keys_to_the_house.txt b/forge-gui/res/cardsfolder/k/keys_to_the_house.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/keys_to_the_house.txt
rename to forge-gui/res/cardsfolder/k/keys_to_the_house.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/kianne_corrupted_memory.txt b/forge-gui/res/cardsfolder/k/kianne_corrupted_memory.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/kianne_corrupted_memory.txt
rename to forge-gui/res/cardsfolder/k/kianne_corrupted_memory.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/killers_mask.txt b/forge-gui/res/cardsfolder/k/killers_mask.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/killers_mask.txt
rename to forge-gui/res/cardsfolder/k/killers_mask.txt
diff --git a/forge-gui/res/cardsfolder/k/kiora_bests_the_sea_god.txt b/forge-gui/res/cardsfolder/k/kiora_bests_the_sea_god.txt
index aa0cd4b296c..e3f9178e5ad 100644
--- a/forge-gui/res/cardsfolder/k/kiora_bests_the_sea_god.txt
+++ b/forge-gui/res/cardsfolder/k/kiora_bests_the_sea_god.txt
@@ -5,7 +5,7 @@ K:Chapter:3:TrigToken,TrigTap,TrigGainControl
SVar:TrigToken:DB$ Token | TokenScript$ u_8_8_kraken_hexproof | SpellDescription$ Create an 8/8 blue Kraken creature token with hexproof.
SVar:TrigTap:DB$ TapAll | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | ValidCards$ Permanent.nonLand | SubAbility$ DBPumpAll | SpellDescription$ Tap all nonland permanents target opponent controls. They don't untap during their controllers' next untap step.
SVar:DBPumpAll:DB$ PumpAll | Defined$ Targeted | ValidCards$ Creature | KW$ HIDDEN This card doesn't untap during your next untap step. | Duration$ Permanent
-SVar:TrigGainControl:DB$ GainControl | TgtPrompt$ Choose target creature | ValidTgts$ Permanent.OppCtrl | TgtPrompt$ Select target permanent an opponent controls | SubAbility$ DBUntap | SpellDescription$ Gain control of target permanent an opponent controls. Untap it.
+SVar:TrigGainControl:DB$ GainControl | ValidTgts$ Permanent.OppCtrl | TgtPrompt$ Select target permanent an opponent controls | SubAbility$ DBUntap | SpellDescription$ Gain control of target permanent an opponent controls. Untap it.
SVar:DBUntap:DB$ Untap | Defined$ Targeted
DeckHas:Ability$Token
Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)\nI — Create an 8/8 blue Kraken creature token with hexproof.\nII — Tap all nonland permanents target opponent controls. They don't untap during their controller's next untap step.\nIII — Gain control of target permanent an opponent controls. Untap it.
diff --git a/forge-gui/res/cardsfolder/upcoming/kneel_before_my_legions.txt b/forge-gui/res/cardsfolder/k/kneel_before_my_legions.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/kneel_before_my_legions.txt
rename to forge-gui/res/cardsfolder/k/kneel_before_my_legions.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/kona_rescue_beastie.txt b/forge-gui/res/cardsfolder/k/kona_rescue_beastie.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/kona_rescue_beastie.txt
rename to forge-gui/res/cardsfolder/k/kona_rescue_beastie.txt
diff --git a/forge-gui/res/cardsfolder/k/krenko_tin_street_kingpin.txt b/forge-gui/res/cardsfolder/k/krenko_tin_street_kingpin.txt
index cf4ad0c4229..9cb313b032a 100644
--- a/forge-gui/res/cardsfolder/k/krenko_tin_street_kingpin.txt
+++ b/forge-gui/res/cardsfolder/k/krenko_tin_street_kingpin.txt
@@ -4,7 +4,7 @@ Types:Legendary Creature Goblin
PT:1/2
T:Mode$ Attacks | ValidCard$ Creature.Self | Execute$ TrigPut | TriggerDescription$ Whenever CARDNAME attacks, put a +1/+1 counter on it, then create a number of 1/1 red Goblin creature tokens equal to NICKNAME's power.
SVar:TrigPut:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBToken
-SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_goblin | TokenOwner$ You | TokenAmount$ X
+SVar:DBToken:DB$ Token | TokenScript$ r_1_1_goblin | TokenOwner$ You | TokenAmount$ X
SVar:X:Count$CardPower
SVar:HasAttackEffect:TRUE
DeckHas:Ability$Token|Counters
diff --git a/forge-gui/res/cardsfolder/upcoming/lakeside_shack.txt b/forge-gui/res/cardsfolder/l/lakeside_shack.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/lakeside_shack.txt
rename to forge-gui/res/cardsfolder/l/lakeside_shack.txt
diff --git a/forge-gui/res/cardsfolder/l/leech_bonder.txt b/forge-gui/res/cardsfolder/l/leech_bonder.txt
index d70c55442a4..60b69850b87 100644
--- a/forge-gui/res/cardsfolder/l/leech_bonder.txt
+++ b/forge-gui/res/cardsfolder/l/leech_bonder.txt
@@ -3,6 +3,6 @@ ManaCost:2 U
Types:Creature Merfolk Soldier
PT:3/3
K:etbCounter:M1M1:2
-A:AB$ MoveCounter | Cost$ U Q | ValidTgts$ Creature | TgtPrompt$ Select target creatures to move counters | ValidTgts$ Creature | TargetMin$ 2 | TargetMax$ 2 | CounterType$ Any | SpellDescription$ Move a counter from target creature onto a second target creature.
+A:AB$ MoveCounter | Cost$ U Q | ValidTgts$ Creature | TgtPrompt$ Select target creatures to move counters | TargetMin$ 2 | TargetMax$ 2 | CounterType$ Any | SpellDescription$ Move a counter from target creature onto a second target creature.
AI:RemoveDeck:All
Oracle:Leech Bonder enters with two -1/-1 counters on it.\n{U}, {Q}: Move a counter from target creature onto a second target creature. ({Q} is the untap symbol.)
diff --git a/forge-gui/res/cardsfolder/upcoming/lets_play_a_game.txt b/forge-gui/res/cardsfolder/l/lets_play_a_game.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/lets_play_a_game.txt
rename to forge-gui/res/cardsfolder/l/lets_play_a_game.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/leyline_of_hope.txt b/forge-gui/res/cardsfolder/l/leyline_of_hope.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/leyline_of_hope.txt
rename to forge-gui/res/cardsfolder/l/leyline_of_hope.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/leyline_of_mutation.txt b/forge-gui/res/cardsfolder/l/leyline_of_mutation.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/leyline_of_mutation.txt
rename to forge-gui/res/cardsfolder/l/leyline_of_mutation.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/leyline_of_resonance.txt b/forge-gui/res/cardsfolder/l/leyline_of_resonance.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/leyline_of_resonance.txt
rename to forge-gui/res/cardsfolder/l/leyline_of_resonance.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/leyline_of_transformation.txt b/forge-gui/res/cardsfolder/l/leyline_of_transformation.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/leyline_of_transformation.txt
rename to forge-gui/res/cardsfolder/l/leyline_of_transformation.txt
diff --git a/forge-gui/res/cardsfolder/l/lightning_runner.txt b/forge-gui/res/cardsfolder/l/lightning_runner.txt
index b859cf4e08c..0ee06a51292 100644
--- a/forge-gui/res/cardsfolder/l/lightning_runner.txt
+++ b/forge-gui/res/cardsfolder/l/lightning_runner.txt
@@ -6,7 +6,7 @@ K:Double Strike
K:Haste
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigEnergy | TriggerDescription$ Whenever CARDNAME attacks, you get {E}{E} (two energy counters), then you may pay eight {E}. If you pay, untap all creatures you control, and after this phase, there is an additional combat phase.
SVar:TrigEnergy:DB$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum$ 2 | SubAbility$ DBUntapAll
-SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl | SubAbility$ DBAddCombat | UnlessCost$ PayEnergy<8> | UnlessPayer$ You | UnlessSwitched$ True | UnlessResolveSubs$ WhenPaid | SubAbility$ DBAddCombat
+SVar:DBUntapAll:DB$ UntapAll | ValidCards$ Creature.YouCtrl | UnlessCost$ PayEnergy<8> | UnlessPayer$ You | UnlessSwitched$ True | UnlessResolveSubs$ WhenPaid | SubAbility$ DBAddCombat
SVar:DBAddCombat:DB$ AddPhase | ExtraPhase$ Combat | AfterPhase$ EndCombat
SVar:PlayMain1:TRUE
Oracle:Double strike, haste\nWhenever Lightning Runner attacks, you get {E}{E} (two energy counters), then you may pay eight {E}. If you pay, untap all creatures you control, and after this phase, there is an additional combat phase.
diff --git a/forge-gui/res/cardsfolder/l/lilianas_influence.txt b/forge-gui/res/cardsfolder/l/lilianas_influence.txt
index 78061cdc620..dd9e769c99e 100644
--- a/forge-gui/res/cardsfolder/l/lilianas_influence.txt
+++ b/forge-gui/res/cardsfolder/l/lilianas_influence.txt
@@ -1,7 +1,7 @@
Name:Liliana's Influence
ManaCost:4 B B
Types:Sorcery
-A:SP$ PutCounterAll | ValidCards$ Creature.YouDontCtrl | CounterType$ M1M1 | CounterNum$ 1 | SubAbility$ DBShuffle | IsCurse$ True | SubAbility$ DBSearch | SpellDescription$ Put a -1/-1 counter on each creature you don't control.
+A:SP$ PutCounterAll | ValidCards$ Creature.YouDontCtrl | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True | SubAbility$ DBSearch | SpellDescription$ Put a -1/-1 counter on each creature you don't control.
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | OriginAlternative$ Graveyard | Destination$ Hand | ChangeType$ Card.YouOwn+namedLiliana; Death Wielder | Optional$ True | SpellDescription$ You may search your library and/or graveyard for a card named Liliana, Death Wielder, reveal it, and put it into your hand. If you search your library this way, shuffle.
DeckHints:Name$Liliana, Death Wielder
Oracle:Put a -1/-1 counter on each creature you don't control. You may search your library and/or graveyard for a card named Liliana, Death Wielder, reveal it, and put it into your hand. If you search your library this way, shuffle.
diff --git a/forge-gui/res/cardsfolder/upcoming/lionheart_glimmer.txt b/forge-gui/res/cardsfolder/l/lionheart_glimmer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/lionheart_glimmer.txt
rename to forge-gui/res/cardsfolder/l/lionheart_glimmer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/live_or_die.txt b/forge-gui/res/cardsfolder/l/live_or_die.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/live_or_die.txt
rename to forge-gui/res/cardsfolder/l/live_or_die.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/living_phone.txt b/forge-gui/res/cardsfolder/l/living_phone.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/living_phone.txt
rename to forge-gui/res/cardsfolder/l/living_phone.txt
diff --git a/forge-gui/res/cardsfolder/l/longhorn_firebeast.txt b/forge-gui/res/cardsfolder/l/longhorn_firebeast.txt
index d4f1c715d05..71091357b5c 100644
--- a/forge-gui/res/cardsfolder/l/longhorn_firebeast.txt
+++ b/forge-gui/res/cardsfolder/l/longhorn_firebeast.txt
@@ -2,7 +2,6 @@ Name:Longhorn Firebeast
ManaCost:2 R
Types:Creature Elemental Ox Beast
PT:3/2
-T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDealDamage | OptionalDecider$ Opponent | TriggerDescription$ When CARDNAME enters, any opponent may have it deal 5 damage to them. If a player does, sacrifice CARDNAME.
-SVar:TrigDealDamage:DB$ DealDamage | Defined$ Opponent | NumDmg$ 5 | SubAbility$ DBSacrifice
-SVar:DBSacrifice:DB$ Sacrifice
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDealDamage | TriggerDescription$ When CARDNAME enters, any opponent may have it deal 5 damage to them. If a player does, sacrifice CARDNAME.
+SVar:TrigDealDamage::DB$ Sacrifice | UnlessCost$ DamageYou<5> | UnlessPayer$ Opponent | UnlessSwitched$ True
Oracle:When Longhorn Firebeast enters, any opponent may have it deal 5 damage to them. If a player does, sacrifice Longhorn Firebeast.
diff --git a/forge-gui/res/cardsfolder/upcoming/malevolent_chandelier.txt b/forge-gui/res/cardsfolder/m/malevolent_chandelier.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/malevolent_chandelier.txt
rename to forge-gui/res/cardsfolder/m/malevolent_chandelier.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/manifest_dread.txt b/forge-gui/res/cardsfolder/m/manifest_dread.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/manifest_dread.txt
rename to forge-gui/res/cardsfolder/m/manifest_dread.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/marina_vendrell.txt b/forge-gui/res/cardsfolder/m/marina_vendrell.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/marina_vendrell.txt
rename to forge-gui/res/cardsfolder/m/marina_vendrell.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/marina_vendrells_grimoire.txt b/forge-gui/res/cardsfolder/m/marina_vendrells_grimoire.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/marina_vendrells_grimoire.txt
rename to forge-gui/res/cardsfolder/m/marina_vendrells_grimoire.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/marvin_murderous_mimic.txt b/forge-gui/res/cardsfolder/m/marvin_murderous_mimic.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/marvin_murderous_mimic.txt
rename to forge-gui/res/cardsfolder/m/marvin_murderous_mimic.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/meat_locker_drowned_diner.txt b/forge-gui/res/cardsfolder/m/meat_locker_drowned_diner.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/meat_locker_drowned_diner.txt
rename to forge-gui/res/cardsfolder/m/meat_locker_drowned_diner.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/meathook_massacre_ii.txt b/forge-gui/res/cardsfolder/m/meathook_massacre_ii.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/meathook_massacre_ii.txt
rename to forge-gui/res/cardsfolder/m/meathook_massacre_ii.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/metamorphosis_fanatic.txt b/forge-gui/res/cardsfolder/m/metamorphosis_fanatic.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/metamorphosis_fanatic.txt
rename to forge-gui/res/cardsfolder/m/metamorphosis_fanatic.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/miasma_demon.txt b/forge-gui/res/cardsfolder/m/miasma_demon.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/miasma_demon.txt
rename to forge-gui/res/cardsfolder/m/miasma_demon.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/midnight_mayhem.txt b/forge-gui/res/cardsfolder/m/midnight_mayhem.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/midnight_mayhem.txt
rename to forge-gui/res/cardsfolder/m/midnight_mayhem.txt
diff --git a/forge-gui/res/cardsfolder/m/mindleech_ghoul.txt b/forge-gui/res/cardsfolder/m/mindleech_ghoul.txt
index ab03cfe47d1..0eb208c4ecb 100644
--- a/forge-gui/res/cardsfolder/m/mindleech_ghoul.txt
+++ b/forge-gui/res/cardsfolder/m/mindleech_ghoul.txt
@@ -4,6 +4,6 @@ Types:Creature Zombie
PT:2/2
K:Exploit
T:Mode$ Exploited | ValidCard$ Creature | ValidSource$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ When CARDNAME exploits a creature, each opponent exiles a card from their hand.
-SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ChangeType$ Card | DefinedPlayer$ Player.Opponent | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | Hidden$ True | IsCurse$ True
+SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Player.Opponent | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | Hidden$ True | IsCurse$ True
DeckHas:Ability$Sacrifice
Oracle:Exploit (When this creature enters, you may sacrifice a creature.)\nWhen Mindleech Ghoul exploits a creature, each opponent exiles a card from their hand.
diff --git a/forge-gui/res/cardsfolder/upcoming/mine_is_the_only_truth.txt b/forge-gui/res/cardsfolder/m/mine_is_the_only_truth.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/mine_is_the_only_truth.txt
rename to forge-gui/res/cardsfolder/m/mine_is_the_only_truth.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/mirror_room_fractured_realm.txt b/forge-gui/res/cardsfolder/m/mirror_room_fractured_realm.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/mirror_room_fractured_realm.txt
rename to forge-gui/res/cardsfolder/m/mirror_room_fractured_realm.txt
diff --git a/forge-gui/res/cardsfolder/m/misfortune.txt b/forge-gui/res/cardsfolder/m/misfortune.txt
index 7589f74f997..5276f58ffec 100644
--- a/forge-gui/res/cardsfolder/m/misfortune.txt
+++ b/forge-gui/res/cardsfolder/m/misfortune.txt
@@ -2,9 +2,8 @@ Name:Misfortune
ManaCost:1 B R G
Types:Sorcery
A:SP$ Charm | Chooser$ Opponent | Choices$ Fortune,Misfortune
-SVar:Fortune:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBGainLife | SpellDescription$ Put a +1/+1 counter on each creature you control. You gain 4 life. | SubAbility$ DBGainLife
+SVar:Fortune:DB$ PutCounterAll | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBGainLife | SpellDescription$ Put a +1/+1 counter on each creature you control. You gain 4 life.
SVar:DBGainLife:DB$ GainLife | LifeAmount$ 4
-SVar:Misfortune:DB$ PutCounterAll | ValidCards$ Creature.ControlledBy ChoosingPlayer | CounterType$ M1M1 | CounterNum$ 1 | SubAbility$ DBLoseLife | SpellDescription$ You put a -1/-1 counter on each creature that player controls and CARDNAME deals 4 damage to that player. | SubAbility$ DBDamage
+SVar:Misfortune:DB$ PutCounterAll | ValidCards$ Creature.ControlledBy ChoosingPlayer | CounterType$ M1M1 | CounterNum$ 1 | SubAbility$ DBDamage | SpellDescription$ You put a -1/-1 counter on each creature that player controls and CARDNAME deals 4 damage to that player.
SVar:DBDamage:DB$ DealDamage | Defined$ ChoosingPlayer | NumDmg$ 4
-SVar:ChooserDraws:DB$ Draw | NumCards$ 3 | Defined$ ChosenPlayer
Oracle:An opponent chooses one —\n• You put a +1/+1 counter on each creature you control and gain 4 life.\n• You put a -1/-1 counter on each creature that player controls and Misfortune deals 4 damage to that player.
diff --git a/forge-gui/res/cardsfolder/upcoming/moldering_gym_weight_room.txt b/forge-gui/res/cardsfolder/m/moldering_gym_weight_room.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/moldering_gym_weight_room.txt
rename to forge-gui/res/cardsfolder/m/moldering_gym_weight_room.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/monstrous_emergence.txt b/forge-gui/res/cardsfolder/m/monstrous_emergence.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/monstrous_emergence.txt
rename to forge-gui/res/cardsfolder/m/monstrous_emergence.txt
diff --git a/forge-gui/res/cardsfolder/m/mordor_on_the_march.txt b/forge-gui/res/cardsfolder/m/mordor_on_the_march.txt
index 33a02673090..08643be7460 100644
--- a/forge-gui/res/cardsfolder/m/mordor_on_the_march.txt
+++ b/forge-gui/res/cardsfolder/m/mordor_on_the_march.txt
@@ -2,7 +2,7 @@ Name:Mordor on the March
ManaCost:3 B R
Types:Sorcery
K:Storm
-A:SP$ ChangeZone | ChangeType$ Creature.YouCtrl | Hidden$ True | ChangeNum$ 1 | RememberChanged$ True | Origin$ Graveyard | Destination$ Exile | ChangeNum$ 1 | SubAbility$ DBCopy | SpellDescription$ Exile a creature card from your graveyard. Create a token that's a copy of it. It gains haste until end of turn. Exile it at the beginning of the next end step.
+A:SP$ ChangeZone | ChangeType$ Creature.YouCtrl | Hidden$ True | RememberChanged$ True | Origin$ Graveyard | Destination$ Exile | ChangeNum$ 1 | SubAbility$ DBCopy | SpellDescription$ Exile a creature card from your graveyard. Create a token that's a copy of it. It gains haste until end of turn. Exile it at the beginning of the next end step.
SVar:DBCopy:DB$ CopyPermanent | Defined$ Remembered | PumpKeywords$ Haste | PumpDuration$ EOT | AtEOT$ Exile | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:PlayMain1:TRUE
diff --git a/forge-gui/res/cardsfolder/upcoming/most_valuable_slayer.txt b/forge-gui/res/cardsfolder/m/most_valuable_slayer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/most_valuable_slayer.txt
rename to forge-gui/res/cardsfolder/m/most_valuable_slayer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/murky_sewer.txt b/forge-gui/res/cardsfolder/m/murky_sewer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/murky_sewer.txt
rename to forge-gui/res/cardsfolder/m/murky_sewer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/my_champion_stands_supreme.txt b/forge-gui/res/cardsfolder/m/my_champion_stands_supreme.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/my_champion_stands_supreme.txt
rename to forge-gui/res/cardsfolder/m/my_champion_stands_supreme.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/my_followers_ascend.txt b/forge-gui/res/cardsfolder/m/my_followers_ascend.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/my_followers_ascend.txt
rename to forge-gui/res/cardsfolder/m/my_followers_ascend.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/my_tendrils_run_deep.txt b/forge-gui/res/cardsfolder/m/my_tendrils_run_deep.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/my_tendrils_run_deep.txt
rename to forge-gui/res/cardsfolder/m/my_tendrils_run_deep.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/my_wealth_will_bury_you.txt b/forge-gui/res/cardsfolder/m/my_wealth_will_bury_you.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/my_wealth_will_bury_you.txt
rename to forge-gui/res/cardsfolder/m/my_wealth_will_bury_you.txt
diff --git a/forge-gui/res/cardsfolder/m/my_will_is_irresistible.txt b/forge-gui/res/cardsfolder/m/my_will_is_irresistible.txt
new file mode 100644
index 00000000000..fd4b765c7a9
--- /dev/null
+++ b/forge-gui/res/cardsfolder/m/my_will_is_irresistible.txt
@@ -0,0 +1,9 @@
+Name:My Will Is Irresistible
+ManaCost:no cost
+Types:Scheme
+T:Mode$ SetInMotion | ValidCard$ Card.Self | TriggerZones$ Command | Execute$ DBChoosePerms | TriggerDescription$ When you set this scheme in motion, choose up to three nonland permanents you don't control. Target opponent chooses one of those permanents. You gain control of the rest.
+SVar:DBChoosePerms:DB$ ChooseCard | Choices$ Permanent.nonLand+YouDontCtrl | RememberChosen$ True | MinAmount$ 0 | Amount$ 3 | AILogic$ SacOneEach | SubAbility$ DBOppChooseCard | ChoiceTitle$ Choose up to three nonland permanents you don't control.
+SVar:DBOppChooseCard:DB$ ChooseCard | ValidTgts$ Opponent | ChoiceZone$ Battlefield | DefinedCards$ Remembered | AILogic$ OwnCard | Mandatory$ True | ForgetChosen$ True | Reveal$ True | SubAbility$ DBGainControl | ChoiceTitle$ Choose a nonland permanent.
+SVar:DBGainControl:DB$ GainControl | Defined$ Remembered | NewController$ You | SubAbility$ DBCleanup
+SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
+Oracle:When you set this scheme in motion, choose up to three nonland permanents you don't control. Target opponent chooses one of those permanents. You gain control of the rest.
diff --git a/forge-gui/res/cardsfolder/upcoming/my_wings_enfold_all.txt b/forge-gui/res/cardsfolder/m/my_wings_enfold_all.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/my_wings_enfold_all.txt
rename to forge-gui/res/cardsfolder/m/my_wings_enfold_all.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/nashi_searcher_in_the_dark.txt b/forge-gui/res/cardsfolder/n/nashi_searcher_in_the_dark.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/nashi_searcher_in_the_dark.txt
rename to forge-gui/res/cardsfolder/n/nashi_searcher_in_the_dark.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/neglected_manor.txt b/forge-gui/res/cardsfolder/n/neglected_manor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/neglected_manor.txt
rename to forge-gui/res/cardsfolder/n/neglected_manor.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/niko_light_of_hope.txt b/forge-gui/res/cardsfolder/n/niko_light_of_hope.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/niko_light_of_hope.txt
rename to forge-gui/res/cardsfolder/n/niko_light_of_hope.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/nine_lives_familiar.txt b/forge-gui/res/cardsfolder/n/nine_lives_familiar.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/nine_lives_familiar.txt
rename to forge-gui/res/cardsfolder/n/nine_lives_familiar.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/no_secret_is_hidden_from_me.txt b/forge-gui/res/cardsfolder/n/no_secret_is_hidden_from_me.txt
similarity index 88%
rename from forge-gui/res/cardsfolder/upcoming/no_secret_is_hidden_from_me.txt
rename to forge-gui/res/cardsfolder/n/no_secret_is_hidden_from_me.txt
index ddb30933b66..e67382295cc 100644
--- a/forge-gui/res/cardsfolder/upcoming/no_secret_is_hidden_from_me.txt
+++ b/forge-gui/res/cardsfolder/n/no_secret_is_hidden_from_me.txt
@@ -3,10 +3,10 @@ ManaCost:no cost
Types:Scheme
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ TrigDigUntil | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Then if you control six or more lands, repeat this process once.
SVar:TrigDigUntil:DB$ DigUntil | Valid$ Card.nonLand | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | SubAbility$ DBPlay1
-SVar:DBPlay1:DB$ Play | Defined$ Remembered | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBChange | SubAbility$ DBCleanup1
+SVar:DBPlay1:DB$ Play | Defined$ Remembered | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup1
SVar:DBCleanup1:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBDigUntil
SVar:DBDigUntil:DB$ DigUntil | Valid$ Card.nonLand | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE6 | SubAbility$ DBPlay2
-SVar:DBPlay2:DB$ Play | Defined$ Remembered | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBChange | SubAbility$ DBCleanup2
+SVar:DBPlay2:DB$ Play | Defined$ Remembered | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup2
SVar:DBCleanup2:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$Valid Land.YouCtrl
Oracle:When you set this scheme in motion, exile cards from the top of your library until you exile a nonland card. You may cast that card without paying its mana cost. Then if you control six or more lands, repeat this process once.
diff --git a/forge-gui/res/cardsfolder/upcoming/norin_swift_survivalist.txt b/forge-gui/res/cardsfolder/n/norin_swift_survivalist.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/norin_swift_survivalist.txt
rename to forge-gui/res/cardsfolder/n/norin_swift_survivalist.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/nowhere_to_run.txt b/forge-gui/res/cardsfolder/n/nowhere_to_run.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/nowhere_to_run.txt
rename to forge-gui/res/cardsfolder/n/nowhere_to_run.txt
diff --git a/forge-gui/res/cardsfolder/o/oath_of_the_grey_host.txt b/forge-gui/res/cardsfolder/o/oath_of_the_grey_host.txt
index 2b6040fcbfe..019971a9795 100644
--- a/forge-gui/res/cardsfolder/o/oath_of_the_grey_host.txt
+++ b/forge-gui/res/cardsfolder/o/oath_of_the_grey_host.txt
@@ -2,7 +2,7 @@ Name:Oath of the Grey Host
ManaCost:3 B
Types:Enchantment Saga
K:Chapter:3:DBFood,DBLoseLife,DBSpirit
-SVar:DBFood:DB$ Token | TokenAmount$ 1 | ValidTgts$ Opponent | TokenOwner$ TargetedAndYou | TokenAmount$ 1 | TokenScript$ c_a_food_sac | SpellDescription$ You and target opponent each create a Food token.
+SVar:DBFood:DB$ Token | TokenAmount$ 1 | ValidTgts$ Opponent | TokenOwner$ TargetedAndYou | TokenScript$ c_a_food_sac | SpellDescription$ You and target opponent each create a Food token.
SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 3 | Defined$ Player.Opponent | SubAbility$ DBTreasure | SpellDescription$ Each opponent loses 3 life. Create a Treasure token.
SVar:DBTreasure:DB$ Token | TokenScript$ c_a_treasure_sac
SVar:DBSpirit:DB$ Token | TokenAmount$ 3 | TokenScript$ w_1_1_spirit_flying | TokenTapped$ True | SpellDescription$ Create three tapped 1/1 white Spirit creature tokens with flying.
diff --git a/forge-gui/res/cardsfolder/upcoming/oblivious_bookworm.txt b/forge-gui/res/cardsfolder/o/oblivious_bookworm.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/oblivious_bookworm.txt
rename to forge-gui/res/cardsfolder/o/oblivious_bookworm.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/omnivorous_flytrap.txt b/forge-gui/res/cardsfolder/o/omnivorous_flytrap.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/omnivorous_flytrap.txt
rename to forge-gui/res/cardsfolder/o/omnivorous_flytrap.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/only_i_know_what_awaits.txt b/forge-gui/res/cardsfolder/o/only_i_know_what_awaits.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/only_i_know_what_awaits.txt
rename to forge-gui/res/cardsfolder/o/only_i_know_what_awaits.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/optimistic_scavenger.txt b/forge-gui/res/cardsfolder/o/optimistic_scavenger.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/optimistic_scavenger.txt
rename to forge-gui/res/cardsfolder/o/optimistic_scavenger.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/orphans_of_the_wheat.txt b/forge-gui/res/cardsfolder/o/orphans_of_the_wheat.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/orphans_of_the_wheat.txt
rename to forge-gui/res/cardsfolder/o/orphans_of_the_wheat.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/osseous_sticktwister.txt b/forge-gui/res/cardsfolder/o/osseous_sticktwister.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/osseous_sticktwister.txt
rename to forge-gui/res/cardsfolder/o/osseous_sticktwister.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/overgrown_zealot.txt b/forge-gui/res/cardsfolder/o/overgrown_zealot.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/overgrown_zealot.txt
rename to forge-gui/res/cardsfolder/o/overgrown_zealot.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/overlord_of_the_balemurk.txt b/forge-gui/res/cardsfolder/o/overlord_of_the_balemurk.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/overlord_of_the_balemurk.txt
rename to forge-gui/res/cardsfolder/o/overlord_of_the_balemurk.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/overlord_of_the_boilerbilges.txt b/forge-gui/res/cardsfolder/o/overlord_of_the_boilerbilges.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/overlord_of_the_boilerbilges.txt
rename to forge-gui/res/cardsfolder/o/overlord_of_the_boilerbilges.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/overlord_of_the_floodpits.txt b/forge-gui/res/cardsfolder/o/overlord_of_the_floodpits.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/overlord_of_the_floodpits.txt
rename to forge-gui/res/cardsfolder/o/overlord_of_the_floodpits.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/overlord_of_the_hauntwoods.txt b/forge-gui/res/cardsfolder/o/overlord_of_the_hauntwoods.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/overlord_of_the_hauntwoods.txt
rename to forge-gui/res/cardsfolder/o/overlord_of_the_hauntwoods.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/overlord_of_the_mistmoors.txt b/forge-gui/res/cardsfolder/o/overlord_of_the_mistmoors.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/overlord_of_the_mistmoors.txt
rename to forge-gui/res/cardsfolder/o/overlord_of_the_mistmoors.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/painters_studio_defaced_gallery.txt b/forge-gui/res/cardsfolder/p/painters_studio_defaced_gallery.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/painters_studio_defaced_gallery.txt
rename to forge-gui/res/cardsfolder/p/painters_studio_defaced_gallery.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/paranormal_analyst.txt b/forge-gui/res/cardsfolder/p/paranormal_analyst.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/paranormal_analyst.txt
rename to forge-gui/res/cardsfolder/p/paranormal_analyst.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/patched_plaything.txt b/forge-gui/res/cardsfolder/p/patched_plaything.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/patched_plaything.txt
rename to forge-gui/res/cardsfolder/p/patched_plaything.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/patchwork_beastie.txt b/forge-gui/res/cardsfolder/p/patchwork_beastie.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/patchwork_beastie.txt
rename to forge-gui/res/cardsfolder/p/patchwork_beastie.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/peculiar_lighthouse.txt b/forge-gui/res/cardsfolder/p/peculiar_lighthouse.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/peculiar_lighthouse.txt
rename to forge-gui/res/cardsfolder/p/peculiar_lighthouse.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/peer_past_the_veil.txt b/forge-gui/res/cardsfolder/p/peer_past_the_veil.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/peer_past_the_veil.txt
rename to forge-gui/res/cardsfolder/p/peer_past_the_veil.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/persistent_constrictor.txt b/forge-gui/res/cardsfolder/p/persistent_constrictor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/persistent_constrictor.txt
rename to forge-gui/res/cardsfolder/p/persistent_constrictor.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/phenomenon_investigators.txt b/forge-gui/res/cardsfolder/p/phenomenon_investigators.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/phenomenon_investigators.txt
rename to forge-gui/res/cardsfolder/p/phenomenon_investigators.txt
diff --git a/forge-gui/res/cardsfolder/p/phyrexian_missionary.txt b/forge-gui/res/cardsfolder/p/phyrexian_missionary.txt
index f4693119779..d82111a6661 100644
--- a/forge-gui/res/cardsfolder/p/phyrexian_missionary.txt
+++ b/forge-gui/res/cardsfolder/p/phyrexian_missionary.txt
@@ -4,7 +4,7 @@ Types:Creature Phyrexian Human Cleric
PT:2/3
K:Kicker:1 B
K:Lifelink
-T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self+kicked | OptionalDecider$ You | Execute$ TrigChangeZone | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters, if it was kicked, you may return target creature card from your graveyard to your hand.
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self+kicked | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters, if it was kicked, return target creature card from your graveyard to your hand.
SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Creature.YouCtrl
DeckHas:Ability$Graveyard
DeckHints:Color$Black
diff --git a/forge-gui/res/cardsfolder/upcoming/piggy_bank.txt b/forge-gui/res/cardsfolder/p/piggy_bank.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/piggy_bank.txt
rename to forge-gui/res/cardsfolder/p/piggy_bank.txt
diff --git a/forge-gui/res/cardsfolder/p/pious_evangel_wayward_disciple.txt b/forge-gui/res/cardsfolder/p/pious_evangel_wayward_disciple.txt
index 5357abe9102..0f2227cc1c6 100644
--- a/forge-gui/res/cardsfolder/p/pious_evangel_wayward_disciple.txt
+++ b/forge-gui/res/cardsfolder/p/pious_evangel_wayward_disciple.txt
@@ -2,7 +2,7 @@ Name:Pious Evangel
ManaCost:2 W
Types:Creature Human Cleric
PT:2/2
-T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigGainLife | ValidCard$ Card.Self,Creature.Other+YouCtrl | TriggerDescription$ Whenever CARDNAME or another creature you control enters, you gain 1 life.
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | Execute$ TrigGainLife | ValidCard$ Card.Self,Creature.Other+YouCtrl | TriggerDescription$ Whenever CARDNAME or another creature you control enters, you gain 1 life.
SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1
A:AB$ SetState | Cost$ 2 T Sac<1/Permanent.Other/another permanent> | Defined$ Self | Mode$ Transform | SpellDescription$ Transform CARDNAME.
AlternateMode:DoubleFaced
diff --git a/forge-gui/res/cardsfolder/upcoming/piranha_fly.txt b/forge-gui/res/cardsfolder/p/piranha_fly.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/piranha_fly.txt
rename to forge-gui/res/cardsfolder/p/piranha_fly.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/polluted_cistern_dim_oubliette.txt b/forge-gui/res/cardsfolder/p/polluted_cistern_dim_oubliette.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/polluted_cistern_dim_oubliette.txt
rename to forge-gui/res/cardsfolder/p/polluted_cistern_dim_oubliette.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/popular_egotist.txt b/forge-gui/res/cardsfolder/p/popular_egotist.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/popular_egotist.txt
rename to forge-gui/res/cardsfolder/p/popular_egotist.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/possessed_goat.txt b/forge-gui/res/cardsfolder/p/possessed_goat.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/possessed_goat.txt
rename to forge-gui/res/cardsfolder/p/possessed_goat.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/prideful_parent.txt b/forge-gui/res/cardsfolder/p/prideful_parent.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/prideful_parent.txt
rename to forge-gui/res/cardsfolder/p/prideful_parent.txt
diff --git a/forge-gui/res/cardsfolder/q/quartzwood_crasher.txt b/forge-gui/res/cardsfolder/q/quartzwood_crasher.txt
index 0f8b77f3ad3..be0f574fb8c 100644
--- a/forge-gui/res/cardsfolder/q/quartzwood_crasher.txt
+++ b/forge-gui/res/cardsfolder/q/quartzwood_crasher.txt
@@ -4,7 +4,7 @@ Types:Creature Dinosaur Beast
PT:6/6
K:Trample
T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Creature.YouCtrl+withTrample | TriggerZones$ Battlefield | ValidTarget$ Player | Execute$ DBToken | TriggerDescription$ Whenever one or more creatures you control with trample deal combat damage to a player, create an X/X green Dinosaur Beast creature token with trample, where X is the amount of damage those creatures dealt to that player.
-SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenOwner$ You | TokenScript$ g_x_x_dinosaur_beast_trample | TokenPower$ X | TokenToughness$ X | TokenOwner$ You
+SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_x_x_dinosaur_beast_trample | TokenPower$ X | TokenToughness$ X | TokenOwner$ You
SVar:X:TriggerCount$DamageAmount
DeckHas:Ability$Token
Oracle:Trample\nWhenever one or more creatures you control with trample deal combat damage to a player, create an X/X green Dinosaur Beast creature token with trample, where X is the amount of damage those creatures dealt to that player.
diff --git a/forge-gui/res/cardsfolder/q/quest_for_the_gravelord.txt b/forge-gui/res/cardsfolder/q/quest_for_the_gravelord.txt
index 889096c2e6d..27d51f647d0 100644
--- a/forge-gui/res/cardsfolder/q/quest_for_the_gravelord.txt
+++ b/forge-gui/res/cardsfolder/q/quest_for_the_gravelord.txt
@@ -1,7 +1,7 @@
Name:Quest for the Gravelord
ManaCost:B
Types:Enchantment
-A:AB$ Token | Cost$ SubCounter<3/QUEST> Sac<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ b_5_5_zombie_giant | TokenOwner$ You | TokenAmount$ 1 | SpellDescription$ Create a 5/5 black Zombie Giant creature token.
+A:AB$ Token | Cost$ SubCounter<3/QUEST> Sac<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ b_5_5_zombie_giant | TokenOwner$ You | SpellDescription$ Create a 5/5 black Zombie Giant creature token.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature dies, you may put a quest counter on CARDNAME.
SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ QUEST | CounterNum$ 1
SVar:MaxQuestEffect:3
diff --git a/forge-gui/res/cardsfolder/upcoming/ragged_playmate.txt b/forge-gui/res/cardsfolder/r/ragged_playmate.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/ragged_playmate.txt
rename to forge-gui/res/cardsfolder/r/ragged_playmate.txt
diff --git a/forge-gui/res/cardsfolder/r/rags_riches.txt b/forge-gui/res/cardsfolder/r/rags_riches.txt
index 26d9674cab5..24418f58cc3 100644
--- a/forge-gui/res/cardsfolder/r/rags_riches.txt
+++ b/forge-gui/res/cardsfolder/r/rags_riches.txt
@@ -11,7 +11,7 @@ Name:Riches
ManaCost:5 U U
Types:Sorcery
K:Aftermath
-A:SP$ ChooseCard | Defined$ Opponent | Mandatory$ True | Amount$ 1 | Choices$ Creature | ControlledByPlayer$ Chooser | ChoiceTitle$ Choose a creature to be stolen | AILogic$ WorstCard | Mandatory$ True | SubAbility$ StealChosen | SpellDescription$ Each opponent chooses a creature they control. You gain control of those creatures.
+A:SP$ ChooseCard | Defined$ Opponent | Amount$ 1 | Choices$ Creature | ControlledByPlayer$ Chooser | ChoiceTitle$ Choose a creature to be stolen | AILogic$ WorstCard | Mandatory$ True | SubAbility$ StealChosen | SpellDescription$ Each opponent chooses a creature they control. You gain control of those creatures.
SVar:StealChosen:DB$ GainControl | AllValid$ Permanent.ChosenCard
SVar:NeedsToPlay:Creature.OppCtrl
Oracle:Aftermath (Cast this spell only from your graveyard. Then exile it.)\nEach opponent chooses a creature they control. You gain control of those creatures.
diff --git a/forge-gui/res/cardsfolder/r/ral_and_the_implicit_maze.txt b/forge-gui/res/cardsfolder/r/ral_and_the_implicit_maze.txt
index ff178e89f71..f4e50e5c35c 100644
--- a/forge-gui/res/cardsfolder/r/ral_and_the_implicit_maze.txt
+++ b/forge-gui/res/cardsfolder/r/ral_and_the_implicit_maze.txt
@@ -3,7 +3,7 @@ ManaCost:3 R R
Types:Enchantment Saga
K:Chapter:3:DBDamageAll,DBImpulseDraw,DBToken
SVar:DBDamageAll:DB$ DamageAll | ValidCards$ Creature.OppCtrl,Planeswalker.OppCtrl | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to each creature and planeswalker your opponents control.
-SVar:DBImpulseDraw:AB$ Dig | Cost$ Discard<1/Card> | Defined$ You | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | SubAbility$ DBEffect | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ You may discard a card. If you do, exile the top two cards of your library. You may play them until the end of your next turn.
+SVar:DBImpulseDraw:AB$ Dig | Cost$ Discard<1/Card> | Defined$ You | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ You may discard a card. If you do, exile the top two cards of your library. You may play them until the end of your next turn.
SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SubAbility$ DBCleanup | ForgetOnMoved$ Exile | Duration$ UntilTheEndOfYourNextTurn
SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play them until the end of your next turn.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
diff --git a/forge-gui/res/cardsfolder/upcoming/rampaging_soulrager.txt b/forge-gui/res/cardsfolder/r/rampaging_soulrager.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/rampaging_soulrager.txt
rename to forge-gui/res/cardsfolder/r/rampaging_soulrager.txt
diff --git a/forge-gui/res/cardsfolder/r/rampaging_yao_guai.txt b/forge-gui/res/cardsfolder/r/rampaging_yao_guai.txt
index 729297c6853..26eacdf17a3 100644
--- a/forge-gui/res/cardsfolder/r/rampaging_yao_guai.txt
+++ b/forge-gui/res/cardsfolder/r/rampaging_yao_guai.txt
@@ -7,7 +7,7 @@ K:Trample
K:etbCounter:P1P1:X
SVar:X:Count$xPaid
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME enters, destroy any number of target artifacts and/or enchantments with total mana value X or less.
-SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select any number of target artifacts and/or enchantments with total mana value X | TargetMin$ 0 | TargetMax$ Y | MaxTotalTargetCMC$ X | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select up to X target creature cards with total mana value X or less
+SVar:TrigDestroy:DB$ Destroy | TargetMin$ 0 | TargetMax$ Y | MaxTotalTargetCMC$ X | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select up to X target creature cards with total mana value X or less
SVar:Y:Count$Valid Enchantment,Artifact
DeckHas:Ability$Counters
Oracle:Vigilance, trample\nRampaging Yao Guai enters with X +1/+1 counters on it.\nWhen Rampaging Yao Guai enters, destroy any number of target artifacts and/or enchantments with total mana value X or less.
diff --git a/forge-gui/res/cardsfolder/upcoming/raucous_carnival.txt b/forge-gui/res/cardsfolder/r/raucous_carnival.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/raucous_carnival.txt
rename to forge-gui/res/cardsfolder/r/raucous_carnival.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/razorkin_hordecaller.txt b/forge-gui/res/cardsfolder/r/razorkin_hordecaller.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/razorkin_hordecaller.txt
rename to forge-gui/res/cardsfolder/r/razorkin_hordecaller.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/razorkin_needlehead.txt b/forge-gui/res/cardsfolder/r/razorkin_needlehead.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/razorkin_needlehead.txt
rename to forge-gui/res/cardsfolder/r/razorkin_needlehead.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/razortrap_gorge.txt b/forge-gui/res/cardsfolder/r/razortrap_gorge.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/razortrap_gorge.txt
rename to forge-gui/res/cardsfolder/r/razortrap_gorge.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/reality_is_mine_to_control.txt b/forge-gui/res/cardsfolder/r/reality_is_mine_to_control.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/reality_is_mine_to_control.txt
rename to forge-gui/res/cardsfolder/r/reality_is_mine_to_control.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/redress_fate.txt b/forge-gui/res/cardsfolder/r/redress_fate.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/redress_fate.txt
rename to forge-gui/res/cardsfolder/r/redress_fate.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/reluctant_role_model.txt b/forge-gui/res/cardsfolder/r/reluctant_role_model.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/reluctant_role_model.txt
rename to forge-gui/res/cardsfolder/r/reluctant_role_model.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/rendmaw_creaking_nest.txt b/forge-gui/res/cardsfolder/r/rendmaw_creaking_nest.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/rendmaw_creaking_nest.txt
rename to forge-gui/res/cardsfolder/r/rendmaw_creaking_nest.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/restricted_office_lecture_hall.txt b/forge-gui/res/cardsfolder/r/restricted_office_lecture_hall.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/restricted_office_lecture_hall.txt
rename to forge-gui/res/cardsfolder/r/restricted_office_lecture_hall.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/resurrected_cultist.txt b/forge-gui/res/cardsfolder/r/resurrected_cultist.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/resurrected_cultist.txt
rename to forge-gui/res/cardsfolder/r/resurrected_cultist.txt
diff --git a/forge-gui/res/cardsfolder/r/revival_experiment.txt b/forge-gui/res/cardsfolder/r/revival_experiment.txt
index c598759eab6..243a6666deb 100644
--- a/forge-gui/res/cardsfolder/r/revival_experiment.txt
+++ b/forge-gui/res/cardsfolder/r/revival_experiment.txt
@@ -3,7 +3,7 @@ ManaCost:4 B G
Types:Sorcery
A:SP$ ChooseCard | Defined$ You | Choices$ Card.Permanent+YouOwn | ChoiceZone$ Graveyard | ChooseEach$ Artifact & Battle & Creature & Enchantment & Land & Planeswalker | ControlledByPlayer$ Chooser | MinAmount$ 0 | Amount$ 1 | Reveal$ True | RememberChosen$ True | SubAbility$ DBReturn | StackDescription$ REP return_{p:You} returns & from your_from their & You lose_{p:You} loses & Exile_{p:You} exiles | SpellDescription$ For each permanent type, return up to one card of that type from your graveyard to the battlefield. You lose 3 life for each card returned this way. Exile CARDNAME.
SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ Remembered | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBLoseLife | StackDescription$ None
-SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | SubAbility$ DBChange | SubAbility$ DBExile | StackDescription$ None
+SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | SubAbility$ DBExile | StackDescription$ None
SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | SubAbility$ DBCleanup | StackDescription$ None
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearChosenCard$ True
SVar:X:Remembered$Amount/Times.3
diff --git a/forge-gui/res/cardsfolder/upcoming/rip_spawn_hunter.txt b/forge-gui/res/cardsfolder/r/rip_spawn_hunter.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/rip_spawn_hunter.txt
rename to forge-gui/res/cardsfolder/r/rip_spawn_hunter.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/ripchain_razorkin.txt b/forge-gui/res/cardsfolder/r/ripchain_razorkin.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/ripchain_razorkin.txt
rename to forge-gui/res/cardsfolder/r/ripchain_razorkin.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/rite_of_the_moth.txt b/forge-gui/res/cardsfolder/r/rite_of_the_moth.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/rite_of_the_moth.txt
rename to forge-gui/res/cardsfolder/r/rite_of_the_moth.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/roaring_furnace_steaming_sauna.txt b/forge-gui/res/cardsfolder/r/roaring_furnace_steaming_sauna.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/roaring_furnace_steaming_sauna.txt
rename to forge-gui/res/cardsfolder/r/roaring_furnace_steaming_sauna.txt
diff --git a/forge-gui/res/cardsfolder/r/rona_herald_of_invasion_rona_tolarian_obliterator.txt b/forge-gui/res/cardsfolder/r/rona_herald_of_invasion_rona_tolarian_obliterator.txt
index 4be743354de..b8afcb07b0f 100644
--- a/forge-gui/res/cardsfolder/r/rona_herald_of_invasion_rona_tolarian_obliterator.txt
+++ b/forge-gui/res/cardsfolder/r/rona_herald_of_invasion_rona_tolarian_obliterator.txt
@@ -21,7 +21,7 @@ Types:Legendary Creature Phyrexian Wizard
PT:5/5
K:Trample
T:Mode$ DamageDone | ValidTarget$ Card.Self | Execute$ TrigExile | TriggerDescription$ Whenever a source deals damage to CARDNAME, that source's controller exiles a card from their hand at random. If it's a land card, you may put it onto the battlefield under your control. Otherwise, you may cast it without paying its mana cost.
-SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ChangeType$ Card | DefinedPlayer$ TriggeredSourceController | Mandatory$ True | ChangeType$ Card | Hidden$ True | AtRandom$ True | RememberChanged$ True | SubAbility$ DBRonaLand
+SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TriggeredSourceController | Mandatory$ True | ChangeType$ Card | Hidden$ True | AtRandom$ True | RememberChanged$ True | SubAbility$ DBRonaLand
SVar:DBRonaLand:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | ChangeType$ Land.IsRemembered | Hidden$ True | Optional$ True | GainControl$ True | SubAbility$ DBRonaPlay
SVar:DBRonaPlay:DB$ Play | ValidZone$ Exile | Controller$ You | Valid$ Card.IsRemembered | ValidSA$ Spell | WithoutManaCost$ True | Optional$ True | SubAbility$ DBRonaCleanup
SVar:DBRonaCleanup:DB$ Cleanup | ClearRemembered$ True
diff --git a/forge-gui/res/cardsfolder/upcoming/rootwise_survivor.txt b/forge-gui/res/cardsfolder/r/rootwise_survivor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/rootwise_survivor.txt
rename to forge-gui/res/cardsfolder/r/rootwise_survivor.txt
diff --git a/forge-gui/res/cardsfolder/r/rose_room_treasurer.txt b/forge-gui/res/cardsfolder/r/rose_room_treasurer.txt
index 268201472a9..27fee03f341 100644
--- a/forge-gui/res/cardsfolder/r/rose_room_treasurer.txt
+++ b/forge-gui/res/cardsfolder/r/rose_room_treasurer.txt
@@ -4,7 +4,7 @@ Types:Creature Ogre Warrior
PT:4/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl+Other | TriggerZones$ Battlefield | Execute$ TrigTreasure | TriggerDescription$ Alliance — Whenever another creature you control enters, create a Treasure token if this is the first or second time this ability has resolved this turn. Otherwise, you may pay {X}. When you do, CARDNAME deals X damage to any target.
SVar:TrigTreasure:DB$ Token | TokenScript$ c_a_treasure_sac | SubAbility$ DBChooseX | ConditionCheckSVar$ Resolved | ConditionSVarCompare$ LE2
-SVar:DBChooseX:DB$ ChooseNumber | ChooseAnyNumber$ True | ListTitle$ amount of mana to pay | SubAbility$ DBStore | ConditionCheckSVar$ Resolved | ConditionSVarCompare$ GT2 | SubAbility$ DBImmediateTrig
+SVar:DBChooseX:DB$ ChooseNumber | ChooseAnyNumber$ True | ListTitle$ amount of mana to pay | ConditionCheckSVar$ Resolved | ConditionSVarCompare$ GT2 | SubAbility$ DBImmediateTrig
SVar:DBImmediateTrig:DB$ ImmediateTrigger | UnlessCost$ X | UnlessPayer$ You | UnlessSwitched$ True | ConditionCheckSVar$ Resolved | ConditionSVarCompare$ GT2 | Execute$ TrigDamage | RememberSVarAmount$ X | TriggerDescription$ When you do, CARDNAME deals X damage to any target.
SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Any | NumDmg$ Y
SVar:Resolved:Count$ResolvedThisTurn
diff --git a/forge-gui/res/cardsfolder/upcoming/rot_like_the_scum_you_are.txt b/forge-gui/res/cardsfolder/r/rot_like_the_scum_you_are.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/rot_like_the_scum_you_are.txt
rename to forge-gui/res/cardsfolder/r/rot_like_the_scum_you_are.txt
diff --git a/forge-gui/res/cardsfolder/r/rousing_refrain.txt b/forge-gui/res/cardsfolder/r/rousing_refrain.txt
index df86d009684..d79dc59228f 100644
--- a/forge-gui/res/cardsfolder/r/rousing_refrain.txt
+++ b/forge-gui/res/cardsfolder/r/rousing_refrain.txt
@@ -2,7 +2,7 @@ Name:Rousing Refrain
ManaCost:3 R R
Types:Sorcery
K:Suspend:3:1 R
-A:SP$ Mana | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | SubAbility$ DBMana | AILogic$ ManaRitual | Produced$ R | Amount$ Z | PersistentMana$ True | Defined$ You | SubAbility$ DBChange | StackDescription$ SpellDescription | SpellDescription$ Until end of turn, you don't lose this mana as steps and phases end.
+A:SP$ Mana | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | AILogic$ ManaRitual | Produced$ R | Amount$ Z | PersistentMana$ True | Defined$ You | SubAbility$ DBChange | StackDescription$ SpellDescription | SpellDescription$ Add {R} for each card in target opponent's hand. Until end of turn, you don't lose this mana as steps and phases end.
SVar:Z:TargetedPlayer$CardsInHand
SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile | WithCountersType$ TIME | WithCountersAmount$ 3 | SpellDescription$ Exile CARDNAME with three time counters on it.
Oracle:Add {R} for each card in target opponent's hand. Until end of turn, you don't lose this mana as steps and phases end. Exile Rousing Refrain with three time counters on it.\nSuspend 3—{1}{R} (Rather than cast this card from your hand, you may pay {1}{R} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)
diff --git a/forge-gui/res/cardsfolder/upcoming/running_is_useless.txt b/forge-gui/res/cardsfolder/r/running_is_useless.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/running_is_useless.txt
rename to forge-gui/res/cardsfolder/r/running_is_useless.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/sadistic_shell_game.txt b/forge-gui/res/cardsfolder/s/sadistic_shell_game.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/sadistic_shell_game.txt
rename to forge-gui/res/cardsfolder/s/sadistic_shell_game.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/savior_of_the_small.txt b/forge-gui/res/cardsfolder/s/savior_of_the_small.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/savior_of_the_small.txt
rename to forge-gui/res/cardsfolder/s/savior_of_the_small.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/saw.txt b/forge-gui/res/cardsfolder/s/saw.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/saw.txt
rename to forge-gui/res/cardsfolder/s/saw.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/sawblade_skinripper.txt b/forge-gui/res/cardsfolder/s/sawblade_skinripper.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/sawblade_skinripper.txt
rename to forge-gui/res/cardsfolder/s/sawblade_skinripper.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/say_its_name.txt b/forge-gui/res/cardsfolder/s/say_its_name.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/say_its_name.txt
rename to forge-gui/res/cardsfolder/s/say_its_name.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/scrabbling_skullcrab.txt b/forge-gui/res/cardsfolder/s/scrabbling_skullcrab.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/scrabbling_skullcrab.txt
rename to forge-gui/res/cardsfolder/s/scrabbling_skullcrab.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/screaming_nemesis.txt b/forge-gui/res/cardsfolder/s/screaming_nemesis.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/screaming_nemesis.txt
rename to forge-gui/res/cardsfolder/s/screaming_nemesis.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/seance_board.txt b/forge-gui/res/cardsfolder/s/seance_board.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/seance_board.txt
rename to forge-gui/res/cardsfolder/s/seance_board.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/secret_arcade_dusty_parlor.txt b/forge-gui/res/cardsfolder/s/secret_arcade_dusty_parlor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/secret_arcade_dusty_parlor.txt
rename to forge-gui/res/cardsfolder/s/secret_arcade_dusty_parlor.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/seized_from_slumber.txt b/forge-gui/res/cardsfolder/s/seized_from_slumber.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/seized_from_slumber.txt
rename to forge-gui/res/cardsfolder/s/seized_from_slumber.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/shardmages_rescue.txt b/forge-gui/res/cardsfolder/s/shardmages_rescue.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/shardmages_rescue.txt
rename to forge-gui/res/cardsfolder/s/shardmages_rescue.txt
diff --git a/forge-gui/res/cardsfolder/s/shark_typhoon.txt b/forge-gui/res/cardsfolder/s/shark_typhoon.txt
index 891102c9f36..a46bd07af5f 100644
--- a/forge-gui/res/cardsfolder/s/shark_typhoon.txt
+++ b/forge-gui/res/cardsfolder/s/shark_typhoon.txt
@@ -2,11 +2,11 @@ Name:Shark Typhoon
ManaCost:5 U
Types:Enchantment
T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a noncreature spell, create an X/X blue Shark creature token with flying, where X is that spell's mana value.
-SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_shark_flying | TokenOwner$ You | TokenPower$ Y | TokenToughness$ Y | TokenAmount$ 1
+SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_shark_flying | TokenOwner$ You | TokenPower$ Y | TokenToughness$ Y
SVar:Y:TriggeredStackInstance$CardManaCostLKI
K:Cycling:X 1 U
T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigToken2 | TriggerDescription$ When you cycle CARDNAME, create an X/X blue Shark creature token with flying.
-SVar:TrigToken2:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_shark_flying | TokenOwner$ You | TokenPower$ X | TokenToughness$ X | TokenAmount$ 1
+SVar:TrigToken2:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_shark_flying | TokenOwner$ You | TokenPower$ X | TokenToughness$ X
SVar:X:Count$xPaid
DeckHas:Ability$Token
Oracle:Whenever you cast a noncreature spell, create an X/X blue Shark creature token with flying, where X is that spell's mana value.\nCycling {X}{1}{U} ({X}{1}{U}, Discard this card: Draw a card.)\nWhen you cycle Shark Typhoon, create an X/X blue Shark creature token with flying.
diff --git a/forge-gui/res/cardsfolder/upcoming/sheltered_by_ghosts.txt b/forge-gui/res/cardsfolder/s/sheltered_by_ghosts.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/sheltered_by_ghosts.txt
rename to forge-gui/res/cardsfolder/s/sheltered_by_ghosts.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/shepherding spirits.txt b/forge-gui/res/cardsfolder/s/shepherding_spirits.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/shepherding spirits.txt
rename to forge-gui/res/cardsfolder/s/shepherding_spirits.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/shrewd_storyteller.txt b/forge-gui/res/cardsfolder/s/shrewd_storyteller.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/shrewd_storyteller.txt
rename to forge-gui/res/cardsfolder/s/shrewd_storyteller.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/shriekwood_devourer.txt b/forge-gui/res/cardsfolder/s/shriekwood_devourer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/shriekwood_devourer.txt
rename to forge-gui/res/cardsfolder/s/shriekwood_devourer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/shroudstomper.txt b/forge-gui/res/cardsfolder/s/shroudstomper.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/shroudstomper.txt
rename to forge-gui/res/cardsfolder/s/shroudstomper.txt
diff --git a/forge-gui/res/cardsfolder/s/sibilant_spirit.txt b/forge-gui/res/cardsfolder/s/sibilant_spirit.txt
index e372b84e09d..655bf6051f7 100644
--- a/forge-gui/res/cardsfolder/s/sibilant_spirit.txt
+++ b/forge-gui/res/cardsfolder/s/sibilant_spirit.txt
@@ -3,6 +3,6 @@ ManaCost:5 U
Types:Creature Spirit
PT:5/6
K:Flying
-T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDraw | OptionalDecider$ Opponent | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME attacks, defending player may draw a card.
-SVar:TrigDraw:DB$ Draw | Defined$ TriggeredDefendingPlayer | NumCards$ 1
+T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME attacks, defending player may draw a card.
+SVar:TrigDraw:DB$ Draw | Defined$ TriggeredDefendingPlayer | NumCards$ 1 | OptionalDecider$ True
Oracle:Flying\nWhenever Sibilant Spirit attacks, defending player may draw a card.
diff --git a/forge-gui/res/cardsfolder/upcoming/silent_hallcreeper.txt b/forge-gui/res/cardsfolder/s/silent_hallcreeper.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/silent_hallcreeper.txt
rename to forge-gui/res/cardsfolder/s/silent_hallcreeper.txt
diff --git a/forge-gui/res/cardsfolder/s/skeleton_ship.txt b/forge-gui/res/cardsfolder/s/skeleton_ship.txt
index 1b35c112f21..ceb118f9d8b 100644
--- a/forge-gui/res/cardsfolder/s/skeleton_ship.txt
+++ b/forge-gui/res/cardsfolder/s/skeleton_ship.txt
@@ -4,6 +4,6 @@ Types:Legendary Creature Skeleton
PT:0/3
T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Island.YouCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When you control no Islands, sacrifice CARDNAME.
SVar:TrigSac:DB$ Sacrifice
-A:AB$ PutCounter | Cost$ T | IsCurse$ True | ValidTgts$ Creature | TgtPrompt$ Select target Creature | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True | SpellDescription$ Put a -1/-1 counter on target creature.
+A:AB$ PutCounter | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target Creature | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True | SpellDescription$ Put a -1/-1 counter on target creature.
SVar:NeedsToPlay:Island.YouCtrl
Oracle:When you control no Islands, sacrifice Skeleton Ship.\n{T}: Put a -1/-1 counter on target creature.
diff --git a/forge-gui/res/cardsfolder/s/skullcap_snail.txt b/forge-gui/res/cardsfolder/s/skullcap_snail.txt
index 85ba74048eb..ea0542706cc 100644
--- a/forge-gui/res/cardsfolder/s/skullcap_snail.txt
+++ b/forge-gui/res/cardsfolder/s/skullcap_snail.txt
@@ -3,5 +3,5 @@ ManaCost:1 B
Types:Creature Fungus Snail
PT:1/1
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters, target opponent exiles a card from their hand.
-SVar:TrigExile:DB$ ChangeZone | Chooser$ Targeted | Origin$ Hand | Destination$ Exile | ChangeType$ Card | ValidTgts$ Opponent | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | Hidden$ True | IsCurse$ True
+SVar:TrigExile:DB$ ChangeZone | Chooser$ Targeted | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | Hidden$ True | IsCurse$ True
Oracle:When Skullcap Snail enters, target opponent exiles a card from their hand.
diff --git a/forge-gui/res/cardsfolder/upcoming/skullsnap_nuisance.txt b/forge-gui/res/cardsfolder/s/skullsnap_nuisance.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/skullsnap_nuisance.txt
rename to forge-gui/res/cardsfolder/s/skullsnap_nuisance.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/slavering_branchsnapper.txt b/forge-gui/res/cardsfolder/s/slavering_branchsnapper.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/slavering_branchsnapper.txt
rename to forge-gui/res/cardsfolder/s/slavering_branchsnapper.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/smoky_lounge_misty_salon.txt b/forge-gui/res/cardsfolder/s/smoky_lounge_misty_salon.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/smoky_lounge_misty_salon.txt
rename to forge-gui/res/cardsfolder/s/smoky_lounge_misty_salon.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/soaring_lightbringer.txt b/forge-gui/res/cardsfolder/s/soaring_lightbringer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/soaring_lightbringer.txt
rename to forge-gui/res/cardsfolder/s/soaring_lightbringer.txt
diff --git a/forge-gui/res/cardsfolder/s/solitary_study_endless_corridor.txt b/forge-gui/res/cardsfolder/s/solitary_study_endless_corridor.txt
new file mode 100644
index 00000000000..e84fb963a92
--- /dev/null
+++ b/forge-gui/res/cardsfolder/s/solitary_study_endless_corridor.txt
@@ -0,0 +1,17 @@
+Name:Solitary Study
+ManaCost:1 W
+Types:Enchantment Room
+AlternateMode:Split
+S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ 1 | Description$ Creatures you control get +1/+0.
+Oracle:Creatures you control get +1/+0.
+
+ALTERNATE
+
+Name:Endless Corridor
+ManaCost:1 W
+Types:Enchantment Room
+T:Mode$ UnlockDoor | ValidPlayer$ You | ValidCard$ Card.Self | Execute$ TrigConjure | TriggerDescription$ When you unlock this door, conjure a duplicate of this card into your hand. When you do, target creature you control gains first strike until end of turn.
+SVar:TrigConjure:DB$ MakeCard | Conjure$ True | DefinedName$ TriggeredCard | Zone$ Hand | SubAbility$ DBImmediateTrigger
+SVar:DBImmediateTrigger:DB$ ImmediateTrigger | Execute$ TrigFirstStrike | TriggerDescription$ When you do, target creature you control gains first strike until end of turn.
+SVar:TrigFirstStrike:DB$ Pump | ValidTgts$ Creature.YouCtrl | KW$ First Strike | TgtPrompt$ Select target creature you control | SpellDescription$ Target creature you control gains first strike until end of turn.
+Oracle:When you unlock this door, conjure a duplicate of this card into your hand. When you do, target creature you control gains first strike until end of turn.
diff --git a/forge-gui/res/cardsfolder/s/soul_guide_lantern.txt b/forge-gui/res/cardsfolder/s/soul_guide_lantern.txt
index 7f3a9806503..731515c28da 100644
--- a/forge-gui/res/cardsfolder/s/soul_guide_lantern.txt
+++ b/forge-gui/res/cardsfolder/s/soul_guide_lantern.txt
@@ -3,6 +3,6 @@ ManaCost:1
Types:Artifact
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters, exile target card from a graveyard.
SVar:TrigChange:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target card in a graveyard | ValidTgts$ Card | TgtZone$ Graveyard
-A:AB$ ChangeZoneAll | Cost$ T Sac<1/CARDNAME> | ChangeType$ Opponent | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card.OppOwn | AILogic$ Curse | SpellDescription$ Exile each opponent's graveyard.
+A:AB$ ChangeZoneAll | Cost$ T Sac<1/CARDNAME> | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card.OppOwn | AILogic$ Curse | SpellDescription$ Exile each opponent's graveyard.
A:AB$ Draw | Cost$ 1 T Sac<1/CARDNAME> | NumCards$ 1 | SpellDescription$ Draw a card.
Oracle:When Soul-Guide Lantern enters, exile target card from a graveyard.\n{T}, Sacrifice Soul-Guide Lantern: Exile each opponent's graveyard.\n{1}, {T}, Sacrifice Soul-Guide Lantern: Draw a card.
diff --git a/forge-gui/res/cardsfolder/s/spawning_bed.txt b/forge-gui/res/cardsfolder/s/spawning_bed.txt
index e8343c38bd1..0d82a6d20b4 100644
--- a/forge-gui/res/cardsfolder/s/spawning_bed.txt
+++ b/forge-gui/res/cardsfolder/s/spawning_bed.txt
@@ -2,7 +2,7 @@ Name:Spawning Bed
ManaCost:no cost
Types:Land
A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}.
-A:AB$ Token | Cost$ 6 T Sac<1/CARDNAME> | TokenOwner$ You | TokenAmount$ 3 | TokenScript$ c_1_1_eldrazi_scion_sac | TokenOwner$ You | SpellDescription$ Create three 1/1 colorless Eldrazi Scion creature tokens. They have "Sacrifice this creature: Add {C}."
+A:AB$ Token | Cost$ 6 T Sac<1/CARDNAME> | TokenOwner$ You | TokenAmount$ 3 | TokenScript$ c_1_1_eldrazi_scion_sac | SpellDescription$ Create three 1/1 colorless Eldrazi Scion creature tokens. They have "Sacrifice this creature: Add {C}."
DeckHints:Type$Eldrazi
DeckHas:Ability$Mana.Colorless|Token
Oracle:{T}: Add {C}.\n{6}, {T}, Sacrifice Spawning Bed: Create three 1/1 colorless Eldrazi Scion creature tokens. They have "Sacrifice this creature: Add {C}."
diff --git a/forge-gui/res/cardsfolder/upcoming/spectral_snatcher.txt b/forge-gui/res/cardsfolder/s/spectral_snatcher.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/spectral_snatcher.txt
rename to forge-gui/res/cardsfolder/s/spectral_snatcher.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/spiked_corridor_torture_pit.txt b/forge-gui/res/cardsfolder/s/spiked_corridor_torture_pit.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/spiked_corridor_torture_pit.txt
rename to forge-gui/res/cardsfolder/s/spiked_corridor_torture_pit.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/spineseeker_centipede.txt b/forge-gui/res/cardsfolder/s/spineseeker_centipede.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/spineseeker_centipede.txt
rename to forge-gui/res/cardsfolder/s/spineseeker_centipede.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/split_up.txt b/forge-gui/res/cardsfolder/s/split_up.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/split_up.txt
rename to forge-gui/res/cardsfolder/s/split_up.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/splitskin_doll.txt b/forge-gui/res/cardsfolder/s/splitskin_doll.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/splitskin_doll.txt
rename to forge-gui/res/cardsfolder/s/splitskin_doll.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/sporogenic_infection.txt b/forge-gui/res/cardsfolder/s/sporogenic_infection.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/sporogenic_infection.txt
rename to forge-gui/res/cardsfolder/s/sporogenic_infection.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/stalked_researcher.txt b/forge-gui/res/cardsfolder/s/stalked_researcher.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/stalked_researcher.txt
rename to forge-gui/res/cardsfolder/s/stalked_researcher.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/star_athlete.txt b/forge-gui/res/cardsfolder/s/star_athlete.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/star_athlete.txt
rename to forge-gui/res/cardsfolder/s/star_athlete.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/stay_hidden_stay_silent.txt b/forge-gui/res/cardsfolder/s/stay_hidden_stay_silent.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/stay_hidden_stay_silent.txt
rename to forge-gui/res/cardsfolder/s/stay_hidden_stay_silent.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/strangled_cemetery.txt b/forge-gui/res/cardsfolder/s/strangled_cemetery.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/strangled_cemetery.txt
rename to forge-gui/res/cardsfolder/s/strangled_cemetery.txt
diff --git a/forge-gui/res/cardsfolder/s/struggle_for_project_purity.txt b/forge-gui/res/cardsfolder/s/struggle_for_project_purity.txt
index 955934334f7..d2c89d86212 100644
--- a/forge-gui/res/cardsfolder/s/struggle_for_project_purity.txt
+++ b/forge-gui/res/cardsfolder/s/struggle_for_project_purity.txt
@@ -4,7 +4,7 @@ Types:Enchantment
K:ETBReplacement:Other:SiegeChoice
SVar:SiegeChoice:DB$ GenericChoice | Choices$ Brotherhood,Enclave | Defined$ You | SetChosenMode$ True | AILogic$ Brotherhood | ShowChoice$ ExceptSelf | SpellDescription$ As CARDNAME enters, choose Brotherhood or Enclave.
SVar:Brotherhood:DB$ Pump | SpellDescription$ Brotherhood
-SVar:Enclave:DB$ Pump | SpellDescription$ Enclare
+SVar:Enclave:DB$ Pump | SpellDescription$ Enclave
S:Mode$ Continuous | Affected$ Card.Self+ChosenModeBrotherhood | AddTrigger$ BrotherhoodTrig | Description$ • Brotherhood — At the beginning of your upkeep, each opponent draws a card. You draw a card for each card drawn this way.
S:Mode$ Continuous | Affected$ Card.Self+ChosenModeEnclave | AddTrigger$ EnclaveTrig | Description$ • Enclave — Whenever a player attacks you with one or more creatures, that player gets twice that many rad counters.
SVar:BrotherhoodTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | Secondary$ True | TriggerDescription$ Brotherhood — At the beginning of your upkeep, each opponent draws a card. You draw a card for each card drawn this way.
diff --git a/forge-gui/res/cardsfolder/upcoming/surgical_suite_hospital_room.txt b/forge-gui/res/cardsfolder/s/surgical_suite_hospital_room.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/surgical_suite_hospital_room.txt
rename to forge-gui/res/cardsfolder/s/surgical_suite_hospital_room.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/suspended_sentence.txt b/forge-gui/res/cardsfolder/s/suspended_sentence.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/suspended_sentence.txt
rename to forge-gui/res/cardsfolder/s/suspended_sentence.txt
diff --git a/forge-gui/res/cardsfolder/s/sword_of_forge_and_frontier.txt b/forge-gui/res/cardsfolder/s/sword_of_forge_and_frontier.txt
index 00e88bda6a5..8c87f56518a 100644
--- a/forge-gui/res/cardsfolder/s/sword_of_forge_and_frontier.txt
+++ b/forge-gui/res/cardsfolder/s/sword_of_forge_and_frontier.txt
@@ -5,7 +5,7 @@ K:Equip:2
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Protection from red & Protection from green | Description$ Equipped creature gets +2/+2 and has protection from red and from green.
T:Mode$ DamageDone | ValidSource$ Creature.EquippedBy | ValidTarget$ Player | CombatDamage$ True | Execute$ ExileTwo | TriggerZones$ Battlefield | TriggerDescription$ Whenever equipped creature deals combat damage to a player, exile the top two cards of your library. You may play those cards this turn. You may play an additional land this turn.
SVar:ExileTwo:DB$ Dig | Defined$ You | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect
-SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SubAbility$ DBCleanup | ForgetOnMoved$ Exile | Duration$ EndOfTurn | SubAbility$ DBEffectBis
+SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | ForgetOnMoved$ Exile | Duration$ EndOfTurn | SubAbility$ DBEffectBis
SVar:STPlay:Mode$ Continuous | MayPlay$ True | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play the exiled cards this turn.
SVar:DBEffectBis:DB$ Effect | Name$ Sword of Forge and Frontier's Effect — Exploration | StaticAbilities$ Exploration | AILogic$ Always | SubAbility$ DBCleanup
SVar:Exploration:Mode$ Continuous | Affected$ You | AdjustLandPlays$ 1 | Description$ You may play an additional land this turn.
diff --git a/forge-gui/res/cardsfolder/t/tenth_district_hero.txt b/forge-gui/res/cardsfolder/t/tenth_district_hero.txt
index 503d7fd185b..fc8d22f5872 100644
--- a/forge-gui/res/cardsfolder/t/tenth_district_hero.txt
+++ b/forge-gui/res/cardsfolder/t/tenth_district_hero.txt
@@ -3,7 +3,7 @@ ManaCost:1 W
Types:Creature Human
PT:2/3
A:AB$ Animate | Cost$ 1 W CollectEvidence<2> | Types$ Human,Detective | RemoveCreatureTypes$ True | Duration$ Permanent | Power$ 4 | Toughness$ 4 | Keywords$ Vigilance | SpellDescription$ CARDNAME becomes a Human Detective with base power and toughness 4/4 and gains vigilance.
-A:AB$ Animate | Cost$ 2 W CollectEvidence<4> | staticAbilities$ Static | ConditionPresent$ Card.Self+Detective | Types$ Legendary,Creature | Name$ Mileva, the Stalwart | Power$ 5 | Toughness$ 5 | Duration$ Permanent | RemoveCreatureTypes$ True | Duration$ Permanent | SpellDescription$ If CARDNAME is a Detective, it becomes a legendary creature named Mileva, the Stalwart, it has base power and toughness 5/5, and it gains "Other creatures you control have indestructible."
+A:AB$ Animate | Cost$ 2 W CollectEvidence<4> | staticAbilities$ Static | ConditionPresent$ Card.Self+Detective | Types$ Legendary,Creature | Name$ Mileva, the Stalwart | Power$ 5 | Toughness$ 5 | RemoveCreatureTypes$ True | Duration$ Permanent | SpellDescription$ If CARDNAME is a Detective, it becomes a legendary creature named Mileva, the Stalwart, it has base power and toughness 5/5, and it gains "Other creatures you control have indestructible."
SVar:Static:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddKeyword$ Indestructible | Description$ Other creatures you control have indestructible.
DeckHints:Ability$Graveyard|Mill|Discard|Dredge
DeckHas:Type$Detective
diff --git a/forge-gui/res/cardsfolder/t/the_infamous_cruelclaw.txt b/forge-gui/res/cardsfolder/t/the_infamous_cruelclaw.txt
index 70cacf6fd1b..911090f2f81 100644
--- a/forge-gui/res/cardsfolder/t/the_infamous_cruelclaw.txt
+++ b/forge-gui/res/cardsfolder/t/the_infamous_cruelclaw.txt
@@ -5,7 +5,7 @@ PT:3/3
K:Menace
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDigUntil | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, exile cards from the top of your library until you exile a nonland card. You may cast that card by discarding a card rather than paying its mana cost.
SVar:TrigDigUntil:DB$ DigUntil | Valid$ Card.nonLand | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | SubAbility$ DBPlay
-SVar:DBPlay:DB$ Play | Defined$ Remembered | ValidSA$ Spell | PlayCost$ Discard<1/Card> | Optional$ True | SubAbility$ DBChange | SubAbility$ DBCleanup
+SVar:DBPlay:DB$ Play | Defined$ Remembered | ValidSA$ Spell | PlayCost$ Discard<1/Card> | Optional$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:MustBeBlocked:True
Oracle:Menace\nWhenever The Infamous Cruelclaw deals combat damage to a player, exile cards from the top of your library until you exile a nonland card. You may cast that card by discarding a card rather than paying its mana cost.
diff --git a/forge-gui/res/cardsfolder/upcoming/the_jolly_balloon_man.txt b/forge-gui/res/cardsfolder/t/the_jolly_balloon_man.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/the_jolly_balloon_man.txt
rename to forge-gui/res/cardsfolder/t/the_jolly_balloon_man.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/the_lord_of_pain.txt b/forge-gui/res/cardsfolder/t/the_lord_of_pain.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/the_lord_of_pain.txt
rename to forge-gui/res/cardsfolder/t/the_lord_of_pain.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/the_master_of_keys.txt b/forge-gui/res/cardsfolder/t/the_master_of_keys.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/the_master_of_keys.txt
rename to forge-gui/res/cardsfolder/t/the_master_of_keys.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/the_mindskinner.txt b/forge-gui/res/cardsfolder/t/the_mindskinner.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/the_mindskinner.txt
rename to forge-gui/res/cardsfolder/t/the_mindskinner.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/the_rollercrusher_ride.txt b/forge-gui/res/cardsfolder/t/the_rollercrusher_ride.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/the_rollercrusher_ride.txt
rename to forge-gui/res/cardsfolder/t/the_rollercrusher_ride.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/the_swarmweaver.txt b/forge-gui/res/cardsfolder/t/the_swarmweaver.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/the_swarmweaver.txt
rename to forge-gui/res/cardsfolder/t/the_swarmweaver.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/the_tale_of_tamiyo.txt b/forge-gui/res/cardsfolder/t/the_tale_of_tamiyo.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/the_tale_of_tamiyo.txt
rename to forge-gui/res/cardsfolder/t/the_tale_of_tamiyo.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/the_wandering_rescuer.txt b/forge-gui/res/cardsfolder/t/the_wandering_rescuer.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/the_wandering_rescuer.txt
rename to forge-gui/res/cardsfolder/t/the_wandering_rescuer.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/they_came_from_the_pipes.txt b/forge-gui/res/cardsfolder/t/they_came_from_the_pipes.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/they_came_from_the_pipes.txt
rename to forge-gui/res/cardsfolder/t/they_came_from_the_pipes.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/thornspire_verge.txt b/forge-gui/res/cardsfolder/t/thornspire_verge.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/thornspire_verge.txt
rename to forge-gui/res/cardsfolder/t/thornspire_verge.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/threats_around_every_corner.txt b/forge-gui/res/cardsfolder/t/threats_around_every_corner.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/threats_around_every_corner.txt
rename to forge-gui/res/cardsfolder/t/threats_around_every_corner.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/ticket_booth_tunnel_of_hate.txt b/forge-gui/res/cardsfolder/t/ticket_booth_tunnel_of_hate.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/ticket_booth_tunnel_of_hate.txt
rename to forge-gui/res/cardsfolder/t/ticket_booth_tunnel_of_hate.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/time_bends_to_my_will.txt b/forge-gui/res/cardsfolder/t/time_bends_to_my_will.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/time_bends_to_my_will.txt
rename to forge-gui/res/cardsfolder/t/time_bends_to_my_will.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/toby_beastie_befriender.txt b/forge-gui/res/cardsfolder/t/toby_beastie_befriender.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/toby_beastie_befriender.txt
rename to forge-gui/res/cardsfolder/t/toby_beastie_befriender.txt
diff --git a/forge-gui/res/cardsfolder/t/transmogrify.txt b/forge-gui/res/cardsfolder/t/transmogrify.txt
index 07bbe4437b5..3aa21d9788e 100644
--- a/forge-gui/res/cardsfolder/t/transmogrify.txt
+++ b/forge-gui/res/cardsfolder/t/transmogrify.txt
@@ -1,6 +1,6 @@
Name:Transmogrify
ManaCost:3 R
Types:Sorcery
-A:SP$ ChangeZone | ValidTgts$ Creature | Origin$ Battlefield | Destination$ Exile | NoRegen$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBDig | SpellDescription$ Exile target creature. That creature's controller reveals cards from the top of their library until they reveal a creature card. That player puts that card onto the battlefield, then shuffles the rest into their library.
+A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Exile | NoRegen$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBDig | SpellDescription$ Exile target creature. That creature's controller reveals cards from the top of their library until they reveal a creature card. That player puts that card onto the battlefield, then shuffles the rest into their library.
SVar:DBDig:DB$ DigUntil | Defined$ TargetedController | Valid$ Creature | ValidDescription$ creature | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True
Oracle:Exile target creature. That creature's controller reveals cards from the top of their library until they reveal a creature card. That player puts that card onto the battlefield, then shuffles the rest into their library.
diff --git a/forge-gui/res/cardsfolder/upcoming/trapped_in_the_screen.txt b/forge-gui/res/cardsfolder/t/trapped_in_the_screen.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/trapped_in_the_screen.txt
rename to forge-gui/res/cardsfolder/t/trapped_in_the_screen.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/trial_of_agony.txt b/forge-gui/res/cardsfolder/t/trial_of_agony.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/trial_of_agony.txt
rename to forge-gui/res/cardsfolder/t/trial_of_agony.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/tunnel_surveyor.txt b/forge-gui/res/cardsfolder/t/tunnel_surveyor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/tunnel_surveyor.txt
rename to forge-gui/res/cardsfolder/t/tunnel_surveyor.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/turn_inside_out.txt b/forge-gui/res/cardsfolder/t/turn_inside_out.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/turn_inside_out.txt
rename to forge-gui/res/cardsfolder/t/turn_inside_out.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/twist_reality.txt b/forge-gui/res/cardsfolder/t/twist_reality.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/twist_reality.txt
rename to forge-gui/res/cardsfolder/t/twist_reality.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/twitching_doll.txt b/forge-gui/res/cardsfolder/t/twitching_doll.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/twitching_doll.txt
rename to forge-gui/res/cardsfolder/t/twitching_doll.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/tyvar_the_pummeler.txt b/forge-gui/res/cardsfolder/t/tyvar_the_pummeler.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/tyvar_the_pummeler.txt
rename to forge-gui/res/cardsfolder/t/tyvar_the_pummeler.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/unable_to_scream.txt b/forge-gui/res/cardsfolder/u/unable_to_scream.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/unable_to_scream.txt
rename to forge-gui/res/cardsfolder/u/unable_to_scream.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/undead_sprinter.txt b/forge-gui/res/cardsfolder/u/undead_sprinter.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/undead_sprinter.txt
rename to forge-gui/res/cardsfolder/u/undead_sprinter.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/under_the_skin.txt b/forge-gui/res/cardsfolder/u/under_the_skin.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/under_the_skin.txt
rename to forge-gui/res/cardsfolder/u/under_the_skin.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/underwater_tunnel_slimy_aquarium.txt b/forge-gui/res/cardsfolder/u/underwater_tunnel_slimy_aquarium.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/underwater_tunnel_slimy_aquarium.txt
rename to forge-gui/res/cardsfolder/u/underwater_tunnel_slimy_aquarium.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/unholy_annex_ritual_chamber.txt b/forge-gui/res/cardsfolder/u/unholy_annex_ritual_chamber.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/unholy_annex_ritual_chamber.txt
rename to forge-gui/res/cardsfolder/u/unholy_annex_ritual_chamber.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/unidentified_hovership.txt b/forge-gui/res/cardsfolder/u/unidentified_hovership.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/unidentified_hovership.txt
rename to forge-gui/res/cardsfolder/u/unidentified_hovership.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/unnerving_grasp.txt b/forge-gui/res/cardsfolder/u/unnerving_grasp.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/unnerving_grasp.txt
rename to forge-gui/res/cardsfolder/u/unnerving_grasp.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/unsettling_twins.txt b/forge-gui/res/cardsfolder/u/unsettling_twins.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/unsettling_twins.txt
rename to forge-gui/res/cardsfolder/u/unsettling_twins.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/unstoppable_slasher.txt b/forge-gui/res/cardsfolder/u/unstoppable_slasher.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/unstoppable_slasher.txt
rename to forge-gui/res/cardsfolder/u/unstoppable_slasher.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/untimely_malfunction.txt b/forge-gui/res/cardsfolder/u/untimely_malfunction.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/untimely_malfunction.txt
rename to forge-gui/res/cardsfolder/u/untimely_malfunction.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/unwanted_remake.txt b/forge-gui/res/cardsfolder/u/unwanted_remake.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/unwanted_remake.txt
rename to forge-gui/res/cardsfolder/u/unwanted_remake.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/unwilling_vessel.txt b/forge-gui/res/cardsfolder/u/unwilling_vessel.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/unwilling_vessel.txt
rename to forge-gui/res/cardsfolder/u/unwilling_vessel.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/ursine_monstrosity.txt b/forge-gui/res/cardsfolder/u/ursine_monstrosity.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/ursine_monstrosity.txt
rename to forge-gui/res/cardsfolder/u/ursine_monstrosity.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/valgavoth_harrower_of_souls.txt b/forge-gui/res/cardsfolder/v/valgavoth_harrower_of_souls.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/valgavoth_harrower_of_souls.txt
rename to forge-gui/res/cardsfolder/v/valgavoth_harrower_of_souls.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/valgavoth_terror_eater.txt b/forge-gui/res/cardsfolder/v/valgavoth_terror_eater.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/valgavoth_terror_eater.txt
rename to forge-gui/res/cardsfolder/v/valgavoth_terror_eater.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/valgavoths_faithful.txt b/forge-gui/res/cardsfolder/v/valgavoths_faithful.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/valgavoths_faithful.txt
rename to forge-gui/res/cardsfolder/v/valgavoths_faithful.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/valgavoths_lair.txt b/forge-gui/res/cardsfolder/v/valgavoths_lair.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/valgavoths_lair.txt
rename to forge-gui/res/cardsfolder/v/valgavoths_lair.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/valgavoths_onslaught.txt b/forge-gui/res/cardsfolder/v/valgavoths_onslaught.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/valgavoths_onslaught.txt
rename to forge-gui/res/cardsfolder/v/valgavoths_onslaught.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/vanish_from_sight.txt b/forge-gui/res/cardsfolder/v/vanish_from_sight.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/vanish_from_sight.txt
rename to forge-gui/res/cardsfolder/v/vanish_from_sight.txt
diff --git a/forge-gui/res/cardsfolder/v/vault_87_forced_evolution.txt b/forge-gui/res/cardsfolder/v/vault_87_forced_evolution.txt
index 637f94f76f7..4c4e24a2be4 100644
--- a/forge-gui/res/cardsfolder/v/vault_87_forced_evolution.txt
+++ b/forge-gui/res/cardsfolder/v/vault_87_forced_evolution.txt
@@ -2,7 +2,7 @@ Name:Vault 87: Forced Evolution
ManaCost:3 G U
Types:Enchantment Saga
K:Chapter:3:DBSteal,DBPutCounter,DBDraw
-SVar:DBSteal:DB$ GainControl | TgtPrompt$ Choose target creature | ValidTgts$ Creature.nonMutant | TgtPrompt$ Select target non-Mutant creature | LoseControl$ LeavesPlay,LoseControl | SpellDescription$ Gain control of target non-Mutant creature for as long as you control NICKNAME.
+SVar:DBSteal:DB$ GainControl | ValidTgts$ Creature.nonMutant | TgtPrompt$ Select target non-Mutant creature | LoseControl$ LeavesPlay,LoseControl | SpellDescription$ Gain control of target non-Mutant creature for as long as you control NICKNAME.
SVar:DBPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBAnimate | SpellDescription$ Put a +1/+1 counter on target creature you control. It becomes a Mutant in addition to its other types.
SVar:DBAnimate:DB$ Animate | Defined$ Targeted | Types$ Mutant | Duration$ Permanent
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ X | SpellDescription$ Draw cards equal to the greatest power among Mutants you control.
diff --git a/forge-gui/res/cardsfolder/upcoming/vengeful_bloodwitch.txt b/forge-gui/res/cardsfolder/v/vengeful_bloodwitch.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/vengeful_bloodwitch.txt
rename to forge-gui/res/cardsfolder/v/vengeful_bloodwitch.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/vengeful_possession.txt b/forge-gui/res/cardsfolder/v/vengeful_possession.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/vengeful_possession.txt
rename to forge-gui/res/cardsfolder/v/vengeful_possession.txt
diff --git a/forge-gui/res/cardsfolder/v/verdant_succession.txt b/forge-gui/res/cardsfolder/v/verdant_succession.txt
index 79b46115d3e..b53d096ba65 100644
--- a/forge-gui/res/cardsfolder/v/verdant_succession.txt
+++ b/forge-gui/res/cardsfolder/v/verdant_succession.txt
@@ -2,6 +2,6 @@ Name:Verdant Succession
ManaCost:4 G
Types:Enchantment
T:Mode$ ChangesZone | ValidCard$ Creature.Green+nonToken | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | Execute$ TrigSearch | TriggerDescription$ Whenever a green nontoken creature dies, that creature's controller may search their library for a card with the same name as that creature, put it onto the battlefield, then shuffle.
-SVar:TrigSearch:DB$ ChangeZone | Optional$ True | DefinedPlayer$ TriggeredCardController | ChangeType$ Triggered.sameName | ChangeNum$ 1 | Origin$ Library | Destination$ Battlefield | Optional$ You | ShuffleNonMandatory$ True
+SVar:TrigSearch:DB$ ChangeZone | DefinedPlayer$ TriggeredCardController | ChangeType$ Triggered.sameName | ChangeNum$ 1 | Origin$ Library | Destination$ Battlefield | Optional$ You | ShuffleNonMandatory$ True
AI:RemoveDeck:Random
Oracle:Whenever a green nontoken creature dies, that creature's controller may search their library for a card with the same name as that creature, put it onto the battlefield, then shuffle.
diff --git a/forge-gui/res/cardsfolder/v/vessel_of_ephemera.txt b/forge-gui/res/cardsfolder/v/vessel_of_ephemera.txt
index 3ac2ef427f4..63773b615c9 100644
--- a/forge-gui/res/cardsfolder/v/vessel_of_ephemera.txt
+++ b/forge-gui/res/cardsfolder/v/vessel_of_ephemera.txt
@@ -1,6 +1,6 @@
Name:Vessel of Ephemera
ManaCost:1 W
Types:Enchantment
-A:AB$ Token | Cost$ 2 W Sac<1/CARDNAME> | TokenOwner$ You | TokenAmount$ 2 | TokenScript$ w_1_1_spirit_flying | TokenOwner$ You | SpellDescription$ Create two 1/1 white Spirit creature tokens with flying.
+A:AB$ Token | Cost$ 2 W Sac<1/CARDNAME> | TokenOwner$ You | TokenAmount$ 2 | TokenScript$ w_1_1_spirit_flying | SpellDescription$ Create two 1/1 white Spirit creature tokens with flying.
DeckHas:Ability$Token
Oracle:{2}{W}, Sacrifice Vessel of Ephemera: Create two 1/1 white Spirit creature tokens with flying.
diff --git a/forge-gui/res/cardsfolder/upcoming/veteran_survivor.txt b/forge-gui/res/cardsfolder/v/veteran_survivor.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/veteran_survivor.txt
rename to forge-gui/res/cardsfolder/v/veteran_survivor.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/vicious_clown.txt b/forge-gui/res/cardsfolder/v/vicious_clown.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/vicious_clown.txt
rename to forge-gui/res/cardsfolder/v/vicious_clown.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/victor_valgavoths_seneschal.txt b/forge-gui/res/cardsfolder/v/victor_valgavoths_seneschal.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/victor_valgavoths_seneschal.txt
rename to forge-gui/res/cardsfolder/v/victor_valgavoths_seneschal.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/vile_mutilator.txt b/forge-gui/res/cardsfolder/v/vile_mutilator.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/vile_mutilator.txt
rename to forge-gui/res/cardsfolder/v/vile_mutilator.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/violent_urge.txt b/forge-gui/res/cardsfolder/v/violent_urge.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/violent_urge.txt
rename to forge-gui/res/cardsfolder/v/violent_urge.txt
diff --git a/forge-gui/res/cardsfolder/v/vivien_natures_avenger.txt b/forge-gui/res/cardsfolder/v/vivien_natures_avenger.txt
index ac81175a2bd..31c84c7fe4d 100644
--- a/forge-gui/res/cardsfolder/v/vivien_natures_avenger.txt
+++ b/forge-gui/res/cardsfolder/v/vivien_natures_avenger.txt
@@ -3,7 +3,7 @@ ManaCost:4 G G
Types:Legendary Planeswalker Vivien
Loyalty:3
A:AB$ PutCounter | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | CounterNum$ 3 | CounterType$ P1P1 | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Put three +1/+1 counters on up to one target creature.
-A:AB$ DigUntil | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | Valid$ Card.Creature | ValidDescription$ creature | FoundDestination$ Hand | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True | FoundDestination$ Hand | SpellDescription$ Reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest on the bottom of your library in a random order.
+A:AB$ DigUntil | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | Valid$ Card.Creature | ValidDescription$ creature | FoundDestination$ Hand | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RevealRandomOrder$ True | SpellDescription$ Reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest on the bottom of your library in a random order.
A:AB$ Pump | Cost$ SubCounter<6/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +10 | NumDef$ +10 | KW$ Trample | SpellDescription$ Target creature gets +10/+10 and gains trample until end of turn.
DeckHas:Ability$Counters
Oracle:[+1]: Put three +1/+1 counters on up to one target creature.\n[-1]: Reveal cards from the top of your library until you reveal a creature card. Put that card into your hand and the rest on the bottom of your library in a random order.\n[-6]: Target creature gets +10/+10 and gains trample until end of turn.
diff --git a/forge-gui/res/cardsfolder/upcoming/walk_in_closet_forgotten_cellar.txt b/forge-gui/res/cardsfolder/w/walk_in_closet_forgotten_cellar.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/walk_in_closet_forgotten_cellar.txt
rename to forge-gui/res/cardsfolder/w/walk_in_closet_forgotten_cellar.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/waltz_of_rage.txt b/forge-gui/res/cardsfolder/w/waltz_of_rage.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/waltz_of_rage.txt
rename to forge-gui/res/cardsfolder/w/waltz_of_rage.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/wary_watchdog.txt b/forge-gui/res/cardsfolder/w/wary_watchdog.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/wary_watchdog.txt
rename to forge-gui/res/cardsfolder/w/wary_watchdog.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/wickerfolk_thresher.txt b/forge-gui/res/cardsfolder/w/wickerfolk_thresher.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/wickerfolk_thresher.txt
rename to forge-gui/res/cardsfolder/w/wickerfolk_thresher.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/wildfire_wickerfolk.txt b/forge-gui/res/cardsfolder/w/wildfire_wickerfolk.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/wildfire_wickerfolk.txt
rename to forge-gui/res/cardsfolder/w/wildfire_wickerfolk.txt
diff --git a/forge-gui/res/cardsfolder/w/winter_cynical_opportunist.txt b/forge-gui/res/cardsfolder/w/winter_cynical_opportunist.txt
new file mode 100644
index 00000000000..99abeaf440f
--- /dev/null
+++ b/forge-gui/res/cardsfolder/w/winter_cynical_opportunist.txt
@@ -0,0 +1,14 @@
+Name:Winter, Cynical Opportunist
+ManaCost:2 B G
+Types:Legendary Creature Human Warlock
+PT:2/5
+K:Deathtouch
+T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigMill | TriggerDescription$ Whenever NICKNAME attacks, mill three cards.
+SVar:TrigMill:DB$ Mill | NumCards$ 3
+T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | Delirium$ True | TriggerZones$ Battlefield | Execute$ TrigExileDelirium | TriggerDescription$ Delirium — At the beginning of your end step, you may exile any number of cards from your graveyard with four or more card types among them. If you do, put a permanent card from among them onto the battlefield with a finality counter on it.
+SVar:TrigExileDelirium:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card.YouOwn | ChangeNum$ X | RememberChanged$ True | Hidden$ True | WithTotalCardTypes$ 4 | SubAbility$ DBReturn
+SVar:DBReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | WithCountersType$ FINALITY | Hidden$ True | ChangeType$ Permanent.YouOwn+IsRemembered | ChangeNum$ 1 | SubAbility$ DBCleanup | Mandatory$ True
+SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
+SVar:X:Count$ValidGraveyard Card.YouOwn
+AI:RemoveDeck:All
+Oracle:Deathtouch\nWhenever Winter attacks, mill three cards.\nDelirium — At the beginning of your end step, you may exile any number of cards from your graveyard with four or more card types among them. If you do, put a permanent card from among them onto the battlefield with a finality counter on it.
diff --git a/forge-gui/res/cardsfolder/upcoming/winter_misanthropic_guide.txt b/forge-gui/res/cardsfolder/w/winter_misanthropic_guide.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/winter_misanthropic_guide.txt
rename to forge-gui/res/cardsfolder/w/winter_misanthropic_guide.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/winters_intervention.txt b/forge-gui/res/cardsfolder/w/winters_intervention.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/winters_intervention.txt
rename to forge-gui/res/cardsfolder/w/winters_intervention.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/withering_torment.txt b/forge-gui/res/cardsfolder/w/withering_torment.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/withering_torment.txt
rename to forge-gui/res/cardsfolder/w/withering_torment.txt
diff --git a/forge-gui/res/cardsfolder/y/yaroks_fenlurker.txt b/forge-gui/res/cardsfolder/y/yaroks_fenlurker.txt
index 398359522a9..8cf98d4cd4f 100644
--- a/forge-gui/res/cardsfolder/y/yaroks_fenlurker.txt
+++ b/forge-gui/res/cardsfolder/y/yaroks_fenlurker.txt
@@ -3,6 +3,6 @@ ManaCost:B B
Types:Creature Horror
PT:1/1
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters, each opponent exiles a card from their hand.
-SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | ChangeType$ Card | DefinedPlayer$ Player.Opponent | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | Hidden$ True | IsCurse$ True
+SVar:TrigExile:DB$ ChangeZone | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Player.Opponent | Mandatory$ True | ChangeType$ Card | ChangeNum$ 1 | Hidden$ True | IsCurse$ True
A:AB$ Pump | Cost$ 2 B | Defined$ Self | NumAtt$ +1 | NumDef$ +1 | SpellDescription$ CARDNAME gets +1/+1 until end of turn.
Oracle:When Yarok's Fenlurker enters, each opponent exiles a card from their hand.\n{2}{B}: Yarok's Fenlurker gets +1/+1 until end of turn.
diff --git a/forge-gui/res/cardsfolder/upcoming/you_are_unworthy_of_mercy.txt b/forge-gui/res/cardsfolder/y/you_are_unworthy_of_mercy.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/you_are_unworthy_of_mercy.txt
rename to forge-gui/res/cardsfolder/y/you_are_unworthy_of_mercy.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/you_cannot_hide_from_me.txt b/forge-gui/res/cardsfolder/y/you_cannot_hide_from_me.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/you_cannot_hide_from_me.txt
rename to forge-gui/res/cardsfolder/y/you_cannot_hide_from_me.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/you_exist_only_to_amuse.txt b/forge-gui/res/cardsfolder/y/you_exist_only_to_amuse.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/you_exist_only_to_amuse.txt
rename to forge-gui/res/cardsfolder/y/you_exist_only_to_amuse.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/you_live_only_because_i_will_it.txt b/forge-gui/res/cardsfolder/y/you_live_only_because_i_will_it.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/you_live_only_because_i_will_it.txt
rename to forge-gui/res/cardsfolder/y/you_live_only_because_i_will_it.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/you_will_know_true_suffering.txt b/forge-gui/res/cardsfolder/y/you_will_know_true_suffering.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/you_will_know_true_suffering.txt
rename to forge-gui/res/cardsfolder/y/you_will_know_true_suffering.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/your_mistake_is_my_triumph.txt b/forge-gui/res/cardsfolder/y/your_mistake_is_my_triumph.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/your_mistake_is_my_triumph.txt
rename to forge-gui/res/cardsfolder/y/your_mistake_is_my_triumph.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/your_nightmares_are_delicious.txt b/forge-gui/res/cardsfolder/y/your_nightmares_are_delicious.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/your_nightmares_are_delicious.txt
rename to forge-gui/res/cardsfolder/y/your_nightmares_are_delicious.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/your_own_face_mocks_you.txt b/forge-gui/res/cardsfolder/y/your_own_face_mocks_you.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/your_own_face_mocks_you.txt
rename to forge-gui/res/cardsfolder/y/your_own_face_mocks_you.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/your_plans_mean_nothing.txt b/forge-gui/res/cardsfolder/y/your_plans_mean_nothing.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/your_plans_mean_nothing.txt
rename to forge-gui/res/cardsfolder/y/your_plans_mean_nothing.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/zimone_all_questioning.txt b/forge-gui/res/cardsfolder/z/zimone_all_questioning.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/zimone_all_questioning.txt
rename to forge-gui/res/cardsfolder/z/zimone_all_questioning.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/zimone_mystery_unraveler.txt b/forge-gui/res/cardsfolder/z/zimone_mystery_unraveler.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/zimone_mystery_unraveler.txt
rename to forge-gui/res/cardsfolder/z/zimone_mystery_unraveler.txt
diff --git a/forge-gui/res/cardsfolder/upcoming/zimones_hypothesis.txt b/forge-gui/res/cardsfolder/z/zimones_hypothesis.txt
similarity index 100%
rename from forge-gui/res/cardsfolder/upcoming/zimones_hypothesis.txt
rename to forge-gui/res/cardsfolder/z/zimones_hypothesis.txt
diff --git a/forge-gui/res/editions/Alchemy Duskmourn.txt b/forge-gui/res/editions/Alchemy Duskmourn.txt
index 761fe1255ee..08cae103b59 100644
--- a/forge-gui/res/editions/Alchemy Duskmourn.txt
+++ b/forge-gui/res/editions/Alchemy Duskmourn.txt
@@ -6,4 +6,33 @@ Type=Online
ScryfallCode=YDSK
[cards]
-0 R Solitary Study // Endless Corridor @Leon Tukker
+1 M Ethrimik, Imagined Fiend @John Tedrick
+2 U Improvising Aerialist @Riccardo Federici
+3 R Mothlight Processionist @A. M. Sartor
+4 R Solitary Study // Endless Corridor @Leon Tukker
+5 U Housemeld @David Auden Nash
+6 M Lurker in the Deep @Jana Heidersdorf
+7 R Fear of Ridicule @Warren Mahy
+8 R Glimmer Hoarder @Irina Nordsol
+9 R Razor Demon @Riccardo Federici
+10 U Replicating Terror @Septian Fajrianto
+11 M Welcome the Darkness @Tiffany Turrill
+12 U Anguished Recollection @Chris Rallis
+13 R Crude Abattoir // Unsavory Kitchen @Marina Ortega Lorente
+14 U Eager Flameguide @Irina Nordsol
+15 R Chittering Illuminator @Aurore Folny
+16 U Harrowing Swarm @John Tedrick
+17 M Verdant Dread @Septian Fajrianto
+18 U Wary Zone Guard @Elizabeth Peiró
+19 R Effie, Fast Learner @Elizabeth Peiró
+20 R Enduring Friendship @Flavio Greco Paglia
+21 U Fear of Change @Maxime Minard
+22 R Gilded Ambusher @David Auden Nash
+23 U Golden Sidekick @Domenico Cava
+24 M Mangled Soulrager @Xabi Gaztelua
+25 R Mischievous Lookout @Steven Russell Black
+26 R Polterheist @Josu Hernaiz
+27 R Unnatural Summons @Jana Heidersdorf
+28 R Valiant Emberkin @Andrea Piparo
+29 U Wingbright Thief @Racrufi
+30 R Soul Shredder @Josu Hernaiz
diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt
index 8de4bbbad21..314bf0950dd 100644
--- a/forge-gui/res/editions/Secret Lair Drop Series.txt
+++ b/forge-gui/res/editions/Secret Lair Drop Series.txt
@@ -796,7 +796,7 @@ F798 M Discord, Lord of Disharmony @Narendra Bintara Adi
827 R Norin the Wary @Jarel Threat
827b R Norin the Wary @Jarel Threat
828 R Keen Duelist @Thanh Tuấn
-871 R Soul-Guide Lantern @
+871 R Soul-Guide Lantern @Tyler Walpole
872 R Yargle and Multani @Warren Mahy
873 R Dark Deal @Tyler Jacobson
874 R Archivist of Oghma @Cory Trego-Erdner
@@ -1667,6 +1667,10 @@ F1540 M Rainbow Dash @John Thacker
1809 R Varragoth, Bloodsky Sire @Domenico Cava
1810 R Twinflame @Sean Vo
1811 R Genesis Chamber @Eddie Mendoza
+1821 R Mana Geyser @Mike Burns
+1822 R Lightning Bolt @Mike Burns
+1823 R Fierce Guardianship @Mike Burns
+1824 R Delayed Blast Fireball @Mike Burns
8001 M Jace, the Mind Sculptor @Wizard of Barge
9990 R Doom Blade @Cynthia Sheppard
9991 R Massacre @Andrey Kuzinskiy
diff --git a/forge-gui/res/formats/Archived/Alchemy/2024-10-15.txt b/forge-gui/res/formats/Archived/Alchemy/2024-10-15.txt
new file mode 100644
index 00000000000..f8cfaeb614a
--- /dev/null
+++ b/forge-gui/res/formats/Archived/Alchemy/2024-10-15.txt
@@ -0,0 +1,6 @@
+[format]
+Name:Alchemy (YDSK)
+Type:Archived
+Subtype:Arena
+Effective:2024-10-15
+Sets:ANA, ANB, WOE, YWOE, LCI, YLCI, MKM, YMKM, OTJ, BIG, YOTJ, BLB, YBLB, DSK, YDSK
diff --git a/forge-gui/res/formats/Archived/Historic/2024-10-15.txt b/forge-gui/res/formats/Archived/Historic/2024-10-15.txt
new file mode 100644
index 00000000000..b9430dc2525
--- /dev/null
+++ b/forge-gui/res/formats/Archived/Historic/2024-10-15.txt
@@ -0,0 +1,8 @@
+[format]
+Name:Historic (YDSK)
+Type:Archived
+Subtype:Arena
+Effective:2024-10-15
+Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK
+Banned:Agent of Treachery; Arid Mesa; Blood Moon; Bloodstained Mire; Brainstorm; Channel; Commandeer; Counterspell; Dark Ritual; Demonic Tutor; Endurance; Field of the Dead; Flare of Cultivation; Flare of Denial; Flare of Duplication; Flare of Fortitude; Flare of Malice; Flooded Strand; Force of Vigor; Fury; Grief; Harbinger of the Seas; Intruder Alarm; Land Tax; Lightning Bolt; Mana Drain; Marsh Flats; Memory Lapse; Mishra's Bauble; Misty Rainforest; Natural Order; Necropotence; Nexus of Fate; Oko, Thief of Crowns; Once Upon a Time; Polluted Delta; Ragavan, Nimble Pilferer; Reanimate; Scalding Tarn; Show and Tell; Sneak Attack; Solitude; Spreading Seas; Subtlety; Swords to Plowshares; Thassa's Oracle; Tibalt's Trickery; Time Warp; Uro, Titan of Nature's Wrath; Veil of Summer; Verdant Catacombs; Wilderness Reclamation; Windswept Heath; Winter Moon; Wooded Foothills
+Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Enlisted Wurm; Evolutionary Leap; Fabricate; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Slimefoot and Squee; Smuggler's Copter; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector
diff --git a/forge-gui/res/formats/Archived/Timeless/2024-10-15.txt b/forge-gui/res/formats/Archived/Timeless/2024-10-15.txt
new file mode 100644
index 00000000000..6fe3f3c4433
--- /dev/null
+++ b/forge-gui/res/formats/Archived/Timeless/2024-10-15.txt
@@ -0,0 +1,8 @@
+[format]
+Name:Timeless (YDSK)
+Type:Archived
+Subtype:Vintage
+Effective:2024-10-15
+Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK
+Restricted:Channel; Demonic Tutor; Tibalt's Trickery
+Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Endurance; Enlisted Wurm; Evolutionary Leap; Fabricate; Fury; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Grief; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Show and Tell; Slimefoot and Squee; Smuggler's Copter; Solitude; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Subtlety; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector
diff --git a/forge-gui/res/formats/Sanctioned/Historic.txt b/forge-gui/res/formats/Sanctioned/Historic.txt
index 86df4963dca..4c06aea941e 100644
--- a/forge-gui/res/formats/Sanctioned/Historic.txt
+++ b/forge-gui/res/formats/Sanctioned/Historic.txt
@@ -4,6 +4,6 @@ Type:Digital
Subtype:Arena
Effective:2019-11-21
Order:142
-Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK
+Sets:KTK, XLN, RIX, DOM, M19, ANA, PANA, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AJMP, AKR, ANB, ZNR, KLR, KHM, HA4, STX, STA, HA5, AFR, J21, MID, VOW, YMID, NEO, YNEO, SNC, YSNC, HBG, HA6, EA1, DMU, YDMU, BRO, BRR, YBRO, EA2, ONE, YONE, SIR, SIS, MOM, MUL, MAT, LTR, HA7, EA3, WOE, WOT, YWOE, LCI, YLCI, MKM, YMKM, OTJ, OTP, BIG, YOTJ, MH3, BLB, YBLB, DSK, YDSK
Banned:Agent of Treachery; Arid Mesa; Blood Moon; Bloodstained Mire; Brainstorm; Channel; Commandeer; Counterspell; Dark Ritual; Demonic Tutor; Endurance; Field of the Dead; Flare of Cultivation; Flare of Denial; Flare of Duplication; Flare of Fortitude; Flare of Malice; Flooded Strand; Force of Vigor; Fury; Grief; Harbinger of the Seas; Intruder Alarm; Land Tax; Lightning Bolt; Mana Drain; Marsh Flats; Memory Lapse; Mishra's Bauble; Misty Rainforest; Natural Order; Necropotence; Nexus of Fate; Oko, Thief of Crowns; Once Upon a Time; Polluted Delta; Ragavan, Nimble Pilferer; Reanimate; Scalding Tarn; Show and Tell; Sneak Attack; Solitude; Spreading Seas; Subtlety; Swords to Plowshares; Thassa's Oracle; Tibalt's Trickery; Time Warp; Uro, Titan of Nature's Wrath; Veil of Summer; Verdant Catacombs; Wilderness Reclamation; Windswept Heath; Winter Moon; Wooded Foothills
Additional:Admiral Brass, Unsinkable; Burden of Guilt; Clavileño, First of the Blessed; Crashing Footfalls; Desert; Desertion; Dismember; Duskmantle, House of Shadow; Enlisted Wurm; Evolutionary Leap; Fabricate; Gamble; Ghostly Prison; Gonti, Canny Acquisitor; Goro-Goro and Satoru; Ixidor, Reality Sculptor; Katilda and Lier; Kuldotha Rebirth; Leonin Relic-Warder; Magmaw; Mass Hysteria; Metalspinner's Puzzleknot; Mistveil Plains; Molten Psyche; Monologue Tax; Mystery Key; Mystic Snake; Notion Thief; Nyx Weaver; Olivia, Opulent Outlaw; Pantlaza, Sun-Favored; Persist; Port Razer; Possibility Storm; Prismatic Ending; Prismatic Vista; Putrid Warrior; Shard of Broken Glass; Slimefoot and Squee; Smuggler's Copter; Spell Snare; Stella Lee, Wild Card; Stoneforge Mystic; Timeless Dragon; Treacherous Terrain; Victimize; Xolatoyac, the Smiling Flood; Yuma, Proud Protector
diff --git a/forge-gui/res/lists/altwin-achievements.txt b/forge-gui/res/lists/altwin-achievements.txt
index 095fd7465ac..61bd6dff6a5 100644
--- a/forge-gui/res/lists/altwin-achievements.txt
+++ b/forge-gui/res/lists/altwin-achievements.txt
@@ -33,6 +33,7 @@ Mirrodin Besieged|The War's End|Spoiler alert: Phyrexia won.
Mortal Combat|The Boneyard|So peaceful...
Near-Death Experience|The Edge|Phew... I thought I was going to die!
Phage the Untouchable|The Untouchable|None are immune to her deadly touch!
+Promising Stairs|Fully Explored|That's just good cardio.
Ramses, Assassin Lord|The Precise Strike|Break one gear and the whole machine stops. You are that gear.
Revel in Riches|The Dead Man's Chest|Yo-ho-ho, and a bottle of rum!
Simic Ascendancy|The Ascension|As you can see, we are going through a period of unprecedented growth.
diff --git a/forge-gui/res/quest/commanderprecons/Death Toll [DSC] [2024].dck b/forge-gui/res/quest/commanderprecons/Death Toll [DSC] [2024].dck
new file mode 100644
index 00000000000..8d4369649a1
--- /dev/null
+++ b/forge-gui/res/quest/commanderprecons/Death Toll [DSC] [2024].dck
@@ -0,0 +1,97 @@
+[metadata]
+Name=Death Toll [DSC] [2024]
+[Commander]
+1 Winter, Cynical Opportunist|DSC|1
+[Main]
+1 Grist, the Hunger Tide|DSC|1
+1 Ob Nixilis Reignited|DSC|1
+1 Professor Onyx|DSC|1
+1 Wrenn and Seven|DSC|1
+1 Burnished Hart|DSC|1
+1 Carrion Grub|DSC|1
+1 Deathcap Cultivator|DSC|1
+1 Demolisher Spawn|DSC|1
+1 Giant Adephage|DSC|1
+1 Gnarlwood Dryad|DSC|1
+1 Grim Flayer|DSC|1
+1 Haywire Mite|DSC|1
+1 Hornet Queen|DSC|1
+1 Ishkanah, Grafwidow|DSC|1
+1 Moldgraf Millipede|DSC|1
+1 Moldgraf Monstrosity|DSC|1
+1 Noxious Gearhulk|DSC|1
+1 Nyx Weaver|DSC|1
+1 Obsessive Skinner|DSC|1
+1 Old Stickfingers|DSC|1
+1 Rendmaw, Creaking Nest|DSC|1
+1 Sakura-Tribe Elder|DSC|1
+1 Scavenging Ooze|DSC|1
+1 Skola Grovedancer|DSC|1
+1 Solemn Simulacrum|DSC|1
+1 Stitcher's Supplier|DSC|1
+1 Suspicious Bookcase|DSC|1
+1 Titania, Nature's Force|DSC|1
+1 Ursine Monstrosity|DSC|1
+1 Vile Mutilator|DSK|1
+1 Arachnogenesis|DSC|1
+1 Grapple with the Past|DSC|1
+1 Grisly Salvage|DSC|1
+1 Harrow|DSC|1
+1 Inscription of Abundance|DSC|1
+1 Putrefy|DSC|1
+1 Convert to Slime|DSC|1
+1 Culling Ritual|DSC|1
+1 Deluge of Doom|DSC|1
+1 Formless Genesis|DSC|1
+1 Harmonize|DSC|1
+1 Mulch|DSC|1
+1 Night's Whisper|DSC|1
+1 Rampant Growth|DSC|1
+1 Reanimate|DSC|1
+1 Binding the Old Gods|DSC|1
+1 Cemetery Tampering|DSC|1
+1 Crawling Sensation|DSC|1
+1 Deadbridge Chant|DSC|1
+1 Deathreap Ritual|DSC|1
+1 Demonic Covenant|DSC|1
+1 Into the Pit|DSC|1
+1 Polluted Cistern // Dim Oubliette|DSC|1
+1 Arcane Signet|DSC|1
+1 Commander's Sphere|DSC|1
+1 Golgari Signet|DSC|1
+1 Mind Stone|DSC|1
+1 Sol Ring|DSC|1
+1 Talisman of Resilience|DSC|1
+1 Whip of Erebos|DSC|1
+1 Whispersilk Cloak|DSC|1
+1 Ash Barrens|DSC|1
+1 Barren Moor|DSC|1
+1 Bojuka Bog|DSC|1
+1 Command Tower|DSC|1
+1 Darkmoss Bridge|DSC|1
+1 Dryad Arbor|DSC|1
+1 Evolving Wilds|DSC|1
+1 Exotic Orchard|DSC|1
+3 Forest|DSK|1
+2 Forest|DSK|2
+2 Forest|DSK|3
+1 Golgari Rot Farm|DSC|1
+1 Grim Backwoods|DSC|1
+1 Jungle Hollow|DSC|1
+1 Llanowar Wastes|DSC|1
+1 Necroblossom Snarl|DSC|1
+1 Reliquary Tower|DSC|1
+3 Swamp|DSK|1
+2 Swamp|DSK|2
+2 Swamp|DSK|3
+1 Tainted Wood|DSC|1
+1 Temple of Malady|DSC|1
+1 Temple of the False God|DSC|1
+1 Terramorphic Expanse|DSK|1
+1 Tranquil Thicket|DSC|1
+1 Tree of Tales|DSC|1
+1 Twilight Mire|DSC|1
+1 Vault of Whispers|DSC|1
+1 Viridescent Bog|DSC|1
+1 Woodland Cemetery|DSC|1
+[Sideboard]
\ No newline at end of file
diff --git a/forge-gui/res/quest/commanderprecons/Endless Punishment [DSC] [2024].dck b/forge-gui/res/quest/commanderprecons/Endless Punishment [DSC] [2024].dck
new file mode 100644
index 00000000000..b16d12cca66
--- /dev/null
+++ b/forge-gui/res/quest/commanderprecons/Endless Punishment [DSC] [2024].dck
@@ -0,0 +1,95 @@
+[metadata]
+Name=Endless Punishment [DSC] [2024]
+[Commander]
+1 Valgavoth, Harrower of Souls|DSC|1
+[Main]
+1 Barbflare Gremlin|DSC|1
+1 Blood Artist|DSC|1
+1 Blood Seeker|DSC|1
+1 Braids, Arisen Nightmare|DSC|1
+1 Brash Taunter|DSC|1
+1 Combustible Gearhulk|DSC|1
+1 Falkenrath Noble|DSC|1
+1 Fate Unraveler|DSC|1
+1 Fear of Burning Alive|DSK|1
+1 Florian, Voldaren Scion|DSC|1
+1 Gleeful Arsonist|DSC|1
+1 Gray Merchant of Asphodel|DSC|1
+1 Harsh Mentor|DSC|1
+1 Kaervek the Merciless|DSC|1
+1 Kardur, Doomscourge|DSC|1
+1 Kederekt Parasite|DSC|1
+1 The Lord of Pain|DSC|1
+1 Massacre Girl|DSC|1
+1 Massacre Wurm|DSC|1
+1 Mayhem Devil|DSC|1
+1 Mogis, God of Slaughter|DSC|1
+1 Morbid Opportunist|DSC|1
+1 Nightshade Harvester|DSC|1
+1 Persistent Constrictor|DSC|1
+1 Rakdos, Lord of Riots|DSC|1
+1 Rampaging Ferocidon|DSC|1
+1 Solemn Simulacrum|DSC|1
+1 Star Athlete|DSC|1
+1 Stormfist Crusader|DSC|1
+1 Syr Konrad, the Grim|DSC|1
+1 Tectonic Giant|DSC|1
+1 Vial Smasher the Fierce|DSC|1
+1 Bedevil|DSC|1
+1 Blood Pact|DSC|1
+1 Chaos Warp|DSC|1
+1 Infernal Grasp|DSC|1
+1 Rakdos Charm|DSC|1
+1 Suspended Sentence|DSC|1
+1 Blasphemous Act|DSC|1
+1 Decree of Pain|DSC|1
+1 Feed the Swarm|DSC|1
+1 Grab the Prize|DSK|1
+1 Light Up the Stage|DSC|1
+1 Sadistic Shell Game|DSC|1
+1 Sign in Blood|DSC|1
+1 Bastion of Remembrance|DSC|1
+1 Enchanter's Bane|DSC|1
+1 Spiked Corridor // Torture Pit|DSC|1
+1 Spiteful Visions|DSC|1
+1 Theater of Horrors|DSC|1
+1 Arcane Signet|DSC|1
+1 Basilisk Collar|DSC|1
+1 Fellwar Stone|DSC|1
+1 Lightning Greaves|DSC|1
+1 Mask of Griselbrand|DSC|1
+1 Mind Stone|DSC|1
+1 Rakdos Signet|DSC|1
+1 Séance Board|DSC|1
+1 Sol Ring|DSC|1
+1 Talisman of Indulgence|DSC|1
+1 Thought Vessel|DSC|1
+1 Ash Barrens|DSC|1
+1 Blackcleave Cliffs|DSC|1
+1 Bloodfell Caves|DSC|1
+1 Canyon Slough|DSC|1
+1 Command Tower|DSC|1
+1 Dragonskull Summit|DSC|1
+1 Evolving Wilds|DSC|1
+1 Exotic Orchard|DSC|1
+1 Foreboding Ruins|DSC|1
+1 Geothermal Bog|DSC|1
+1 Graven Cairns|DSC|1
+1 Leechridden Swamp|DSC|1
+3 Mountain|DSK|1
+3 Mountain|DSK|2
+2 Mountain|DSK|3
+1 Shadowblood Ridge|DSC|1
+1 Shivan Gorge|DSC|1
+1 Smoldering Marsh|DSC|1
+1 Spinerock Knoll|DSC|1
+1 Sulfurous Springs|DSC|1
+3 Swamp|DSK|1
+3 Swamp|DSK|2
+2 Swamp|DSK|3
+1 Tainted Peak|DSC|1
+1 Temple of Malice|DSC|1
+1 Temple of the False God|DSC|1
+1 Terramorphic Expanse|DSK|1
+1 Witch's Clinic|DSC|1
+[Sideboard]
\ No newline at end of file
diff --git a/forge-gui/res/quest/commanderprecons/Jump Scare! [DSC] [2024].dck b/forge-gui/res/quest/commanderprecons/Jump Scare! [DSC] [2024].dck
new file mode 100644
index 00000000000..8c4f84a6967
--- /dev/null
+++ b/forge-gui/res/quest/commanderprecons/Jump Scare! [DSC] [2024].dck
@@ -0,0 +1,93 @@
+[metadata]
+Name=Jump Scare! [DSC] [2024]
+[Commander]
+1 Zimone, Mystery Unraveler|DSC|1
+[Main]
+1 Aesi, Tyrant of Gyre Strait|DSC|1
+1 Arixmethes, Slumbering Isle|DSC|1
+1 Ashaya, Soul of the Wild|DSC|1
+1 Augur of Autumn|DSC|1
+1 Beanstalk Giant|DSC|1
+1 Body of Knowledge|DSC|1
+1 Citanul Hierophants|DSC|1
+1 Curator Beastie|DSC|1
+1 Deathmist Raptor|DSC|1
+1 Giggling Skitterspike|DSC|1
+1 Glitch Interpreter|DSC|1
+1 Greater Tanuki|DSC|1
+1 Hydra Omnivore|DSC|1
+1 Kefnet the Mindful|DSC|1
+1 Kheru Spellsnatcher|DSC|1
+1 Kianne, Corrupted Memory|DSC|1
+1 Multani, Yavimaya's Avatar|DSC|1
+1 Overgrown Zealot|DSK|1
+1 Rashmi, Eternities Crafter|DSC|1
+1 Sakura-Tribe Elder|DSC|1
+1 Scute Swarm|DSC|1
+1 Shigeki, Jukai Visionary|DSC|1
+1 Shriekwood Devourer|DSC|1
+1 Skaab Ruinator|DSC|1
+1 Tatyova, Benthic Druid|DSC|1
+1 Temur War Shaman|DSC|1
+1 Thunderfoot Baloth|DSC|1
+1 Trygon Predator|DSC|1
+1 Whisperwood Elemental|DSC|1
+1 Worldspine Wurm|DSC|1
+1 Yavimaya Elder|DSC|1
+1 Yedora, Grave Gardener|DSC|1
+1 Beast Within|DSC|1
+1 Biomass Mutation|DSC|1
+1 Cackling Counterpart|DSC|1
+1 Counterspell|DSC|1
+1 Dig Through Time|DSC|1
+1 Eureka Moment|DSC|1
+1 Growth Spiral|DSC|1
+1 Reality Shift|DSC|1
+1 Zimone's Hypothesis|DSC|1
+1 Aether Gale|DSC|1
+1 Cultivate|DSC|1
+1 Disorienting Choice|DSC|1
+1 Explosive Vegetation|DSC|1
+1 Ezuri's Predation|DSC|1
+1 Oversimplify|DSC|1
+1 Overwhelming Stampede|DSC|1
+1 Rampant Growth|DSC|1
+1 Experimental Lab // Staff Room|DSC|1
+1 Growing Dread|DSK|1
+1 Primordial Mist|DSC|1
+1 Retreat to Coralhelm|DSC|1
+1 Sandwurm Convergence|DSC|1
+1 They Came From the Pipes|DSC|1
+1 Trail of Mystery|DSC|1
+1 Wilderness Reclamation|DSC|1
+1 Arcane Signet|DSC|1
+1 Scroll of Fate|DSC|1
+1 Simic Signet|DSC|1
+1 Sol Ring|DSC|1
+1 Ash Barrens|DSC|1
+1 Castle Vantress|DSC|1
+1 Command Tower|DSC|1
+1 Drownyard Temple|DSC|1
+1 Evolving Wilds|DSC|1
+1 Flooded Grove|DSC|1
+3 Forest|DSK|1
+3 Forest|DSK|2
+3 Forest|DSK|3
+1 Hinterland Harbor|DSC|1
+3 Island|DSK|1
+3 Island|DSK|2
+3 Island|DSK|3
+1 Mosswort Bridge|DSC|1
+1 Myriad Landscape|DSC|1
+1 Overflowing Basin|DSC|1
+1 Quandrix Campus|DSC|1
+1 Reliquary Tower|DSC|1
+1 Simic Growth Chamber|DSC|1
+1 Tangled Islet|DSC|1
+1 Temple of Mystery|DSC|1
+1 Temple of the False God|DSC|1
+1 Terramorphic Expanse|DSK|1
+1 Thornwood Falls|DSC|1
+1 Vineglimmer Snarl|DSC|1
+1 Yavimaya Coast|DSC|1
+[Sideboard]
\ No newline at end of file
diff --git a/forge-gui/res/quest/commanderprecons/Miracle Worker [DSC] [2024].dck b/forge-gui/res/quest/commanderprecons/Miracle Worker [DSC] [2024].dck
new file mode 100644
index 00000000000..046c14fe10b
--- /dev/null
+++ b/forge-gui/res/quest/commanderprecons/Miracle Worker [DSC] [2024].dck
@@ -0,0 +1,100 @@
+[metadata]
+Name=Miracle Worker [DSC] [2024]
+[Commander]
+1 Aminatou, Veil Piercer|DSC|1
+[Main]
+1 Ancient Cellarspawn|DSC|1
+1 Archetype of Imagination|DSC|1
+1 Arvinox, the Mind Flail|DSC|1
+1 Athreos, Shroud-Veiled|DSC|1
+1 Auramancer|DSC|1
+1 Burnished Hart|DSC|1
+1 Demon of Fate's Design|DSC|1
+1 Doomwake Giant|DSC|1
+1 Dream Eater|DSC|1
+1 Fear of Sleep Paralysis|DSC|1
+1 Mesa Enchantress|DSC|1
+1 Metamorphosis Fanatic|DSC|1
+1 Moon-Blessed Cleric|DSC|1
+1 Nightmare Shepherd|DSC|1
+1 Ondu Spiritdancer|DSC|1
+1 Phenomenon Investigators|DSC|1
+1 Prognostic Sphinx|DSC|1
+1 Soaring Lightbringer|DSC|1
+1 Solemn Simulacrum|DSC|1
+1 Starfield Mystic|DSC|1
+1 The Master of Keys|DSC|1
+1 Verge Rangers|DSC|1
+1 Arcane Denial|DSC|1
+1 Brainstorm|DSC|1
+1 Inkshield|DSC|1
+1 Otherworldly Gaze|DSC|1
+1 Return to Dust|DSC|1
+1 Swords to Plowshares|DSC|1
+1 Telling Time|DSC|1
+1 Thirst for Meaning|DSC|1
+1 Utter End|DSC|1
+1 Aminatou's Augury|DSC|1
+1 Diabolic Vision|DSC|1
+1 Entreat the Angels|DSC|1
+1 Ponder|DSC|1
+1 Portent|DSC|1
+1 Read the Bones|DSC|1
+1 Redress Fate|DSC|1
+1 Terminus|DSC|1
+1 Time Wipe|DSC|1
+1 Bottomless Pool // Locker Room|DSK|1
+1 Cast Out|DSC|1
+1 Cramped Vents // Access Maze|DSC|1
+1 Extravagant Replication|DSC|1
+1 Life Insurance|DSC|1
+1 Mirrormade|DSC|1
+1 Monologue Tax|DSC|1
+1 One with the Multiverse|DSC|1
+1 Secret Arcade // Dusty Parlor|DSC|1
+1 Shark Typhoon|DSC|1
+1 Sigil of the Empty Throne|DSC|1
+1 Sphere of Safety|DSC|1
+1 Spirit-Sister's Call|DSC|1
+1 The Eldest Reborn|DSC|1
+1 Timely Ward|DSC|1
+1 Arcane Signet|DSC|1
+1 Azorius Signet|DSC|1
+1 Brainstone|DSC|1
+1 Commander's Sphere|DSC|1
+1 Mind Stone|DSC|1
+1 Orzhov Signet|DSC|1
+1 Sol Ring|DSC|1
+1 Adarkar Wastes|DSC|1
+1 Arcane Sanctum|DSC|1
+1 Ash Barrens|DSC|1
+1 Azorius Chancery|DSC|1
+1 Bojuka Bog|DSC|1
+1 Caves of Koilos|DSC|1
+1 Command Tower|DSC|1
+1 Dimir Aqueduct|DSC|1
+1 Evolving Wilds|DSC|1
+1 Halimar Depths|DSC|1
+1 Hall of Heliod's Generosity|DSC|1
+1 Obscura Storefront|DSC|1
+1 Orzhov Basilica|DSC|1
+1 Tainted Field|DSC|1
+1 Tainted Isle|DSC|1
+1 Temple of Deceit|DSC|1
+1 Temple of Enlightenment|DSC|1
+1 Temple of Silence|DSC|1
+1 Terramorphic Expanse|DSK|1
+1 Thriving Heath|DSC|1
+1 Thriving Isle|DSC|1
+1 Thriving Moor|DSC|1
+1 Underground River|DSC|1
+2 Island|DSK|1
+1 Island|DSK|2
+1 Island|DSK|3
+2 Plains|DSK|1
+2 Plains|DSK|2
+1 Plains|DSK|3
+2 Swamp|DSK|1
+2 Swamp|DSK|2
+1 Swamp|DSK|3
+[Sideboard]
\ No newline at end of file
diff --git a/forge-gui/src/main/java/forge/player/HumanCostDecision.java b/forge-gui/src/main/java/forge/player/HumanCostDecision.java
index 6f8437163dc..4ffa07d42fc 100644
--- a/forge-gui/src/main/java/forge/player/HumanCostDecision.java
+++ b/forge-gui/src/main/java/forge/player/HumanCostDecision.java
@@ -992,7 +992,7 @@ public class HumanCostDecision extends CostDecisionMakerBase {
cType = getController().chooseCounterType(Lists.newArrayList(cmap.keySet()), sa, prompt, null);
}
- if (cType == null) {
+ if (cType == null || !c.canRemoveCounters(cType)) {
return false;
}
@@ -1308,7 +1308,7 @@ public class HumanCostDecision extends CostDecisionMakerBase {
public PaymentDecision visit(final CostUntapType cost) {
CardCollection typeList = CardLists.getValidCards(player.getGame().getCardsIn(ZoneType.Battlefield), cost.getType().split(";"),
player, source, ability);
- typeList = CardLists.filter(typeList, Presets.TAPPED);
+ typeList = CardLists.filter(typeList, Presets.TAPPED, c -> c.getCounters(CounterEnumType.STUN) == 0 || c.canRemoveCounters(CounterType.get(CounterEnumType.STUN)));
if (!cost.canUntapSource) {
typeList.remove(source);
}
diff --git a/forge-lda/pom.xml b/forge-lda/pom.xml
index f06ef8734a7..133db8447af 100644
--- a/forge-lda/pom.xml
+++ b/forge-lda/pom.xml
@@ -4,7 +4,7 @@
forge
forge
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
forge-lda
diff --git a/pom.xml b/pom.xml
index 993a31fa14f..4a92e6929c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
forge
pom
Forge Parent
- 1.6.65-SNAPSHOT
+ 1.6.66-SNAPSHOT
Forge lets you play the card game Magic: The Gathering against a computer opponent using all of the rules.