From 2f1bdc57670e914ae4f79d44068cc97c47236421 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Tue, 28 Jan 2020 09:17:23 +0800 Subject: [PATCH 01/27] support choose localization card name --- .../java/forge/game/card/CardFaceView.java | 30 ++++++++++++++----- .../forge/player/PlayerControllerHuman.java | 18 +++++++---- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardFaceView.java b/forge-game/src/main/java/forge/game/card/CardFaceView.java index 89bc857b003..435bde9c43a 100644 --- a/forge-game/src/main/java/forge/game/card/CardFaceView.java +++ b/forge-game/src/main/java/forge/game/card/CardFaceView.java @@ -3,24 +3,40 @@ package forge.game.card; import java.io.Serializable; public class CardFaceView implements Serializable, Comparable { - private String name; + /** + * + */ + private static final long serialVersionUID = 1874016432028306386L; + private String displayName; + private String oracleName; - public CardFaceView(String faceName) { - this.name = faceName; + public CardFaceView(String displayName) { + this(displayName, displayName); } - public String getName() { return name;} + public CardFaceView(String displayFaceName, String oracleFaceName ) { + this.displayName = displayFaceName; + this.oracleName = oracleFaceName; + } + + public String getName() { return displayName;} public void setName(String name) { - this.name = name; + this.displayName = name; + } + + public String getOracleName() { return oracleName; } + + public void setOracleName(String name) { + this.oracleName = name; } public String toString() { - return name; + return displayName; } @Override public int compareTo(CardFaceView o) { - return this.getName().compareTo(o.getName()); + return this.getOracleName().compareTo(o.getOracleName()); } } \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 37bcafa370d..618b21e6239 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -1561,12 +1561,12 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont CardFaceView cardFaceView; List choices = new ArrayList<>(); for (ICardFace cardFace : cards) { - cardFaceView = new CardFaceView(cardFace.getName()); + cardFaceView = new CardFaceView(CardTranslation.getTranslatedName(cardFace.getName()), cardFace.getName()); choices.add(cardFaceView); } Collections.sort(choices); cardFaceView = getGui().one(message, choices); - return StaticData.instance().getCommonCards().getFaceByName(cardFaceView.getName()); + return StaticData.instance().getCommonCards().getFaceByName(cardFaceView.getOracleName()); } @Override @@ -1960,7 +1960,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont } public class DevModeCheats implements IDevModeCheats { - private ICardFace lastAdded; + private CardFaceView lastAdded; private ZoneType lastAddedZone; private Player lastAddedPlayer; private SpellAbility lastAddedSA; @@ -2363,15 +2363,21 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont final CardDb carddb = FModel.getMagicDb().getCommonCards(); final List faces = Lists.newArrayList(carddb.getAllFaces()); - Collections.sort(faces); + List choices = new ArrayList<>(); + CardFaceView cardFaceView; + for (ICardFace cardFace : faces) { + cardFaceView = new CardFaceView(CardTranslation.getTranslatedName(cardFace.getName()), cardFace.getName()); + choices.add(cardFaceView); + } + Collections.sort(choices); // use standard forge's list selection dialog - final ICardFace f = repeatLast ? lastAdded : getGui().oneOrNone(localizer.getMessage("lblNameTheCard"), faces); + final CardFaceView f = repeatLast ? lastAdded : getGui().oneOrNone(localizer.getMessage("lblNameTheCard"), choices); if (f == null) { return; } - final PaperCard c = carddb.getUniqueByName(f.getName()); + final PaperCard c = carddb.getUniqueByName(f.getOracleName()); final Card forgeCard = Card.fromPaperCard(c, p); game.getAction().invoke(new Runnable() { From 9c8a96a98aace591bcf84aef3e89c38ce69094f8 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Wed, 29 Jan 2020 07:58:03 +0800 Subject: [PATCH 02/27] get right card face name --- forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java index c99b4cb6ab6..8a81251c43f 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java +++ b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java @@ -166,7 +166,7 @@ public class GuiChoose { if (sel instanceof ICardFace) { faceName = ((ICardFace) sel).getName(); } else { - faceName = ((CardFaceView) sel).getName(); + faceName = ((CardFaceView) sel).getOracleName(); } PaperCard paper = FModel.getMagicDb().getCommonCards().getUniqueByName(faceName); if (paper == null) { From 560432d8bc9ae9b95a51ee078d9ef93e8e8d7862 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Fri, 31 Jan 2020 20:01:41 +0800 Subject: [PATCH 03/27] CardView toString return translated name --- forge-game/src/main/java/forge/game/card/CardView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 8e6654474bf..77bbe3fdddc 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -20,6 +20,7 @@ import forge.trackable.TrackableProperty; import forge.trackable.Tracker; import forge.util.Lang; import forge.util.collect.FCollectionView; +import forge.util.CardTranslation; import org.apache.commons.lang3.StringUtils; import java.util.EnumSet; @@ -785,7 +786,7 @@ public class CardView extends GameEntityView { } } } - return (name + " (" + getId() + ")").trim(); + return (CardTranslation.getTranslatedName(name) + " (" + getId() + ")").trim(); } public class CardStateView extends TrackableObject { From b11cb78cd82b10ff2cc0d644e8f7240dcf616145 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Mon, 17 Feb 2020 11:37:16 +0800 Subject: [PATCH 04/27] card catalog support use localization card text search. --- .../src/main/java/forge/card/CardRulesPredicates.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardRulesPredicates.java b/forge-core/src/main/java/forge/card/CardRulesPredicates.java index 6679b3ad673..1a1c99bac4a 100644 --- a/forge-core/src/main/java/forge/card/CardRulesPredicates.java +++ b/forge-core/src/main/java/forge/card/CardRulesPredicates.java @@ -8,6 +8,7 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; +import forge.util.CardTranslation; import forge.util.ComparableOp; import forge.util.PredicateString; @@ -350,14 +351,14 @@ public final class CardRulesPredicates { boolean shouldContain; switch (this.field) { case NAME: - return op(card.getName(), this.operand); + return (op(CardTranslation.getTranslatedName(card.getName()), this.operand) || op(card.getName(), this.operand)); case SUBTYPE: shouldContain = (this.getOperator() == StringOp.CONTAINS) || (this.getOperator() == StringOp.EQUALS); return shouldContain == card.getType().hasSubtype(this.operand); case ORACLE_TEXT: - return op(card.getOracleText(), operand); + return (op(CardTranslation.getTranslatedOracle(card.getName()), operand) || op(card.getOracleText(), this.operand)); case JOINED_TYPE: - return op(card.getType().toString(), operand); + return (op(CardTranslation.getTranslatedType(card.getName(), card.getType().toString()), operand) || op(card.getType().toString(), operand)); case COST: final String cost = card.getManaCost().toString(); return op(cost, operand); From 9b67b0a394d9dbbb0e7d2d8edc8e146e29a1ddf4 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Tue, 18 Feb 2020 12:27:08 +0800 Subject: [PATCH 05/27] make AdvancedSearch support use localization string search card name/rules text. --- .../forge/itemmanager/AdvancedSearch.java | 102 ++++++++++++++---- 1 file changed, 80 insertions(+), 22 deletions(-) diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 6abe7137f06..9eed3173cc4 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -39,16 +39,30 @@ import forge.util.CardTranslation; public class AdvancedSearch { public enum FilterOption { NONE("lblNone", null, null, null), - CARD_NAME("lblName", PaperCard.class, FilterOperator.STRING_OPS, new StringEvaluator() { + CARD_NAME("lblName", PaperCard.class, FilterOperator.STRINGS_OPS, new StringEvaluator() { @Override protected String getItemValue(PaperCard input) { - return input.getName(); + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(PaperCard input) { + Set names = new HashSet<>(); + names.add(input.getName()); + names.add(CardTranslation.getTranslatedName(input.getName())); + return names; } }), - CARD_RULES_TEXT("lblRulesText", PaperCard.class, FilterOperator.STRING_OPS, new StringEvaluator() { + CARD_RULES_TEXT("lblRulesText", PaperCard.class, FilterOperator.STRINGS_OPS, new StringEvaluator() { @Override protected String getItemValue(PaperCard input) { - return input.getRules().getOracleText(); + throw new RuntimeException("getItemValues should be called instead"); + } + @Override + protected Set getItemValues(PaperCard input) { + Set names = new HashSet<>(); + names.add(input.getRules().getOracleText()); + names.add(CardTranslation.getTranslatedOracle(input.getName())); + return names; } }), CARD_KEYWORDS("lblKeywords", PaperCard.class, FilterOperator.COLLECTION_OPS, new CustomListEvaluator(Keyword.getAllKeywords()) { @@ -484,6 +498,18 @@ public class AdvancedSearch { } return false; } + @Override + public boolean apply(Set inputs, List values) { + if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) { + for (String input : inputs) { + if (apply(input, values)) { + return true; + } + } + return false; + } + return false; + } }), STARTS_WITH("lblStartsWith", "%1$s starts with '%2$s'", FilterValueCount.ONE, new OperatorEvaluator() { @Override @@ -493,6 +519,18 @@ public class AdvancedSearch { } return false; } + @Override + public boolean apply(Set inputs, List values) { + if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) { + for (String input : inputs) { + if (apply(input, values)) { + return true; + } + } + return false; + } + return false; + } }), ENDS_WITH("lblEndsWith", "%1$s ends with '%2$s'", FilterValueCount.ONE, new OperatorEvaluator() { @Override @@ -502,6 +540,18 @@ public class AdvancedSearch { } return false; } + @Override + public boolean apply(Set inputs, List values) { + if (inputs != null && !inputs.isEmpty() && !values.isEmpty()) { + for (String input : inputs) { + if (apply(input, values)) { + return true; + } + } + return false; + } + return false; + } }), //Custom list operators @@ -662,6 +712,9 @@ public class AdvancedSearch { public static final FilterOperator[] STRING_OPS = new FilterOperator[] { CONTAINS, STARTS_WITH, ENDS_WITH }; + public static final FilterOperator[] STRINGS_OPS = new FilterOperator[] { + CONTAINS, STARTS_WITH, ENDS_WITH + }; public static final FilterOperator[] SINGLE_LIST_OPS = new FilterOperator[] { IS_ANY }; @@ -716,27 +769,32 @@ public class AdvancedSearch { @SuppressWarnings("unchecked") public final Filter createFilter(FilterOption option, FilterOperator operator) { final List values = getValues(option, operator); - if (values == null || values.isEmpty()) { return null; } + if (values == null || values.isEmpty()) { + return null; + } String caption = getCaption(values, option, operator); - final OperatorEvaluator evaluator = (OperatorEvaluator)operator.evaluator; - Predicate predicate; - if (option.operatorOptions == FilterOperator.MULTI_LIST_OPS || option.operatorOptions == FilterOperator.COMBINATION_OPS || option.operatorOptions == FilterOperator.COLLECTION_OPS) { - predicate = new Predicate() { - @Override - public boolean apply(T input) { - return evaluator.apply(getItemValues(input), values); - } - }; - } - else { - predicate = new Predicate() { - @Override - public boolean apply(T input) { - return evaluator.apply(getItemValue(input), values); - } - }; + final OperatorEvaluator evaluator = (OperatorEvaluator) operator.evaluator; + Predicate predicate = new Predicate() { + @Override + public boolean apply(T input) { + return evaluator.apply(getItemValue(input), values); + } + }; + ; + final FilterOperator[][] manyValueOperators = { FilterOperator.MULTI_LIST_OPS, + FilterOperator.COMBINATION_OPS, FilterOperator.COLLECTION_OPS, FilterOperator.STRINGS_OPS }; + for (FilterOperator[] oper : manyValueOperators) { + if (option.operatorOptions == oper) { + predicate = new Predicate() { + @Override + public boolean apply(T input) { + return evaluator.apply(getItemValues(input), values); + } + }; + break; + } } return new Filter<>(option, operator, caption, predicate); } From 4fde684e9bd38930e281334d3728683e69bc1239 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Tue, 25 Feb 2020 12:27:36 +0800 Subject: [PATCH 06/27] make desktop sideboard dialog show localization card name. --- forge-core/src/main/java/forge/item/PaperCard.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forge-core/src/main/java/forge/item/PaperCard.java b/forge-core/src/main/java/forge/item/PaperCard.java index 4200b240e4d..58fb032c898 100644 --- a/forge-core/src/main/java/forge/item/PaperCard.java +++ b/forge-core/src/main/java/forge/item/PaperCard.java @@ -28,6 +28,7 @@ import forge.StaticData; import forge.card.CardDb; import forge.card.CardRarity; import forge.card.CardRules; +import forge.util.CardTranslation; import forge.util.Localizer; import forge.util.TextUtil; @@ -187,7 +188,7 @@ public final class PaperCard implements Comparable, InventoryItemFro */ @Override public String toString() { - return name; + return CardTranslation.getTranslatedName(name); // cannot still decide, if this "name|set" format is needed anymore // return String.format("%s|%s", name, cardSet); } From 24ea734e70bc413d620bdc7acb2a149559acb3ee Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Tue, 25 Feb 2020 13:05:46 +0800 Subject: [PATCH 07/27] avoid call CardTranslation.getTranslatedName for deck name. --- forge-gui/src/main/java/forge/itemmanager/ColumnDef.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java b/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java index f70c243e995..228085c97a4 100644 --- a/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java +++ b/forge-gui/src/main/java/forge/itemmanager/ColumnDef.java @@ -58,13 +58,17 @@ public enum ColumnDef { new Function, Comparable>() { @Override public Comparable apply(final Entry from) { - return toSortableName(CardTranslation.getTranslatedName(from.getKey().getName())); + if (from.getKey() instanceof PaperCard) + return toSortableName(from.getKey().toString()); + return toSortableName(from.getKey().getName()); } }, new Function, Object>() { @Override public Object apply(final Entry from) { - return CardTranslation.getTranslatedName(from.getKey().getName()); + if (from.getKey() instanceof PaperCard) + return from.getKey().toString(); + return from.getKey().getName(); } }), From fa1bdf9f56011aed750a81282b66b58649803018 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Sat, 21 Mar 2020 22:21:53 +0800 Subject: [PATCH 08/27] fix:non-english locale stack message format broken. --- forge-gui-mobile/src/forge/screens/match/views/VStack.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VStack.java b/forge-gui-mobile/src/forge/screens/match/views/VStack.java index 8f83fef3035..f19e8d42a6c 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VStack.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VStack.java @@ -39,6 +39,7 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FLabel; +import forge.util.CardTranslation; import forge.util.Localizer; import forge.util.TextUtil; import forge.util.collect.FCollectionView; @@ -379,7 +380,7 @@ public class VStack extends FDropDown { w -= x + PADDING - BORDER_THICKNESS; h -= y + PADDING - BORDER_THICKNESS; - String name = stackInstance.getSourceCard().getName(); + String name = CardTranslation.getTranslatedName(stackInstance.getSourceCard().getName()); int index = text.indexOf(name); String newtext = ""; String cId = "(" + stackInstance.getSourceCard().getId() + ")"; From a40448fde8c63e9bda7a7b7dc1661bf4d373e114 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Wed, 28 Oct 2020 18:12:54 +0800 Subject: [PATCH 09/27] remove unused import --- forge-gui-mobile/src/forge/screens/match/views/VStack.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/screens/match/views/VStack.java b/forge-gui-mobile/src/forge/screens/match/views/VStack.java index 3e8506f99be..763c8170e1f 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VStack.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VStack.java @@ -39,7 +39,6 @@ import forge.toolbox.FDisplayObject; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FLabel; -import forge.util.CardTranslation; import forge.util.Localizer; import forge.util.TextUtil; import forge.util.collect.FCollectionView; From 15016ccf80ddabb994e69f4602c4eba598d9153a Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 4 Feb 2021 18:37:05 +0100 Subject: [PATCH 10/27] Extend DamagedBy and add Aegar the freezing Flame --- .../java/forge/game/card/CardProperty.java | 34 +++++++++++-------- .../upcoming/aegar_the_freezing_flame.txt | 8 +++++ 2 files changed, 27 insertions(+), 15 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/aegar_the_freezing_flame.txt diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 2da6fca758d..550ee2bcbaa 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -651,24 +651,28 @@ public class CardProperty { if ((property.endsWith("Source") || property.equals("DamagedBy")) && !card.getReceivedDamageFromThisTurn().containsKey(source)) { return false; - } else if (property.endsWith("Remembered")) { - boolean matched = false; - for (final Object obj : source.getRemembered()) { - if (!(obj instanceof Card)) { - continue; + } else { + String prop = property.substring("DamagedBy".length()); + + boolean found = false; + for (Card d : card.getReceivedDamageFromThisTurn().keySet()) { + if (d.isValid(prop, sourceController, source, spellAbility)) { + found = true; + break; } - matched |= card.getReceivedDamageFromThisTurn().containsKey(obj); } - if (!matched) - return false; - } else if (property.endsWith("Equipped")) { - final Card equipee = source.getEquipping(); - if (equipee == null || !card.getReceivedDamageFromThisTurn().containsKey(equipee)) - return false; - } else if (property.endsWith("Enchanted")) { - final Card equipee = source.getEnchantingCard(); - if (equipee == null || !card.getReceivedDamageFromThisTurn().containsKey(equipee)) + + if (!found) { + for (Card d : AbilityUtils.getDefinedCards(source, prop, spellAbility)) { + if (card.getReceivedDamageFromThisTurn().containsKey(d)) { + found = true; + break; + } + } + } + if (!found) { return false; + } } } else if (property.startsWith("Damaged")) { if (!card.getDealtDamageToThisTurn().containsKey(source)) { diff --git a/forge-gui/res/cardsfolder/upcoming/aegar_the_freezing_flame.txt b/forge-gui/res/cardsfolder/upcoming/aegar_the_freezing_flame.txt new file mode 100644 index 00000000000..cc8965d715b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/aegar_the_freezing_flame.txt @@ -0,0 +1,8 @@ +Name:Aegar, the Freezing Flame +ManaCost:1 U R +Types:Legendary Creature Giant Wizard +PT:3/3 +T:Mode$ ExcessDamage | ValidTarget$ Creature.OppCtrl+DamagedByGiant.YouCtrl,Creature.OppCtrl+DamagedByWizard.YouCtrl,Creature.OppCtrl+DamagedBySpell.YouCtrl,Planeswalker.OppCtrl+DamagedByGiant.YouCtrl,Planeswalker.OppCtrl+DamagedByWizard.YouCtrl,Planeswalker.OppCtrl+DamagedBySpell.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever a creature or planeswalker an opponent controls is dealt excess damage, if a Giant, Wizard, or spell you controlled dealt damage to it this turn, draw a card. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +Oracle:Whenever a creature or planeswalker an opponent controls is dealt excess damage, if a Giant, Wizard, or spell you controlled dealt damage to it this turn, draw a card. + From 7355b56246492795ecdb83b3dcf1b157baa4542b Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sat, 6 Feb 2021 14:10:07 +0100 Subject: [PATCH 11/27] PermanentEffect: playing cards causes ChangesZoneAll to trigger --- .../src/main/java/forge/game/GameAction.java | 8 +++++ .../game/ability/effects/AttachEffect.java | 29 ++++++++++--------- .../game/ability/effects/PermanentEffect.java | 27 +++++++++-------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 98640a1ce6e..b101c679d10 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -83,6 +83,14 @@ public class GameAction { } private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer position, SpellAbility cause, Map params) { + // 111.11. A copy of a permanent spell becomes a token as it resolves. + // The token has the characteristics of the spell that became that token. + // The token is not “created” for the purposes of any replacement effects or triggered abilities that refer to creating a token. + if (c.isCopiedSpell() && zoneTo.is(ZoneType.Battlefield) && c.isPermanent() && cause != null && cause.isSpell() && c.equals(cause.getHostCard())) { + c.setCopiedSpell(false); + c.setToken(true); + } + if (c.isCopiedSpell() || (c.isImmutable() && zoneTo.is(ZoneType.Exile))) { // Remove Effect from command immediately, this is essential when some replacement // effects happen during the resolving of a spellability ("the next time ..." effect) diff --git a/forge-game/src/main/java/forge/game/ability/effects/AttachEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AttachEffect.java index 0156e9775c7..2e7ee9eb139 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AttachEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AttachEffect.java @@ -10,6 +10,7 @@ import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardCollectionView; import forge.game.card.CardLists; +import forge.game.card.CardZoneTable; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; @@ -25,27 +26,27 @@ public class AttachEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { final Card host = sa.getHostCard(); + final Game game = host.getGame(); + if (host.isAura() && sa.isSpell()) { - final Player ap = sa.getActivatingPlayer(); + CardZoneTable table = new CardZoneTable(); + host.setController(sa.getActivatingPlayer(), 0); + + ZoneType previousZone = host.getZone().getZoneType(); + // The Spell_Permanent (Auras) version of this AF needs to // move the card into play before Attaching - - host.setController(ap, 0); - - // 111.11. A copy of a permanent spell becomes a token as it resolves. - // The token has the characteristics of the spell that became that token. - // The token is not “created” for the purposes of any replacement effects or triggered abilities that refer to creating a token. - if (host.isCopiedSpell()) { - host.setCopiedSpell(false); - host.setToken(true); - } - - final Card c = ap.getGame().getAction().moveToPlay(host, ap, sa); + final Card c = game.getAction().moveToPlay(host, sa); sa.setHostCard(c); + + ZoneType newZone = c.getZone().getZoneType(); + if (newZone != previousZone) { + table.put(previousZone, newZone, c); + } + table.triggerChangesZoneAll(game); } final Card source = sa.getHostCard(); - final Game game = source.getGame(); CardCollection attachments; final List targets = getDefinedOrTargeted(sa, "Defined"); diff --git a/forge-game/src/main/java/forge/game/ability/effects/PermanentEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PermanentEffect.java index 36437ae9dfb..b306ae59de4 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PermanentEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PermanentEffect.java @@ -2,10 +2,12 @@ package forge.game.ability.effects; import com.google.common.collect.Lists; +import forge.game.Game; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; -import forge.game.player.Player; +import forge.game.card.CardZoneTable; import forge.game.spellability.SpellAbility; +import forge.game.zone.ZoneType; public class PermanentEffect extends SpellAbilityEffect { @@ -18,25 +20,26 @@ public class PermanentEffect extends SpellAbilityEffect { */ @Override public void resolve(SpellAbility sa) { - Player p = sa.getActivatingPlayer(); - sa.getHostCard().setController(p, 0); final Card host = sa.getHostCard(); + final Game game = host.getGame(); + CardZoneTable table = new CardZoneTable(); + ZoneType previousZone = host.getZone().getZoneType(); - // 111.11. A copy of a permanent spell becomes a token as it resolves. - // The token has the characteristics of the spell that became that token. - // The token is not “created” for the purposes of any replacement effects or triggered abilities that refer to creating a token. - if (host.isCopiedSpell()) { - host.setCopiedSpell(false); - host.setToken(true); - } + host.setController(sa.getActivatingPlayer(), 0); - final Card c = p.getGame().getAction().moveToPlay(host, p, sa); + final Card c = game.getAction().moveToPlay(host, sa); sa.setHostCard(c); // some extra for Dashing - if (sa.isDash()) { + if (sa.isDash() && c.isInPlay()) { c.setSVar("EndOfTurnLeavePlay", "Dash"); registerDelayedTrigger(sa, "Hand", Lists.newArrayList(c)); } + + ZoneType newZone = c.getZone().getZoneType(); + if (newZone != previousZone) { + table.put(previousZone, newZone, c); + } + table.triggerChangesZoneAll(game); } } From 19be5a456b41827e3b676d8550ca2f55601219da Mon Sep 17 00:00:00 2001 From: John Date: Sat, 6 Feb 2021 17:43:55 +0000 Subject: [PATCH 12/27] Update spirit_of_the_aldergard.txt --- forge-gui/res/cardsfolder/upcoming/spirit_of_the_aldergard.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/spirit_of_the_aldergard.txt b/forge-gui/res/cardsfolder/upcoming/spirit_of_the_aldergard.txt index f14b12d8577..8123194d9b3 100644 --- a/forge-gui/res/cardsfolder/upcoming/spirit_of_the_aldergard.txt +++ b/forge-gui/res/cardsfolder/upcoming/spirit_of_the_aldergard.txt @@ -5,7 +5,7 @@ PT:0/4 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigChange | TriggerDescription$ When CARDNAME enters the battlefield, search your library for a snow land card, reveal it, put it into your hand, then shuffle your library. SVar:TrigChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Land.Snow | ChangeNum$ 1 | ShuffleNonMandatory$ True S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | Description$ CARDNAME gets +1/+0 for each other snow permanent you control. -SVar:X:Count$Valid Permanent.Snow+YouCtrl +SVar:X:Count$Valid Permanent.Snow+Other+YouCtrl SVar:BuffedBy:Permanent.Snow DeckNeeds:Type$Snow Oracle:When Spirit of the Aldergard enters the battlefield, search your library for a snow land card, reveal it, put it into your hand, then shuffle your library.\nSpirit of the Aldergard gets +1/+0 for each other snow permanent you control. From 81d970662042751c0b26535ead2def36ca767de5 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 6 Feb 2021 21:35:02 +0000 Subject: [PATCH 13/27] Spectral Deluge CMC fix --- forge-gui/res/cardsfolder/upcoming/spectral_deluge.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/spectral_deluge.txt b/forge-gui/res/cardsfolder/upcoming/spectral_deluge.txt index ed997f3a545..6c9314c819b 100644 --- a/forge-gui/res/cardsfolder/upcoming/spectral_deluge.txt +++ b/forge-gui/res/cardsfolder/upcoming/spectral_deluge.txt @@ -1,7 +1,7 @@ Name:Spectral Deluge -ManaCost:2 U U +ManaCost:4 U U Types:Sorcery -A:SP$ ChangeZoneAll | Cost$ 2 U U | ChangeType$ Creature.toughnessLEX+OppCtrl | Origin$ Battlefield | Destination$ Hand | References$ X | TriggerDescription$ Return each creature your opponents control with toughness X or less to its owner’s hand, where X is the number of Islands you control. +A:SP$ ChangeZoneAll | Cost$ 4 U U | ChangeType$ Creature.toughnessLEX+OppCtrl | Origin$ Battlefield | Destination$ Hand | References$ X | TriggerDescription$ Return each creature your opponents control with toughness X or less to its owner’s hand, where X is the number of Islands you control. SVar:X:Count$Valid Island.YouCtrl K:Foretell:1 U U -Oracle:Return each creature your opponents control with toughness X or less to its owner’s hand, where X is the number of Islands you control.\nForetell {1}{U}{U} (During your turn, you may pay {2} and exile this card from your hand face down. Cast it on a later turn for its foretell cost.) \ No newline at end of file +Oracle:Return each creature your opponents control with toughness X or less to its owner’s hand, where X is the number of Islands you control.\nForetell {1}{U}{U} (During your turn, you may pay {2} and exile this card from your hand face down. Cast it on a later turn for its foretell cost.) From cc8e286933cf20b98ddd77e5b112aea3d6f1ed8d Mon Sep 17 00:00:00 2001 From: Bug Hunter Date: Sun, 7 Feb 2021 10:06:55 +0000 Subject: [PATCH 14/27] Fix World Tree missing Tap Cost --- forge-gui/res/cardsfolder/upcoming/the_world_tree.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/the_world_tree.txt b/forge-gui/res/cardsfolder/upcoming/the_world_tree.txt index 776c5eec81d..11fe01cb1c0 100644 --- a/forge-gui/res/cardsfolder/upcoming/the_world_tree.txt +++ b/forge-gui/res/cardsfolder/upcoming/the_world_tree.txt @@ -5,7 +5,7 @@ K:CARDNAME enters the battlefield tapped. A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}. S:Mode$ Continuous | Affected$ Land | AddAbility$ AnyMana | IsPresent$ Land.YouCtrl | PresentCompare$ GE6 | Description$ Lands you control have "{T}: Add one mana of any color." SVar:AnyMana:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | SpellDescription$ Add one mana of any color. -A:AB$ ChangeZone | Cost$ W W U U B B R R G G Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ God | ChangeNum$ XFetch | StackDescription$ SpellDescription | References$ XFetch | SpellDescription$ Search your library for any number of God cards, put them onto the battlefield, then shuffle your library. +A:AB$ ChangeZone | Cost$ W W U U B B R R G G T Sac<1/CARDNAME> | Origin$ Library | Destination$ Battlefield | ChangeType$ God | ChangeNum$ XFetch | StackDescription$ SpellDescription | References$ XFetch | SpellDescription$ Search your library for any number of God cards, put them onto the battlefield, then shuffle your library. SVar:XFetch:Count$TypeInYourLibrary.God DeckHints:Type$God Oracle:The World Tree enters the battlefield tapped.\n{T}:Add {G}.\nAs long as you control six or more lands, lands you control have "{T}:Add one mana of any color."\n{W}{W}{U}{U}{B}{B}{R}{R}{G}{G},{T}, Sacrifice The World Tree: Search your library for any number of God cards, put them onto the battlefield, then shuffle your library. From 09dc93f6c33c5731852b011347b9d03f8a647c69 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 7 Feb 2021 12:10:46 +0100 Subject: [PATCH 15/27] CardProperty: ThisTurnEntered and ThisTurnEnteredFrom for better check --- .../java/forge/game/card/CardProperty.java | 24 +++++++++++-------- .../src/main/java/forge/game/zone/Zone.java | 7 ++++++ forge-gui/res/cardsfolder/b/brought_back.txt | 2 +- .../cardsfolder/c/cry_of_the_carnarium.txt | 2 +- forge-gui/res/cardsfolder/f/faiths_reward.txt | 3 +-- forge-gui/res/cardsfolder/f/fell_shepherd.txt | 3 +-- .../cardsfolder/g/garna_the_bloodflame.txt | 3 +-- .../g/gerrard_weatherlight_hero.txt | 2 +- .../g/ghost_of_ramirez_depietro.txt | 2 +- forge-gui/res/cardsfolder/g/gleancrawler.txt | 5 ++-- forge-gui/res/cardsfolder/g/grim_return.txt | 3 +-- .../res/cardsfolder/k/krovikan_vampire.txt | 2 +- forge-gui/res/cardsfolder/l/lavaball_trap.txt | 2 +- .../cardsfolder/n/no_rest_for_the_wicked.txt | 3 +-- .../res/cardsfolder/s/salvager_of_ruin.txt | 2 +- .../res/cardsfolder/s/second_sunrise.txt | 3 +-- .../res/cardsfolder/t/thrilling_encore.txt | 2 +- .../res/cardsfolder/t/twilight_shepherd.txt | 3 +-- 18 files changed, 38 insertions(+), 35 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 2da6fca758d..e383e8135aa 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1035,17 +1035,21 @@ public class CardProperty { } } return false; - } else if (property.startsWith("ThisTurnEntered")) { - final String restrictions = property.split("ThisTurnEntered_")[1]; - final String[] res = restrictions.split("_"); - final ZoneType destination = ZoneType.smartValueOf(res[0]); - ZoneType origin = null; - if (res.length > 1 && res[1].equals("from")) { - origin = ZoneType.smartValueOf(res[2]); + } else if (property.equals("ThisTurnEntered")) { + // only check if it entered the Zone this turn + if (card.getTurnInZone() != game.getPhaseHandler().getTurn()) { + return false; } - List cards = CardUtil.getThisTurnEntered(destination, - origin, "Card", source); - if (!cards.contains(card)) { + } else if (property.startsWith("ThisTurnEnteredFrom")) { + final String restrictions = property.split("ThisTurnEnteredFrom_")[1]; + final String[] res = restrictions.split("_"); + final ZoneType origin = ZoneType.smartValueOf(res[0]); + + if (card.getTurnInZone() != game.getPhaseHandler().getTurn()) { + return false; + } + + if (card.getZone().isCardAddedThisTurn(card, origin)) { return false; } } else if (property.equals("DiscardedThisTurn")) { diff --git a/forge-game/src/main/java/forge/game/zone/Zone.java b/forge-game/src/main/java/forge/game/zone/Zone.java index 3de745e0d1b..950894eb990 100644 --- a/forge-game/src/main/java/forge/game/zone/Zone.java +++ b/forge-game/src/main/java/forge/game/zone/Zone.java @@ -211,6 +211,13 @@ public class Zone implements java.io.Serializable, Iterable { return getCardsAdded(cardsAddedLastTurn, origin); } + public final boolean isCardAddedThisTurn(final Card card, final ZoneType origin) { + if (!cardsAddedThisTurn.containsKey(origin)) { + return false; + } + return cardsAddedThisTurn.get(origin).contains(card); + } + private static List getCardsAdded(final MapOfLists cardsAdded, final ZoneType origin) { if (origin != null) { final Collection cards = cardsAdded.get(origin); diff --git a/forge-gui/res/cardsfolder/b/brought_back.txt b/forge-gui/res/cardsfolder/b/brought_back.txt index 885991837ec..cd8acfe2573 100644 --- a/forge-gui/res/cardsfolder/b/brought_back.txt +++ b/forge-gui/res/cardsfolder/b/brought_back.txt @@ -1,5 +1,5 @@ Name:Brought Back ManaCost:W W Types:Instant -A:SP$ ChangeZone | Cost$ W W | ValidTgts$ Permanent.YouOwn+ThisTurnEntered_Graveyard_from_Battlefield | TgtPrompt$ Select up to two target permanent cards in your graveyard that were put there from the battlefield this turn | TargetMin$ 0 | TargetMax$ 2 | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | SpellDescription$ Choose up to two target permanent cards in your graveyard that were put there from the battlefield this turn. Return them to the battlefield tapped. +A:SP$ ChangeZone | Cost$ W W | ValidTgts$ Permanent.YouOwn+ThisTurnEnteredFrom_Battlefield | TgtPrompt$ Select up to two target permanent cards in your graveyard that were put there from the battlefield this turn | TargetMin$ 0 | TargetMax$ 2 | Origin$ Graveyard | Destination$ Battlefield | Tapped$ True | SpellDescription$ Choose up to two target permanent cards in your graveyard that were put there from the battlefield this turn. Return them to the battlefield tapped. Oracle:Choose up to two target permanent cards in your graveyard that were put there from the battlefield this turn. Return them to the battlefield tapped. diff --git a/forge-gui/res/cardsfolder/c/cry_of_the_carnarium.txt b/forge-gui/res/cardsfolder/c/cry_of_the_carnarium.txt index c3753c455ec..fe232a3a0d2 100644 --- a/forge-gui/res/cardsfolder/c/cry_of_the_carnarium.txt +++ b/forge-gui/res/cardsfolder/c/cry_of_the_carnarium.txt @@ -2,5 +2,5 @@ Name:Cry of the Carnarium ManaCost:1 B B Types:Sorcery A:SP$ PumpAll | Cost$ 1 B B | ValidCards$ Creature | NumAtt$ -2 | NumDef$ -2 | IsCurse$ True | ReplaceDyingValid$ Creature | SubAbility$ ExileSomeCreatures | SpellDescription$ All creatures get -2/-2 until end of turn. Exile all creature cards in all graveyards that were put there from the battlefield this turn. If a creature would die this turn, exile it instead. -SVar:ExileSomeCreatures:DB$ ChangeZone | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Creature.nonToken | Origin$ Graveyard | Destination$ Exile | SpellDescription$ Exile all creature cards in all graveyards that were put there from the battlefield this turn. +SVar:ExileSomeCreatures:DB$ ChangeZone | Defined$ ValidGraveyard Creature.nonToken+ThisTurnEnteredFrom_Battlefield | Origin$ Graveyard | Destination$ Exile | SpellDescription$ Exile all creature cards in all graveyards that were put there from the battlefield this turn. Oracle:All creatures get -2/-2 until end of turn. Exile all creature cards in all graveyards that were put there from the battlefield this turn. If a creature would die this turn, exile it instead. diff --git a/forge-gui/res/cardsfolder/f/faiths_reward.txt b/forge-gui/res/cardsfolder/f/faiths_reward.txt index a5138be1544..0cb62397ef6 100644 --- a/forge-gui/res/cardsfolder/f/faiths_reward.txt +++ b/forge-gui/res/cardsfolder/f/faiths_reward.txt @@ -1,6 +1,5 @@ Name:Faith's Reward ManaCost:3 W Types:Instant -A:SP$ ChangeZone | Cost$ 3 W | Origin$ Graveyard | Destination$ Battlefield | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Permanent.YouOwn | SpellDescription$ Return to the battlefield all permanent cards in your graveyard that were put there from the battlefield this turn. -SVar:Picture:http://www.wizards.com/global/images/magic/general/faiths_reward.jpg +A:SP$ ChangeZone | Cost$ 3 W | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Permanent.YouOwn+ThisTurnEnteredFrom_Battlefield | SpellDescription$ Return to the battlefield all permanent cards in your graveyard that were put there from the battlefield this turn. Oracle:Return to the battlefield all permanent cards in your graveyard that were put there from the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/f/fell_shepherd.txt b/forge-gui/res/cardsfolder/f/fell_shepherd.txt index 13d81b6ad4b..f708baba763 100644 --- a/forge-gui/res/cardsfolder/f/fell_shepherd.txt +++ b/forge-gui/res/cardsfolder/f/fell_shepherd.txt @@ -3,7 +3,6 @@ ManaCost:5 B B Types:Creature Avatar PT:8/6 T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigReturn | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may return all creature cards put into your graveyard from the battlefield this turn to your hand. -SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Card.YouOwn+Creature +SVar:TrigReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ValidGraveyard Creature.YouOwn+ThisTurnEnteredFrom_Battlefield A:AB$ Pump | Cost$ B Sac<1/Creature.Other/another creature> | ValidTgts$ Creature | NumAtt$ -2 | NumDef$ -2 | SpellDescription$ Target creature gets -2/-2 until end of turn. -SVar:Picture:http://www.wizards.com/global/images/magic/general/fell_shepherd.jpg Oracle:Whenever Fell Shepherd deals combat damage to a player, you may return to your hand all creature cards that were put into your graveyard from the battlefield this turn.\n{B}, Sacrifice another creature: Target creature gets -2/-2 until end of turn. diff --git a/forge-gui/res/cardsfolder/g/garna_the_bloodflame.txt b/forge-gui/res/cardsfolder/g/garna_the_bloodflame.txt index a6110f52eae..2cdf9796d19 100644 --- a/forge-gui/res/cardsfolder/g/garna_the_bloodflame.txt +++ b/forge-gui/res/cardsfolder/g/garna_the_bloodflame.txt @@ -4,7 +4,6 @@ Types:Legendary Creature Human Warrior PT:3/3 K:Flash T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, return to your hand all creature cards in your graveyard that were put there from anywhere this turn. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ThisTurnEntered_Graveyard_Card.Creature+YouOwn+nonToken +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ValidGraveyard Creature.YouOwn+nonToken+ThisTurnEntered S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddKeyword$ Haste | Description$ Other creatures you control have haste. -SVar:Picture:http://www.wizards.com/global/images/magic/general/garna_the_bloodflame.jpg Oracle:Flash\nWhen Garna, the Bloodflame enters the battlefield, return to your hand all creature cards in your graveyard that were put there from anywhere this turn.\nOther creatures you control have haste. diff --git a/forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt b/forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt index cf7d0a7b04b..c0aa968ae90 100644 --- a/forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt +++ b/forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt @@ -5,5 +5,5 @@ PT:3/3 K:First Strike T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigExile | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, exile it and return to the battlefield all artifact and creature cards in your graveyard that were put there from the battlefield this turn. SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Exile | SubAbility$ DBReturn -SVar:DBReturn:DB$ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Card.Artifact+YouOwn,Card.Creature+YouOwn +SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Artifact.YouOwn+ThisTurnEnteredFrom_Battlefield,Creature.YouOwn+ThisTurnEnteredFrom_Battlefield Oracle:First strike\nWhen Gerrard, Weatherlight Hero dies, exile it and return to the battlefield all artifact and creature cards in your graveyard that were put there from the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/g/ghost_of_ramirez_depietro.txt b/forge-gui/res/cardsfolder/g/ghost_of_ramirez_depietro.txt index 298a1b07fb8..8719b744599 100755 --- a/forge-gui/res/cardsfolder/g/ghost_of_ramirez_depietro.txt +++ b/forge-gui/res/cardsfolder/g/ghost_of_ramirez_depietro.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Pirate Spirit PT:2/3 K:CantBeBlockedBy Creature.toughnessGE3 T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigChangeZone | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, choose up to one target card in any graveyard that has been discarded or put there from a library this turn. Put that card into its owner's hand. -SVar:TrigChangeZone:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.DiscardedThisTurn,Card.ThisTurnEntered_Graveyard_from_Library | TgtPrompt$ Choose up to one target card in any graveyard that has been discarded or put there from a library this turn +SVar:TrigChangeZone:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | Origin$ Graveyard | Destination$ Hand | ValidTgts$ Card.DiscardedThisTurn,Card.ThisTurnEnteredFrom_Library | TgtPrompt$ Choose up to one target card in any graveyard that has been discarded or put there from a library this turn K:Partner DeckHas:Ability$Graveyard DeckHints:Ability$Mill diff --git a/forge-gui/res/cardsfolder/g/gleancrawler.txt b/forge-gui/res/cardsfolder/g/gleancrawler.txt index 51f0a0c8332..be0ec8e1e2e 100644 --- a/forge-gui/res/cardsfolder/g/gleancrawler.txt +++ b/forge-gui/res/cardsfolder/g/gleancrawler.txt @@ -3,7 +3,6 @@ ManaCost:3 BG BG BG Types:Creature Insect Horror PT:6/6 K:Trample -T:Mode$Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChangeZone | TriggerDescription$ At the beginning of your end step, return to your hand all creature cards in your graveyard that were put there from the battlefield this turn. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Card.Creature+YouCtrl -SVar:Picture:http://www.wizards.com/global/images/magic/general/gleancrawler.jpg +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigChangeZone | TriggerDescription$ At the beginning of your end step, return to your hand all creature cards in your graveyard that were put there from the battlefield this turn. +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ValidGraveyard Creature.YouCtrl+ThisTurnEnteredFrom_Battlefield Oracle:Trample\nAt the beginning of your end step, return to your hand all creature cards in your graveyard that were put there from the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/g/grim_return.txt b/forge-gui/res/cardsfolder/g/grim_return.txt index d294b601570..d71ec166ac3 100644 --- a/forge-gui/res/cardsfolder/g/grim_return.txt +++ b/forge-gui/res/cardsfolder/g/grim_return.txt @@ -1,6 +1,5 @@ Name:Grim Return ManaCost:2 B Types:Instant -A:SP$ ChangeZone | Cost$ 2 B | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | ValidTgts$ Card.Creature+ThisTurnEntered_Graveyard_from_Battlefield | TgtPrompt$ Select target creature card in a graveyard that was put there from the battlefield this turn | SpellDescription$ Choose target creature card in a graveyard that was put there from the battlefield this turn. Put that card onto the battlefield under your control. -SVar:Picture:http://www.wizards.com/global/images/magic/general/grim_return.jpg +A:SP$ ChangeZone | Cost$ 2 B | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | ValidTgts$ Card.Creature+ThisTurnEnteredFrom_Battlefield | TgtPrompt$ Select target creature card in a graveyard that was put there from the battlefield this turn | SpellDescription$ Choose target creature card in a graveyard that was put there from the battlefield this turn. Put that card onto the battlefield under your control. Oracle:Choose target creature card in a graveyard that was put there from the battlefield this turn. Put that card onto the battlefield under your control. diff --git a/forge-gui/res/cardsfolder/k/krovikan_vampire.txt b/forge-gui/res/cardsfolder/k/krovikan_vampire.txt index de9fd12c992..3b683d2723a 100644 --- a/forge-gui/res/cardsfolder/k/krovikan_vampire.txt +++ b/forge-gui/res/cardsfolder/k/krovikan_vampire.txt @@ -9,7 +9,7 @@ SVar:LoseTrack:DB$ Pump | ForgetObjects$ TriggeredCard T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True T:Mode$ TurnBegin | Execute$ DBCleanup | Static$ True T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ Player | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE1 | IsPresent$ Card.Self | Execute$ TrigChange | TriggerDescription$ At the beginning of each end step, if a creature dealt damage by CARDNAME this turn died, put that card onto the battlefield under your control. Sacrifice it when you lose control of CARDNAME. -SVar:TrigChange:DB$ ChangeZoneAll | ChangeType$ Creature.IsRemembered+ThisTurnEntered_Graveyard_from_Battlefield | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ TrigDelay +SVar:TrigChange:DB$ ChangeZoneAll | ChangeType$ Creature.IsRemembered+ThisTurnEnteredFrom_Battlefield | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ TrigDelay SVar:TrigDelay:DB$ DelayedTrigger | Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | RememberObjects$ Remembered | Execute$ TrigSac | Secondary$ True | SubAbility$ DBCleanup | SpellDescription$ Sacrifice it when you lose control of CARDNAME. SVar:TrigSac:DB$ SacrificeAll | Defined$ DelayTriggerRemembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/l/lavaball_trap.txt b/forge-gui/res/cardsfolder/l/lavaball_trap.txt index fe68ee7f3f5..ae85148cc83 100644 --- a/forge-gui/res/cardsfolder/l/lavaball_trap.txt +++ b/forge-gui/res/cardsfolder/l/lavaball_trap.txt @@ -4,5 +4,5 @@ Types:Instant Trap SVar:AltCost:Cost$ 3 R R | CheckSVar$ LandsEntered | SVarCompare$ GE2 | References$ LandsEntered | Description$ If an opponent had two or more lands enter the battlefield under their control this turn, you may pay {3}{R}{R} rather than pay this spell's mana cost. A:SP$ Destroy | Cost$ 6 R R | TargetMin$ 2 | TargetMax$ 2 | ValidTgts$ Land | TgtPrompt$ Select two target lands | SubAbility$ DBDamageAll | SpellDescription$ Destroy two target lands. CARDNAME deals 4 damage to each creature. SVar:DBDamageAll:DB$ DamageAll | ValidCards$ Creature | NumDmg$ 4 | ValidDescription$ each creature. -SVar:LandsEntered:PlayerCountOpponents$HighestValid Card.ThisTurnEntered_Battlefield_Land.YouCtrl +SVar:LandsEntered:PlayerCountOpponents$HighestValid Land.YouCtrl+ThisTurnEntered Oracle:If an opponent had two or more lands enter the battlefield under their control this turn, you may pay {3}{R}{R} rather than pay this spell's mana cost.\nDestroy two target lands. Lavaball Trap deals 4 damage to each creature. diff --git a/forge-gui/res/cardsfolder/n/no_rest_for_the_wicked.txt b/forge-gui/res/cardsfolder/n/no_rest_for_the_wicked.txt index 3099d16ca76..9fc2dae7efe 100644 --- a/forge-gui/res/cardsfolder/n/no_rest_for_the_wicked.txt +++ b/forge-gui/res/cardsfolder/n/no_rest_for_the_wicked.txt @@ -1,6 +1,5 @@ Name:No Rest for the Wicked ManaCost:1 B Types:Enchantment -A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | Origin$ Graveyard | Destination$ Hand | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Card.Creature+YouCtrl | SpellDescription$ Return to your hand all creature cards in your graveyard that were put there from the battlefield this turn. -SVar:Picture:http://www.wizards.com/global/images/magic/general/no_rest_for_the_wicked.jpg +A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | Origin$ Graveyard | Destination$ Hand | Defined$ ValidGraveyard Creature.YouOwn+ThisTurnEnteredFrom_Battlefield | SpellDescription$ Return to your hand all creature cards in your graveyard that were put there from the battlefield this turn. Oracle:Sacrifice No Rest for the Wicked: Return to your hand all creature cards in your graveyard that were put there from the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/s/salvager_of_ruin.txt b/forge-gui/res/cardsfolder/s/salvager_of_ruin.txt index c571310cc54..580cc255061 100644 --- a/forge-gui/res/cardsfolder/s/salvager_of_ruin.txt +++ b/forge-gui/res/cardsfolder/s/salvager_of_ruin.txt @@ -2,6 +2,6 @@ Name:Salvager of Ruin ManaCost:3 Types:Artifact Creature Construct PT:2/1 -A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | ValidTgts$ Permanent.YouOwn+ThisTurnEntered_Graveyard_from_Battlefield | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Choose target permanent card in your graveyard that was put there from the battlefield this turn | SpellDescription$ Choose target permanent card in your graveyard that was put there from the battlefield this turn. Return it to your hand. +A:AB$ ChangeZone | Cost$ Sac<1/CARDNAME> | ValidTgts$ Permanent.YouOwn+ThisTurnEnteredFrom_Battlefield | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Choose target permanent card in your graveyard that was put there from the battlefield this turn | SpellDescription$ Choose target permanent card in your graveyard that was put there from the battlefield this turn. Return it to your hand. AI:RemoveDeck:Random Oracle:Sacrifice Salvager of Ruin: Choose target permanent card in your graveyard that was put there from the battlefield this turn. Return it to your hand. diff --git a/forge-gui/res/cardsfolder/s/second_sunrise.txt b/forge-gui/res/cardsfolder/s/second_sunrise.txt index 0f01fc4d791..e05814dbb39 100644 --- a/forge-gui/res/cardsfolder/s/second_sunrise.txt +++ b/forge-gui/res/cardsfolder/s/second_sunrise.txt @@ -1,6 +1,5 @@ Name:Second Sunrise ManaCost:1 W W Types:Instant -A:SP$ChangeZone | Cost$ 1 W W | Origin$ Graveyard | Destination$ Battlefield | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Card.Artifact,Card.Creature,Card.Enchantment,Card.Land | SpellDescription$ Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. -SVar:Picture:http://www.wizards.com/global/images/magic/general/second_sunrise.jpg +A:SP$ChangeZone | Cost$ 1 W W | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Artifact.ThisTurnEnteredFrom_Battlefield,Creature.ThisTurnEnteredFrom_Battlefield,Enchantment.ThisTurnEnteredFrom_Battlefield,Land.ThisTurnEnteredFrom_Battlefield | SpellDescription$ Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. Oracle:Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/t/thrilling_encore.txt b/forge-gui/res/cardsfolder/t/thrilling_encore.txt index 80560927db9..d3d1b9ac9f2 100644 --- a/forge-gui/res/cardsfolder/t/thrilling_encore.txt +++ b/forge-gui/res/cardsfolder/t/thrilling_encore.txt @@ -1,5 +1,5 @@ Name:Thrilling Encore ManaCost:4 B Types:Instant -A:SP$ ChangeZone | Cost$ 4 B | Origin$ Graveyard | Destination$ Battlefield | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Creature.nonToken | GainControl$ True | SpellDescription$ Put onto the battlefield under your control all creature cards in all graveyards that were put there from the battlefield this turn. +A:SP$ ChangeZone | Cost$ 4 B | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Creature.ThisTurnEnteredFrom_Battlefield | GainControl$ True | SpellDescription$ Put onto the battlefield under your control all creature cards in all graveyards that were put there from the battlefield this turn. Oracle:Put onto the battlefield under your control all creature cards in all graveyards that were put there from the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/t/twilight_shepherd.txt b/forge-gui/res/cardsfolder/t/twilight_shepherd.txt index 25bed3fa4c0..a4db8b058ac 100644 --- a/forge-gui/res/cardsfolder/t/twilight_shepherd.txt +++ b/forge-gui/res/cardsfolder/t/twilight_shepherd.txt @@ -6,6 +6,5 @@ K:Flying K:Vigilance K:Persist T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, return to your hand all cards in your graveyard that were put there from the battlefield this turn. -SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ThisTurnEntered_Graveyard_from_Battlefield_Card.YouCtrl -SVar:Picture:http://www.wizards.com/global/images/magic/general/twilight_shepherd.jpg +SVar:TrigChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ValidGraveyard Card.YouOwn+ThisTurnEnteredFrom_Battlefield Oracle:Flying, vigilance\nWhen Twilight Shepherd enters the battlefield, return to your hand all cards in your graveyard that were put there from the battlefield this turn.\nPersist (When this creature dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner's control with a -1/-1 counter on it.) From 02426617eb0ad0b1b104ce8a6e39da5754bfa6ba Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 7 Feb 2021 16:54:12 +0100 Subject: [PATCH 16/27] hotfix isCardAddedThisTurn --- forge-game/src/main/java/forge/game/card/CardProperty.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index a731c4c48d7..369eaab2527 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1053,7 +1053,7 @@ public class CardProperty { return false; } - if (card.getZone().isCardAddedThisTurn(card, origin)) { + if (!card.getZone().isCardAddedThisTurn(card, origin)) { return false; } } else if (property.equals("DiscardedThisTurn")) { From a267b800b653fcbbcf2e18c5e905896ebd9cac4d Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 7 Feb 2021 17:26:09 +0100 Subject: [PATCH 17/27] GameAction: when movedToStack, setSplitStateToPlayAbility --- forge-ai/src/main/java/forge/ai/ComputerUtil.java | 3 --- forge-game/src/main/java/forge/game/GameAction.java | 7 +++++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index 02f4d0fe1a0..4424b60a1bb 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -108,9 +108,6 @@ public class ComputerUtil { if (chooseTargets != null) { chooseTargets.run(); } - if (sa.isBestow()) { - sa.getHostCard().animateBestow(); - } final Cost cost = sa.getPayCosts(); // TODO: update mana color conversion for Daxos of Meletis diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index b101c679d10..b83adf80f02 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -618,8 +618,11 @@ public class GameAction { } public final Card moveToStack(final Card c, SpellAbility cause, Map params) { - final Zone stack = game.getStackZone(); - return moveTo(stack, c, cause, params); + Card result = moveTo(game.getStackZone(), c, cause, params); + if (cause != null && cause.isSpell() && result.equals(cause.getHostCard())) { + result.setSplitStateToPlayAbility(cause); + } + return result; } public final Card moveToGraveyard(final Card c, SpellAbility cause) { From 9e704b586018ac85f9e6b39d721dbd007075693e Mon Sep 17 00:00:00 2001 From: Adam Pantel <> Date: Sun, 7 Feb 2021 15:04:40 -0500 Subject: [PATCH 18/27] Bag of Holding fix --- forge-gui/res/cardsfolder/b/bag_of_holding.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/b/bag_of_holding.txt b/forge-gui/res/cardsfolder/b/bag_of_holding.txt index e0b7a0acf30..449061389f9 100644 --- a/forge-gui/res/cardsfolder/b/bag_of_holding.txt +++ b/forge-gui/res/cardsfolder/b/bag_of_holding.txt @@ -2,7 +2,7 @@ Name:Bag of Holding ManaCost:1 Types:Artifact T:Mode$ Discarded | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ Whenever you discard a card, exile that card from your graveyard. -SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredCardLKICopy | Origin$ Graveyard | Destination$ Exile +SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile A:AB$ Draw | Cost$ 2 T | NumCards$ 1 | SpellDescription$ Draw a card, then discard a card. | SubAbility$ DBDiscard SVar:DBDiscard:DB$Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose AI:RemoveDeck:All From ec0fc55bbe3e5d7d188222c055a132616e1409d8 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 7 Feb 2021 22:12:26 +0100 Subject: [PATCH 19/27] Fix exiled cards staying playable after turn ends --- forge-gui/res/cardsfolder/m/magus_of_the_mind.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/m/magus_of_the_mind.txt b/forge-gui/res/cardsfolder/m/magus_of_the_mind.txt index 9954c0791cc..19d358c2d68 100644 --- a/forge-gui/res/cardsfolder/m/magus_of_the_mind.txt +++ b/forge-gui/res/cardsfolder/m/magus_of_the_mind.txt @@ -4,7 +4,7 @@ Types:Creature Human Wizard PT:4/5 A:AB$ Shuffle | Cost$ U T Sac<1/CARDNAME> | SubAbility$ DBExile | SpellDescription$ Shuffle your library, then exile the top X cards, where X is one plus the number of spells cast this turn. Until end of turn, you may play cards exiled this way without paying their mana costs. SVar:DBExile:DB$ Dig | Defined$ You | DestinationZone$ Exile | DigNum$ X | ChangeNum$ All | References$ X | RememberChanged$ True | SubAbility$ DBEffect -SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ Play | References$ Play | SubAbility$ DBCleanup +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ Play | References$ Play | SubAbility$ DBCleanup | ForgetOnMoved$ Exile SVar:Play:Mode$ Continuous | MayPlay$ True | MayPlayWithoutManaCost$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play remembered card. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Count$ThisTurnCast_Card/Plus.1 From 39442b0f01a04e2230b3d1f5a314edd55f2ed620 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 7 Feb 2021 22:27:41 +0100 Subject: [PATCH 20/27] Fix shard cost --- forge-gui/res/tokenscripts/shard.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/tokenscripts/shard.txt b/forge-gui/res/tokenscripts/shard.txt index be1c1e47990..14e9f257369 100644 --- a/forge-gui/res/tokenscripts/shard.txt +++ b/forge-gui/res/tokenscripts/shard.txt @@ -1,6 +1,6 @@ Name:Shard ManaCost:no cost Types:Enchantment -A:AB$ Scry | Cost$ Sac<2/CARDNAME> | CostDesc$ {2}, Sacrifice this enchantment: | ScryNum$ 1 | SubAbility$ DBDraw | StackDescription$ SpellDescription | SpellDescription$ Scry 1, then draw a card. +A:AB$ Scry | Cost$ 2 Sac<1/CARDNAME> | CostDesc$ {2}, Sacrifice this enchantment: | ScryNum$ 1 | SubAbility$ DBDraw | StackDescription$ SpellDescription | SpellDescription$ Scry 1, then draw a card. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | StackDescription$ None Oracle:{2}, Sacrifice this enchantment: Scry 1, then draw a card. From 66b199fcb329a3fbf508551aeba13b6161de3536 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 8 Feb 2021 02:16:29 +0100 Subject: [PATCH 21/27] fix ThisTurnEntered usage --- forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt | 2 +- forge-gui/res/cardsfolder/s/second_sunrise.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt b/forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt index c0aa968ae90..9f017a9d46d 100644 --- a/forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt +++ b/forge-gui/res/cardsfolder/g/gerrard_weatherlight_hero.txt @@ -5,5 +5,5 @@ PT:3/3 K:First Strike T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigExile | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, exile it and return to the battlefield all artifact and creature cards in your graveyard that were put there from the battlefield this turn. SVar:TrigExile:DB$ ChangeZone | Defined$ TriggeredNewCardLKICopy | Origin$ Graveyard | Destination$ Exile | SubAbility$ DBReturn -SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Artifact.YouOwn+ThisTurnEnteredFrom_Battlefield,Creature.YouOwn+ThisTurnEnteredFrom_Battlefield +SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Artifact,Creature.YouOwn+ThisTurnEnteredFrom_Battlefield Oracle:First strike\nWhen Gerrard, Weatherlight Hero dies, exile it and return to the battlefield all artifact and creature cards in your graveyard that were put there from the battlefield this turn. diff --git a/forge-gui/res/cardsfolder/s/second_sunrise.txt b/forge-gui/res/cardsfolder/s/second_sunrise.txt index e05814dbb39..20a3a92b110 100644 --- a/forge-gui/res/cardsfolder/s/second_sunrise.txt +++ b/forge-gui/res/cardsfolder/s/second_sunrise.txt @@ -1,5 +1,5 @@ Name:Second Sunrise ManaCost:1 W W Types:Instant -A:SP$ChangeZone | Cost$ 1 W W | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Artifact.ThisTurnEnteredFrom_Battlefield,Creature.ThisTurnEnteredFrom_Battlefield,Enchantment.ThisTurnEnteredFrom_Battlefield,Land.ThisTurnEnteredFrom_Battlefield | SpellDescription$ Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. +A:SP$ChangeZone | Cost$ 1 W W | Origin$ Graveyard | Destination$ Battlefield | Defined$ ValidGraveyard Artifact,Creature,Enchantment,Land.ThisTurnEnteredFrom_Battlefield | SpellDescription$ Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. Oracle:Each player returns to the battlefield all artifact, creature, enchantment, and land cards in their graveyard that were put there from the battlefield this turn. From 113fc4ee36d99d247ea1dc4c713b5db2d1c41a64 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 8 Feb 2021 04:23:21 +0000 Subject: [PATCH 22/27] revert parallax_wave.txt (seems it works correctly now with the latest changes) closes #1713 --- forge-gui/res/cardsfolder/p/parallax_wave.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/p/parallax_wave.txt b/forge-gui/res/cardsfolder/p/parallax_wave.txt index afe19bab11e..eb087bdc4b1 100644 --- a/forge-gui/res/cardsfolder/p/parallax_wave.txt +++ b/forge-gui/res/cardsfolder/p/parallax_wave.txt @@ -2,10 +2,10 @@ Name:Parallax Wave ManaCost:2 W W Types:Enchantment K:Fading:5 -A:AB$ ChangeZone | Cost$ SubCounter<1/FADE> | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | RememberTargets$ True | SpellDescription$ Exile target creature. +A:AB$ ChangeZone | Cost$ SubCounter<1/FADE> | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | Imprint$ True | SpellDescription$ Exile target creature. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, each player returns to the battlefield all cards they own exiled with CARDNAME. -SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered+ExiledWithSource | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup -SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True +SVar:TrigReturn:DB$ ChangeZone | Defined$ Imprinted | Origin$ Exile | Destination$ Battlefield | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True SVar:PlayMain1:TRUE AI:RemoveDeck:All SVar:Picture:http://www.wizards.com/global/images/magic/general/parallax_wave.jpg From 01c7aa588983632935b78134e51684da8db78df1 Mon Sep 17 00:00:00 2001 From: Bug Hunter Date: Mon, 8 Feb 2021 19:09:38 +0000 Subject: [PATCH 23/27] PlayEffect: support restrictions for both MDFC sides & split halves --- .../main/java/forge/ai/ability/PlayAi.java | 20 ++++++++++++ .../src/main/java/forge/game/ForgeScript.java | 6 ++++ .../java/forge/game/ability/AbilityUtils.java | 9 +++++- .../game/ability/effects/PlayEffect.java | 32 +++++++++++++++++-- .../res/cardsfolder/b/barals_expertise.txt | 6 ++-- forge-gui/res/cardsfolder/c/coveted_prize.txt | 2 +- .../res/cardsfolder/e/electrodominance.txt | 6 ++-- .../res/cardsfolder/k/kari_zevs_expertise.txt | 6 ++-- .../res/cardsfolder/r/rishkars_expertise.txt | 6 ++-- .../res/cardsfolder/s/srams_expertise.txt | 6 ++-- .../res/cardsfolder/y/yahennis_expertise.txt | 6 ++-- 11 files changed, 82 insertions(+), 23 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/PlayAi.java b/forge-ai/src/main/java/forge/ai/ability/PlayAi.java index 7168f4c911e..443fb1eacfa 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PlayAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PlayAi.java @@ -1,6 +1,9 @@ package forge.ai.ability; import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; + import forge.ai.*; import forge.card.CardStateName; import forge.card.CardTypeView; @@ -14,11 +17,13 @@ import forge.game.player.Player; import forge.game.player.PlayerActionConfirmMode; import forge.game.spellability.Spell; import forge.game.spellability.SpellAbility; +import forge.game.spellability.SpellAbilityPredicates; import forge.game.spellability.SpellPermanent; import forge.game.spellability.TargetRestrictions; import forge.game.zone.ZoneType; import forge.util.MyRandom; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -55,6 +60,21 @@ public class PlayAi extends SpellAbilityAi { } } + if (sa.hasParam("ValidSA")) { + final String valid[] = {sa.getParam("ValidSA")}; + final Iterator itr = cards.iterator(); + while (itr.hasNext()) { + final Card c = itr.next(); + final List validSA = Lists.newArrayList(Iterables.filter(AbilityUtils.getBasicSpellsFromPlayEffect(c, ai), SpellAbilityPredicates.isValid(valid, ai , c, sa))); + if (validSA.size() == 0) { + itr.remove(); + } + } + if (cards.isEmpty()) { + return false; + } + } + if (game.getRules().hasAppliedVariant(GameType.MoJhoSto) && source.getName().equals("Jhoira of the Ghitu Avatar")) { // Additional logic for MoJhoSto: // Do not activate Jhoira too early, usually there are few good targets diff --git a/forge-game/src/main/java/forge/game/ForgeScript.java b/forge-game/src/main/java/forge/game/ForgeScript.java index bf35e289bad..0565c8981e5 100644 --- a/forge-game/src/main/java/forge/game/ForgeScript.java +++ b/forge-game/src/main/java/forge/game/ForgeScript.java @@ -177,6 +177,12 @@ public class ForgeScript { return sa.getActivatingPlayer().equals(sourceController); } else if (property.equals("OppCtrl")) { return sa.getActivatingPlayer().isOpponentOf(sourceController); + } else if (property.startsWith("cmc")) { + int y = sa.getPayCosts().getTotalMana().getCMC(); + int x = AbilityUtils.calculateAmount(spellAbility.getHostCard(), property.substring(5), spellAbility); + if (!Expressions.compare(y, property, x)) { + return false; + } } else if (sa.getHostCard() != null) { return sa.getHostCard().hasProperty(property, sourceController, source, spellAbility); } diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 6ea3b8dfbc6..68d68535008 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -3,7 +3,10 @@ package forge.game.ability; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; 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.card.ColorSet; import forge.card.MagicColor; @@ -1814,7 +1817,11 @@ public class AbilityUtils { public static final List getBasicSpellsFromPlayEffect(final Card tgtCard, final Player controller) { List sas = new ArrayList<>(); - for (SpellAbility s : tgtCard.getBasicSpells()) { + List list = Lists.newArrayList(tgtCard.getBasicSpells()); + if (tgtCard.isModal()) { + list.addAll(Lists.newArrayList(tgtCard.getBasicSpells(tgtCard.getState(CardStateName.Modal)))); + } + for (SpellAbility s : list) { final Spell newSA = (Spell) s.copy(); newSA.setActivatingPlayer(controller); SpellAbilityRestriction res = new SpellAbilityRestriction(); diff --git a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java index 1bceee39de1..17490640e78 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PlayEffect.java @@ -1,6 +1,7 @@ package forge.game.ability.effects; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -28,6 +29,7 @@ import forge.game.replacement.ReplacementHandler; import forge.game.replacement.ReplacementLayer; import forge.game.spellability.AlternativeCost; import forge.game.spellability.SpellAbility; +import forge.game.spellability.SpellAbilityPredicates; import forge.game.trigger.TriggerType; import forge.game.zone.Zone; import forge.game.zone.ZoneType; @@ -82,7 +84,7 @@ public class PlayEffect extends SpellAbilityEffect { tgtCards = new CardCollection( AbilityUtils.filterListByType(game.getCardsIn(zones), sa.getParam("Valid"), sa) ); - if ( sa.hasParam("ShowCards") ) { + if (sa.hasParam("ShowCards")) { showCards = new CardCollection(AbilityUtils.filterListByType(game.getCardsIn(zones), sa.getParam("ShowCards"), sa)); } } @@ -102,7 +104,7 @@ public class PlayEffect extends SpellAbilityEffect { final CardCollection choice = new CardCollection(); final String num = sa.hasParam("RandomNum") ? sa.getParam("RandomNum") : "1"; int ncopied = AbilityUtils.calculateAmount(source, num, sa); - while(ncopied > 0) { + while (ncopied > 0) { final PaperCard cp = Aggregates.random(copysource); final Card possibleCard = Card.fromPaperCard(cp, sa.getActivatingPlayer()); // Need to temporarily set the Owner so the Game is set @@ -145,6 +147,21 @@ public class PlayEffect extends SpellAbilityEffect { return; } + if (sa.hasParam("ValidSA")) { + final String valid[] = {sa.getParam("ValidSA")}; + final Iterator itr = tgtCards.iterator(); + while (itr.hasNext()) { + final Card c = itr.next(); + final List validSA = Lists.newArrayList(Iterables.filter(AbilityUtils.getBasicSpellsFromPlayEffect(c, controller), SpellAbilityPredicates.isValid(valid, controller , c, sa))); + if (validSA.size() == 0) { + itr.remove(); + } + } + if (tgtCards.isEmpty()) { + return; + } + } + if (sa.hasParam("Amount") && sa.getParam("Amount").equals("All")) { amount = tgtCards.size(); } @@ -214,7 +231,12 @@ public class PlayEffect extends SpellAbilityEffect { } // get basic spells (no flashback, etc.) - final List sas = AbilityUtils.getBasicSpellsFromPlayEffect(tgtCard, controller); + List sas = AbilityUtils.getBasicSpellsFromPlayEffect(tgtCard, controller); + if (sa.hasParam("ValidSA")) { + final String valid[] = {sa.getParam("ValidSA")}; + sas = Lists.newArrayList(Iterables.filter(sas, SpellAbilityPredicates.isValid(valid, controller , source, sa))); + } + if (sas.isEmpty()) { continue; } @@ -233,6 +255,10 @@ public class PlayEffect extends SpellAbilityEffect { // For Illusionary Mask effect tgtSA = CardFactoryUtil.abilityMorphDown(tgtCard); } + // in case player canceled from choice dialog + if (tgtSA == null) { + continue; + } final boolean noManaCost = sa.hasParam("WithoutManaCost"); if (noManaCost) { diff --git a/forge-gui/res/cardsfolder/b/barals_expertise.txt b/forge-gui/res/cardsfolder/b/barals_expertise.txt index 558dc4e6ea5..5edfaaf6aba 100644 --- a/forge-gui/res/cardsfolder/b/barals_expertise.txt +++ b/forge-gui/res/cardsfolder/b/barals_expertise.txt @@ -1,7 +1,7 @@ Name:Baral's Expertise ManaCost:3 U U Types:Sorcery -A:SP$ ChangeZone | Cost$ 3 U U | TargetMin$ 0 | TargetMax$ 3 | ValidTgts$ Artifact,Creature | TgtPrompt$ Select target artifact or creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBPlay | SpellDescription$ Return up to three target artifacts and/or creatures to their owners' hands. You may cast a card with converted mana cost 4 or less from your hand without paying its mana cost. -SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn+cmcLE4 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True +A:SP$ ChangeZone | Cost$ 3 U U | TargetMin$ 0 | TargetMax$ 3 | ValidTgts$ Artifact,Creature | TgtPrompt$ Select target artifact or creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBPlay | SpellDescription$ Return up to three target artifacts and/or creatures to their owners' hands. You may cast a spell with converted mana cost 4 or less from your hand without paying its mana cost. +SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn | ValidSA$ Spell.cmcLE4 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/barals_expertise.jpg -Oracle:Return up to three target artifacts and/or creatures to their owners' hands.\nYou may cast a card with converted mana cost 4 or less from your hand without paying its mana cost. \ No newline at end of file +Oracle:Return up to three target artifacts and/or creatures to their owners' hands.\nYou may cast a spell with converted mana cost 4 or less from your hand without paying its mana cost. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/c/coveted_prize.txt b/forge-gui/res/cardsfolder/c/coveted_prize.txt index f4c05ff38ea..2ce756671cf 100755 --- a/forge-gui/res/cardsfolder/c/coveted_prize.txt +++ b/forge-gui/res/cardsfolder/c/coveted_prize.txt @@ -4,7 +4,7 @@ Types:Sorcery S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | References$ X | Description$ This spell costs {1} less to cast for each creature in your party. SVar:X:Count$Party A:SP$ ChangeZone | Cost$ 4 B | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | SubAbility$ DBPlay | StackDescription$ SpellDescription | SpellDescription$ Search your library for a card, put it into your hand, then shuffle your library. If you have a full party, you may cast a spell with converted mana cost 4 or less from your hand without paying its mana cost. -SVar:DBPlay:DB$ Play | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ4 | References$ X | Optional$ True | Valid$ Card.nonLand+YouOwn+cmcLE4 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | StackDescription$ None +SVar:DBPlay:DB$ Play | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ4 | References$ X | Optional$ True | Valid$ Card.nonLand+YouOwn | ValidSA$ Spell.cmcLE4 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | StackDescription$ None DeckHas:Ability$Party DeckHints:Type$Cleric|Rogue|Warrior|Wizard Oracle:This spell costs {1} less to cast for each creature in your party. (Your party consists of up to one each of Cleric, Rogue, Warrior, and Wizard.)\nSearch your library for a card, put it into your hand, then shuffle your library. If you have a full party, you may cast a spell with converted mana cost 4 or less from your hand without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/e/electrodominance.txt b/forge-gui/res/cardsfolder/e/electrodominance.txt index 9d272b3eea8..2da42bca1b5 100644 --- a/forge-gui/res/cardsfolder/e/electrodominance.txt +++ b/forge-gui/res/cardsfolder/e/electrodominance.txt @@ -1,7 +1,7 @@ Name:Electrodominance ManaCost:X R R Types:Instant -A:SP$ DealDamage | Cost$ X R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | References$ X | SubAbility$ DBPlay | SpellDescription$ CARDNAME deals X damage to any target. You may cast a card with converted mana cost X or less from your hand without paying its mana cost. -SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn+cmcLEX | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True | References$ X +A:SP$ DealDamage | Cost$ X R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | References$ X | SubAbility$ DBPlay | SpellDescription$ CARDNAME deals X damage to any target. You may cast a spell with converted mana cost X or less from your hand without paying its mana cost. +SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn | ValidSA$ Spell.cmcLEX | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True | References$ X SVar:X:Count$xPaid -Oracle:Electrodominance deals X damage to any target. You may cast a card with converted mana cost X or less from your hand without paying its mana cost. +Oracle:Electrodominance deals X damage to any target. You may cast a spell with converted mana cost X or less from your hand without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/k/kari_zevs_expertise.txt b/forge-gui/res/cardsfolder/k/kari_zevs_expertise.txt index 9c8ad5fa108..e267485ae52 100644 --- a/forge-gui/res/cardsfolder/k/kari_zevs_expertise.txt +++ b/forge-gui/res/cardsfolder/k/kari_zevs_expertise.txt @@ -1,7 +1,7 @@ Name:Kari Zev's Expertise ManaCost:1 R R Types:Sorcery -A:SP$ GainControl | Cost$ 1 R R | ValidTgts$ Creature,Vehicle | TgtPrompt$ Select target creature or vehicle | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SubAbility$ DBCast | SpellDescription$ Gain control of target creature or Vehicle until end of turn. Untap it. It gains haste until end of turn. You may cast a card with converted mana cost 2 or less from your hand without paying its mana cost. -SVar:DBCast:DB$ Play | ValidZone$ Hand | Valid$ Card.YouOwn+nonLand+cmcLE2 | Controller$ You | WithoutManaCost$ True | Optional$ True | Amount$ 1 +A:SP$ GainControl | Cost$ 1 R R | ValidTgts$ Creature,Vehicle | TgtPrompt$ Select target creature or vehicle | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SubAbility$ DBCast | SpellDescription$ Gain control of target creature or Vehicle until end of turn. Untap it. It gains haste until end of turn. You may cast a spell with converted mana cost 2 or less from your hand without paying its mana cost. +SVar:DBCast:DB$ Play | ValidZone$ Hand | Valid$ Card.YouOwn+nonLand | ValidSA$ Spell.cmcLE2 | Controller$ You | WithoutManaCost$ True | Optional$ True | Amount$ 1 SVar:Picture:http://www.wizards.com/global/images/magic/general/kari_zevs_expertise.jpg -Oracle:Gain control of target creature or Vehicle until end of turn. Untap it. It gains haste until end of turn.\nYou may cast a card with converted mana cost 2 or less from your hand without paying its mana cost. +Oracle:Gain control of target creature or Vehicle until end of turn. Untap it. It gains haste until end of turn.\nYou may cast a spell with converted mana cost 2 or less from your hand without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/r/rishkars_expertise.txt b/forge-gui/res/cardsfolder/r/rishkars_expertise.txt index b9f2d53b08c..e0a1599eb5b 100644 --- a/forge-gui/res/cardsfolder/r/rishkars_expertise.txt +++ b/forge-gui/res/cardsfolder/r/rishkars_expertise.txt @@ -1,8 +1,8 @@ Name:Rishkar's Expertise ManaCost:4 G G Types:Sorcery -A:SP$ Draw | Cost$ 4 G G | NumCards$ X | References$ X | SubAbility$ DBPlay | SpellDescription$ Draw cards equal to the greatest power among creatures you control. You may cast a card with converted mana cost 5 or less from your hand without paying its mana cost. +A:SP$ Draw | Cost$ 4 G G | NumCards$ X | References$ X | SubAbility$ DBPlay | SpellDescription$ Draw cards equal to the greatest power among creatures you control. You may cast a spell with converted mana cost 5 or less from your hand without paying its mana cost. SVar:X:Count$GreatestPower_Creature.YouCtrl -SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn+cmcLE5 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True +SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn | ValidSA$ Spell.cmcLE5 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/rishkars_expertise.jpg -Oracle:Draw cards equal to the greatest power among creatures you control.\nYou may cast a card with converted mana cost 5 or less from your hand without paying its mana cost. +Oracle:Draw cards equal to the greatest power among creatures you control.\nYou may cast a spell with converted mana cost 5 or less from your hand without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/s/srams_expertise.txt b/forge-gui/res/cardsfolder/s/srams_expertise.txt index 1e4e4043f37..e22dc46ee7e 100644 --- a/forge-gui/res/cardsfolder/s/srams_expertise.txt +++ b/forge-gui/res/cardsfolder/s/srams_expertise.txt @@ -1,7 +1,7 @@ Name:Sram's Expertise ManaCost:2 W W Types:Sorcery -A:SP$ Token | Cost$ 2 W W | TokenAmount$ 3 | TokenScript$ c_1_1_a_servo | TokenOwner$ You | LegacyImage$ c 1 1 a servo aer | SubAbility$ DBPlay | SpellDescription$ Create three 1/1 colorless Servo artifact creature tokens. You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost. -SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn+cmcLE3 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True +A:SP$ Token | Cost$ 2 W W | TokenAmount$ 3 | TokenScript$ c_1_1_a_servo | TokenOwner$ You | LegacyImage$ c 1 1 a servo aer | SubAbility$ DBPlay | SpellDescription$ Create three 1/1 colorless Servo artifact creature tokens. You may cast a spell with converted mana cost 3 or less from your hand without paying its mana cost. +SVar:DBPlay:DB$ Play | Valid$ Card.nonLand+YouOwn | ValidSA$ Spell.cmcLE3 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/srams_expertise.jpg -Oracle:Create three 1/1 colorless Servo artifact creature tokens.\nYou may cast a card with converted mana cost 3 or less from your hand without paying its mana cost. +Oracle:Create three 1/1 colorless Servo artifact creature tokens.\nYou may cast a spell with converted mana cost 3 or less from your hand without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/y/yahennis_expertise.txt b/forge-gui/res/cardsfolder/y/yahennis_expertise.txt index 3e686e4d23f..a059feb3578 100644 --- a/forge-gui/res/cardsfolder/y/yahennis_expertise.txt +++ b/forge-gui/res/cardsfolder/y/yahennis_expertise.txt @@ -1,7 +1,7 @@ Name:Yahenni's Expertise ManaCost:2 B B Types:Sorcery -A:SP$ PumpAll | Cost$ 2 B B | ValidCards$ Creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True | SubAbility$ DBPlay | SpellDescription$ All creatures get -3/-3 until end of turn. You may cast a card with converted mana cost 3 or less from your hand without paying its mana cost. -SVar:DBPlay:DB$Play | Valid$ Card.nonLand+YouOwn+cmcLE3 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True +A:SP$ PumpAll | Cost$ 2 B B | ValidCards$ Creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True | SubAbility$ DBPlay | SpellDescription$ All creatures get -3/-3 until end of turn. You may cast a spell with converted mana cost 3 or less from your hand without paying its mana cost. +SVar:DBPlay:DB$Play | Valid$ Card.nonLand+YouOwn | ValidSA$ Spell.cmcLE3 | ValidZone$ Hand | WithoutManaCost$ True | Amount$ 1 | Controller$ You | Optional$ True SVar:Picture:http://www.wizards.com/global/images/magic/general/yahennis_expertise.jpg -Oracle:All creatures get -3/-3 until end of turn.\nYou may cast a card with converted mana cost 3 or less from your hand without paying its mana cost. +Oracle:All creatures get -3/-3 until end of turn.\nYou may cast a spell with converted mana cost 3 or less from your hand without paying its mana cost. From 04d2f7ca63cf5a9494519a196f84ce377997a8ac Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Mon, 8 Feb 2021 20:47:13 +0100 Subject: [PATCH 24/27] Update Niko Aris +1 --- forge-gui/res/cardsfolder/upcoming/niko_aris.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/niko_aris.txt b/forge-gui/res/cardsfolder/upcoming/niko_aris.txt index 7bcac88fedd..a267f66d1ae 100644 --- a/forge-gui/res/cardsfolder/upcoming/niko_aris.txt +++ b/forge-gui/res/cardsfolder/upcoming/niko_aris.txt @@ -5,9 +5,9 @@ Loyalty:3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create X Shard tokens. (They're enchantments with "{2}, Sacrifice this enchantment: Scry 1, then draw a card.") SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ shard | TokenOwner$ You SVar:X:Count$xPaid -A:AB$ Pump | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Triggers$ Trig | sVars$ Eff | KW$ HIDDEN Unblockable | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Up to one target creature you control can't be blocked this turn. Whenever that creature deals damage this turn, return it to its owner's hand. -SVar:Trig:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Card.Self | Execute$ Eff | TriggerDescription$ Whenever this creature deals damage to an opponent, return it to its owner's hand. -SVar:Eff:DB$ ChangeZone | ValidTgts$ Creature | TargetsWithDefinedController$ TriggeredTarget | TgtPrompt$ Select target creature that player controls. | Origin$ Battlefield | Destination$ Hand +A:AB$ Effect | Cost$ AddCounter<1/LOYALTY> | Name$ Niko Aris Effect | Planeswalker$ True | Triggers$ Trig | SVars$ Eff | KW$ HIDDEN Unblockable | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature | TgtPrompt$ Select target creature | RememberObjects$ Targeted | SpellDescription$ Up to one target creature you control can't be blocked this turn. Whenever that creature deals damage this turn, return it to its owner's hand. +SVar:Trig:Mode$ DamageDealtOnce | ValidSource$ Creature.IsRemembered | Execute$ Eff | TriggerDescription$ Whenever this creature deals damage this turn, return it to its owner's hand. +SVar:Eff:DB$ ChangeZone | ValidTgts$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Hand A:AB$ DealDamage | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature.tapped | NumDmg$ Y | References$ Y | TgtPrompt$ Select target tapped creature | SpellDescription$ CARDNAME deals 2 damage to target tapped creature for each card you've drawn this turn. SVar:Y:Count$YouDrewThisTurn/Twice A:AB$ Token | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | TokenAmount$ 1 | TokenScript$ shard | TokenOwner$ You | SpellDescription$ Create a Shard token. From be6d28a18d1cea61d53f838499baaec79f48e712 Mon Sep 17 00:00:00 2001 From: paul_snoops Date: Mon, 8 Feb 2021 22:02:54 +0000 Subject: [PATCH 25/27] Firja's Retribution token fix Angel renamed to Angel Warrior in script --- forge-gui/res/cardsfolder/upcoming/firjas_retribution.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/firjas_retribution.txt b/forge-gui/res/cardsfolder/upcoming/firjas_retribution.txt index 4094b98ab59..df9dcbddd2a 100644 --- a/forge-gui/res/cardsfolder/upcoming/firjas_retribution.txt +++ b/forge-gui/res/cardsfolder/upcoming/firjas_retribution.txt @@ -2,7 +2,7 @@ Name:Firja's Retribution ManaCost:1 W W B Types:Enchantment Saga K:Saga:3:TrigAngel,DBAnimateAll,TrigPump -SVar:TrigAngel:DB$ Token | TokenAmount$ 1 | TokenScript$ w_4_4_angel_flying_vigilance | TokenOwner$ You | SpellDescription$ Create a 4/4 white Angel creature token with flying and vigilance. +SVar:TrigAngel:DB$ Token | TokenAmount$ 1 | TokenScript$ w_4_4_angel_warrior_flying_vigilance | TokenOwner$ You | SpellDescription$ Create a 4/4 white Angel creature token with flying and vigilance. SVar:DBAnimateAll:DB$ AnimateAll | ValidCards$ Angel.YouCtrl | Abilities$ TapDestroy | SpellDescription$ Until the end of turn, Angels you control gain "{T}: Destroy target creature with power less than this creature." SVar:TapDestroy:AB$ Destroy | Cost$ T | ValidTgts$ Creature.powerLTX | References$ X | TgtPrompt$ Select target creature with power less than this creature | SpellDescription$ Destroy target creature with power less than this creature. SVar:X:Count$CardPower From d3232e84af2f67a8e37fbf94c336e830d30ad713 Mon Sep 17 00:00:00 2001 From: Sol Date: Tue, 9 Feb 2021 02:02:02 +0000 Subject: [PATCH 26/27] Update ANNOUNCEMENTS.txt --- forge-gui/release-files/ANNOUNCEMENTS.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/forge-gui/release-files/ANNOUNCEMENTS.txt b/forge-gui/release-files/ANNOUNCEMENTS.txt index f35e40a8b52..6f06ca8c09f 100644 --- a/forge-gui/release-files/ANNOUNCEMENTS.txt +++ b/forge-gui/release-files/ANNOUNCEMENTS.txt @@ -1,6 +1,5 @@ #Add one announcement per line -Keyboard shortcut change: to help improve accessibility, the arrow key shortcuts to move between deck editor tables now require control or Command, depending on which platform you're on. -Jumpstart sealed! -Double Masters (including double pick) -Lots of art updates and fixes -No update on Mutate yet. Trust us, you'll know when it's here. \ No newline at end of file +Sorry for the long wait between releases. Pandemic + Technology issues caused some issues we couldn't hurdle. +Get in the discord if you aren't yet. +Lots of new cards including Kaldheim. +No update on Mutate yet. Trust us, you'll know when it's here. From c88fd07acdae56fbbddd7d9b8bfbd69908084c47 Mon Sep 17 00:00:00 2001 From: friarsol Date: Mon, 8 Feb 2021 21:09:44 -0500 Subject: [PATCH 27/27] Migrate Kaldheim --- .../res/cardsfolder/{upcoming => a}/absorb_identity.txt | 0 .../{upcoming => a}/aegar_the_freezing_flame.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/alpine_meadow.txt | 0 .../alrund_god_of_the_cosmos_hakka_whispering_raven.txt | 0 .../res/cardsfolder/{upcoming => a}/alrunds_epiphany.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/arachnoform.txt | 0 .../res/cardsfolder/{upcoming => a}/arctic_treeline.txt | 0 .../res/cardsfolder/{upcoming => a}/armed_and_armored.txt | 0 .../res/cardsfolder/{upcoming => a}/arni_brokenbrow.txt | 0 .../cardsfolder/{upcoming => a}/arni_slays_the_troll.txt | 0 .../res/cardsfolder/{upcoming => a}/ascendant_spirit.txt | 0 .../cardsfolder/{upcoming => a}/ascent_of_the_worthy.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/augury_raven.txt | 0 .../res/cardsfolder/{upcoming => a}/avalanche_caller.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/axgard_armory.txt | 0 .../res/cardsfolder/{upcoming => a}/axgard_braggart.txt | 0 .../res/cardsfolder/{upcoming => a}/axgard_cavalry.txt | 0 .../barkchannel_pathway_tidechannel_pathway.txt | 0 .../res/cardsfolder/{upcoming => b}/basalt_ravager.txt | 0 .../cardsfolder/{upcoming => b}/battershield_warrior.txt | 0 .../cardsfolder/{upcoming => b}/battle_for_bretagard.txt | 0 .../res/cardsfolder/{upcoming => b}/battle_mammoth.txt | 0 .../{upcoming => b}/battle_of_frost_and_fire.txt | 0 .../res/cardsfolder/{upcoming => b}/battlefield_raptor.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/bearded_axe.txt | 0 .../cardsfolder/{upcoming => b}/behold_the_multiverse.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/berg_strider.txt | 0 .../res/cardsfolder/{upcoming => b}/beskir_shieldmate.txt | 0 .../res/cardsfolder/{upcoming => b}/bind_the_monster.txt | 0 .../cardsfolder/{upcoming => b}/binding_of_the_old_gods.txt | 0 .../birgi_god_of_storytelling_harnfel_horn_of_bounty.txt | 0 .../res/cardsfolder/{upcoming => b}/blessing_of_frost.txt | 0 .../{upcoming => b}/blightstep_pathway_searstep_pathway.txt | 0 .../res/cardsfolder/{upcoming => b}/blizzard_brawl.txt | 0 .../res/cardsfolder/{upcoming => b}/blood_on_the_snow.txt | 0 .../res/cardsfolder/{upcoming => b}/bloodline_pretender.txt | 0 .../res/cardsfolder/{upcoming => b}/bloodsky_berserker.txt | 0 .../res/cardsfolder/{upcoming => b}/boreal_outrider.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/bound_in_gold.txt | 0 .../res/cardsfolder/{upcoming => b}/breakneck_berserker.txt | 0 .../cardsfolder/{upcoming => b}/bretagard_stronghold.txt | 0 .../cardsfolder/{upcoming => b}/brinebarrow_intruder.txt | 0 .../res/cardsfolder/{upcoming => b}/burning_rune_demon.txt | 0 .../res/cardsfolder/{upcoming => c}/calamity_bearer.txt | 0 .../res/cardsfolder/{upcoming => c}/canopy_tactician.txt | 0 .../res/cardsfolder/{upcoming => c}/cinderheart_giant.txt | 0 .../res/cardsfolder/{upcoming => c}/clarion_spirit.txt | 0 .../res/cardsfolder/{upcoming => c}/cleaving_reaper.txt | 0 .../res/cardsfolder/{upcoming => c}/codespell_cleric.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/colossal_plow.txt | 0 .../cosima_god_of_the_voyage_the_omenkeel.txt | 0 .../res/cardsfolder/{upcoming => c}/cosmic_intervention.txt | 0 .../res/cardsfolder/{upcoming => c}/cosmos_charger.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/cosmos_elixir.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/craven_hulk.txt | 0 .../res/cardsfolder/{upcoming => c}/crippling_fear.txt | 0 .../res/cardsfolder/{upcoming => c}/crown_of_skemfar.txt | 0 .../res/cardsfolder/{upcoming => c}/crush_the_weak.txt | 0 .../res/cardsfolder/{upcoming => c}/cyclone_summoner.txt | 0 .../darkbore_pathway_slitherbore_pathway.txt | 0 .../cardsfolder/{upcoming => d}/deathknell_berserker.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/demon_bolt.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/demonic_gifts.txt | 0 .../res/cardsfolder/{upcoming => d}/depart_the_realm.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/divine_gambit.txt | 0 .../res/cardsfolder/{upcoming => d}/dogged_pursuit.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/doomskar.txt | 0 .../res/cardsfolder/{upcoming => d}/doomskar_oracle.txt | 0 .../res/cardsfolder/{upcoming => d}/doomskar_titan.txt | 0 .../res/cardsfolder/{upcoming => d}/dragonkin_berserker.txt | 0 .../res/cardsfolder/{upcoming => d}/draugr_necromancer.txt | 0 .../res/cardsfolder/{upcoming => d}/draugr_recruiter.txt | 0 .../cardsfolder/{upcoming => d}/draugr_thought-thief.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/draugrs_helm.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/dread_rider.txt | 0 .../res/cardsfolder/{upcoming => d}/dream_devourer.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/dual_strike.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/duskwielder.txt | 0 .../res/cardsfolder/{upcoming => d}/dwarven_hammer.txt | 0 .../cardsfolder/{upcoming => d}/dwarven_reinforcements.txt | 0 .../{upcoming => e}/egon_god_of_death_throne_of_death.txt | 0 .../res/cardsfolder/{upcoming => e}/elderfang_disciple.txt | 0 .../res/cardsfolder/{upcoming => e}/elderfang_ritualist.txt | 0 .../res/cardsfolder/{upcoming => e}/elderfang_venom.txt | 0 .../res/cardsfolder/{upcoming => e}/elderleaf_mentor.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/elven_ambush.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/elven_bow.txt | 0 .../res/cardsfolder/{upcoming => e}/elvish_warmaster.txt | 0 .../res/cardsfolder/{upcoming => e}/eradicator_valkyrie.txt | 0 .../esika_god_of_the_tree_the_prismatic_bridge.txt | 0 .../res/cardsfolder/{upcoming => e}/esikas_charriot.txt | 0 .../res/cardsfolder/{upcoming => e}/ethereal_valkyrie.txt | 0 .../res/cardsfolder/{upcoming => f}/faceless_haven.txt | 0 .../cardsfolder/{upcoming => f}/fall_of_the_impostor.txt | 0 .../res/cardsfolder/{upcoming => f}/fearless_liberator.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/fearless_pup.txt | 0 .../res/cardsfolder/{upcoming => f}/feed_the_serpent.txt | 0 .../res/cardsfolder/{upcoming => f}/fire_giants_fury.txt | 0 .../cardsfolder/{upcoming => f}/firja_judge_of_valor.txt | 0 .../res/cardsfolder/{upcoming => f}/firjas_retribution.txt | 0 .../{upcoming => f}/forging_the_tyrite_sword.txt | 0 .../res/cardsfolder/{upcoming => f}/frenzied_raider.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/frost_augur.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/frost_bite.txt | 0 .../res/cardsfolder/{upcoming => f}/frostpeak_yeti.txt | 0 .../res/cardsfolder/{upcoming => f}/frostpyre_arcanist.txt | 0 .../res/cardsfolder/{upcoming => f}/funeral_longboat.txt | 0 .../res/cardsfolder/{upcoming => f}/fynn_the_fangbearer.txt | 0 .../res/cardsfolder/{upcoming => g}/gates_of_istfell.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/giant_ox.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/giants_amulet.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/giants_grasp.txt | 0 .../res/cardsfolder/{upcoming => g}/gilded_assault_cart.txt | 0 .../res/cardsfolder/{upcoming => g}/glacial_floodplain.txt | 0 .../cardsfolder/{upcoming => g}/gladewalker_ritualist.txt | 0 .../res/cardsfolder/{upcoming => g}/glimpse_the_cosmos.txt | 0 .../res/cardsfolder/{upcoming => g}/glittering_frost.txt | 0 .../res/cardsfolder/{upcoming => g}/glorious_protector.txt | 0 .../res/cardsfolder/{upcoming => g}/gnottvold_recluse.txt | 0 .../cardsfolder/{upcoming => g}/gnottvold_slumbermound.txt | 0 .../res/cardsfolder/{upcoming => g}/gods_hall_guardian.txt | 0 .../res/cardsfolder/{upcoming => g}/goldmaw_champion.txt | 0 .../res/cardsfolder/{upcoming => g}/goldspan_dragon.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/goldvein_pick.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/graven_lore.txt | 0 .../cardsfolder/{upcoming => g}/great_hall_of_starnheim.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/grim_draugr.txt | 0 .../res/cardsfolder/{upcoming => g}/grizzled_outrider.txt | 0 .../cardsfolder/{upcoming => g}/guardian-gladewalker.txt | 0 forge-gui/res/cardsfolder/{upcoming => h}/hagi_mob.txt | 0 .../res/cardsfolder/{upcoming => h}/hailstorm_valkyrie.txt | 0 .../halvar_god_of_battle_sword_of_the_realms.txt | 0 .../cardsfolder/{upcoming => h}/harald_king_of_skemfar.txt | 0 .../cardsfolder/{upcoming => h}/harald_unites_the_elves.txt | 0 .../res/cardsfolder/{upcoming => h}/haunting_voyage.txt | 0 .../{upcoming => h}/hengegate_pathway_mistgate_pathway.txt | 0 .../res/cardsfolder/{upcoming => h}/highland_forest.txt | 0 .../res/cardsfolder/{upcoming => h}/horizon_seeker.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/ice_tunnel.txt | 0 .../res/cardsfolder/{upcoming => i}/icebind_pillar.txt | 0 .../res/cardsfolder/{upcoming => i}/icebreaker_kraken.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/icehide_troll.txt | 0 .../res/cardsfolder/{upcoming => i}/immersturm_predator.txt | 0 .../res/cardsfolder/{upcoming => i}/immersturm_raider.txt | 0 .../cardsfolder/{upcoming => i}/immersturm_skullcairn.txt | 0 .../cardsfolder/{upcoming => i}/in_search_of_greatness.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/infernal_pet.txt | 0 .../res/cardsfolder/{upcoming => i}/inga_rune_eyes.txt | 0 .../cardsfolder/{upcoming => i}/invasion_of_the_giants.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/iron_verdict.txt | 0 .../cardsfolder/{upcoming => j}/jarl_of_the_forsaken.txt | 0 .../res/cardsfolder/{upcoming => j}/jaspera_sentinel.txt | 0 .../jorn_god_of_winter_kaldring_the_rimestaff.txt | 0 .../res/cardsfolder/{upcoming => k}/kardur_doomscourge.txt | 0 .../cardsfolder/{upcoming => k}/kardurs_vicious_return.txt | 0 .../res/cardsfolder/{upcoming => k}/karfell_harbinger.txt | 0 .../cardsfolder/{upcoming => k}/karfell_kennel_master.txt | 0 .../res/cardsfolder/{upcoming => k}/kaya_the_inexorable.txt | 0 .../res/cardsfolder/{upcoming => k}/kayas_onslaught.txt | 0 .../cardsfolder/{upcoming => k}/king_haralds_revenge.txt | 0 .../cardsfolder/{upcoming => k}/king_narfis_betrayal.txt | 0 .../cardsfolder/{upcoming => k}/koll_the_forgemaster.txt | 0 .../kolvori_god_of_kinship_the_ringhart_crest.txt | 0 .../res/cardsfolder/{upcoming => k}/koma_cosmos_serpent.txt | 0 .../res/cardsfolder/{upcoming => k}/komas_faithful.txt | 0 .../cardsfolder/{upcoming => l}/littjara_glade_warden.txt | 0 .../res/cardsfolder/{upcoming => l}/littjara_kinseekers.txt | 0 .../res/cardsfolder/{upcoming => l}/littjara_mirrorlake.txt | 0 .../res/cardsfolder/{upcoming => m}/magda_brazen_outlaw.txt | 0 .../{upcoming => m}/maja_bretagard_protector.txt | 0 .../res/cardsfolder/{upcoming => m}/mammoth_growth.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/masked_vandal.txt | 0 .../res/cardsfolder/{upcoming => m}/maskwood_nexus.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/master_skald.txt | 0 .../res/cardsfolder/{upcoming => m}/mists_of_littjara.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/mistwalker.txt | 0 .../cardsfolder/{upcoming => m}/moritte_of_the_frost.txt | 0 .../res/cardsfolder/{upcoming => m}/mystic_reflection.txt | 0 .../res/cardsfolder/{upcoming => n}/narfi_betrayer_king.txt | 0 forge-gui/res/cardsfolder/{upcoming => n}/niko_aris.txt | 0 .../res/cardsfolder/{upcoming => n}/niko_defies_destiny.txt | 0 .../res/cardsfolder/{upcoming => o}/old_growth_troll.txt | 0 .../res/cardsfolder/{upcoming => o}/open_the_omenpaths.txt | 0 .../res/cardsfolder/{upcoming => o}/orvar_the_all_form.txt | 0 .../cardsfolder/{upcoming => p}/path_to_the_world_tree.txt | 0 .../res/cardsfolder/{upcoming => p}/pilfering_hawk.txt | 0 .../res/cardsfolder/{upcoming => p}/poison_the_cup.txt | 0 .../res/cardsfolder/{upcoming => p}/port_of_karfell.txt | 0 .../{upcoming => p}/priest_of_the_haunted_edge.txt | 0 .../res/cardsfolder/{upcoming => p}/provoke_the_trolls.txt | 0 .../res/cardsfolder/{upcoming => p}/pyre_of_heroes.txt | 0 forge-gui/res/cardsfolder/{upcoming => q}/quakebringer.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/raiders_karve.txt | 0 .../res/cardsfolder/{upcoming => r}/raise_the_draugr.txt | 0 .../res/cardsfolder/{upcoming => r}/rally_the_ranks.txt | 0 .../{upcoming => r}/rampage_of_the_valkyries.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/raven_wings.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/ravenform.txt | 0 .../res/cardsfolder/{upcoming => r}/ravenous_lindwurm.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/realmwalker.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/reckless_crew.txt | 0 .../cardsfolder/{upcoming => r}/reflections_of_littjara.txt | 0 ...reidane_god_of_the_worthy_valkmira_protectors_shield.txt | 0 .../res/cardsfolder/{upcoming => r}/renegade_reaper.txt | 0 .../res/cardsfolder/{upcoming => r}/replicating_ring.txt | 0 .../res/cardsfolder/{upcoming => r}/resplendent_marshal.txt | 0 .../cardsfolder/{upcoming => r}/return_upon_the_tide.txt | 0 .../res/cardsfolder/{upcoming => r}/righteous_valkyrie.txt | 0 .../res/cardsfolder/{upcoming => r}/rimewood_falls.txt | 0 .../cardsfolder/{upcoming => r}/rise_of_the_dread_marn.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/rootless_yew.txt | 0 .../res/cardsfolder/{upcoming => r}/roots_of_wisdom.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/run_ashore.txt | 0 .../res/cardsfolder/{upcoming => r}/rune_of_flight.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/rune_of_might.txt | 0 .../res/cardsfolder/{upcoming => r}/rune_of_mortality.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/rune_of_speed.txt | 0 .../res/cardsfolder/{upcoming => r}/rune_of_sustenance.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/runed_crown.txt | 0 .../res/cardsfolder/{upcoming => r}/runeforge_champion.txt | 0 .../res/cardsfolder/{upcoming => r}/ruthless_winnower.txt | 0 .../res/cardsfolder/{upcoming => s}/sage_of_the_beyond.txt | 0 .../res/cardsfolder/{upcoming => s}/sarulf_realm_eater.txt | 0 .../res/cardsfolder/{upcoming => s}/sarulfs_packmate.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/saw_it_coming.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/scorn_effigy.txt | 0 .../res/cardsfolder/{upcoming => s}/sculptor_of_winter.txt | 0 .../res/cardsfolder/{upcoming => s}/search_for_glory.txt | 0 .../res/cardsfolder/{upcoming => s}/seize_the_spoils.txt | 0 .../cardsfolder/{upcoming => s}/shackles_of_treachery.txt | 0 .../cardsfolder/{upcoming => s}/shepherd_of_the_cosmos.txt | 0 .../res/cardsfolder/{upcoming => s}/shimmerdrift_vale.txt | 0 .../cardsfolder/{upcoming => s}/showdown_of_the_skalds.txt | 0 .../res/cardsfolder/{upcoming => s}/sigrid_god_favored.txt | 0 .../res/cardsfolder/{upcoming => s}/skemfar_avenger.txt | 0 .../res/cardsfolder/{upcoming => s}/skemfar_elderhall.txt | 0 .../res/cardsfolder/{upcoming => s}/skemfar_shadowsage.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/skull_raid.txt | 0 .../res/cardsfolder/{upcoming => s}/smashing_sucess.txt | 0 .../res/cardsfolder/{upcoming => s}/snakeskin_veil.txt | 0 .../res/cardsfolder/{upcoming => s}/snowfield_sinkhole.txt | 0 .../res/cardsfolder/{upcoming => s}/spectral_deluge.txt | 0 .../res/cardsfolder/{upcoming => s}/spectral_steel.txt | 0 .../cardsfolder/{upcoming => s}/spirit_of_the_aldergard.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/squash.txt | 0 .../res/cardsfolder/{upcoming => s}/stalwart_valkyrie.txt | 0 .../res/cardsfolder/{upcoming => s}/starnheim_aspirant.txt | 0 .../res/cardsfolder/{upcoming => s}/starnheim_courser.txt | 0 .../res/cardsfolder/{upcoming => s}/starnheim_unleashed.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/stoic_farmer.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/story_seeker.txt | 0 .../cardsfolder/{upcoming => s}/struggle_for_skemfar.txt | 0 .../res/cardsfolder/{upcoming => s}/sulfurous_mire.txt | 0 .../cardsfolder/{upcoming => s}/surtland_elementalist.txt | 0 .../res/cardsfolder/{upcoming => s}/surtland_flinger.txt | 0 .../res/cardsfolder/{upcoming => s}/surtland_frostpyre.txt | 0 .../res/cardsfolder/{upcoming => s}/svella_ice_shaper.txt | 0 .../cardsfolder/{upcoming => t}/tales_of_the_ancestors.txt | 0 .../cardsfolder/{upcoming => t}/tayam_luminous_enigma.txt | 0 .../tergrid_god_of_fear_tergrids_lantern.txt | 0 .../res/cardsfolder/{upcoming => t}/tergrids_shadow.txt | 0 .../cardsfolder/{upcoming => t}/the_bears_of_littjara.txt | 0 .../cardsfolder/{upcoming => t}/the_bloodsky_massacre.txt | 0 .../res/cardsfolder/{upcoming => t}/the_ravens_warning.txt | 0 .../res/cardsfolder/{upcoming => t}/the_three_seasons.txt | 0 .../{upcoming => t}/the_trickster_gods_heist.txt | 0 .../res/cardsfolder/{upcoming => t}/the_world_tree.txt | 0 .../res/cardsfolder/{upcoming => t}/thornmantle_striker.txt | 0 .../res/cardsfolder/{upcoming => t}/tibalts_trickery.txt | 0 .../{upcoming => t}/toralf_god_of_fury_toralfs_hammer.txt | 0 .../res/cardsfolder/{upcoming => t}/tormentors_helm.txt | 0 .../cardsfolder/{upcoming => t}/toski_bearer_of_secrets.txt | 0 .../res/cardsfolder/{upcoming => t}/tundra_fumarole.txt | 0 .../res/cardsfolder/{upcoming => t}/tuskeri_firewalker.txt | 0 .../res/cardsfolder/{upcoming => t}/tyrite_sanctum.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/tyvar_kell.txt | 0 .../res/cardsfolder/{upcoming => u}/undersea_invader.txt | 0 .../res/cardsfolder/{upcoming => u}/usher_of_the_fallen.txt | 0 forge-gui/res/cardsfolder/upcoming/strategic_planning.txt | 6 ------ .../valki_god_of_lies_tibalt_cosmic_impostor.txt | 0 .../res/cardsfolder/{upcoming => v}/valkyrie_harbinger.txt | 0 .../res/cardsfolder/{upcoming => v}/valkyries_sword.txt | 0 .../res/cardsfolder/{upcoming => v}/valor_of_the_worthy.txt | 0 .../cardsfolder/{upcoming => v}/varragoth_bloodsky_sire.txt | 0 forge-gui/res/cardsfolder/{upcoming => v}/vault_robber.txt | 0 .../res/cardsfolder/{upcoming => v}/vega_the_watcher.txt | 0 .../res/cardsfolder/{upcoming => v}/vengeful_reaper.txt | 0 .../res/cardsfolder/{upcoming => v}/volatile_fjord.txt | 0 .../{upcoming => v}/vorinclex_monstrous_raider.txt | 0 .../res/cardsfolder/{upcoming => w}/waking_the_trolls.txt | 0 .../res/cardsfolder/{upcoming => w}/warchanter_skald.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/warhorn_blast.txt | 0 .../res/cardsfolder/{upcoming => w}/weathered_runestone.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/weigh_down.txt | 0 .../res/cardsfolder/{upcoming => w}/wings_of_the_cosmos.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/withercrown.txt | 0 .../res/cardsfolder/{upcoming => w}/wolverine_riders.txt | 0 .../res/cardsfolder/{upcoming => w}/woodland_chasm.txt | 0 .../res/cardsfolder/{upcoming => y}/youthful_valkyrie.txt | 0 299 files changed, 6 deletions(-) rename forge-gui/res/cardsfolder/{upcoming => a}/absorb_identity.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/aegar_the_freezing_flame.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/alpine_meadow.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/alrund_god_of_the_cosmos_hakka_whispering_raven.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/alrunds_epiphany.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/arachnoform.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/arctic_treeline.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/armed_and_armored.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/arni_brokenbrow.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/arni_slays_the_troll.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/ascendant_spirit.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/ascent_of_the_worthy.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/augury_raven.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/avalanche_caller.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/axgard_armory.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/axgard_braggart.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/axgard_cavalry.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/barkchannel_pathway_tidechannel_pathway.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/basalt_ravager.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/battershield_warrior.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/battle_for_bretagard.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/battle_mammoth.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/battle_of_frost_and_fire.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/battlefield_raptor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bearded_axe.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/behold_the_multiverse.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/berg_strider.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/beskir_shieldmate.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bind_the_monster.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/binding_of_the_old_gods.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/birgi_god_of_storytelling_harnfel_horn_of_bounty.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/blessing_of_frost.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/blightstep_pathway_searstep_pathway.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/blizzard_brawl.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/blood_on_the_snow.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bloodline_pretender.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bloodsky_berserker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/boreal_outrider.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bound_in_gold.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/breakneck_berserker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bretagard_stronghold.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/brinebarrow_intruder.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/burning_rune_demon.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/calamity_bearer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/canopy_tactician.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cinderheart_giant.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/clarion_spirit.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cleaving_reaper.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/codespell_cleric.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/colossal_plow.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cosima_god_of_the_voyage_the_omenkeel.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cosmic_intervention.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cosmos_charger.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cosmos_elixir.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/craven_hulk.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/crippling_fear.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/crown_of_skemfar.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/crush_the_weak.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cyclone_summoner.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/darkbore_pathway_slitherbore_pathway.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/deathknell_berserker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/demon_bolt.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/demonic_gifts.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/depart_the_realm.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/divine_gambit.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dogged_pursuit.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/doomskar.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/doomskar_oracle.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/doomskar_titan.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dragonkin_berserker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/draugr_necromancer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/draugr_recruiter.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/draugr_thought-thief.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/draugrs_helm.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dread_rider.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dream_devourer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dual_strike.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/duskwielder.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dwarven_hammer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dwarven_reinforcements.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/egon_god_of_death_throne_of_death.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/elderfang_disciple.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/elderfang_ritualist.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/elderfang_venom.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/elderleaf_mentor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/elven_ambush.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/elven_bow.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/elvish_warmaster.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eradicator_valkyrie.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/esika_god_of_the_tree_the_prismatic_bridge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/esikas_charriot.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/ethereal_valkyrie.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/faceless_haven.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fall_of_the_impostor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fearless_liberator.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fearless_pup.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/feed_the_serpent.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fire_giants_fury.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/firja_judge_of_valor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/firjas_retribution.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/forging_the_tyrite_sword.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/frenzied_raider.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/frost_augur.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/frost_bite.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/frostpeak_yeti.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/frostpyre_arcanist.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/funeral_longboat.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fynn_the_fangbearer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gates_of_istfell.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/giant_ox.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/giants_amulet.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/giants_grasp.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gilded_assault_cart.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/glacial_floodplain.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gladewalker_ritualist.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/glimpse_the_cosmos.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/glittering_frost.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/glorious_protector.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gnottvold_recluse.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gnottvold_slumbermound.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gods_hall_guardian.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/goldmaw_champion.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/goldspan_dragon.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/goldvein_pick.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/graven_lore.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/great_hall_of_starnheim.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/grim_draugr.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/grizzled_outrider.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/guardian-gladewalker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hagi_mob.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hailstorm_valkyrie.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/halvar_god_of_battle_sword_of_the_realms.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/harald_king_of_skemfar.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/harald_unites_the_elves.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/haunting_voyage.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hengegate_pathway_mistgate_pathway.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/highland_forest.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/horizon_seeker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/ice_tunnel.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/icebind_pillar.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/icebreaker_kraken.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/icehide_troll.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/immersturm_predator.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/immersturm_raider.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/immersturm_skullcairn.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/in_search_of_greatness.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/infernal_pet.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/inga_rune_eyes.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/invasion_of_the_giants.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/iron_verdict.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => j}/jarl_of_the_forsaken.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => j}/jaspera_sentinel.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => j}/jorn_god_of_winter_kaldring_the_rimestaff.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kardur_doomscourge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kardurs_vicious_return.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/karfell_harbinger.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/karfell_kennel_master.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kaya_the_inexorable.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kayas_onslaught.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/king_haralds_revenge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/king_narfis_betrayal.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/koll_the_forgemaster.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kolvori_god_of_kinship_the_ringhart_crest.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/koma_cosmos_serpent.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/komas_faithful.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/littjara_glade_warden.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/littjara_kinseekers.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/littjara_mirrorlake.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/magda_brazen_outlaw.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/maja_bretagard_protector.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mammoth_growth.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/masked_vandal.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/maskwood_nexus.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/master_skald.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mists_of_littjara.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mistwalker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/moritte_of_the_frost.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mystic_reflection.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/narfi_betrayer_king.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/niko_aris.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/niko_defies_destiny.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => o}/old_growth_troll.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => o}/open_the_omenpaths.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => o}/orvar_the_all_form.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/path_to_the_world_tree.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/pilfering_hawk.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/poison_the_cup.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/port_of_karfell.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/priest_of_the_haunted_edge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/provoke_the_trolls.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/pyre_of_heroes.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => q}/quakebringer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/raiders_karve.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/raise_the_draugr.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rally_the_ranks.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rampage_of_the_valkyries.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/raven_wings.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/ravenform.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/ravenous_lindwurm.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/realmwalker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/reckless_crew.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/reflections_of_littjara.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/reidane_god_of_the_worthy_valkmira_protectors_shield.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/renegade_reaper.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/replicating_ring.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/resplendent_marshal.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/return_upon_the_tide.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/righteous_valkyrie.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rimewood_falls.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rise_of_the_dread_marn.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rootless_yew.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/roots_of_wisdom.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/run_ashore.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rune_of_flight.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rune_of_might.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rune_of_mortality.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rune_of_speed.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rune_of_sustenance.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/runed_crown.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/runeforge_champion.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/ruthless_winnower.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sage_of_the_beyond.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sarulf_realm_eater.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sarulfs_packmate.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/saw_it_coming.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/scorn_effigy.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sculptor_of_winter.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/search_for_glory.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/seize_the_spoils.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/shackles_of_treachery.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/shepherd_of_the_cosmos.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/shimmerdrift_vale.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/showdown_of_the_skalds.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sigrid_god_favored.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/skemfar_avenger.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/skemfar_elderhall.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/skemfar_shadowsage.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/skull_raid.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/smashing_sucess.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/snakeskin_veil.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/snowfield_sinkhole.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/spectral_deluge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/spectral_steel.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/spirit_of_the_aldergard.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/squash.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/stalwart_valkyrie.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/starnheim_aspirant.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/starnheim_courser.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/starnheim_unleashed.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/stoic_farmer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/story_seeker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/struggle_for_skemfar.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sulfurous_mire.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/surtland_elementalist.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/surtland_flinger.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/surtland_frostpyre.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/svella_ice_shaper.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tales_of_the_ancestors.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tayam_luminous_enigma.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tergrid_god_of_fear_tergrids_lantern.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tergrids_shadow.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_bears_of_littjara.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_bloodsky_massacre.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_ravens_warning.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_three_seasons.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_trickster_gods_heist.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_world_tree.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/thornmantle_striker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tibalts_trickery.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/toralf_god_of_fury_toralfs_hammer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tormentors_helm.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/toski_bearer_of_secrets.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tundra_fumarole.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tuskeri_firewalker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tyrite_sanctum.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tyvar_kell.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/undersea_invader.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/usher_of_the_fallen.txt (100%) delete mode 100644 forge-gui/res/cardsfolder/upcoming/strategic_planning.txt rename forge-gui/res/cardsfolder/{upcoming => v}/valki_god_of_lies_tibalt_cosmic_impostor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/valkyrie_harbinger.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/valkyries_sword.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/valor_of_the_worthy.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/varragoth_bloodsky_sire.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/vault_robber.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/vega_the_watcher.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/vengeful_reaper.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/volatile_fjord.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/vorinclex_monstrous_raider.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/waking_the_trolls.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/warchanter_skald.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/warhorn_blast.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/weathered_runestone.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/weigh_down.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wings_of_the_cosmos.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/withercrown.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wolverine_riders.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/woodland_chasm.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => y}/youthful_valkyrie.txt (100%) diff --git a/forge-gui/res/cardsfolder/upcoming/absorb_identity.txt b/forge-gui/res/cardsfolder/a/absorb_identity.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/absorb_identity.txt rename to forge-gui/res/cardsfolder/a/absorb_identity.txt diff --git a/forge-gui/res/cardsfolder/upcoming/aegar_the_freezing_flame.txt b/forge-gui/res/cardsfolder/a/aegar_the_freezing_flame.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/aegar_the_freezing_flame.txt rename to forge-gui/res/cardsfolder/a/aegar_the_freezing_flame.txt diff --git a/forge-gui/res/cardsfolder/upcoming/alpine_meadow.txt b/forge-gui/res/cardsfolder/a/alpine_meadow.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/alpine_meadow.txt rename to forge-gui/res/cardsfolder/a/alpine_meadow.txt diff --git a/forge-gui/res/cardsfolder/upcoming/alrund_god_of_the_cosmos_hakka_whispering_raven.txt b/forge-gui/res/cardsfolder/a/alrund_god_of_the_cosmos_hakka_whispering_raven.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/alrund_god_of_the_cosmos_hakka_whispering_raven.txt rename to forge-gui/res/cardsfolder/a/alrund_god_of_the_cosmos_hakka_whispering_raven.txt diff --git a/forge-gui/res/cardsfolder/upcoming/alrunds_epiphany.txt b/forge-gui/res/cardsfolder/a/alrunds_epiphany.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/alrunds_epiphany.txt rename to forge-gui/res/cardsfolder/a/alrunds_epiphany.txt diff --git a/forge-gui/res/cardsfolder/upcoming/arachnoform.txt b/forge-gui/res/cardsfolder/a/arachnoform.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/arachnoform.txt rename to forge-gui/res/cardsfolder/a/arachnoform.txt diff --git a/forge-gui/res/cardsfolder/upcoming/arctic_treeline.txt b/forge-gui/res/cardsfolder/a/arctic_treeline.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/arctic_treeline.txt rename to forge-gui/res/cardsfolder/a/arctic_treeline.txt diff --git a/forge-gui/res/cardsfolder/upcoming/armed_and_armored.txt b/forge-gui/res/cardsfolder/a/armed_and_armored.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/armed_and_armored.txt rename to forge-gui/res/cardsfolder/a/armed_and_armored.txt diff --git a/forge-gui/res/cardsfolder/upcoming/arni_brokenbrow.txt b/forge-gui/res/cardsfolder/a/arni_brokenbrow.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/arni_brokenbrow.txt rename to forge-gui/res/cardsfolder/a/arni_brokenbrow.txt diff --git a/forge-gui/res/cardsfolder/upcoming/arni_slays_the_troll.txt b/forge-gui/res/cardsfolder/a/arni_slays_the_troll.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/arni_slays_the_troll.txt rename to forge-gui/res/cardsfolder/a/arni_slays_the_troll.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ascendant_spirit.txt b/forge-gui/res/cardsfolder/a/ascendant_spirit.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ascendant_spirit.txt rename to forge-gui/res/cardsfolder/a/ascendant_spirit.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ascent_of_the_worthy.txt b/forge-gui/res/cardsfolder/a/ascent_of_the_worthy.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ascent_of_the_worthy.txt rename to forge-gui/res/cardsfolder/a/ascent_of_the_worthy.txt diff --git a/forge-gui/res/cardsfolder/upcoming/augury_raven.txt b/forge-gui/res/cardsfolder/a/augury_raven.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/augury_raven.txt rename to forge-gui/res/cardsfolder/a/augury_raven.txt diff --git a/forge-gui/res/cardsfolder/upcoming/avalanche_caller.txt b/forge-gui/res/cardsfolder/a/avalanche_caller.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/avalanche_caller.txt rename to forge-gui/res/cardsfolder/a/avalanche_caller.txt diff --git a/forge-gui/res/cardsfolder/upcoming/axgard_armory.txt b/forge-gui/res/cardsfolder/a/axgard_armory.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/axgard_armory.txt rename to forge-gui/res/cardsfolder/a/axgard_armory.txt diff --git a/forge-gui/res/cardsfolder/upcoming/axgard_braggart.txt b/forge-gui/res/cardsfolder/a/axgard_braggart.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/axgard_braggart.txt rename to forge-gui/res/cardsfolder/a/axgard_braggart.txt diff --git a/forge-gui/res/cardsfolder/upcoming/axgard_cavalry.txt b/forge-gui/res/cardsfolder/a/axgard_cavalry.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/axgard_cavalry.txt rename to forge-gui/res/cardsfolder/a/axgard_cavalry.txt diff --git a/forge-gui/res/cardsfolder/upcoming/barkchannel_pathway_tidechannel_pathway.txt b/forge-gui/res/cardsfolder/b/barkchannel_pathway_tidechannel_pathway.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/barkchannel_pathway_tidechannel_pathway.txt rename to forge-gui/res/cardsfolder/b/barkchannel_pathway_tidechannel_pathway.txt diff --git a/forge-gui/res/cardsfolder/upcoming/basalt_ravager.txt b/forge-gui/res/cardsfolder/b/basalt_ravager.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/basalt_ravager.txt rename to forge-gui/res/cardsfolder/b/basalt_ravager.txt diff --git a/forge-gui/res/cardsfolder/upcoming/battershield_warrior.txt b/forge-gui/res/cardsfolder/b/battershield_warrior.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/battershield_warrior.txt rename to forge-gui/res/cardsfolder/b/battershield_warrior.txt diff --git a/forge-gui/res/cardsfolder/upcoming/battle_for_bretagard.txt b/forge-gui/res/cardsfolder/b/battle_for_bretagard.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/battle_for_bretagard.txt rename to forge-gui/res/cardsfolder/b/battle_for_bretagard.txt diff --git a/forge-gui/res/cardsfolder/upcoming/battle_mammoth.txt b/forge-gui/res/cardsfolder/b/battle_mammoth.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/battle_mammoth.txt rename to forge-gui/res/cardsfolder/b/battle_mammoth.txt diff --git a/forge-gui/res/cardsfolder/upcoming/battle_of_frost_and_fire.txt b/forge-gui/res/cardsfolder/b/battle_of_frost_and_fire.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/battle_of_frost_and_fire.txt rename to forge-gui/res/cardsfolder/b/battle_of_frost_and_fire.txt diff --git a/forge-gui/res/cardsfolder/upcoming/battlefield_raptor.txt b/forge-gui/res/cardsfolder/b/battlefield_raptor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/battlefield_raptor.txt rename to forge-gui/res/cardsfolder/b/battlefield_raptor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bearded_axe.txt b/forge-gui/res/cardsfolder/b/bearded_axe.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bearded_axe.txt rename to forge-gui/res/cardsfolder/b/bearded_axe.txt diff --git a/forge-gui/res/cardsfolder/upcoming/behold_the_multiverse.txt b/forge-gui/res/cardsfolder/b/behold_the_multiverse.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/behold_the_multiverse.txt rename to forge-gui/res/cardsfolder/b/behold_the_multiverse.txt diff --git a/forge-gui/res/cardsfolder/upcoming/berg_strider.txt b/forge-gui/res/cardsfolder/b/berg_strider.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/berg_strider.txt rename to forge-gui/res/cardsfolder/b/berg_strider.txt diff --git a/forge-gui/res/cardsfolder/upcoming/beskir_shieldmate.txt b/forge-gui/res/cardsfolder/b/beskir_shieldmate.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/beskir_shieldmate.txt rename to forge-gui/res/cardsfolder/b/beskir_shieldmate.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bind_the_monster.txt b/forge-gui/res/cardsfolder/b/bind_the_monster.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bind_the_monster.txt rename to forge-gui/res/cardsfolder/b/bind_the_monster.txt diff --git a/forge-gui/res/cardsfolder/upcoming/binding_of_the_old_gods.txt b/forge-gui/res/cardsfolder/b/binding_of_the_old_gods.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/binding_of_the_old_gods.txt rename to forge-gui/res/cardsfolder/b/binding_of_the_old_gods.txt diff --git a/forge-gui/res/cardsfolder/upcoming/birgi_god_of_storytelling_harnfel_horn_of_bounty.txt b/forge-gui/res/cardsfolder/b/birgi_god_of_storytelling_harnfel_horn_of_bounty.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/birgi_god_of_storytelling_harnfel_horn_of_bounty.txt rename to forge-gui/res/cardsfolder/b/birgi_god_of_storytelling_harnfel_horn_of_bounty.txt diff --git a/forge-gui/res/cardsfolder/upcoming/blessing_of_frost.txt b/forge-gui/res/cardsfolder/b/blessing_of_frost.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/blessing_of_frost.txt rename to forge-gui/res/cardsfolder/b/blessing_of_frost.txt diff --git a/forge-gui/res/cardsfolder/upcoming/blightstep_pathway_searstep_pathway.txt b/forge-gui/res/cardsfolder/b/blightstep_pathway_searstep_pathway.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/blightstep_pathway_searstep_pathway.txt rename to forge-gui/res/cardsfolder/b/blightstep_pathway_searstep_pathway.txt diff --git a/forge-gui/res/cardsfolder/upcoming/blizzard_brawl.txt b/forge-gui/res/cardsfolder/b/blizzard_brawl.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/blizzard_brawl.txt rename to forge-gui/res/cardsfolder/b/blizzard_brawl.txt diff --git a/forge-gui/res/cardsfolder/upcoming/blood_on_the_snow.txt b/forge-gui/res/cardsfolder/b/blood_on_the_snow.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/blood_on_the_snow.txt rename to forge-gui/res/cardsfolder/b/blood_on_the_snow.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bloodline_pretender.txt b/forge-gui/res/cardsfolder/b/bloodline_pretender.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bloodline_pretender.txt rename to forge-gui/res/cardsfolder/b/bloodline_pretender.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bloodsky_berserker.txt b/forge-gui/res/cardsfolder/b/bloodsky_berserker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bloodsky_berserker.txt rename to forge-gui/res/cardsfolder/b/bloodsky_berserker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/boreal_outrider.txt b/forge-gui/res/cardsfolder/b/boreal_outrider.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/boreal_outrider.txt rename to forge-gui/res/cardsfolder/b/boreal_outrider.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bound_in_gold.txt b/forge-gui/res/cardsfolder/b/bound_in_gold.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bound_in_gold.txt rename to forge-gui/res/cardsfolder/b/bound_in_gold.txt diff --git a/forge-gui/res/cardsfolder/upcoming/breakneck_berserker.txt b/forge-gui/res/cardsfolder/b/breakneck_berserker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/breakneck_berserker.txt rename to forge-gui/res/cardsfolder/b/breakneck_berserker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bretagard_stronghold.txt b/forge-gui/res/cardsfolder/b/bretagard_stronghold.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bretagard_stronghold.txt rename to forge-gui/res/cardsfolder/b/bretagard_stronghold.txt diff --git a/forge-gui/res/cardsfolder/upcoming/brinebarrow_intruder.txt b/forge-gui/res/cardsfolder/b/brinebarrow_intruder.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/brinebarrow_intruder.txt rename to forge-gui/res/cardsfolder/b/brinebarrow_intruder.txt diff --git a/forge-gui/res/cardsfolder/upcoming/burning_rune_demon.txt b/forge-gui/res/cardsfolder/b/burning_rune_demon.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/burning_rune_demon.txt rename to forge-gui/res/cardsfolder/b/burning_rune_demon.txt diff --git a/forge-gui/res/cardsfolder/upcoming/calamity_bearer.txt b/forge-gui/res/cardsfolder/c/calamity_bearer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/calamity_bearer.txt rename to forge-gui/res/cardsfolder/c/calamity_bearer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/canopy_tactician.txt b/forge-gui/res/cardsfolder/c/canopy_tactician.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/canopy_tactician.txt rename to forge-gui/res/cardsfolder/c/canopy_tactician.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cinderheart_giant.txt b/forge-gui/res/cardsfolder/c/cinderheart_giant.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cinderheart_giant.txt rename to forge-gui/res/cardsfolder/c/cinderheart_giant.txt diff --git a/forge-gui/res/cardsfolder/upcoming/clarion_spirit.txt b/forge-gui/res/cardsfolder/c/clarion_spirit.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/clarion_spirit.txt rename to forge-gui/res/cardsfolder/c/clarion_spirit.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cleaving_reaper.txt b/forge-gui/res/cardsfolder/c/cleaving_reaper.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cleaving_reaper.txt rename to forge-gui/res/cardsfolder/c/cleaving_reaper.txt diff --git a/forge-gui/res/cardsfolder/upcoming/codespell_cleric.txt b/forge-gui/res/cardsfolder/c/codespell_cleric.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/codespell_cleric.txt rename to forge-gui/res/cardsfolder/c/codespell_cleric.txt diff --git a/forge-gui/res/cardsfolder/upcoming/colossal_plow.txt b/forge-gui/res/cardsfolder/c/colossal_plow.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/colossal_plow.txt rename to forge-gui/res/cardsfolder/c/colossal_plow.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cosima_god_of_the_voyage_the_omenkeel.txt b/forge-gui/res/cardsfolder/c/cosima_god_of_the_voyage_the_omenkeel.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cosima_god_of_the_voyage_the_omenkeel.txt rename to forge-gui/res/cardsfolder/c/cosima_god_of_the_voyage_the_omenkeel.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cosmic_intervention.txt b/forge-gui/res/cardsfolder/c/cosmic_intervention.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cosmic_intervention.txt rename to forge-gui/res/cardsfolder/c/cosmic_intervention.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cosmos_charger.txt b/forge-gui/res/cardsfolder/c/cosmos_charger.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cosmos_charger.txt rename to forge-gui/res/cardsfolder/c/cosmos_charger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cosmos_elixir.txt b/forge-gui/res/cardsfolder/c/cosmos_elixir.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cosmos_elixir.txt rename to forge-gui/res/cardsfolder/c/cosmos_elixir.txt diff --git a/forge-gui/res/cardsfolder/upcoming/craven_hulk.txt b/forge-gui/res/cardsfolder/c/craven_hulk.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/craven_hulk.txt rename to forge-gui/res/cardsfolder/c/craven_hulk.txt diff --git a/forge-gui/res/cardsfolder/upcoming/crippling_fear.txt b/forge-gui/res/cardsfolder/c/crippling_fear.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/crippling_fear.txt rename to forge-gui/res/cardsfolder/c/crippling_fear.txt diff --git a/forge-gui/res/cardsfolder/upcoming/crown_of_skemfar.txt b/forge-gui/res/cardsfolder/c/crown_of_skemfar.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/crown_of_skemfar.txt rename to forge-gui/res/cardsfolder/c/crown_of_skemfar.txt diff --git a/forge-gui/res/cardsfolder/upcoming/crush_the_weak.txt b/forge-gui/res/cardsfolder/c/crush_the_weak.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/crush_the_weak.txt rename to forge-gui/res/cardsfolder/c/crush_the_weak.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cyclone_summoner.txt b/forge-gui/res/cardsfolder/c/cyclone_summoner.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cyclone_summoner.txt rename to forge-gui/res/cardsfolder/c/cyclone_summoner.txt diff --git a/forge-gui/res/cardsfolder/upcoming/darkbore_pathway_slitherbore_pathway.txt b/forge-gui/res/cardsfolder/d/darkbore_pathway_slitherbore_pathway.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/darkbore_pathway_slitherbore_pathway.txt rename to forge-gui/res/cardsfolder/d/darkbore_pathway_slitherbore_pathway.txt diff --git a/forge-gui/res/cardsfolder/upcoming/deathknell_berserker.txt b/forge-gui/res/cardsfolder/d/deathknell_berserker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/deathknell_berserker.txt rename to forge-gui/res/cardsfolder/d/deathknell_berserker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/demon_bolt.txt b/forge-gui/res/cardsfolder/d/demon_bolt.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/demon_bolt.txt rename to forge-gui/res/cardsfolder/d/demon_bolt.txt diff --git a/forge-gui/res/cardsfolder/upcoming/demonic_gifts.txt b/forge-gui/res/cardsfolder/d/demonic_gifts.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/demonic_gifts.txt rename to forge-gui/res/cardsfolder/d/demonic_gifts.txt diff --git a/forge-gui/res/cardsfolder/upcoming/depart_the_realm.txt b/forge-gui/res/cardsfolder/d/depart_the_realm.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/depart_the_realm.txt rename to forge-gui/res/cardsfolder/d/depart_the_realm.txt diff --git a/forge-gui/res/cardsfolder/upcoming/divine_gambit.txt b/forge-gui/res/cardsfolder/d/divine_gambit.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/divine_gambit.txt rename to forge-gui/res/cardsfolder/d/divine_gambit.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dogged_pursuit.txt b/forge-gui/res/cardsfolder/d/dogged_pursuit.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dogged_pursuit.txt rename to forge-gui/res/cardsfolder/d/dogged_pursuit.txt diff --git a/forge-gui/res/cardsfolder/upcoming/doomskar.txt b/forge-gui/res/cardsfolder/d/doomskar.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/doomskar.txt rename to forge-gui/res/cardsfolder/d/doomskar.txt diff --git a/forge-gui/res/cardsfolder/upcoming/doomskar_oracle.txt b/forge-gui/res/cardsfolder/d/doomskar_oracle.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/doomskar_oracle.txt rename to forge-gui/res/cardsfolder/d/doomskar_oracle.txt diff --git a/forge-gui/res/cardsfolder/upcoming/doomskar_titan.txt b/forge-gui/res/cardsfolder/d/doomskar_titan.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/doomskar_titan.txt rename to forge-gui/res/cardsfolder/d/doomskar_titan.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dragonkin_berserker.txt b/forge-gui/res/cardsfolder/d/dragonkin_berserker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dragonkin_berserker.txt rename to forge-gui/res/cardsfolder/d/dragonkin_berserker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/draugr_necromancer.txt b/forge-gui/res/cardsfolder/d/draugr_necromancer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/draugr_necromancer.txt rename to forge-gui/res/cardsfolder/d/draugr_necromancer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/draugr_recruiter.txt b/forge-gui/res/cardsfolder/d/draugr_recruiter.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/draugr_recruiter.txt rename to forge-gui/res/cardsfolder/d/draugr_recruiter.txt diff --git a/forge-gui/res/cardsfolder/upcoming/draugr_thought-thief.txt b/forge-gui/res/cardsfolder/d/draugr_thought-thief.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/draugr_thought-thief.txt rename to forge-gui/res/cardsfolder/d/draugr_thought-thief.txt diff --git a/forge-gui/res/cardsfolder/upcoming/draugrs_helm.txt b/forge-gui/res/cardsfolder/d/draugrs_helm.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/draugrs_helm.txt rename to forge-gui/res/cardsfolder/d/draugrs_helm.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dread_rider.txt b/forge-gui/res/cardsfolder/d/dread_rider.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dread_rider.txt rename to forge-gui/res/cardsfolder/d/dread_rider.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dream_devourer.txt b/forge-gui/res/cardsfolder/d/dream_devourer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dream_devourer.txt rename to forge-gui/res/cardsfolder/d/dream_devourer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dual_strike.txt b/forge-gui/res/cardsfolder/d/dual_strike.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dual_strike.txt rename to forge-gui/res/cardsfolder/d/dual_strike.txt diff --git a/forge-gui/res/cardsfolder/upcoming/duskwielder.txt b/forge-gui/res/cardsfolder/d/duskwielder.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/duskwielder.txt rename to forge-gui/res/cardsfolder/d/duskwielder.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dwarven_hammer.txt b/forge-gui/res/cardsfolder/d/dwarven_hammer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dwarven_hammer.txt rename to forge-gui/res/cardsfolder/d/dwarven_hammer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dwarven_reinforcements.txt b/forge-gui/res/cardsfolder/d/dwarven_reinforcements.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dwarven_reinforcements.txt rename to forge-gui/res/cardsfolder/d/dwarven_reinforcements.txt diff --git a/forge-gui/res/cardsfolder/upcoming/egon_god_of_death_throne_of_death.txt b/forge-gui/res/cardsfolder/e/egon_god_of_death_throne_of_death.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/egon_god_of_death_throne_of_death.txt rename to forge-gui/res/cardsfolder/e/egon_god_of_death_throne_of_death.txt diff --git a/forge-gui/res/cardsfolder/upcoming/elderfang_disciple.txt b/forge-gui/res/cardsfolder/e/elderfang_disciple.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/elderfang_disciple.txt rename to forge-gui/res/cardsfolder/e/elderfang_disciple.txt diff --git a/forge-gui/res/cardsfolder/upcoming/elderfang_ritualist.txt b/forge-gui/res/cardsfolder/e/elderfang_ritualist.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/elderfang_ritualist.txt rename to forge-gui/res/cardsfolder/e/elderfang_ritualist.txt diff --git a/forge-gui/res/cardsfolder/upcoming/elderfang_venom.txt b/forge-gui/res/cardsfolder/e/elderfang_venom.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/elderfang_venom.txt rename to forge-gui/res/cardsfolder/e/elderfang_venom.txt diff --git a/forge-gui/res/cardsfolder/upcoming/elderleaf_mentor.txt b/forge-gui/res/cardsfolder/e/elderleaf_mentor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/elderleaf_mentor.txt rename to forge-gui/res/cardsfolder/e/elderleaf_mentor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/elven_ambush.txt b/forge-gui/res/cardsfolder/e/elven_ambush.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/elven_ambush.txt rename to forge-gui/res/cardsfolder/e/elven_ambush.txt diff --git a/forge-gui/res/cardsfolder/upcoming/elven_bow.txt b/forge-gui/res/cardsfolder/e/elven_bow.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/elven_bow.txt rename to forge-gui/res/cardsfolder/e/elven_bow.txt diff --git a/forge-gui/res/cardsfolder/upcoming/elvish_warmaster.txt b/forge-gui/res/cardsfolder/e/elvish_warmaster.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/elvish_warmaster.txt rename to forge-gui/res/cardsfolder/e/elvish_warmaster.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eradicator_valkyrie.txt b/forge-gui/res/cardsfolder/e/eradicator_valkyrie.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eradicator_valkyrie.txt rename to forge-gui/res/cardsfolder/e/eradicator_valkyrie.txt diff --git a/forge-gui/res/cardsfolder/upcoming/esika_god_of_the_tree_the_prismatic_bridge.txt b/forge-gui/res/cardsfolder/e/esika_god_of_the_tree_the_prismatic_bridge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/esika_god_of_the_tree_the_prismatic_bridge.txt rename to forge-gui/res/cardsfolder/e/esika_god_of_the_tree_the_prismatic_bridge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/esikas_charriot.txt b/forge-gui/res/cardsfolder/e/esikas_charriot.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/esikas_charriot.txt rename to forge-gui/res/cardsfolder/e/esikas_charriot.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ethereal_valkyrie.txt b/forge-gui/res/cardsfolder/e/ethereal_valkyrie.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ethereal_valkyrie.txt rename to forge-gui/res/cardsfolder/e/ethereal_valkyrie.txt diff --git a/forge-gui/res/cardsfolder/upcoming/faceless_haven.txt b/forge-gui/res/cardsfolder/f/faceless_haven.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/faceless_haven.txt rename to forge-gui/res/cardsfolder/f/faceless_haven.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fall_of_the_impostor.txt b/forge-gui/res/cardsfolder/f/fall_of_the_impostor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fall_of_the_impostor.txt rename to forge-gui/res/cardsfolder/f/fall_of_the_impostor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fearless_liberator.txt b/forge-gui/res/cardsfolder/f/fearless_liberator.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fearless_liberator.txt rename to forge-gui/res/cardsfolder/f/fearless_liberator.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fearless_pup.txt b/forge-gui/res/cardsfolder/f/fearless_pup.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fearless_pup.txt rename to forge-gui/res/cardsfolder/f/fearless_pup.txt diff --git a/forge-gui/res/cardsfolder/upcoming/feed_the_serpent.txt b/forge-gui/res/cardsfolder/f/feed_the_serpent.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/feed_the_serpent.txt rename to forge-gui/res/cardsfolder/f/feed_the_serpent.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fire_giants_fury.txt b/forge-gui/res/cardsfolder/f/fire_giants_fury.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fire_giants_fury.txt rename to forge-gui/res/cardsfolder/f/fire_giants_fury.txt diff --git a/forge-gui/res/cardsfolder/upcoming/firja_judge_of_valor.txt b/forge-gui/res/cardsfolder/f/firja_judge_of_valor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/firja_judge_of_valor.txt rename to forge-gui/res/cardsfolder/f/firja_judge_of_valor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/firjas_retribution.txt b/forge-gui/res/cardsfolder/f/firjas_retribution.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/firjas_retribution.txt rename to forge-gui/res/cardsfolder/f/firjas_retribution.txt diff --git a/forge-gui/res/cardsfolder/upcoming/forging_the_tyrite_sword.txt b/forge-gui/res/cardsfolder/f/forging_the_tyrite_sword.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/forging_the_tyrite_sword.txt rename to forge-gui/res/cardsfolder/f/forging_the_tyrite_sword.txt diff --git a/forge-gui/res/cardsfolder/upcoming/frenzied_raider.txt b/forge-gui/res/cardsfolder/f/frenzied_raider.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/frenzied_raider.txt rename to forge-gui/res/cardsfolder/f/frenzied_raider.txt diff --git a/forge-gui/res/cardsfolder/upcoming/frost_augur.txt b/forge-gui/res/cardsfolder/f/frost_augur.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/frost_augur.txt rename to forge-gui/res/cardsfolder/f/frost_augur.txt diff --git a/forge-gui/res/cardsfolder/upcoming/frost_bite.txt b/forge-gui/res/cardsfolder/f/frost_bite.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/frost_bite.txt rename to forge-gui/res/cardsfolder/f/frost_bite.txt diff --git a/forge-gui/res/cardsfolder/upcoming/frostpeak_yeti.txt b/forge-gui/res/cardsfolder/f/frostpeak_yeti.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/frostpeak_yeti.txt rename to forge-gui/res/cardsfolder/f/frostpeak_yeti.txt diff --git a/forge-gui/res/cardsfolder/upcoming/frostpyre_arcanist.txt b/forge-gui/res/cardsfolder/f/frostpyre_arcanist.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/frostpyre_arcanist.txt rename to forge-gui/res/cardsfolder/f/frostpyre_arcanist.txt diff --git a/forge-gui/res/cardsfolder/upcoming/funeral_longboat.txt b/forge-gui/res/cardsfolder/f/funeral_longboat.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/funeral_longboat.txt rename to forge-gui/res/cardsfolder/f/funeral_longboat.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fynn_the_fangbearer.txt b/forge-gui/res/cardsfolder/f/fynn_the_fangbearer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fynn_the_fangbearer.txt rename to forge-gui/res/cardsfolder/f/fynn_the_fangbearer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gates_of_istfell.txt b/forge-gui/res/cardsfolder/g/gates_of_istfell.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gates_of_istfell.txt rename to forge-gui/res/cardsfolder/g/gates_of_istfell.txt diff --git a/forge-gui/res/cardsfolder/upcoming/giant_ox.txt b/forge-gui/res/cardsfolder/g/giant_ox.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/giant_ox.txt rename to forge-gui/res/cardsfolder/g/giant_ox.txt diff --git a/forge-gui/res/cardsfolder/upcoming/giants_amulet.txt b/forge-gui/res/cardsfolder/g/giants_amulet.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/giants_amulet.txt rename to forge-gui/res/cardsfolder/g/giants_amulet.txt diff --git a/forge-gui/res/cardsfolder/upcoming/giants_grasp.txt b/forge-gui/res/cardsfolder/g/giants_grasp.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/giants_grasp.txt rename to forge-gui/res/cardsfolder/g/giants_grasp.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gilded_assault_cart.txt b/forge-gui/res/cardsfolder/g/gilded_assault_cart.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gilded_assault_cart.txt rename to forge-gui/res/cardsfolder/g/gilded_assault_cart.txt diff --git a/forge-gui/res/cardsfolder/upcoming/glacial_floodplain.txt b/forge-gui/res/cardsfolder/g/glacial_floodplain.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/glacial_floodplain.txt rename to forge-gui/res/cardsfolder/g/glacial_floodplain.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gladewalker_ritualist.txt b/forge-gui/res/cardsfolder/g/gladewalker_ritualist.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gladewalker_ritualist.txt rename to forge-gui/res/cardsfolder/g/gladewalker_ritualist.txt diff --git a/forge-gui/res/cardsfolder/upcoming/glimpse_the_cosmos.txt b/forge-gui/res/cardsfolder/g/glimpse_the_cosmos.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/glimpse_the_cosmos.txt rename to forge-gui/res/cardsfolder/g/glimpse_the_cosmos.txt diff --git a/forge-gui/res/cardsfolder/upcoming/glittering_frost.txt b/forge-gui/res/cardsfolder/g/glittering_frost.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/glittering_frost.txt rename to forge-gui/res/cardsfolder/g/glittering_frost.txt diff --git a/forge-gui/res/cardsfolder/upcoming/glorious_protector.txt b/forge-gui/res/cardsfolder/g/glorious_protector.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/glorious_protector.txt rename to forge-gui/res/cardsfolder/g/glorious_protector.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gnottvold_recluse.txt b/forge-gui/res/cardsfolder/g/gnottvold_recluse.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gnottvold_recluse.txt rename to forge-gui/res/cardsfolder/g/gnottvold_recluse.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gnottvold_slumbermound.txt b/forge-gui/res/cardsfolder/g/gnottvold_slumbermound.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gnottvold_slumbermound.txt rename to forge-gui/res/cardsfolder/g/gnottvold_slumbermound.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gods_hall_guardian.txt b/forge-gui/res/cardsfolder/g/gods_hall_guardian.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gods_hall_guardian.txt rename to forge-gui/res/cardsfolder/g/gods_hall_guardian.txt diff --git a/forge-gui/res/cardsfolder/upcoming/goldmaw_champion.txt b/forge-gui/res/cardsfolder/g/goldmaw_champion.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/goldmaw_champion.txt rename to forge-gui/res/cardsfolder/g/goldmaw_champion.txt diff --git a/forge-gui/res/cardsfolder/upcoming/goldspan_dragon.txt b/forge-gui/res/cardsfolder/g/goldspan_dragon.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/goldspan_dragon.txt rename to forge-gui/res/cardsfolder/g/goldspan_dragon.txt diff --git a/forge-gui/res/cardsfolder/upcoming/goldvein_pick.txt b/forge-gui/res/cardsfolder/g/goldvein_pick.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/goldvein_pick.txt rename to forge-gui/res/cardsfolder/g/goldvein_pick.txt diff --git a/forge-gui/res/cardsfolder/upcoming/graven_lore.txt b/forge-gui/res/cardsfolder/g/graven_lore.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/graven_lore.txt rename to forge-gui/res/cardsfolder/g/graven_lore.txt diff --git a/forge-gui/res/cardsfolder/upcoming/great_hall_of_starnheim.txt b/forge-gui/res/cardsfolder/g/great_hall_of_starnheim.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/great_hall_of_starnheim.txt rename to forge-gui/res/cardsfolder/g/great_hall_of_starnheim.txt diff --git a/forge-gui/res/cardsfolder/upcoming/grim_draugr.txt b/forge-gui/res/cardsfolder/g/grim_draugr.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/grim_draugr.txt rename to forge-gui/res/cardsfolder/g/grim_draugr.txt diff --git a/forge-gui/res/cardsfolder/upcoming/grizzled_outrider.txt b/forge-gui/res/cardsfolder/g/grizzled_outrider.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/grizzled_outrider.txt rename to forge-gui/res/cardsfolder/g/grizzled_outrider.txt diff --git a/forge-gui/res/cardsfolder/upcoming/guardian-gladewalker.txt b/forge-gui/res/cardsfolder/g/guardian-gladewalker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/guardian-gladewalker.txt rename to forge-gui/res/cardsfolder/g/guardian-gladewalker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hagi_mob.txt b/forge-gui/res/cardsfolder/h/hagi_mob.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hagi_mob.txt rename to forge-gui/res/cardsfolder/h/hagi_mob.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hailstorm_valkyrie.txt b/forge-gui/res/cardsfolder/h/hailstorm_valkyrie.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hailstorm_valkyrie.txt rename to forge-gui/res/cardsfolder/h/hailstorm_valkyrie.txt diff --git a/forge-gui/res/cardsfolder/upcoming/halvar_god_of_battle_sword_of_the_realms.txt b/forge-gui/res/cardsfolder/h/halvar_god_of_battle_sword_of_the_realms.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/halvar_god_of_battle_sword_of_the_realms.txt rename to forge-gui/res/cardsfolder/h/halvar_god_of_battle_sword_of_the_realms.txt diff --git a/forge-gui/res/cardsfolder/upcoming/harald_king_of_skemfar.txt b/forge-gui/res/cardsfolder/h/harald_king_of_skemfar.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/harald_king_of_skemfar.txt rename to forge-gui/res/cardsfolder/h/harald_king_of_skemfar.txt diff --git a/forge-gui/res/cardsfolder/upcoming/harald_unites_the_elves.txt b/forge-gui/res/cardsfolder/h/harald_unites_the_elves.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/harald_unites_the_elves.txt rename to forge-gui/res/cardsfolder/h/harald_unites_the_elves.txt diff --git a/forge-gui/res/cardsfolder/upcoming/haunting_voyage.txt b/forge-gui/res/cardsfolder/h/haunting_voyage.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/haunting_voyage.txt rename to forge-gui/res/cardsfolder/h/haunting_voyage.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hengegate_pathway_mistgate_pathway.txt b/forge-gui/res/cardsfolder/h/hengegate_pathway_mistgate_pathway.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hengegate_pathway_mistgate_pathway.txt rename to forge-gui/res/cardsfolder/h/hengegate_pathway_mistgate_pathway.txt diff --git a/forge-gui/res/cardsfolder/upcoming/highland_forest.txt b/forge-gui/res/cardsfolder/h/highland_forest.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/highland_forest.txt rename to forge-gui/res/cardsfolder/h/highland_forest.txt diff --git a/forge-gui/res/cardsfolder/upcoming/horizon_seeker.txt b/forge-gui/res/cardsfolder/h/horizon_seeker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/horizon_seeker.txt rename to forge-gui/res/cardsfolder/h/horizon_seeker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ice_tunnel.txt b/forge-gui/res/cardsfolder/i/ice_tunnel.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ice_tunnel.txt rename to forge-gui/res/cardsfolder/i/ice_tunnel.txt diff --git a/forge-gui/res/cardsfolder/upcoming/icebind_pillar.txt b/forge-gui/res/cardsfolder/i/icebind_pillar.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/icebind_pillar.txt rename to forge-gui/res/cardsfolder/i/icebind_pillar.txt diff --git a/forge-gui/res/cardsfolder/upcoming/icebreaker_kraken.txt b/forge-gui/res/cardsfolder/i/icebreaker_kraken.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/icebreaker_kraken.txt rename to forge-gui/res/cardsfolder/i/icebreaker_kraken.txt diff --git a/forge-gui/res/cardsfolder/upcoming/icehide_troll.txt b/forge-gui/res/cardsfolder/i/icehide_troll.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/icehide_troll.txt rename to forge-gui/res/cardsfolder/i/icehide_troll.txt diff --git a/forge-gui/res/cardsfolder/upcoming/immersturm_predator.txt b/forge-gui/res/cardsfolder/i/immersturm_predator.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/immersturm_predator.txt rename to forge-gui/res/cardsfolder/i/immersturm_predator.txt diff --git a/forge-gui/res/cardsfolder/upcoming/immersturm_raider.txt b/forge-gui/res/cardsfolder/i/immersturm_raider.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/immersturm_raider.txt rename to forge-gui/res/cardsfolder/i/immersturm_raider.txt diff --git a/forge-gui/res/cardsfolder/upcoming/immersturm_skullcairn.txt b/forge-gui/res/cardsfolder/i/immersturm_skullcairn.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/immersturm_skullcairn.txt rename to forge-gui/res/cardsfolder/i/immersturm_skullcairn.txt diff --git a/forge-gui/res/cardsfolder/upcoming/in_search_of_greatness.txt b/forge-gui/res/cardsfolder/i/in_search_of_greatness.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/in_search_of_greatness.txt rename to forge-gui/res/cardsfolder/i/in_search_of_greatness.txt diff --git a/forge-gui/res/cardsfolder/upcoming/infernal_pet.txt b/forge-gui/res/cardsfolder/i/infernal_pet.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/infernal_pet.txt rename to forge-gui/res/cardsfolder/i/infernal_pet.txt diff --git a/forge-gui/res/cardsfolder/upcoming/inga_rune_eyes.txt b/forge-gui/res/cardsfolder/i/inga_rune_eyes.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/inga_rune_eyes.txt rename to forge-gui/res/cardsfolder/i/inga_rune_eyes.txt diff --git a/forge-gui/res/cardsfolder/upcoming/invasion_of_the_giants.txt b/forge-gui/res/cardsfolder/i/invasion_of_the_giants.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/invasion_of_the_giants.txt rename to forge-gui/res/cardsfolder/i/invasion_of_the_giants.txt diff --git a/forge-gui/res/cardsfolder/upcoming/iron_verdict.txt b/forge-gui/res/cardsfolder/i/iron_verdict.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/iron_verdict.txt rename to forge-gui/res/cardsfolder/i/iron_verdict.txt diff --git a/forge-gui/res/cardsfolder/upcoming/jarl_of_the_forsaken.txt b/forge-gui/res/cardsfolder/j/jarl_of_the_forsaken.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/jarl_of_the_forsaken.txt rename to forge-gui/res/cardsfolder/j/jarl_of_the_forsaken.txt diff --git a/forge-gui/res/cardsfolder/upcoming/jaspera_sentinel.txt b/forge-gui/res/cardsfolder/j/jaspera_sentinel.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/jaspera_sentinel.txt rename to forge-gui/res/cardsfolder/j/jaspera_sentinel.txt diff --git a/forge-gui/res/cardsfolder/upcoming/jorn_god_of_winter_kaldring_the_rimestaff.txt b/forge-gui/res/cardsfolder/j/jorn_god_of_winter_kaldring_the_rimestaff.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/jorn_god_of_winter_kaldring_the_rimestaff.txt rename to forge-gui/res/cardsfolder/j/jorn_god_of_winter_kaldring_the_rimestaff.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kardur_doomscourge.txt b/forge-gui/res/cardsfolder/k/kardur_doomscourge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kardur_doomscourge.txt rename to forge-gui/res/cardsfolder/k/kardur_doomscourge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kardurs_vicious_return.txt b/forge-gui/res/cardsfolder/k/kardurs_vicious_return.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kardurs_vicious_return.txt rename to forge-gui/res/cardsfolder/k/kardurs_vicious_return.txt diff --git a/forge-gui/res/cardsfolder/upcoming/karfell_harbinger.txt b/forge-gui/res/cardsfolder/k/karfell_harbinger.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/karfell_harbinger.txt rename to forge-gui/res/cardsfolder/k/karfell_harbinger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/karfell_kennel_master.txt b/forge-gui/res/cardsfolder/k/karfell_kennel_master.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/karfell_kennel_master.txt rename to forge-gui/res/cardsfolder/k/karfell_kennel_master.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kaya_the_inexorable.txt b/forge-gui/res/cardsfolder/k/kaya_the_inexorable.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kaya_the_inexorable.txt rename to forge-gui/res/cardsfolder/k/kaya_the_inexorable.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kayas_onslaught.txt b/forge-gui/res/cardsfolder/k/kayas_onslaught.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kayas_onslaught.txt rename to forge-gui/res/cardsfolder/k/kayas_onslaught.txt diff --git a/forge-gui/res/cardsfolder/upcoming/king_haralds_revenge.txt b/forge-gui/res/cardsfolder/k/king_haralds_revenge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/king_haralds_revenge.txt rename to forge-gui/res/cardsfolder/k/king_haralds_revenge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/king_narfis_betrayal.txt b/forge-gui/res/cardsfolder/k/king_narfis_betrayal.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/king_narfis_betrayal.txt rename to forge-gui/res/cardsfolder/k/king_narfis_betrayal.txt diff --git a/forge-gui/res/cardsfolder/upcoming/koll_the_forgemaster.txt b/forge-gui/res/cardsfolder/k/koll_the_forgemaster.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/koll_the_forgemaster.txt rename to forge-gui/res/cardsfolder/k/koll_the_forgemaster.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kolvori_god_of_kinship_the_ringhart_crest.txt b/forge-gui/res/cardsfolder/k/kolvori_god_of_kinship_the_ringhart_crest.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kolvori_god_of_kinship_the_ringhart_crest.txt rename to forge-gui/res/cardsfolder/k/kolvori_god_of_kinship_the_ringhart_crest.txt diff --git a/forge-gui/res/cardsfolder/upcoming/koma_cosmos_serpent.txt b/forge-gui/res/cardsfolder/k/koma_cosmos_serpent.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/koma_cosmos_serpent.txt rename to forge-gui/res/cardsfolder/k/koma_cosmos_serpent.txt diff --git a/forge-gui/res/cardsfolder/upcoming/komas_faithful.txt b/forge-gui/res/cardsfolder/k/komas_faithful.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/komas_faithful.txt rename to forge-gui/res/cardsfolder/k/komas_faithful.txt diff --git a/forge-gui/res/cardsfolder/upcoming/littjara_glade_warden.txt b/forge-gui/res/cardsfolder/l/littjara_glade_warden.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/littjara_glade_warden.txt rename to forge-gui/res/cardsfolder/l/littjara_glade_warden.txt diff --git a/forge-gui/res/cardsfolder/upcoming/littjara_kinseekers.txt b/forge-gui/res/cardsfolder/l/littjara_kinseekers.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/littjara_kinseekers.txt rename to forge-gui/res/cardsfolder/l/littjara_kinseekers.txt diff --git a/forge-gui/res/cardsfolder/upcoming/littjara_mirrorlake.txt b/forge-gui/res/cardsfolder/l/littjara_mirrorlake.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/littjara_mirrorlake.txt rename to forge-gui/res/cardsfolder/l/littjara_mirrorlake.txt diff --git a/forge-gui/res/cardsfolder/upcoming/magda_brazen_outlaw.txt b/forge-gui/res/cardsfolder/m/magda_brazen_outlaw.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/magda_brazen_outlaw.txt rename to forge-gui/res/cardsfolder/m/magda_brazen_outlaw.txt diff --git a/forge-gui/res/cardsfolder/upcoming/maja_bretagard_protector.txt b/forge-gui/res/cardsfolder/m/maja_bretagard_protector.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/maja_bretagard_protector.txt rename to forge-gui/res/cardsfolder/m/maja_bretagard_protector.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mammoth_growth.txt b/forge-gui/res/cardsfolder/m/mammoth_growth.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mammoth_growth.txt rename to forge-gui/res/cardsfolder/m/mammoth_growth.txt diff --git a/forge-gui/res/cardsfolder/upcoming/masked_vandal.txt b/forge-gui/res/cardsfolder/m/masked_vandal.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/masked_vandal.txt rename to forge-gui/res/cardsfolder/m/masked_vandal.txt diff --git a/forge-gui/res/cardsfolder/upcoming/maskwood_nexus.txt b/forge-gui/res/cardsfolder/m/maskwood_nexus.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/maskwood_nexus.txt rename to forge-gui/res/cardsfolder/m/maskwood_nexus.txt diff --git a/forge-gui/res/cardsfolder/upcoming/master_skald.txt b/forge-gui/res/cardsfolder/m/master_skald.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/master_skald.txt rename to forge-gui/res/cardsfolder/m/master_skald.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mists_of_littjara.txt b/forge-gui/res/cardsfolder/m/mists_of_littjara.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mists_of_littjara.txt rename to forge-gui/res/cardsfolder/m/mists_of_littjara.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mistwalker.txt b/forge-gui/res/cardsfolder/m/mistwalker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mistwalker.txt rename to forge-gui/res/cardsfolder/m/mistwalker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/moritte_of_the_frost.txt b/forge-gui/res/cardsfolder/m/moritte_of_the_frost.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/moritte_of_the_frost.txt rename to forge-gui/res/cardsfolder/m/moritte_of_the_frost.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mystic_reflection.txt b/forge-gui/res/cardsfolder/m/mystic_reflection.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mystic_reflection.txt rename to forge-gui/res/cardsfolder/m/mystic_reflection.txt diff --git a/forge-gui/res/cardsfolder/upcoming/narfi_betrayer_king.txt b/forge-gui/res/cardsfolder/n/narfi_betrayer_king.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/narfi_betrayer_king.txt rename to forge-gui/res/cardsfolder/n/narfi_betrayer_king.txt diff --git a/forge-gui/res/cardsfolder/upcoming/niko_aris.txt b/forge-gui/res/cardsfolder/n/niko_aris.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/niko_aris.txt rename to forge-gui/res/cardsfolder/n/niko_aris.txt diff --git a/forge-gui/res/cardsfolder/upcoming/niko_defies_destiny.txt b/forge-gui/res/cardsfolder/n/niko_defies_destiny.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/niko_defies_destiny.txt rename to forge-gui/res/cardsfolder/n/niko_defies_destiny.txt diff --git a/forge-gui/res/cardsfolder/upcoming/old_growth_troll.txt b/forge-gui/res/cardsfolder/o/old_growth_troll.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/old_growth_troll.txt rename to forge-gui/res/cardsfolder/o/old_growth_troll.txt diff --git a/forge-gui/res/cardsfolder/upcoming/open_the_omenpaths.txt b/forge-gui/res/cardsfolder/o/open_the_omenpaths.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/open_the_omenpaths.txt rename to forge-gui/res/cardsfolder/o/open_the_omenpaths.txt diff --git a/forge-gui/res/cardsfolder/upcoming/orvar_the_all_form.txt b/forge-gui/res/cardsfolder/o/orvar_the_all_form.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/orvar_the_all_form.txt rename to forge-gui/res/cardsfolder/o/orvar_the_all_form.txt diff --git a/forge-gui/res/cardsfolder/upcoming/path_to_the_world_tree.txt b/forge-gui/res/cardsfolder/p/path_to_the_world_tree.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/path_to_the_world_tree.txt rename to forge-gui/res/cardsfolder/p/path_to_the_world_tree.txt diff --git a/forge-gui/res/cardsfolder/upcoming/pilfering_hawk.txt b/forge-gui/res/cardsfolder/p/pilfering_hawk.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/pilfering_hawk.txt rename to forge-gui/res/cardsfolder/p/pilfering_hawk.txt diff --git a/forge-gui/res/cardsfolder/upcoming/poison_the_cup.txt b/forge-gui/res/cardsfolder/p/poison_the_cup.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/poison_the_cup.txt rename to forge-gui/res/cardsfolder/p/poison_the_cup.txt diff --git a/forge-gui/res/cardsfolder/upcoming/port_of_karfell.txt b/forge-gui/res/cardsfolder/p/port_of_karfell.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/port_of_karfell.txt rename to forge-gui/res/cardsfolder/p/port_of_karfell.txt diff --git a/forge-gui/res/cardsfolder/upcoming/priest_of_the_haunted_edge.txt b/forge-gui/res/cardsfolder/p/priest_of_the_haunted_edge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/priest_of_the_haunted_edge.txt rename to forge-gui/res/cardsfolder/p/priest_of_the_haunted_edge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/provoke_the_trolls.txt b/forge-gui/res/cardsfolder/p/provoke_the_trolls.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/provoke_the_trolls.txt rename to forge-gui/res/cardsfolder/p/provoke_the_trolls.txt diff --git a/forge-gui/res/cardsfolder/upcoming/pyre_of_heroes.txt b/forge-gui/res/cardsfolder/p/pyre_of_heroes.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/pyre_of_heroes.txt rename to forge-gui/res/cardsfolder/p/pyre_of_heroes.txt diff --git a/forge-gui/res/cardsfolder/upcoming/quakebringer.txt b/forge-gui/res/cardsfolder/q/quakebringer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/quakebringer.txt rename to forge-gui/res/cardsfolder/q/quakebringer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/raiders_karve.txt b/forge-gui/res/cardsfolder/r/raiders_karve.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/raiders_karve.txt rename to forge-gui/res/cardsfolder/r/raiders_karve.txt diff --git a/forge-gui/res/cardsfolder/upcoming/raise_the_draugr.txt b/forge-gui/res/cardsfolder/r/raise_the_draugr.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/raise_the_draugr.txt rename to forge-gui/res/cardsfolder/r/raise_the_draugr.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rally_the_ranks.txt b/forge-gui/res/cardsfolder/r/rally_the_ranks.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rally_the_ranks.txt rename to forge-gui/res/cardsfolder/r/rally_the_ranks.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rampage_of_the_valkyries.txt b/forge-gui/res/cardsfolder/r/rampage_of_the_valkyries.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rampage_of_the_valkyries.txt rename to forge-gui/res/cardsfolder/r/rampage_of_the_valkyries.txt diff --git a/forge-gui/res/cardsfolder/upcoming/raven_wings.txt b/forge-gui/res/cardsfolder/r/raven_wings.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/raven_wings.txt rename to forge-gui/res/cardsfolder/r/raven_wings.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ravenform.txt b/forge-gui/res/cardsfolder/r/ravenform.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ravenform.txt rename to forge-gui/res/cardsfolder/r/ravenform.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ravenous_lindwurm.txt b/forge-gui/res/cardsfolder/r/ravenous_lindwurm.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ravenous_lindwurm.txt rename to forge-gui/res/cardsfolder/r/ravenous_lindwurm.txt diff --git a/forge-gui/res/cardsfolder/upcoming/realmwalker.txt b/forge-gui/res/cardsfolder/r/realmwalker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/realmwalker.txt rename to forge-gui/res/cardsfolder/r/realmwalker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/reckless_crew.txt b/forge-gui/res/cardsfolder/r/reckless_crew.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/reckless_crew.txt rename to forge-gui/res/cardsfolder/r/reckless_crew.txt diff --git a/forge-gui/res/cardsfolder/upcoming/reflections_of_littjara.txt b/forge-gui/res/cardsfolder/r/reflections_of_littjara.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/reflections_of_littjara.txt rename to forge-gui/res/cardsfolder/r/reflections_of_littjara.txt diff --git a/forge-gui/res/cardsfolder/upcoming/reidane_god_of_the_worthy_valkmira_protectors_shield.txt b/forge-gui/res/cardsfolder/r/reidane_god_of_the_worthy_valkmira_protectors_shield.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/reidane_god_of_the_worthy_valkmira_protectors_shield.txt rename to forge-gui/res/cardsfolder/r/reidane_god_of_the_worthy_valkmira_protectors_shield.txt diff --git a/forge-gui/res/cardsfolder/upcoming/renegade_reaper.txt b/forge-gui/res/cardsfolder/r/renegade_reaper.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/renegade_reaper.txt rename to forge-gui/res/cardsfolder/r/renegade_reaper.txt diff --git a/forge-gui/res/cardsfolder/upcoming/replicating_ring.txt b/forge-gui/res/cardsfolder/r/replicating_ring.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/replicating_ring.txt rename to forge-gui/res/cardsfolder/r/replicating_ring.txt diff --git a/forge-gui/res/cardsfolder/upcoming/resplendent_marshal.txt b/forge-gui/res/cardsfolder/r/resplendent_marshal.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/resplendent_marshal.txt rename to forge-gui/res/cardsfolder/r/resplendent_marshal.txt diff --git a/forge-gui/res/cardsfolder/upcoming/return_upon_the_tide.txt b/forge-gui/res/cardsfolder/r/return_upon_the_tide.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/return_upon_the_tide.txt rename to forge-gui/res/cardsfolder/r/return_upon_the_tide.txt diff --git a/forge-gui/res/cardsfolder/upcoming/righteous_valkyrie.txt b/forge-gui/res/cardsfolder/r/righteous_valkyrie.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/righteous_valkyrie.txt rename to forge-gui/res/cardsfolder/r/righteous_valkyrie.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rimewood_falls.txt b/forge-gui/res/cardsfolder/r/rimewood_falls.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rimewood_falls.txt rename to forge-gui/res/cardsfolder/r/rimewood_falls.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rise_of_the_dread_marn.txt b/forge-gui/res/cardsfolder/r/rise_of_the_dread_marn.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rise_of_the_dread_marn.txt rename to forge-gui/res/cardsfolder/r/rise_of_the_dread_marn.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rootless_yew.txt b/forge-gui/res/cardsfolder/r/rootless_yew.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rootless_yew.txt rename to forge-gui/res/cardsfolder/r/rootless_yew.txt diff --git a/forge-gui/res/cardsfolder/upcoming/roots_of_wisdom.txt b/forge-gui/res/cardsfolder/r/roots_of_wisdom.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/roots_of_wisdom.txt rename to forge-gui/res/cardsfolder/r/roots_of_wisdom.txt diff --git a/forge-gui/res/cardsfolder/upcoming/run_ashore.txt b/forge-gui/res/cardsfolder/r/run_ashore.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/run_ashore.txt rename to forge-gui/res/cardsfolder/r/run_ashore.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rune_of_flight.txt b/forge-gui/res/cardsfolder/r/rune_of_flight.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rune_of_flight.txt rename to forge-gui/res/cardsfolder/r/rune_of_flight.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rune_of_might.txt b/forge-gui/res/cardsfolder/r/rune_of_might.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rune_of_might.txt rename to forge-gui/res/cardsfolder/r/rune_of_might.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rune_of_mortality.txt b/forge-gui/res/cardsfolder/r/rune_of_mortality.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rune_of_mortality.txt rename to forge-gui/res/cardsfolder/r/rune_of_mortality.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rune_of_speed.txt b/forge-gui/res/cardsfolder/r/rune_of_speed.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rune_of_speed.txt rename to forge-gui/res/cardsfolder/r/rune_of_speed.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rune_of_sustenance.txt b/forge-gui/res/cardsfolder/r/rune_of_sustenance.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rune_of_sustenance.txt rename to forge-gui/res/cardsfolder/r/rune_of_sustenance.txt diff --git a/forge-gui/res/cardsfolder/upcoming/runed_crown.txt b/forge-gui/res/cardsfolder/r/runed_crown.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/runed_crown.txt rename to forge-gui/res/cardsfolder/r/runed_crown.txt diff --git a/forge-gui/res/cardsfolder/upcoming/runeforge_champion.txt b/forge-gui/res/cardsfolder/r/runeforge_champion.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/runeforge_champion.txt rename to forge-gui/res/cardsfolder/r/runeforge_champion.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ruthless_winnower.txt b/forge-gui/res/cardsfolder/r/ruthless_winnower.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ruthless_winnower.txt rename to forge-gui/res/cardsfolder/r/ruthless_winnower.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sage_of_the_beyond.txt b/forge-gui/res/cardsfolder/s/sage_of_the_beyond.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sage_of_the_beyond.txt rename to forge-gui/res/cardsfolder/s/sage_of_the_beyond.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sarulf_realm_eater.txt b/forge-gui/res/cardsfolder/s/sarulf_realm_eater.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sarulf_realm_eater.txt rename to forge-gui/res/cardsfolder/s/sarulf_realm_eater.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sarulfs_packmate.txt b/forge-gui/res/cardsfolder/s/sarulfs_packmate.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sarulfs_packmate.txt rename to forge-gui/res/cardsfolder/s/sarulfs_packmate.txt diff --git a/forge-gui/res/cardsfolder/upcoming/saw_it_coming.txt b/forge-gui/res/cardsfolder/s/saw_it_coming.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/saw_it_coming.txt rename to forge-gui/res/cardsfolder/s/saw_it_coming.txt diff --git a/forge-gui/res/cardsfolder/upcoming/scorn_effigy.txt b/forge-gui/res/cardsfolder/s/scorn_effigy.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/scorn_effigy.txt rename to forge-gui/res/cardsfolder/s/scorn_effigy.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sculptor_of_winter.txt b/forge-gui/res/cardsfolder/s/sculptor_of_winter.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sculptor_of_winter.txt rename to forge-gui/res/cardsfolder/s/sculptor_of_winter.txt diff --git a/forge-gui/res/cardsfolder/upcoming/search_for_glory.txt b/forge-gui/res/cardsfolder/s/search_for_glory.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/search_for_glory.txt rename to forge-gui/res/cardsfolder/s/search_for_glory.txt diff --git a/forge-gui/res/cardsfolder/upcoming/seize_the_spoils.txt b/forge-gui/res/cardsfolder/s/seize_the_spoils.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/seize_the_spoils.txt rename to forge-gui/res/cardsfolder/s/seize_the_spoils.txt diff --git a/forge-gui/res/cardsfolder/upcoming/shackles_of_treachery.txt b/forge-gui/res/cardsfolder/s/shackles_of_treachery.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/shackles_of_treachery.txt rename to forge-gui/res/cardsfolder/s/shackles_of_treachery.txt diff --git a/forge-gui/res/cardsfolder/upcoming/shepherd_of_the_cosmos.txt b/forge-gui/res/cardsfolder/s/shepherd_of_the_cosmos.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/shepherd_of_the_cosmos.txt rename to forge-gui/res/cardsfolder/s/shepherd_of_the_cosmos.txt diff --git a/forge-gui/res/cardsfolder/upcoming/shimmerdrift_vale.txt b/forge-gui/res/cardsfolder/s/shimmerdrift_vale.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/shimmerdrift_vale.txt rename to forge-gui/res/cardsfolder/s/shimmerdrift_vale.txt diff --git a/forge-gui/res/cardsfolder/upcoming/showdown_of_the_skalds.txt b/forge-gui/res/cardsfolder/s/showdown_of_the_skalds.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/showdown_of_the_skalds.txt rename to forge-gui/res/cardsfolder/s/showdown_of_the_skalds.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sigrid_god_favored.txt b/forge-gui/res/cardsfolder/s/sigrid_god_favored.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sigrid_god_favored.txt rename to forge-gui/res/cardsfolder/s/sigrid_god_favored.txt diff --git a/forge-gui/res/cardsfolder/upcoming/skemfar_avenger.txt b/forge-gui/res/cardsfolder/s/skemfar_avenger.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/skemfar_avenger.txt rename to forge-gui/res/cardsfolder/s/skemfar_avenger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/skemfar_elderhall.txt b/forge-gui/res/cardsfolder/s/skemfar_elderhall.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/skemfar_elderhall.txt rename to forge-gui/res/cardsfolder/s/skemfar_elderhall.txt diff --git a/forge-gui/res/cardsfolder/upcoming/skemfar_shadowsage.txt b/forge-gui/res/cardsfolder/s/skemfar_shadowsage.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/skemfar_shadowsage.txt rename to forge-gui/res/cardsfolder/s/skemfar_shadowsage.txt diff --git a/forge-gui/res/cardsfolder/upcoming/skull_raid.txt b/forge-gui/res/cardsfolder/s/skull_raid.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/skull_raid.txt rename to forge-gui/res/cardsfolder/s/skull_raid.txt diff --git a/forge-gui/res/cardsfolder/upcoming/smashing_sucess.txt b/forge-gui/res/cardsfolder/s/smashing_sucess.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/smashing_sucess.txt rename to forge-gui/res/cardsfolder/s/smashing_sucess.txt diff --git a/forge-gui/res/cardsfolder/upcoming/snakeskin_veil.txt b/forge-gui/res/cardsfolder/s/snakeskin_veil.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/snakeskin_veil.txt rename to forge-gui/res/cardsfolder/s/snakeskin_veil.txt diff --git a/forge-gui/res/cardsfolder/upcoming/snowfield_sinkhole.txt b/forge-gui/res/cardsfolder/s/snowfield_sinkhole.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/snowfield_sinkhole.txt rename to forge-gui/res/cardsfolder/s/snowfield_sinkhole.txt diff --git a/forge-gui/res/cardsfolder/upcoming/spectral_deluge.txt b/forge-gui/res/cardsfolder/s/spectral_deluge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/spectral_deluge.txt rename to forge-gui/res/cardsfolder/s/spectral_deluge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/spectral_steel.txt b/forge-gui/res/cardsfolder/s/spectral_steel.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/spectral_steel.txt rename to forge-gui/res/cardsfolder/s/spectral_steel.txt diff --git a/forge-gui/res/cardsfolder/upcoming/spirit_of_the_aldergard.txt b/forge-gui/res/cardsfolder/s/spirit_of_the_aldergard.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/spirit_of_the_aldergard.txt rename to forge-gui/res/cardsfolder/s/spirit_of_the_aldergard.txt diff --git a/forge-gui/res/cardsfolder/upcoming/squash.txt b/forge-gui/res/cardsfolder/s/squash.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/squash.txt rename to forge-gui/res/cardsfolder/s/squash.txt diff --git a/forge-gui/res/cardsfolder/upcoming/stalwart_valkyrie.txt b/forge-gui/res/cardsfolder/s/stalwart_valkyrie.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/stalwart_valkyrie.txt rename to forge-gui/res/cardsfolder/s/stalwart_valkyrie.txt diff --git a/forge-gui/res/cardsfolder/upcoming/starnheim_aspirant.txt b/forge-gui/res/cardsfolder/s/starnheim_aspirant.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/starnheim_aspirant.txt rename to forge-gui/res/cardsfolder/s/starnheim_aspirant.txt diff --git a/forge-gui/res/cardsfolder/upcoming/starnheim_courser.txt b/forge-gui/res/cardsfolder/s/starnheim_courser.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/starnheim_courser.txt rename to forge-gui/res/cardsfolder/s/starnheim_courser.txt diff --git a/forge-gui/res/cardsfolder/upcoming/starnheim_unleashed.txt b/forge-gui/res/cardsfolder/s/starnheim_unleashed.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/starnheim_unleashed.txt rename to forge-gui/res/cardsfolder/s/starnheim_unleashed.txt diff --git a/forge-gui/res/cardsfolder/upcoming/stoic_farmer.txt b/forge-gui/res/cardsfolder/s/stoic_farmer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/stoic_farmer.txt rename to forge-gui/res/cardsfolder/s/stoic_farmer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/story_seeker.txt b/forge-gui/res/cardsfolder/s/story_seeker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/story_seeker.txt rename to forge-gui/res/cardsfolder/s/story_seeker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/struggle_for_skemfar.txt b/forge-gui/res/cardsfolder/s/struggle_for_skemfar.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/struggle_for_skemfar.txt rename to forge-gui/res/cardsfolder/s/struggle_for_skemfar.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sulfurous_mire.txt b/forge-gui/res/cardsfolder/s/sulfurous_mire.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sulfurous_mire.txt rename to forge-gui/res/cardsfolder/s/sulfurous_mire.txt diff --git a/forge-gui/res/cardsfolder/upcoming/surtland_elementalist.txt b/forge-gui/res/cardsfolder/s/surtland_elementalist.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/surtland_elementalist.txt rename to forge-gui/res/cardsfolder/s/surtland_elementalist.txt diff --git a/forge-gui/res/cardsfolder/upcoming/surtland_flinger.txt b/forge-gui/res/cardsfolder/s/surtland_flinger.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/surtland_flinger.txt rename to forge-gui/res/cardsfolder/s/surtland_flinger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/surtland_frostpyre.txt b/forge-gui/res/cardsfolder/s/surtland_frostpyre.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/surtland_frostpyre.txt rename to forge-gui/res/cardsfolder/s/surtland_frostpyre.txt diff --git a/forge-gui/res/cardsfolder/upcoming/svella_ice_shaper.txt b/forge-gui/res/cardsfolder/s/svella_ice_shaper.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/svella_ice_shaper.txt rename to forge-gui/res/cardsfolder/s/svella_ice_shaper.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tales_of_the_ancestors.txt b/forge-gui/res/cardsfolder/t/tales_of_the_ancestors.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tales_of_the_ancestors.txt rename to forge-gui/res/cardsfolder/t/tales_of_the_ancestors.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tayam_luminous_enigma.txt b/forge-gui/res/cardsfolder/t/tayam_luminous_enigma.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tayam_luminous_enigma.txt rename to forge-gui/res/cardsfolder/t/tayam_luminous_enigma.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tergrid_god_of_fear_tergrids_lantern.txt b/forge-gui/res/cardsfolder/t/tergrid_god_of_fear_tergrids_lantern.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tergrid_god_of_fear_tergrids_lantern.txt rename to forge-gui/res/cardsfolder/t/tergrid_god_of_fear_tergrids_lantern.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tergrids_shadow.txt b/forge-gui/res/cardsfolder/t/tergrids_shadow.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tergrids_shadow.txt rename to forge-gui/res/cardsfolder/t/tergrids_shadow.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_bears_of_littjara.txt b/forge-gui/res/cardsfolder/t/the_bears_of_littjara.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_bears_of_littjara.txt rename to forge-gui/res/cardsfolder/t/the_bears_of_littjara.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_bloodsky_massacre.txt b/forge-gui/res/cardsfolder/t/the_bloodsky_massacre.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_bloodsky_massacre.txt rename to forge-gui/res/cardsfolder/t/the_bloodsky_massacre.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_ravens_warning.txt b/forge-gui/res/cardsfolder/t/the_ravens_warning.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_ravens_warning.txt rename to forge-gui/res/cardsfolder/t/the_ravens_warning.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_three_seasons.txt b/forge-gui/res/cardsfolder/t/the_three_seasons.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_three_seasons.txt rename to forge-gui/res/cardsfolder/t/the_three_seasons.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_trickster_gods_heist.txt b/forge-gui/res/cardsfolder/t/the_trickster_gods_heist.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_trickster_gods_heist.txt rename to forge-gui/res/cardsfolder/t/the_trickster_gods_heist.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_world_tree.txt b/forge-gui/res/cardsfolder/t/the_world_tree.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_world_tree.txt rename to forge-gui/res/cardsfolder/t/the_world_tree.txt diff --git a/forge-gui/res/cardsfolder/upcoming/thornmantle_striker.txt b/forge-gui/res/cardsfolder/t/thornmantle_striker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/thornmantle_striker.txt rename to forge-gui/res/cardsfolder/t/thornmantle_striker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tibalts_trickery.txt b/forge-gui/res/cardsfolder/t/tibalts_trickery.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tibalts_trickery.txt rename to forge-gui/res/cardsfolder/t/tibalts_trickery.txt diff --git a/forge-gui/res/cardsfolder/upcoming/toralf_god_of_fury_toralfs_hammer.txt b/forge-gui/res/cardsfolder/t/toralf_god_of_fury_toralfs_hammer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/toralf_god_of_fury_toralfs_hammer.txt rename to forge-gui/res/cardsfolder/t/toralf_god_of_fury_toralfs_hammer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tormentors_helm.txt b/forge-gui/res/cardsfolder/t/tormentors_helm.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tormentors_helm.txt rename to forge-gui/res/cardsfolder/t/tormentors_helm.txt diff --git a/forge-gui/res/cardsfolder/upcoming/toski_bearer_of_secrets.txt b/forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/toski_bearer_of_secrets.txt rename to forge-gui/res/cardsfolder/t/toski_bearer_of_secrets.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tundra_fumarole.txt b/forge-gui/res/cardsfolder/t/tundra_fumarole.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tundra_fumarole.txt rename to forge-gui/res/cardsfolder/t/tundra_fumarole.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tuskeri_firewalker.txt b/forge-gui/res/cardsfolder/t/tuskeri_firewalker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tuskeri_firewalker.txt rename to forge-gui/res/cardsfolder/t/tuskeri_firewalker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tyrite_sanctum.txt b/forge-gui/res/cardsfolder/t/tyrite_sanctum.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tyrite_sanctum.txt rename to forge-gui/res/cardsfolder/t/tyrite_sanctum.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tyvar_kell.txt b/forge-gui/res/cardsfolder/t/tyvar_kell.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tyvar_kell.txt rename to forge-gui/res/cardsfolder/t/tyvar_kell.txt diff --git a/forge-gui/res/cardsfolder/upcoming/undersea_invader.txt b/forge-gui/res/cardsfolder/u/undersea_invader.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/undersea_invader.txt rename to forge-gui/res/cardsfolder/u/undersea_invader.txt diff --git a/forge-gui/res/cardsfolder/upcoming/usher_of_the_fallen.txt b/forge-gui/res/cardsfolder/u/usher_of_the_fallen.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/usher_of_the_fallen.txt rename to forge-gui/res/cardsfolder/u/usher_of_the_fallen.txt diff --git a/forge-gui/res/cardsfolder/upcoming/strategic_planning.txt b/forge-gui/res/cardsfolder/upcoming/strategic_planning.txt deleted file mode 100644 index 994bef9b44e..00000000000 --- a/forge-gui/res/cardsfolder/upcoming/strategic_planning.txt +++ /dev/null @@ -1,6 +0,0 @@ -Name:Strategic Planning -ManaCost:1 U -Types:Sorcery -A:SP$ Dig | Cost$ 1 U | DigNum$ 3 | DestinationZone2$ Graveyard | SpellDescription$ Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard. -AI:RemoveDeck:Random -Oracle:Look at the top three cards of your library. Put one of them into your hand and the rest into your graveyard. diff --git a/forge-gui/res/cardsfolder/upcoming/valki_god_of_lies_tibalt_cosmic_impostor.txt b/forge-gui/res/cardsfolder/v/valki_god_of_lies_tibalt_cosmic_impostor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/valki_god_of_lies_tibalt_cosmic_impostor.txt rename to forge-gui/res/cardsfolder/v/valki_god_of_lies_tibalt_cosmic_impostor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/valkyrie_harbinger.txt b/forge-gui/res/cardsfolder/v/valkyrie_harbinger.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/valkyrie_harbinger.txt rename to forge-gui/res/cardsfolder/v/valkyrie_harbinger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/valkyries_sword.txt b/forge-gui/res/cardsfolder/v/valkyries_sword.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/valkyries_sword.txt rename to forge-gui/res/cardsfolder/v/valkyries_sword.txt diff --git a/forge-gui/res/cardsfolder/upcoming/valor_of_the_worthy.txt b/forge-gui/res/cardsfolder/v/valor_of_the_worthy.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/valor_of_the_worthy.txt rename to forge-gui/res/cardsfolder/v/valor_of_the_worthy.txt diff --git a/forge-gui/res/cardsfolder/upcoming/varragoth_bloodsky_sire.txt b/forge-gui/res/cardsfolder/v/varragoth_bloodsky_sire.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/varragoth_bloodsky_sire.txt rename to forge-gui/res/cardsfolder/v/varragoth_bloodsky_sire.txt diff --git a/forge-gui/res/cardsfolder/upcoming/vault_robber.txt b/forge-gui/res/cardsfolder/v/vault_robber.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/vault_robber.txt rename to forge-gui/res/cardsfolder/v/vault_robber.txt diff --git a/forge-gui/res/cardsfolder/upcoming/vega_the_watcher.txt b/forge-gui/res/cardsfolder/v/vega_the_watcher.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/vega_the_watcher.txt rename to forge-gui/res/cardsfolder/v/vega_the_watcher.txt diff --git a/forge-gui/res/cardsfolder/upcoming/vengeful_reaper.txt b/forge-gui/res/cardsfolder/v/vengeful_reaper.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/vengeful_reaper.txt rename to forge-gui/res/cardsfolder/v/vengeful_reaper.txt diff --git a/forge-gui/res/cardsfolder/upcoming/volatile_fjord.txt b/forge-gui/res/cardsfolder/v/volatile_fjord.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/volatile_fjord.txt rename to forge-gui/res/cardsfolder/v/volatile_fjord.txt diff --git a/forge-gui/res/cardsfolder/upcoming/vorinclex_monstrous_raider.txt b/forge-gui/res/cardsfolder/v/vorinclex_monstrous_raider.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/vorinclex_monstrous_raider.txt rename to forge-gui/res/cardsfolder/v/vorinclex_monstrous_raider.txt diff --git a/forge-gui/res/cardsfolder/upcoming/waking_the_trolls.txt b/forge-gui/res/cardsfolder/w/waking_the_trolls.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/waking_the_trolls.txt rename to forge-gui/res/cardsfolder/w/waking_the_trolls.txt diff --git a/forge-gui/res/cardsfolder/upcoming/warchanter_skald.txt b/forge-gui/res/cardsfolder/w/warchanter_skald.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/warchanter_skald.txt rename to forge-gui/res/cardsfolder/w/warchanter_skald.txt diff --git a/forge-gui/res/cardsfolder/upcoming/warhorn_blast.txt b/forge-gui/res/cardsfolder/w/warhorn_blast.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/warhorn_blast.txt rename to forge-gui/res/cardsfolder/w/warhorn_blast.txt diff --git a/forge-gui/res/cardsfolder/upcoming/weathered_runestone.txt b/forge-gui/res/cardsfolder/w/weathered_runestone.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/weathered_runestone.txt rename to forge-gui/res/cardsfolder/w/weathered_runestone.txt diff --git a/forge-gui/res/cardsfolder/upcoming/weigh_down.txt b/forge-gui/res/cardsfolder/w/weigh_down.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/weigh_down.txt rename to forge-gui/res/cardsfolder/w/weigh_down.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wings_of_the_cosmos.txt b/forge-gui/res/cardsfolder/w/wings_of_the_cosmos.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wings_of_the_cosmos.txt rename to forge-gui/res/cardsfolder/w/wings_of_the_cosmos.txt diff --git a/forge-gui/res/cardsfolder/upcoming/withercrown.txt b/forge-gui/res/cardsfolder/w/withercrown.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/withercrown.txt rename to forge-gui/res/cardsfolder/w/withercrown.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wolverine_riders.txt b/forge-gui/res/cardsfolder/w/wolverine_riders.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wolverine_riders.txt rename to forge-gui/res/cardsfolder/w/wolverine_riders.txt diff --git a/forge-gui/res/cardsfolder/upcoming/woodland_chasm.txt b/forge-gui/res/cardsfolder/w/woodland_chasm.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/woodland_chasm.txt rename to forge-gui/res/cardsfolder/w/woodland_chasm.txt diff --git a/forge-gui/res/cardsfolder/upcoming/youthful_valkyrie.txt b/forge-gui/res/cardsfolder/y/youthful_valkyrie.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/youthful_valkyrie.txt rename to forge-gui/res/cardsfolder/y/youthful_valkyrie.txt