diff --git a/.github/workflows/maven-publish.yml b/.github/workflows/maven-publish.yml
new file mode 100644
index 00000000000..2573e9bd15a
--- /dev/null
+++ b/.github/workflows/maven-publish.yml
@@ -0,0 +1,41 @@
+name: Publish Forge
+
+on:
+ workflow_dispatch:
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ deployments: write
+ packages: write
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK 11
+ uses: actions/setup-java@v3
+ with:
+ java-version: '11'
+ distribution: 'temurin'
+ cache: 'maven'
+ server-id: cardforge-repo
+ server-username: ${{ secrets.FTP_USERNAME }}
+ server-password: ${{ secrets.FTP_PASSWORD }}
+ settings-path: ${{ github.workspace }} # location for the settings.xml file
+
+ - name: Install virtual framebuffer (if not available) to allow running GUI on a headless server
+ run: command -v Xvfb >/dev/null 2>&1 || { sudo apt update && sudo apt install -y xvfb; }
+
+ - name: Configure Git User
+ run: |
+ git config user.email "actions@github.com"
+ git config user.name "GitHub Actions"
+ - name: Build/Install/Publish to GitHub Packages Apache Maven
+ run: |
+ export DISPLAY=":1"
+ Xvfb :1 -screen 0 800x600x8 &
+ mvn -U -B clean -P windows-linux install release:clean release:prepare release:perform -T 1C -Dcardforge-repo.username=${{ secrets.FTP_USERNAME }} -Dcardforge-repo.password=${{ secrets.FTP_PASSWORD }}
+ env:
+ GITHUB_TOKEN: ${{ github.token }}
\ No newline at end of file
diff --git a/.mvn/local-settings.xml b/.mvn/local-settings.xml
index 3abc1df0e86..f4949fbfe81 100644
--- a/.mvn/local-settings.xml
+++ b/.mvn/local-settings.xml
@@ -12,4 +12,12 @@
http://4thline.org/m2
+
+
+
+ cardforge-repo
+ ${cardforge-repo.username}
+ ${cardforge-repo.password}
+
+
\ No newline at end of file
diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java
index abfc9e97348..ec6b6636151 100644
--- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java
+++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java
@@ -128,6 +128,7 @@ public class ComputerUtil {
if (!sa.isCopied()) {
sa.resetPaidHash();
+ sa.setPaidLife(0);
}
sa = GameActionUtil.addExtraKeywordCost(sa);
diff --git a/forge-core/src/main/java/forge/card/mana/ManaCost.java b/forge-core/src/main/java/forge/card/mana/ManaCost.java
index 43864f1c0ed..79580f04ba1 100644
--- a/forge-core/src/main/java/forge/card/mana/ManaCost.java
+++ b/forge-core/src/main/java/forge/card/mana/ManaCost.java
@@ -328,9 +328,9 @@ public final class ManaCost implements Comparable, Iterable lki = movedCard.getZone().getCardsAddedThisTurn(null);
+ lki.get(lki.lastIndexOf(movedCard)).setTimestamp(ts);
+ }
+
if (sa.hasParam("AttachAfter") && movedCard.isAttachment()) {
CardCollection list = AbilityUtils.getDefinedCards(hostCard, sa.getParam("AttachAfter"), sa);
if (list.isEmpty()) {
@@ -1401,6 +1408,11 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
movedCard = game.getAction().moveToPlay(c, c.getController(), sa, moveParams);
movedCard.setTimestamp(ts);
+ if (movedCard.isInPlay()) {
+ // need to also update LKI
+ List lki = movedCard.getZone().getCardsAddedThisTurn(null);
+ lki.get(lki.lastIndexOf(movedCard)).setTimestamp(ts);
+ }
if (sa.hasParam("AttachAfter") && movedCard.isAttachment() && movedCard.isInPlay()) {
CardCollection list = AbilityUtils.getDefinedCards(source, sa.getParam("AttachAfter"), sa);
diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java
index 602bf0f185d..b5fe6b70b30 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java
@@ -160,7 +160,6 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
copies.add(copy);
}
}
-
}
} else {
for (int i = 0; i < amount; i++) {
@@ -238,7 +237,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect {
card.addRemembered(copies);
}
}
- } // end resolve
+ }
private void resetFirstTargetOnCopy(SpellAbility copy, GameEntity obj, SpellAbility targetedSA) {
copy.resetFirstTarget(obj, targetedSA);
diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java
index d310adce2d0..6b3e4d79466 100644
--- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java
+++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java
@@ -262,7 +262,6 @@ public class PumpEffect extends SpellAbilityEffect {
} else {
sb.append(".");
}
-
}
return sb.toString();
diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java
index b305f97ea86..27731326e3c 100644
--- a/forge-game/src/main/java/forge/game/card/Card.java
+++ b/forge-game/src/main/java/forge/game/card/Card.java
@@ -2227,14 +2227,24 @@ public class Card extends GameEntity implements Comparable, IHasSVars {
} else if (keyword.equals("Compleated")) {
sbLong.append(keyword).append(" (");
final ManaCost mc = this.getManaCost();
- if (mc != ManaCost.NO_COST && mc.getFirstPhyrexianHybridPip() != null) {
- String hybrid = mc.getFirstPhyrexianHybridPip().replaceAll("\\{", "")
- .replaceAll("\\}","");
- String[] parts = hybrid.split("/");
- String rem = "{" + hybrid + "} can be paid with {" + parts[1] + "}, {" + parts[2] + "}, or 2 life. ";
- sbLong.append(rem);
+ if (mc != ManaCost.NO_COST && mc.hasPhyrexian()) {
+ String pip = mc.getFirstPhyrexianPip();
+ String[] parts = pip.substring(1, pip.length() - 1).split("/");
+ final StringBuilder rem = new StringBuilder();
+ rem.append(pip).append(" can be paid with {").append(parts[1]).append("}");
+ if (parts.length > 2) {
+ rem.append(", {").append(parts[2]).append("},");
+ }
+ rem.append(" or 2 life. ");
+ if (mc.getPhyrexianCount() > 1) {
+ rem.append("For each ").append(pip).append(" paid with life,");
+ } else {
+ rem.append("If life was paid,");
+ }
+ rem.append(" this planeswalker enters with two fewer loyalty counters.");
+ sbLong.append(rem.toString());
}
- sbLong.append(inst.getReminderText()).append(")");
+ sbLong.append(")");
} else if (keyword.startsWith("Devour ")) {
final String[] k = keyword.split(":");
final String[] s = (k[0]).split(" ");
diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java
index 6f649b982a6..af808ebe42e 100644
--- a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java
+++ b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java
@@ -17,6 +17,7 @@
*/
package forge.game.trigger;
+import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
@@ -111,6 +112,7 @@ public class TriggerChangesZone extends Trigger {
}
if ("Battlefield".equals(runParams.get(AbilityKey.Destination))) {
List etbLKI = moved.getController().getZone(ZoneType.Battlefield).getCardsAddedThisTurn(null);
+ Collections.sort(etbLKI, CardPredicates.compareByTimestamp());
moved = etbLKI.get(etbLKI.lastIndexOf(moved));
}
diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java
index fc8b0cc7160..12cd844300b 100644
--- a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java
+++ b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java
@@ -86,10 +86,6 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger {
return false;
}
- if (!matchesValidParam("ValidControllingPlayer", cast.getController())) {
- return false;
- }
-
if (hasParam("ValidActivatingPlayer")) {
Player activator;
if (spellAbility.isManaAbility()) {
@@ -287,6 +283,7 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger {
}
sa.setTriggeringObject(AbilityKey.SpellAbilityTargets, saTargets);
}
+ sa.setTriggeringObject(AbilityKey.LifeAmount, castSA.getAmountLifePaid());
sa.setTriggeringObjectsFrom(
runParams,
AbilityKey.Player,
diff --git a/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt b/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt
index ce10555173f..46c7ee66320 100644
--- a/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt
+++ b/forge-gui/res/cardsfolder/a/ardenn_intrepid_archaeologist.txt
@@ -2,11 +2,8 @@ Name:Ardenn, Intrepid Archaeologist
ManaCost:2 W
Types:Legendary Creature Kor Scout
PT:2/2
-T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigTarget | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ At the beginning of combat on your turn, you may attach any number of Auras and Equipment you control to target permanent or player.
-SVar:TrigTarget:DB$ Pump | ValidTgts$ Permanent,Player | TgtPrompt$ Select target permanent or player | RememberObjects$ Targeted | SubAbility$ DBAttach
-SVar:DBAttach:DB$ RepeatEach | UseImprinted$ True | RepeatSubAbility$ DBRepeatAttach | SubAbility$ DBCleanup | RepeatCards$ Aura.YouCtrl,Equipment.YouCtrl
-SVar:DBRepeatAttach:DB$ Attach | Defined$ Remembered | Object$ Imprinted | Optional$ True
-SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
+T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigAttach | TriggerZones$ Battlefield | OptionalDecider$ You | TriggerDescription$ At the beginning of combat on your turn, you may attach any number of Auras and Equipment you control to target permanent or player.
+SVar:TrigAttach:DB$ Attach | Defined$ Targeted | ValidTgts$ Permanent,Player | TgtPrompt$ Select target permanent or player | Object$ Valid Aura.YouCtrl,Equipment.YouCtrl | Optional$ True
K:Partner
DeckHints:Type$Aura|Equipment
Oracle:At the beginning of combat on your turn, you may attach any number of Auras and Equipment you control to target permanent or player.\nPartner (You can have two commanders if both have partner.)
diff --git a/forge-gui/res/cardsfolder/a/armed_and_armored.txt b/forge-gui/res/cardsfolder/a/armed_and_armored.txt
index d49a2edaad3..1e4fc42139c 100644
--- a/forge-gui/res/cardsfolder/a/armed_and_armored.txt
+++ b/forge-gui/res/cardsfolder/a/armed_and_armored.txt
@@ -1,13 +1,8 @@
Name:Armed and Armored
ManaCost:1 W
Types:Instant
-A:SP$ AnimateAll | Cost$ 1 W | Types$ Creature,Artifact | ValidCards$ Vehicle.YouCtrl | SubAbility$ ChooseDwarf | StackDescription$ Vehicles {p:You} controls become artifact creatures until end of turn. | SpellDescription$ Vehicles you control become artifact creatures until end of turn. Choose a Dwarf you control. Attach any number of Equipment you control to it.
-SVar:ChooseDwarf:DB$ ChooseCard | Defined$ You | Mandatory$ True | Choices$ Dwarf.YouCtrl | ChoiceTitle$ Choose a Dwarf you control | StackDescription$ {p:You} chooses a Dwarf they control and attaches any number of Equipment they control to it. | ImprintChosen$ True | SubAbility$ ChooseEquipment
-SVar:ChooseEquipment:DB$ ChooseCard | Defined$ You | MinAmount$ 0 | Amount$ X | Choices$ Equipment.YouCtrl | StackDescription$ None | ChoiceTitle$ Choose any number of Equipment you control | ForgetChosen$ True | SubAbility$ DeployDwarf
-SVar:DeployDwarf:DB$ RepeatEach | RepeatSubAbility$ ArmDwarf | RepeatCards$ Card.ChosenCard | SubAbility$ DBCleanup
-SVar:ArmDwarf:DB$ Attach | Object$ Remembered | Defined$ Imprinted | StackDescription$ None
-SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True | ClearRemembered$ True | ClearImprinted$ True
-SVar:X:Count$Valid Equipment.YouCtrl
+A:SP$ AnimateAll | Cost$ 1 W | Types$ Creature,Artifact | ValidCards$ Vehicle.YouCtrl | SubAbility$ ArmDwarf | StackDescription$ Vehicles {p:You} controls become artifact creatures until end of turn. | SpellDescription$ Vehicles you control become artifact creatures until end of turn. Choose a Dwarf you control. Attach any number of Equipment you control to it.
+SVar:ArmDwarf:DB$ Attach | Object$ Valid Equipment.YouCtrl | Defined$ Valid Dwarf.YouCtrl | Optional$ True | StackDescription$ {p:You} chooses a Dwarf they control and attaches any number of Equipment they control to it.
DeckNeeds:Type$Vehicle|Dwarf
DeckHints:Type$Equipment
AI:RemoveDeck:All
diff --git a/forge-gui/res/cardsfolder/b/bouncers_beatdown.txt b/forge-gui/res/cardsfolder/b/bouncers_beatdown.txt
index 30c3fbf4207..cf16cbea17e 100644
--- a/forge-gui/res/cardsfolder/b/bouncers_beatdown.txt
+++ b/forge-gui/res/cardsfolder/b/bouncers_beatdown.txt
@@ -1,9 +1,7 @@
Name:Bouncer's Beatdown
ManaCost:2 G
Types:Instant
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a a black permanent.
-SVar:CostReduction:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Permanent.Black
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | ValidTarget$ Permanent.Black | Amount$ 2 | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a black permanent.
A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | ReplaceDyingDefined$ Targeted | SpellDescription$ CARDNAME deals X damage to target creature or planeswalker, where X is the greatest power among creatures you control. If that creature or planeswalker would die this turn, exile it instead.
SVar:X:Count$Valid Creature.YouCtrl$GreatestPower
SVar:NeedsToPlayVar:X GE3
diff --git a/forge-gui/res/cardsfolder/b/bury_in_books.txt b/forge-gui/res/cardsfolder/b/bury_in_books.txt
index 8329ed3d214..6b9f8aedf52 100644
--- a/forge-gui/res/cardsfolder/b/bury_in_books.txt
+++ b/forge-gui/res/cardsfolder/b/bury_in_books.txt
@@ -1,8 +1,6 @@
Name:Bury in Books
ManaCost:4 U
Types:Instant
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets an attacking creature.
-SVar:CostReduction:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Creature.attacking
-A:SP$ ChangeZone | Cost$ 4 U | Origin$ Battlefield | Destination$ Library | ValidTgts$ Creature | LibraryPosition$ 1 | SpellDescription$ Put target creature into its owner's library second from the top.
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | ValidTarget$ Creature.attacking | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets an attacking creature.
+A:SP$ ChangeZone | Origin$ Battlefield | Destination$ Library | ValidTgts$ Creature | LibraryPosition$ 1 | SpellDescription$ Put target creature into its owner's library second from the top.
Oracle:This spell costs {2} less to cast if it targets an attacking creature.\nPut target creature into its owner's library second from the top.
diff --git a/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt b/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt
index 3e1a32e0518..6c5e3b9c53c 100644
--- a/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt
+++ b/forge-gui/res/cardsfolder/h/haakon_stromgald_scourge_avatar.txt
@@ -4,7 +4,7 @@ Types:Vanguard
HandLifeModifier:+0/-3
A:AB$ Effect | ActivationZone$ Command | Cost$ PayLife<1> | TgtZone$ Graveyard | ValidTgts$ Creature.YouOwn | PumpZone$ Graveyard | TgtPrompt$ Select target creature in your graveyard, you may play it this turn | RememberObjects$ Targeted | StaticAbilities$ Play | ExileOnMoved$ Graveyard | SpellDescription$ You may cast target creature card in your graveyard this turn.
SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ You may play remembered card.
-T:Mode$ SpellCast | ValidCard$ Creature.wasCastFromYourGraveyard | ValidControllingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you cast a creature spell from your graveyard, it becomes a black Zombie Knight.
+T:Mode$ SpellCast | ValidCard$ Creature.wasCastFromYourGraveyard | ValidActivatingPlayer$ You | TriggerZones$ Command | Execute$ TrigAnimate | TriggerDescription$ Whenever you cast a creature spell from your graveyard, it becomes a black Zombie Knight.
SVar:TrigAnimate:DB$ Animate | Defined$ TriggeredCard | Types$ Zombie,Knight | Colors$ Black | OverwriteColors$ True | Duration$ Permanent | RemoveCreatureTypes$ True
R:Event$ Moved | ValidCard$ Card.Zombie+Knight | Destination$ Graveyard | ReplaceWith$ DBExile | Description$ If a Zombie Knight would be put into your graveyard from the battlefield, exile it instead.
SVar:DBExile:DB$ ChangeZone | Defined$ ReplacedCard | Origin$ Battlefield | Destination$ Exile
diff --git a/forge-gui/res/cardsfolder/h/heavenly_blademaster.txt b/forge-gui/res/cardsfolder/h/heavenly_blademaster.txt
index f6361e3ff8f..c079051914d 100644
--- a/forge-gui/res/cardsfolder/h/heavenly_blademaster.txt
+++ b/forge-gui/res/cardsfolder/h/heavenly_blademaster.txt
@@ -5,9 +5,7 @@ PT:3/6
K:Flying
K:Double Strike
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBAttach | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may attach any number of Auras and Equipment you control to it.
-SVar:DBAttach:DB$ RepeatEach | RepeatSubAbility$ DBRepeatAttach | RepeatCards$ Aura.YouCtrl,Equipment.YouCtrl
-SVar:DBRepeatAttach:DB$ Attach | Object$ Remembered | Optional$ True | SubAbility$ DBCleanup
-SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
+SVar:DBAttach:DB$ Attach | Object$ Valid Aura.YouCtrl,Equipment.YouCtrl | Optional$ True
AI:RemoveDeck:Random
S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddPower$ X | AddToughness$ X | Description$ Other creatures you control get +1/+1 for each Aura and Equipment attached to CARDNAME.
SVar:X:Count$Valid Equipment.Attached,Aura.Attached
diff --git a/forge-gui/res/cardsfolder/h/hunters_mark.txt b/forge-gui/res/cardsfolder/h/hunters_mark.txt
index 8ec4f58676c..5710af906b5 100644
--- a/forge-gui/res/cardsfolder/h/hunters_mark.txt
+++ b/forge-gui/res/cardsfolder/h/hunters_mark.txt
@@ -2,10 +2,8 @@ Name:Hunter's Mark
ManaCost:3 G
Types:Instant
K:This spell can't be countered.
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a blue permanent you don't control.
-SVar:CostReduction:Count$Compare CheckTgt GE1.3.0
-SVar:CheckTgt:TargetedObjects$Valid Card.Blue+YouDontCtrl
-A:SP$ Pump | Cost$ 3 G | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | NumAtt$ +1 | NumDef$ +1 | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ {c:ThisTargetedCard} gets +1/+1 until end of turn. | SpellDescription$ Target creature you control gets +1/+1 until end of turn. It deals damage equal to its power to target creature you don't control.
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 3 | ValidTarget$ Card.Blue+YouDontCtrl | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a blue permanent you don't control.
+A:SP$ Pump | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | NumAtt$ +1 | NumDef$ +1 | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ {c:ThisTargetedCard} gets +1/+1 until end of turn. | SpellDescription$ Target creature you control gets +1/+1 until end of turn. It deals damage equal to its power to target creature you don't control.
SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature or planeswalker you don't control | NumDmg$ X | DamageSource$ ParentTarget | StackDescription$ Then {c:ParentTarget} deals damage equal to its power to {c:ThisTargetedCard}.
SVar:X:ParentTargeted$CardPower
Oracle:This spell costs {3} less to cast if it targets a blue permanent you don't control.\nThis spell can't be countered.\nTarget creature you control gets +1/+1 until end of turn. Then it deals damage equal to its power to target creature or planeswalker you don't control.
diff --git a/forge-gui/res/cardsfolder/j/joraga_treespeaker.txt b/forge-gui/res/cardsfolder/j/joraga_treespeaker.txt
index 49256f92e50..b0e90921062 100644
--- a/forge-gui/res/cardsfolder/j/joraga_treespeaker.txt
+++ b/forge-gui/res/cardsfolder/j/joraga_treespeaker.txt
@@ -5,8 +5,8 @@ PT:1/1
K:Level up:1 G
SVar:maxLevel:5
S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 1 | SetToughness$ 2 | AddAbility$ ABMana | IsPresent$ Card.Self+counters_GE1_LEVEL+counters_LE4_LEVEL | Description$ LEVEL 1-4 1/2 {T}: Add {G}{G}.
-SVar:ABMana:AB$ Mana | Cost$ T | Produced$ G | Amount$ 2 | Secondary$ True | SpellDescription$ Add {G}{G}.
-S:Mode$ Continuous | Affected$ Elf.YouCtrl | SetPower$ 1 | SetToughness$ 4 | AddAbility$ L5Mana | IsPresent$ Card.Self+counters_GE5_LEVEL | Description$ LEVEL 5+ 1/4 Elves you control have "{T}: Add {G}{G}."
-SVar:L5Mana:AB$ Mana | Cost$ T | Produced$ G | Amount$ 2 | SpellDescription$ Add {G}{G}.
+SVar:ABMana:AB$ Mana | Cost$ T | Produced$ G | Amount$ 2 | SpellDescription$ Add {G}{G}.
+S:Mode$ Continuous | Affected$ Card.Self | SetPower$ 1 | SetToughness$ 4 | IsPresent$ Card.Self+counters_GE5_LEVEL
+S:Mode$ Continuous | Affected$ Elf.YouCtrl | AddAbility$ ABMana | IsPresent$ Card.Self+counters_GE5_LEVEL | Description$ LEVEL 5+ 1/4 Elves you control have "{T}: Add {G}{G}."
DeckHints:Type$Elf
Oracle:Level up {1}{G} ({1}{G}: Put a level counter on this. Level up only as a sorcery.)\nLEVEL 1-4\n1/2\n{T}: Add {G}{G}.\nLEVEL 5+\n1/4\nElves you control have "{T}: Add {G}{G}."
diff --git a/forge-gui/res/cardsfolder/k/knockout_blow.txt b/forge-gui/res/cardsfolder/k/knockout_blow.txt
index 9b39b243ef4..6d7feaf5b8c 100644
--- a/forge-gui/res/cardsfolder/k/knockout_blow.txt
+++ b/forge-gui/res/cardsfolder/k/knockout_blow.txt
@@ -1,9 +1,7 @@
Name:Knockout Blow
ManaCost:2 W
Types:Instant
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a red creature.
-SVar:CostReduction:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Creature.Red
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | ValidTarget$ Creature.Red | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a red creature.
A:SP$ DealDamage | ValidTgts$ Creature.attacking,Creature.blocking | TgtPrompt$ Select target attacking or blocking creature | NumDmg$ 4 | SubAbility$ GainLife | SpellDescription$ CARDNAME deals 4 damage to target attacking or blocking creature and you gain 2 life.
SVar:GainLife:DB$ GainLife | LifeAmount$ 2 | Defined$ You
DeckHas:Ability$LifeGain
diff --git a/forge-gui/res/cardsfolder/m/mascot_interception.txt b/forge-gui/res/cardsfolder/m/mascot_interception.txt
index df7f46d54fb..a6b3401ab23 100644
--- a/forge-gui/res/cardsfolder/m/mascot_interception.txt
+++ b/forge-gui/res/cardsfolder/m/mascot_interception.txt
@@ -1,9 +1,7 @@
Name:Mascot Interception
ManaCost:3 R
Types:Sorcery
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a creature token.
-A:SP$ GainControl | Cost$ 3 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | Untap$ True | LoseControl$ EOT | SubAbility$ DBPump | SpellDescription$ Gain control of target creature until end of turn. Untap that creature. It gets +2/+0 and gains haste until end of turn.
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 3 | ValidTarget$ Creature.token | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a creature token.
+A:SP$ GainControl | ValidTgts$ Creature | TgtPrompt$ Select target creature | Untap$ True | LoseControl$ EOT | SubAbility$ DBPump | SpellDescription$ Gain control of target creature until end of turn. Untap that creature. It gets +2/+0 and gains haste until end of turn.
SVar:DBPump:DB$ Pump | Defined$ Targeted | NumAtt$ +2 | KW$ Haste
-SVar:CostReduction:Count$Compare CheckTgt GE1.3.0
-SVar:CheckTgt:Targeted$Valid Creature.token
Oracle:This spell costs {3} less to cast if it targets a creature token.\nGain control of target creature until end of turn. Untap that creature. It gets +2/+0 and gains haste until end of turn.
diff --git a/forge-gui/res/cardsfolder/m/mystical_dispute.txt b/forge-gui/res/cardsfolder/m/mystical_dispute.txt
index dce7afdf69e..a54be6166cc 100644
--- a/forge-gui/res/cardsfolder/m/mystical_dispute.txt
+++ b/forge-gui/res/cardsfolder/m/mystical_dispute.txt
@@ -1,8 +1,6 @@
Name:Mystical Dispute
ManaCost:2 U
Types:Instant
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ XBlue | Relative$ True | EffectZone$ All | Description$ CARDNAME costs {2} less to cast if it targets a blue spell.
-SVar:XBlue:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Card.Blue
-A:SP$ Counter | Cost$ 2 U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | UnlessCost$ 3 | SpellDescription$ This spell costs {2} less to cast if it targets a blue spell. Counter target spell unless its controller pays {3}.
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | ValidTarget$ Spell.Blue | EffectZone$ All | Description$ CARDNAME costs {2} less to cast if it targets a blue spell.
+A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | UnlessCost$ 3 | SpellDescription$ Counter target spell unless its controller pays {3}.
Oracle:This spell costs {2} less to cast if it targets a blue spell.\nCounter target spell unless its controller pays {3}.
diff --git a/forge-gui/res/cardsfolder/n/no_one_left_behind.txt b/forge-gui/res/cardsfolder/n/no_one_left_behind.txt
index d27b001be01..fd053d1515b 100644
--- a/forge-gui/res/cardsfolder/n/no_one_left_behind.txt
+++ b/forge-gui/res/cardsfolder/n/no_one_left_behind.txt
@@ -1,9 +1,7 @@
Name:No One Left Behind
ManaCost:4 B
Types:Sorcery
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a creature card with mana value 3 or less.
-SVar:CostReduction:Count$Compare CheckTgt GE1.3.0
-SVar:CheckTgt:TargetedObjects$Valid Creature.cmcLE3
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 3 | ValidTarget$ Creature.cmcLE3 | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a creature card with mana value 3 or less.
A:SP$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouOwn | ChangeNum$ 1 | SpellDescription$ Return target creature card from your graveyard to the battlefield.
DeckHas:Ability$Graveyard
DeckHints:Ability$Graveyard|Mill|Dredge
diff --git a/forge-gui/res/cardsfolder/o/out_of_the_way.txt b/forge-gui/res/cardsfolder/o/out_of_the_way.txt
index 63634c6e253..11ecee95ed1 100644
--- a/forge-gui/res/cardsfolder/o/out_of_the_way.txt
+++ b/forge-gui/res/cardsfolder/o/out_of_the_way.txt
@@ -1,9 +1,7 @@
Name:Out of the Way
ManaCost:3 U
Types:Instant
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a a green permanent.
-SVar:CostReduction:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Permanent.Green
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | ValidTarget$ Permanent.Green | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a a green permanent.
A:SP$ ChangeZone | ValidTgts$ Permanent.nonLand+OppCtrl | TgtPrompt$ Select target nonland permanent an opponent controls | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBDraw | SpellDescription$ Return target nonland permanent an opponent controls to its owner's hand.
SVar:DBDraw:DB$ Draw
Oracle:This spell costs {2} less to cast if it targets a green permanent.\nReturn target nonland permanent an opponent controls to its owner's hand.\nDraw a card.
diff --git a/forge-gui/res/cardsfolder/p/price_of_fame.txt b/forge-gui/res/cardsfolder/p/price_of_fame.txt
index 0dab5980912..fd7424bebff 100644
--- a/forge-gui/res/cardsfolder/p/price_of_fame.txt
+++ b/forge-gui/res/cardsfolder/p/price_of_fame.txt
@@ -1,10 +1,8 @@
Name:Price of Fame
ManaCost:3 B
Types:Instant
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ CARDNAME costs {2} less to cast if it targets a legendary creature.
-A:SP$ Destroy | Cost$ 3 B | ValidTgts$ Creature | SubAbility$ DBSurveil | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature.
-SVar:CostReduction:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Creature.Legendary
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | ValidTarget$ Creature.Legendary | EffectZone$ All | Description$ CARDNAME costs {2} less to cast if it targets a legendary creature.
+A:SP$ Destroy | ValidTgts$ Creature | SubAbility$ DBSurveil | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature.
SVar:DBSurveil:DB$ Surveil | Amount$ 2
DeckHas:Ability$Surveil|Graveyard
Oracle:This spell costs {2} less to cast if it targets a legendary creature.\nDestroy target creature.\nSurveil 2. (Look at the top two cards of your library, then put any number of them into your graveyard and the rest on top of your library in any order.)
diff --git a/forge-gui/res/cardsfolder/s/savage_stomp.txt b/forge-gui/res/cardsfolder/s/savage_stomp.txt
index ea9eaf87e9b..201d2bc4ef7 100644
--- a/forge-gui/res/cardsfolder/s/savage_stomp.txt
+++ b/forge-gui/res/cardsfolder/s/savage_stomp.txt
@@ -1,10 +1,8 @@
Name:Savage Stomp
ManaCost:2 G
Types:Sorcery
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a Dinosaur you control.
-SVar:CostReduction:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Creature.Dinosaur+YouCtrl
-A:SP$ PutCounter | Cost$ 2 G | AILogic$ Fight | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control to put a +1/+1 counter | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBFight | SpellDescription$ Put a +1/+1 counter on target creature you control. Then that creature fights target creature you don't control.
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | ValidTarget$ Dinosaur.YouCtrl | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a Dinosaur you control.
+A:SP$ PutCounter | AILogic$ Fight | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control to put a +1/+1 counter | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBFight | SpellDescription$ Put a +1/+1 counter on target creature you control. Then that creature fights target creature you don't control.
SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | AILogic$ Always | TgtPrompt$ Select target creature you don't control
DeckHas:Ability$Token|Counters
DeckHints:Type$Dinosaur
diff --git a/forge-gui/res/cardsfolder/t/titanic_brawl.txt b/forge-gui/res/cardsfolder/t/titanic_brawl.txt
index e8fa211cfb8..a426bfd3fef 100644
--- a/forge-gui/res/cardsfolder/t/titanic_brawl.txt
+++ b/forge-gui/res/cardsfolder/t/titanic_brawl.txt
@@ -1,10 +1,8 @@
Name:Titanic Brawl
ManaCost:1 G
Types:Instant
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | EffectZone$ All | Relative$ True | Description$ This spell costs {1} less to cast if it targets a creature you control with a +1/+1 counter on it.
-SVar:CostReduction:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Creature.YouCtrl+counters_GE1_P1P1
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 1 | EffectZone$ All | ValidTarget$ Creature.YouCtrl+counters_GE1_P1P1 | Description$ This spell costs {1} less to cast if it targets a creature you control with a +1/+1 counter on it.
DeckHints:Ability$Counters
-A:SP$ Pump | Cost$ 1 G | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBFight | SpellDescription$ Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.)
+A:SP$ Pump | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Choose target creature you control | SubAbility$ DBFight | SpellDescription$ Target creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.)
SVar:DBFight:DB$ Fight | Defined$ ParentTarget | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Choose target creature you don't control
Oracle:This spell costs {1} less to cast if it targets a creature you control with a +1/+1 counter on it.\nTarget creature you control fights target creature you don't control. (Each deals damage equal to its power to the other.)
diff --git a/forge-gui/res/cardsfolder/t/torch_breath.txt b/forge-gui/res/cardsfolder/t/torch_breath.txt
index da2da71e2c1..7fa4613eff3 100644
--- a/forge-gui/res/cardsfolder/t/torch_breath.txt
+++ b/forge-gui/res/cardsfolder/t/torch_breath.txt
@@ -1,9 +1,7 @@
Name:Torch Breath
ManaCost:X R
Types:Instant
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a a blue permanent.
-SVar:CostReduction:Count$Compare CheckTgt GE1.2.0
-SVar:CheckTgt:Targeted$Valid Permanent.Blue
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | ValidTarget$ Permanent.Blue | EffectZone$ All | Description$ This spell costs {2} less to cast if it targets a a blue permanent.
K:This spell can't be countered.
A:SP$ DealDamage | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ X | SpellDescription$ CARDNAME deals X damage to target creature or planeswalker.
SVar:X:Count$xPaid
diff --git a/forge-gui/res/cardsfolder/upcoming/annex_sentry.txt b/forge-gui/res/cardsfolder/upcoming/annex_sentry.txt
new file mode 100644
index 00000000000..93e33e08dfa
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/annex_sentry.txt
@@ -0,0 +1,10 @@
+Name:Annex Sentry
+ManaCost:2 W
+Types:Artifact Creature Phyrexian Cleric
+PT:1/4
+K:Toxic:1
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target artifact or creature an opponent controls with mana value 3 or less until CARDNAME leaves the battlefield.
+SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Artifact.OppCtrl+cmcLE3,Creature.OppCtrl+cmcLE3 | TgtPrompt$ Select target artifact or creature an opponent controls with mana value 3 or less | Duration$ UntilHostLeavesPlay
+SVar:PlayMain1:TRUE
+SVar:NeedsToPlay:Creature.OppCtrl+cmcLE3
+Oracle:Toxic 1 (Players dealt combat damage by this creature also get a poison counter.)\nWhen Annex Sentry enters the battlefield, exile target artifact or creature an opponent controls with mana value 3 or less until Annex Sentry leaves the battlefield.
diff --git a/forge-gui/res/cardsfolder/upcoming/assemble_the_team.txt b/forge-gui/res/cardsfolder/upcoming/assemble_the_team.txt
index c456a2888b3..238109d62d6 100644
--- a/forge-gui/res/cardsfolder/upcoming/assemble_the_team.txt
+++ b/forge-gui/res/cardsfolder/upcoming/assemble_the_team.txt
@@ -1,5 +1,5 @@
Name:Assemble the Team
ManaCost:B G
Types:Sorcery
-A:SP$ ChangeZone | Defined$ TopThirdOfLibrary | ChooseFromDefined$ True | Origin$ Library | Destination$ Hand | ChangeType$ Card | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Search the top third of your library, rounded up, for a card. Put that card into your hand, then shuffle.
+A:SP$ ChangeZone | Defined$ TopThirdOfLibrary | ChooseFromDefined$ True | Origin$ Library | ChangeNum$ 1 | Destination$ Hand | ChangeType$ Card | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Search the top third of your library, rounded up, for a card. Put that card into your hand, then shuffle.
Oracle:Search the top third of your library, rounded up, for a card. Put that card into your hand, then shuffle.
diff --git a/forge-gui/res/cardsfolder/upcoming/bladehold_war_whip.txt b/forge-gui/res/cardsfolder/upcoming/bladehold_war_whip.txt
new file mode 100644
index 00000000000..0d0e2426a9b
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/bladehold_war_whip.txt
@@ -0,0 +1,10 @@
+Name:Bladehold War-Whip
+ManaCost:1 R W
+Types:Artifact Equipment
+K:For Mirrodin
+S:Mode$ ReduceCost | ValidCard$ Equipment.Other | ValidSpell$ Activated.Equip | Activator$ You | Amount$ 1 | Description$ Equip abilities you activate of other Equipment cost {1} less to activate.
+S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Double Strike | Description$ Equipped creature has double strike.
+K:Equip:3 R W
+DeckHas:Ability$Token & Type$Rebel & Color$Red
+DeckHints:Type$Equipment
+Oracle:For Mirrodin! (When this Equipment enters the battlefield, create a 2/2 red Rebel creature token, then attach this to it.)\nEquip abilities you activate of other Equipment cost {1} less to activate.\nEquipped creature has double strike.\nEquip {3}{R}{W}
diff --git a/forge-gui/res/cardsfolder/upcoming/experimental_augury.txt b/forge-gui/res/cardsfolder/upcoming/experimental_augury.txt
new file mode 100644
index 00000000000..5c5cad63ced
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/experimental_augury.txt
@@ -0,0 +1,8 @@
+Name:Experimental Augury
+ManaCost:1 U
+Types:Instant
+A:SP$ Dig | DigNum$ 3 | ChangeNum$ 1 | SubAbility$ DBProliferate | SpellDescription$ Look at the top three cards of your library. Put one of them into your hand and the rest on the bottom of your library in any order.
+SVar:DBProliferate:DB$ Proliferate | SpellDescription$ Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.)
+DeckHas:Ability$Proliferate|Counters
+DeckHints:Ability$Counters & Type$Planeswalker
+Oracle:Look at the top three cards of your library. Put one of them into your hand and rest on the bottom of your library in any order. Proliferate. (Choose any number of permanents and/or players, then give each another counter of each kind already there.)
\ No newline at end of file
diff --git a/forge-gui/res/cardsfolder/upcoming/jace_the_perfected_mind.txt b/forge-gui/res/cardsfolder/upcoming/jace_the_perfected_mind.txt
index e538754211c..c80fad8b03f 100644
--- a/forge-gui/res/cardsfolder/upcoming/jace_the_perfected_mind.txt
+++ b/forge-gui/res/cardsfolder/upcoming/jace_the_perfected_mind.txt
@@ -1,5 +1,5 @@
Name:Jace, the Perfected Mind
-ManaCost:2 PU U
+ManaCost:2 PU U
Types:Legendary Planeswalker Jace
Loyalty:5
K:Compleated
diff --git a/forge-gui/res/cardsfolder/upcoming/minor_misstep.txt b/forge-gui/res/cardsfolder/upcoming/minor_misstep.txt
new file mode 100644
index 00000000000..f05eb1a5ca6
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/minor_misstep.txt
@@ -0,0 +1,5 @@
+Name:Minor Misstep
+ManaCost:U
+Types:Instant
+A:SP$ Counter | TargetType$ Spell | TgtPrompt$ Select target spell with mana value 1 or less | ValidTgts$ Card.cmcLE1 | SpellDescription$ Counter target spell with mana value 1 or less.
+Oracle:Counter target spell with mana value 1 or less.
\ No newline at end of file
diff --git a/forge-gui/res/cardsfolder/upcoming/mite_overseer.txt b/forge-gui/res/cardsfolder/upcoming/mite_overseer.txt
new file mode 100644
index 00000000000..5edf29b35a0
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/mite_overseer.txt
@@ -0,0 +1,9 @@
+Name:Mite Overseer
+ManaCost:3 W
+Types:Creature Phyrexian Soldier
+PT:4/2
+K:First strike
+S:Mode$ Continuous | Affected$ Creature.YouCtrl+token | AddPower$ 1 | AddKeyword$ First Strike | Condition$ PlayerTurn | Description$ As long as it's your turn, creature tokens you control get +1/+0 and have first strike.
+A:AB$ Token | Cost$ 3 WP | TokenScript$ c_1_1_a_phyrexian_mite_toxic_noblock | SpellDescription$ Create a 1/1 colorless Phyrexian Mite artifact creature token with toxic 1 and "This creature can't block." (Players dealt combat damage by it also get a poison counter. {W/P} can be paid with either {W} or 2 life.)
+DeckHas:Ability$Token & Type$Artifact|Mite
+Oracle:First strike\nAs long as it's your turn, creature tokens you control get +1/+0 and have first strike.\n{3}{W/P}: Create a 1/1 colorless Phyrexian Mite artifact creature token with toxic 1 and "This creature can't block." (Players dealt combat damage by it also get a poison counter. {W/P} can be paid with either {W} or 2 life.)
diff --git a/forge-gui/res/cardsfolder/upcoming/mondrak_glory_dominus.txt b/forge-gui/res/cardsfolder/upcoming/mondrak_glory_dominus.txt
new file mode 100644
index 00000000000..7e46eedccaf
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/mondrak_glory_dominus.txt
@@ -0,0 +1,10 @@
+Name:Mondrak, Glory Dominus
+ManaCost:2 W W
+Types:Legendary Creature Phyrexian Horror
+PT:4/4
+R:Event$ CreateToken | ActiveZones$ Battlefield | ValidToken$ Card.YouCtrl | ReplaceWith$ DoubleToken | Description$ If one or more tokens would be created under your control, twice that many of those tokens are created instead.
+SVar:DoubleToken:DB$ ReplaceToken | Type$ Amount | ValidCard$ Card.YouCtrl
+A:AB$ PutCounter | Cost$ 1 WP WP Sac<2/Artifact.Other;Creature.Other/other artifacts and/or creatures> | Defined$ Self | CounterType$ Indestructible | CounterNum$ 1 | SpellDescription$ Put an indestructible counter on CARDNAME. ({W/P} can be paid with either {W} or 2 life.)
+DeckHints:Ability$Token
+DeckHas:Ability$Sacrifice|Counters
+Oracle:If one or more tokens would be created under your control, twice that many of those tokens are created instead.\n{1}{W/P}{W/P}, Sacrifice two other artifacts and/or creatures: Put an indestructible counter on Mondrak, Glory Dominus. ({W/P} can be paid with either {W} or 2 life.)
\ No newline at end of file
diff --git a/forge-gui/res/cardsfolder/upcoming/myr_convert.txt b/forge-gui/res/cardsfolder/upcoming/myr_convert.txt
index 67f26b2af91..81826d19471 100644
--- a/forge-gui/res/cardsfolder/upcoming/myr_convert.txt
+++ b/forge-gui/res/cardsfolder/upcoming/myr_convert.txt
@@ -4,4 +4,4 @@ Types:Artifact Creature Phyrexian Myr
PT:2/1
K:Toxic:1
A:AB$ Mana | Cost$ T PayLife<2> | Produced$ Any | SpellDescription$ Add one mana of any color.
-Oracle:Toxic 1 (Players dealt combat damage by this creature also get a poison counter.)\nT, Pay 2 life: Add one mana of any color.
+Oracle:Toxic 1 (Players dealt combat damage by this creature also get a poison counter.)\n{T}, Pay 2 life: Add one mana of any color.
diff --git a/forge-gui/res/cardsfolder/upcoming/necrogen_rotpriest.txt b/forge-gui/res/cardsfolder/upcoming/necrogen_rotpriest.txt
index ca46e761d55..41c6aca3c99 100644
--- a/forge-gui/res/cardsfolder/upcoming/necrogen_rotpriest.txt
+++ b/forge-gui/res/cardsfolder/upcoming/necrogen_rotpriest.txt
@@ -6,4 +6,4 @@ K:Toxic:2
T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl+withToxic | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPoison | TriggerZones$ Battlefield | TriggerDescription$ Whenever a creature you control with toxic deals combat damage to a player, that player gets an additional poison counter.
SVar:TrigPoison:DB$ Poison | Defined$ TriggeredTarget | Num$ 1
A:AB$ Pump | Cost$ 1 B G | ValidTgts$ Creature.YouCtrl+withToxic | TgtPrompt$ Select target creature you control with toxic | KW$ Deathtouch | SpellDescription$ Target creature you control with toxic gains deathtouch until end of turn.
-Oracle:Toxic 2 (Players dealt combat damage by this creature also get two poison counters.)\nWhenever a creature you control with toxic deals combat damage to a player, that player gets an additional poison counter.\n1BG: Target creature you control with toxic gains deathtouch until end of turn.
+Oracle:Toxic 2 (Players dealt combat damage by this creature also get two poison counters.)\nWhenever a creature you control with toxic deals combat damage to a player, that player gets an additional poison counter.\n{1}{B}{G}: Target creature you control with toxic gains deathtouch until end of turn.
diff --git a/forge-gui/res/cardsfolder/upcoming/nissa_ascended_animist.txt b/forge-gui/res/cardsfolder/upcoming/nissa_ascended_animist.txt
new file mode 100644
index 00000000000..3b0b4a655eb
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/nissa_ascended_animist.txt
@@ -0,0 +1,12 @@
+Name:Nissa, Ascended Animist
+ManaCost:3 G G PG PG
+Types:Legendary Planeswalker Nissa
+Loyalty:7
+K:Compleated
+A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | TokenScript$ g_x_x_phyrexian_horror | TokenPower$ L | TokenToughness$ L | SpellDescription$ Create an X/X green Phyrexian Horror creature token, where X is CARDNAME's loyalty.
+SVar:L:Count$CardCounters.LOYALTY
+A:AB$ Destroy | Cost$ SubCounter<1/LOYALTY> | Planeswalker$ True | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | SpellDescription$ Destroy target artifact or enchantment.
+A:AB$ PumpAll | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | ValidCards$ Creature.YouCtrl | NumAtt$ X | NumDef$ X | KW$ Trample | SpellDescription$ Until end of turn, creatures you control get +1/+1 for each Forest you control and gain trample.
+SVar:X:Count$Valid Forest.YouCtrl
+DeckHas:Ability$Token & Type$Phyrexian|Horror
+Oracle:Compleated ({G/P} can be paid with {G} or 2 life. For each {G/P} paid with life, this planeswalker enters with two fewer loyalty counters.)\n[+1]: Create an X/X green Phyrexian Horror creature token, where X is Nissa, Ascended Animist's loyalty.\n[-1]: Destroy target artifact or enchantment.\n[-7]: Until end of turn, creatures you control get +1/+1 for each Forest you control and gain trample.
diff --git a/forge-gui/res/cardsfolder/upcoming/ossification.txt b/forge-gui/res/cardsfolder/upcoming/ossification.txt
new file mode 100644
index 00000000000..abbf6b41908
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/ossification.txt
@@ -0,0 +1,10 @@
+Name:Ossification
+ManaCost:1 W
+Types:Enchantment Aura
+K:Enchant basic land you control
+A:SP$ Attach | ValidTgts$ Land.YouCtrl+Basic | TgtPrompt$ Select target basic land you control | AILogic$ Pump
+T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target creature or planeswalker an opponent controls until CARDNAME leaves the battlefield.
+SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.OppCtrl,Planeswalker.OppCtrl | TgtPrompt$ Select target creature or planeswalker an opponent controls | Duration$ UntilHostLeavesPlay
+SVar:PlayMain1:TRUE
+SVar:NeedsToPlay:Creature.OppCtrl
+Oracle:Enchant basic land you control\nWhen Ossification enters the battlefield, exile target creature or planeswalker an opponent controls until Ossification leaves the battlefield.
\ No newline at end of file
diff --git a/forge-gui/res/cardsfolder/upcoming/paladin_of_predation.txt b/forge-gui/res/cardsfolder/upcoming/paladin_of_predation.txt
new file mode 100644
index 00000000000..641af8b073e
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/paladin_of_predation.txt
@@ -0,0 +1,7 @@
+Name:Paladin of Predation
+ManaCost:5 G G
+Types:Creature Phyrexian Knight
+PT:6/7
+K:Toxic:6
+S:Mode$ CantBlockBy | ValidAttacker$ Card.Self | ValidBlocker$ Creature.powerLE2 | Description$ CARDNAME can't be blocked by creatures with power 2 or less.
+Oracle:Toxic 6 (Plavers dealt combat damage by this creature also get six poison counters.)\nPaladin of Predation can't be blocked by creatures with power 2 or less.
\ No newline at end of file
diff --git a/forge-gui/res/cardsfolder/upcoming/resistance_reunited.txt b/forge-gui/res/cardsfolder/upcoming/resistance_reunited.txt
new file mode 100644
index 00000000000..7d20fc1c82b
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/resistance_reunited.txt
@@ -0,0 +1,7 @@
+Name:Resistance Reunited
+ManaCost:1 W
+Types:Instant
+A:SP$ Pump | ValidTgts$ Creature | NumAtt$ 2 | NumDef$ 2 | SubAbility$ PumpEquipped | SpellDescription$ Target creature gets +2/+2 until end of turn.
+SVar:PumpEquipped:DB$ PumpAll | ValidCards$ Creature.YouCtrl+equipped | KW$ Indestructible | SpellDescription$ Equipped creatures you control gain indestructible until end of turn.
+DeckNeeds:Type$Equipment
+Oracle:Target creature gets +2/+2 until end of turn.\nEquipped creatures you control gain indestructible until end of turn.
\ No newline at end of file
diff --git a/forge-gui/res/cardsfolder/upcoming/rhuk_hexgold_nabber.txt b/forge-gui/res/cardsfolder/upcoming/rhuk_hexgold_nabber.txt
new file mode 100644
index 00000000000..ceedab6b829
--- /dev/null
+++ b/forge-gui/res/cardsfolder/upcoming/rhuk_hexgold_nabber.txt
@@ -0,0 +1,11 @@
+Name:Rhuk, Hexgold Nabber
+ManaCost:2 R
+Types:Legendary Creature Goblin Rebel
+PT:2/2
+K:Trample
+K:Haste
+T:Mode$ Attacks | ValidCard$ Creature.equipped+Other | Execute$ TrigAttach | TriggerDescription$ Whenever an equipped creature you control other than CARDNAME attacks or dies, you may attach all Equipment attached to that creature to NICKNAME.
+T:Mode$ ChangesZone | ValidCard$ Creature.equipped+Other | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigAttach | OptionalDecider$ You | Secondary$ True | TriggerDescription$ Whenever an equipped creature you control other than CARDNAME attacks or dies, you may attach all Equipment attached to that creature to NICKNAME.
+SVar:TrigAttach:DB$ Attach | Object$ AttachedTo TriggeredCard.Equipment | Defined$ Self
+DeckNeeds:Type$Equipment
+Oracle:Trample, haste\nWhenever an equipped creature you control other than Rhuk, Hexgold Nabber attacks or dies, you may attach all Equipment attached to that creature to Rhuk.
diff --git a/forge-gui/res/cardsfolder/upcoming/urtet_remains_of_memnarch.txt b/forge-gui/res/cardsfolder/upcoming/urtet_remains_of_memnarch.txt
index 554fbf7c8f8..d8138634941 100644
--- a/forge-gui/res/cardsfolder/upcoming/urtet_remains_of_memnarch.txt
+++ b/forge-gui/res/cardsfolder/upcoming/urtet_remains_of_memnarch.txt
@@ -2,7 +2,7 @@ Name:Urtet, Remains of Memnarch
ManaCost:3
Types:Legendary Artifact Creature Myr
PT:2/2
-T:Mode$ SpellCast | ValidCard$ Myr | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you cast a Myr spell, create a 1/1 colorless Myr artifact creature token.
+T:Mode$ SpellCast | ValidCard$ Myr | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you cast a Myr spell, create a 1/1 colorless Myr artifact creature token.
SVar:TrigToken:DB$ Token | TokenScript$ c_1_1_a_myr
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ UntapMyr | TriggerDescription$ At the beginning of combat on your turn, untap each Myr you control.
SVar:UntapMyr:DB$ UntapAll | ValidCards$ Myr.YouCtrl
diff --git a/forge-gui/res/cardsfolder/upcoming/vraska_betrayals_sting.txt b/forge-gui/res/cardsfolder/upcoming/vraska_betrayals_sting.txt
index cc60e3a9d4e..c6a3598d639 100644
--- a/forge-gui/res/cardsfolder/upcoming/vraska_betrayals_sting.txt
+++ b/forge-gui/res/cardsfolder/upcoming/vraska_betrayals_sting.txt
@@ -4,12 +4,12 @@ Types:Legendary Planeswalker Vraska
Loyalty:6
K:Compleated
A:AB$ Draw | Cost$ AddCounter<0/LOYALTY> | Planeswalker$ True | SubAbility$ DBLoseLife | SpellDescription$ You draw a card and you lose 1 life. Proliferate.
-SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 1 | SubAbility$ DBProliferate
-SVar:DBProliferate:DB$ Proliferate
+SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 1 | SubAbility$ DBProliferate
+SVar:DBProliferate:DB$ Proliferate
A:AB$ Animate | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | RemoveAllAbilities$ True | Colors$ Green | Types$ Artifact,Treasure | Abilities$ TreasureSac | RemoveCardTypes$ True | Duration$ Permanent | SpellDescription$ Target creature becomes a Treasure artifact with "{T}, Sacrifice this artifact: Add one mana of any color" and loses all other card types and abilities.
SVar:TreasureSac:AB$ Mana | Cost$ T Sac<1/CARDNAME> | Produced$ Any | SpellDescription$ Add one mana of any color.
A:AB$ Poison | Cost$ SubCounter<9/LOYALTY> | ValidTgts$ Player | TgtPrompt$ Select target player | ConditionCheckSVar$ X | ConditionSVarCompare$ LT9 | Num$ Difference | SpellDescription$ If target player has fewer than nine poison counters, they get a number of poison counters equal to the difference.
SVar:X:TargetedPlayer$PoisonCounters
SVar:Difference:Number$9/Minus.X
-DeckHints:Ability$Counters & Keyword$Infect|Toxic|Poisonous
+DeckHints:Ability$Counters & Keyword$Infect|Toxic|Poisonous
Oracle:Compleated ({PB} can be paid with {B} or 2 life. If life was paid, this planeswalker enters with two fewer loyalty counters.)\n[0]: You draw a card and you lose 1 life. Proliferate.\n[−2]: Target creature becomes a Treasure artifact with "{T}, Sacrifice this artifact: Add one mana of any color" and loses all other card types and abilities.\n[−9]: If target player has fewer than nine poison counters, they get a number of poison counters equal to the difference.
diff --git a/forge-gui/res/cardsfolder/v/verrak_warped_sengir.txt b/forge-gui/res/cardsfolder/v/verrak_warped_sengir.txt
index e6a3ae81777..89c4ee547fb 100644
--- a/forge-gui/res/cardsfolder/v/verrak_warped_sengir.txt
+++ b/forge-gui/res/cardsfolder/v/verrak_warped_sengir.txt
@@ -7,5 +7,5 @@ K:Deathtouch
K:Lifelink
T:Mode$ AbilityCast | ValidActivatingPlayer$ You | ValidSA$ SpellAbility.nonManaAbility | Condition$ LifePaid | TriggerZones$ Battlefield | Execute$ TrigCopySpell | TriggerDescription$ Whenever you activate an ability that isn't a mana ability, if life was paid to activate it, you may pay that much life again. If you do, copy that ability. You may choose new targets for the copy.
SVar:TrigCopySpell:AB$ CopySpellAbility | Cost$ PayLife | Defined$ TriggeredSpellAbility | MayChooseTarget$ True
-SVar:X:Count$TriggeredLifeSpent
+SVar:X:TriggerCount$LifeAmount
Oracle:Flying, deathtouch, lifelink\nWhenever you activate an ability that isn't a mana ability, if life was paid to activate it, you may pay that much life again. If you do, copy that ability. You may choose new targets for the copy.
diff --git a/forge-gui/res/cardsfolder/w/whack.txt b/forge-gui/res/cardsfolder/w/whack.txt
index f916bab4dbb..1daadb78492 100644
--- a/forge-gui/res/cardsfolder/w/whack.txt
+++ b/forge-gui/res/cardsfolder/w/whack.txt
@@ -1,8 +1,6 @@
Name:Whack
ManaCost:3 B
Types:Sorcery
-S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ CostReduction | Relative$ True | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a a white creature.
-SVar:CostReduction:Count$Compare CheckTgt GE1.3.0
-SVar:CheckTgt:Targeted$Valid Creature.White
+S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 3 | ValidTarget$ Creature.White | EffectZone$ All | Description$ This spell costs {3} less to cast if it targets a a white creature.
A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -4 | NumDef$ -4 | IsCurse$ True | SpellDescription$ Target creature gets -4/-4 until end of turn.
Oracle:This spell costs {3} less to cast if it targets a white creature.\nTarget creature gets -4/-4 until end of turn.
diff --git a/forge-gui/res/editions/Phyrexia All Will Be One Commander.txt b/forge-gui/res/editions/Phyrexia All Will Be One Commander.txt
index 8071e63e9f7..9b21c961d93 100644
--- a/forge-gui/res/editions/Phyrexia All Will Be One Commander.txt
+++ b/forge-gui/res/editions/Phyrexia All Will Be One Commander.txt
@@ -2,7 +2,7 @@
Code=ONC
Date=2023-02-10
Name=Phyrexia: All Will Be One Commander
-Type=Expansion
+Type=Commander
ScryfallCode=ONC
[cards]
@@ -15,7 +15,7 @@ ScryfallCode=ONC
7 R Kemba's Banner @Wisnu Tan
8 R Norn's Choirmaster @Jason A. Engle
9 R Norn's Decree @Nestor Ossandon Leal
-10 R Staff of the SToryteller @Dan Scott
+10 R Staff of the Storyteller @Dan Scott
11 R Geth's Summons @Johann Bodin
12 R Phyresis Outbreak @Matthew G. Lewis
13 R Goldwardens' Gambit @Manuel Castañón
@@ -28,3 +28,137 @@ ScryfallCode=ONC
20 R Glistening Sphere @Tuan Duong Chu
37 M Ixhel, Scion of Atraxa @Campbell White
38 M Neyali, Suns' Vanguard @Bryan Sola
+39 M Otharri, Suns' Glory @Marta Nael
+40 M Vishgraz, the Doomhive @Andrew Mar
+43 R Clever Concealment @Alexey Kruglov
+44 R Glimmer Lens @Sidharth Chaturvedi
+45 R Kemba's Banner @Wisnu Tan
+46 R Norn's Choirmaster @Jason A. Engle
+47 R Norn's Decree @Nestor Ossandon Leal
+48 R Staff of the Storyteller @Dan Scott
+49 R Geth's Summons @Johann Bodin
+50 R Phyresis Outbreak @Matthew G. Lewis
+51 R Goldwardens' Gambit @Manuel Castañón
+52 R Hexplate Wallbreaker @Aaron Miller
+53 R Roar of Resistance @Lie Setiawan
+54 R Vulshok Factory @Cristi Balanescu
+55 R Contaminant Grafter @Lars Grant-West
+56 R Glissa's Retriever @Josu Hernaiz
+57 R Wurmquake @Xavier Ribeiro
+58 R Glistening Sphere @Tuan Duong Chu
+59 C Battle Screech @Randy Gallegos
+60 R Call the Coppercoats @Cristi Balanescu
+61 R Collective Effort @Eric Deschamps
+62 R Court of Grace @Denman Rooke
+63 C Cut a Deal @Fajareka Setiawan
+64 M Elspeth Tirel @Michael Komarck
+65 R Emeria Angel @Jim Murray
+66 R Felidar Retreat @Ralph Horsley
+67 M Finale of Glory @Stanton Feng
+68 R Flawless Maneuver @Zoltan Boros
+69 R Fumigate @Svetlin Velinov
+70 U Generous Gift @Kev Walker
+71 U Ghostly Prison @Daarken
+72 U Goldnight Commander @Chris Rahn
+73 U Grateful Apparition @Izzy
+74 M Harmonious Archon @Anastasia Ovchinnikova
+75 R Hour of Reckoning @Joseph Meehan
+76 R Increasing Devotion @Daniel Ljunggren
+77 C Intangible Virtue @
+78 C Mace of the Valiant @
+79 R Martial Coup @Greg Staples
+80 R Maul of the Skyclaves @Joseph Meehan
+81 C Mentor of the Meek @Jana Schirmer & Johannes Voss
+82 U Midnight Haunting @Matt Stewart
+83 R Norn's Annex @James Paick
+84 U Path to Exile @Todd Lockwood
+85 U Phantom General @Christopher Moeller
+86 R Phyrexian Rebirth @Scott Chou
+87 C Prava of the Steel Legion
+88 R Silverwing Squadron @Johannes Voss
+89 U Swords to Plowshares @Jesper Ejsing
+90 R White Sun's Zenith @Mike Bierek
+91 R Windborn Muse @Adam Rex
+92 U Caress of Phyrexia @Karl Kopinski
+93 U Ichor Rats @Matt Stewart
+94 C Night's Whisper @John Severin Brassell
+95 R Painful Truths @Winona Nelson
+96 C Plague Stinger @Ryan Pancoast
+97 R Chain Reaction @Trevor Claxton
+98 M Dragonmaster Outcast @Raymond Swanland
+99 C Hate Mirage @
+100 C Hordeling Outburst @Zoltan Boros
+101 R Legion Warboss @Alex Konstad
+102 U Loyal Apprentice @Joe Slucher
+103 R Siege-Gang Commander @Aaron Miller
+104 S Beast Within @Dave Allsop
+105 C Blight Mamba @Drew Baker
+106 U Carrion Call @Adrian Smith
+107 C Cultivate @Anthony Palumbo
+108 U Evolution Sage @Simon Dominic
+109 U Mycosynth Fiend @Kev Walker
+110 U Noxious Revival @Matt Stewart
+111 R Phyrexian Swarmlord @Svetlin Velinov
+112 R Scavenging Ooze @Austin Hsu
+113 U Viridian Corrupter @Matt Cavotta
+114 R Adriana, Captain of the Guard @Chris Rallis
+115 R Assemble the Legion @Eric Deschamps
+116 U Boros Charm @Zoltan Boros
+117 R Culling Ritual @Lorenzo Mastroianni
+118 U Heroic Reinforcements @Scott Murphy
+119 R Jor Kadeen, the Prevailer @Austin Hsu
+120 R Merciless Eviction @Richard Wright
+121 U Moldervine Reclamation @Antonio José Manzanedo
+122 U Mortify @Anthony Palumbo
+123 U Putrefy @Clint Cearley
+124 U Rip Apart @Anna Podedworna
+125 C Arcane Signet @Dan Scott
+126 C Boros Signet @Mike Sass
+127 R Chromatic Lantern @Jung Park
+128 C Commander's Sphere @Ryan Alexander Lee
+129 U Contagion Clasp @Anthony Palumbo
+130 U Fellwar Stone @John Avon
+131 C Golgari Signet @Raoul Vitale
+132 U Grafted Exoskeleton @Allen Williams
+133 C Ichorclaw Myr @Eric Deschamps
+134 R Idol of Oblivion @Piotr Dura
+135 R Loxodon Warhammer @Jeremy Jarvis
+136 U Mask of Memory @Alan Pollack
+137 C Mind Stone @Adam Rex
+138 R Myr Battlesphere @Franz Vohwinkel
+139 U Plague Myr @Efrem Palacios
+140 U Sol Ring @Mike Bierek
+141 R Solemn Simulacrum @Donato Giancola
+142 U Soul-Guide Lantern @Cliff Childs
+143 U Talisman of Conviction @Lindsey Look
+144 U Trailblazer's Boots @Zoltan Boros & Gabor Szikszai
+145 C Bojuka Bog @Howard Lyon
+146 U Boros Garrison @John Avon
+147 U Buried Ruin @Franz Vohwinkel
+148 R Canopy Vista @Adam Paquette
+149 R Castle Ardenvale @Volkan Baǵa
+150 R Castle Embereth @Jaime Jones
+151 C Command Tower @Evan Shipard
+152 R Exotic Orchard @Steven Belledin
+153 C Forgotten Cave @Tony Szczudlo
+154 R Fortified Village @Cliff Childs
+155 R Furycalm Snarl @Sam Burley
+156 R Karn's Bastion @Adam Paquette
+157 R Kher Keep @Paolo Parente
+158 U Krosan Verge @Ruxing Gao
+159 U Myriad Landscape @Jonas De Ro
+160 R Necroblossom Snarl @Sam Burley
+161 C Path of Ancestry @Alayna Danner
+162 U Sandsteppe Citadel @Sam Burley
+163 U Secluded Steppe @Heather Hudson
+164 R Shineshadow Snarl @Sam Burley
+165 R Slayers' Stronghold @Karl Kopinski
+166 R Sungrass Prairie @Alayna Danner
+167 U Tainted Field @Don Hazeltine
+168 U Tainted Wood @Rob Alexander
+169 R Temple of Malady @Titus Lunter
+170 R Temple of Plenty @Chris Ostrowski
+171 R Temple of Silence @Adam Paquette
+172 U Temple of the False God @James Zapata
+173 R Temple of Triumph @Piotr Dura
+174 R Windbrisk Heights @Omar Rayyan
diff --git a/forge-gui/res/editions/Phyrexia All Will Be One.txt b/forge-gui/res/editions/Phyrexia All Will Be One.txt
index 512ad08771c..343417a4508 100644
--- a/forge-gui/res/editions/Phyrexia All Will Be One.txt
+++ b/forge-gui/res/editions/Phyrexia All Will Be One.txt
@@ -8,13 +8,17 @@ ScryfallCode=ONE
[cards]
2 U Annex Sentry @David Astruga
3 U Apostle of Invasion @Marcela Bolívar
+7 C Compleat Devotion @Filipe Pagliuso
10 M Elesh Norn, Mother of Machines @Martina Fackova
11 R The Eternal Wanderer @Alix Branwyn
+15 C Incisor Glider @Joe Slucher
+17 U Infested Fleshcutter @José Parodi
18 U Jawbone Duelist @Nino Vecia
19 R Kemba, Kha Enduring @Zoltan Boros
23 M Mondrak, Glory Dominus @Jason A. Engle
24 R Norn's Wellspring @Jonas De Ro
26 U Ossification @Nino Vecia
+28 C Planar Disruption @Campbell White
31 U Resistance Reunited @Aurore Folny
32 C Sinew Dancer @Campbell White
33 R Skrelv, Defector Mite @Brian Valeza
@@ -31,24 +35,41 @@ ScryfallCode=ONE
62 C Mesmerizing Dose @Konstantin Porubov
63 R Mindsplice Apparatus @Ovidio Cartagena
64 U Minor Misstep @Lorenzo Mastroianni
+69 U Tamiyo's Immobilizer @Daren Bader
+73 U Transplant Theorist @Xavier Ribeiro
75 R Unctus, Grand Metatect @Andrew Mar
81 C Anoint with Affliction @David Astruga
82 R Archfiend of the Dross @Lie Setiawan
83 U Bilious Skulldweller @Svetlin Velinov
84 R Black Sun's Twilight @Jonas De Ro
+85 C Blightbelly Rat @Yeong-Hao Han
+86 C Bonepicker Skirge @Dave Kendall
+87 C Chittering Skitterling @Nils Hamm
+93 U Feed the Infection @Jason A. Engle
95 R Geth, Thane of Contracts @Martin de Diego Sádaba
98 R Karumonix, the Rat King @Jason A. Engle
+99 U Necrogen Communion @Ernanda Souza
101 U Nimraiser Paladin @José Parodi
104 R Phyrexian Arena @Martina Fackova
105 M Phyrexian Obliterator @Maxim Kostin
+107 U Scheming Aspirant @Lauren K. Cannon
108 U Sheoldred's Edict @Helge C. Balzer
+114 C Vraan, Executioner Thane @Helge C. Balzer
115 M Vraska, Betrayal's Sting @Chase Stone
+119 U Awaken the Sleeper @Mathias Kollros
+124 U Cacophony Scamp @Svetlin Velinov
125 M Capricious Hellraiser @Durion
126 R Dragonwing Glider @Andreas Zafiratos
+134 U Gleeful Demolition @Tuan Duong Chu
+136 U Hexgold Halberd @Heonhwa Choe
137 C Hexgold Slash @Eli Minaya
138 R Koth, Fire of Resistance @Eric Wilkerson
+143 U Oxidda Finisher @Vladimir Krisetskiy
145 R Red Sun's Twilight @Julian Kok Joon Wen
+146 U Resistance Skywarden @Jarel Threat
+147 C Sawblade Scamp @Helge C. Balzer
149 R Slobad, Iron Goblin @Chris Seaman
+152 U Urabrask's Anointer @Aaron J. Riley
153 R Urabrask's Forge @Lie Setiawan
154 R Vindictive Flamestoker @Xavier Ribeiro
155 C Volt Charge @Deruchenko Alexander
@@ -57,13 +78,17 @@ ScryfallCode=ONE
162 C Carnivorous Canopy @John Di Giovanni
163 R Conduit of Worlds @Jokubas Uogintas
166 R Evolved Spinoderm @Svetlin Velinov
+168 U Expand the Sphere @Sergey Glushakov
169 R Green Sun's Twilight @Yeong-Hao Han
175 M Nissa, Ascended Animist @Chase Stone
176 U Noxious Assault @Billy Christian
178 U Paladin of Predation @Lorenzo Mastroianni
186 R Thrun, Breaker of Silence @Simon Dominic
189 M Tyrranax Rex @Tuan Duong Chu
+190 U Tyvar's Stand @Kieran Yanner
+191 U Unnatural Restoration @Jeremy Wilson
192 R Venerated Rotpriest @Brian Valeza
+194 U Viral Spawning @Denis Zhbankov
196 M Atraxa, Grand Unifier @Marta Nael
197 U Bladehold War-Whip @Tony Foti
201 R Ezuri, Stalker of Spheres @Fariba Khamseh
@@ -84,13 +109,20 @@ ScryfallCode=ONE
218 R Tyvar, Jubilant Brawler @Victor Adame Minguez
219 R Venser, Corpse Puppet @Igor Kieryluk
222 R Argentum Masticore @Zack Stella
-225 R Graaz, Unstoppable Juggernaut @Nestor Ossandon Leal
+224 C Basilica Skullbomb @Gaboleps
+225 C Dross Skullbomb @Gaboleps
227 R The Filigree Sylex @
+228 C Furnace Skullbomb @Gaboleps
+229 R Graaz, Unstoppable Juggernaut @Nestor Ossandon Leal
+230 U Ichorplate Golem @Sam Wolfe Connelly
+231 C Maze Skullbomb @Gaboleps
232 R Mirran Safehouse @Piotr Dura
233 R Monument to Perfection @Igor Kieryluk
234 U Myr Convert @José Parodi
+239 U Prosthetic Injector @Zezhou Chen
241 R Soulless Jailer @Donato Giancola
242 M Staff of Compleation @Igor Krstic
+243 C Surgical Skullbomb @Gaboleps
244 M Sword of Forge and Frontier @Scott Murphy
245 R Tablet of Compleation @Martin de Diego Sádaba
246 R Zenith Chronicler @Johann Bodin
@@ -126,6 +158,10 @@ ScryfallCode=ONE
283 R Phyrexian Arena @Martina Fackova
284 R Green Sun's Twilight @Piotr Dura
286 C Sinew Dancer @Kekai Kotaki
+290 C Bonepicker Skirge @Flavio Girón
+292 C Sawblade Scamp @Flavio Girón
+293 U Urabrask's Anointer @JungShan
+296 U Necrogen Rotpriest @Dominik Mayer
297 U Myr Convert @JungShan
298 M Elesh Norn, Mother of Machines @Dominik Mayer
299 M Mondrak, Glory Dominus @Flavio Girón
@@ -134,11 +170,14 @@ ScryfallCode=ONE
306 R Geth, Thane of Contracts @Flavio Girón
307 R Karumonix, the Rat King @Flavio Girón
308 M Phyrexian Obliterator @Yu-ki Nishimoto
+310 M Capricious Hellraiser @Kekai Kotaki
311 R Slobad, Iron Goblin @Dominik Mayer
313 R Evolved Spinoderm @Ravenna Tran
314 M Tyrranax Rex @Flavio Girón
+316 M Atraxa, Grand Unifier @Anato Finnstark
317 R Ezuri, Stalker of Spheres @JungShan
318 R Glissa Sunslayer @Ravenna Tran
+319 R Kethek, Crucible Goliath @Flavio Girón
320 R Malcator, Purity Overseer @Dominik Mayer
322 R Ovika, Enigma Goliath @Dominik Mayer
324 R Venser, Corpse Puppet @Dominik Mayer
@@ -150,7 +189,7 @@ ScryfallCode=ONE
330 R Kemba, Kha Enduring @Izumi Tomoki
332 R Jor Kadeen, First Goldwarden @Sansyu
333 R Melira, the Living Cure @Miyuki Aramaki
-334 R Graaz, Unstoppable Juggernaut @Kutat
+334 R Graaz, Unstoppable Juggernaut @kutay
335 R The Eternal Wanderer @Kento Matsuura
336 M Jace, the Perfected Mind @Showichi Furumi
337 M Vraska, Betrayal's Sting @Sansyu
@@ -164,7 +203,9 @@ ScryfallCode=ONE
345 M Elesh Norn, Mother of Machines @Pedro Potier
346 M Mondrak, Glory Dominus @rishxxv
351 M Phyrexian Obliterator @Pedro Potier
+353 M Capricious Hellraiser @Steve Ellis
355 M Tyrranax Rex @Phil Stone
+357 M Atraxa, Grand Unifier @Thomas M. Baxa
358 M Staff of Compleation @Joshua Alvarado
359 M Sword of Forge and Frontier @Phil Stone
360 M Jace, the Perfected Mind @Joshua Alvarado
@@ -189,6 +230,7 @@ ScryfallCode=ONE
379 R Blue Sun's Twilight @Piotr Dura
380 R Encroaching Mycosynth @Martin de Diego Sádaba
381 R Mercurial Spelldancer @Marcela Bolívar
+382 R Mindsplice Apparatus @Ovidio Cartagena
383 R Black Sun's Twilight @Jonas De Ro
384 R Phyrexian Arena @Martina Fackova
387 R Urabrask's Forge @Lie Setiawan
@@ -197,6 +239,9 @@ ScryfallCode=ONE
390 R Conduit of Worlds @Jokubas Uogintas
391 R Green Sun's Twilight @Yeong-Hao Han
392 R Venerated Rotpriest @Brian Valeza
+394 R The Filigree Sylex @Leanna Crossan
+395 R Mirran Safehouse @Piotr Dura
+396 R Monument to Perfection @Igor Kieryluk
399 R Zenith Chronicler @Johann Bodin
401 R The Monumental Facade @Bruce Brenneise
403 R The Seedcore @Kasia 'Kafis' Zielińska
@@ -220,6 +265,7 @@ ScryfallCode=ONE
422 R The Eternal Wanderer @Kento Matsuura
423 R Kemba, Kha Enduring @Izumi Tomoki
424 M Mondrak, Glory Dominus @Flavio Girón
+426 C Sinew Dancer @Kekai Kotaki
427 R Skrelv, Defector Mite @Sidharth Chaturvedi
428 M Jace, the Perfected Mind @Showichi Furumi
429 M Jace, the Perfected Mind @Chase Stone
@@ -229,22 +275,31 @@ ScryfallCode=ONE
440 M Phyrexian Obliterator @Yu-ki Nishimoto
442 M Vraska, Betrayal's Sting @Sansyu
443 M Vraska, Betrayal's Sting @Chase Stone
+444 M Capricious Hellraiser @Kekai Kotaki
446 R Koth, Fire of Resistance @Ai Nanahira
+447 C Sawblade Scamp @Flavio Girón
448 R Slobad, Iron Goblin @Dominik Mayer
+450 U Urabrask's Anointer @JungShan
+452 R Evolved Spinoderm @Ravenna Tran
453 M Nissa, Ascended Animist @Chase Stone
454 M Nissa, Ascended Animist @Gou Tanabe
+457 M Tyrranax Rex @Flavio Girón
+459 M Atraxa, Grand Unifier @Anato Finnstark
+460 R Ezuri, Stalker of Spheres @JungShan
461 R Glissa Sunslayer @Ravenna Tran
462 R Jor Kadeen, First Goldwarden @Sansyu
463 R Kaito, Dancing Shadow @Kento Matsuura
464 R Kaya, Intangible Slayer @Showichi Furumi
+465 R Kethek, Crucible Goliath @Flavio Girón
466 M Lukka, Bound to Ruin @Chase Stone
467 M Lukka, Bound to Ruin @Yuki Fujisawa
+468 R Malcator, Purity Overseer @Dominik Mayer
469 R Melira, the Living Cure @Miyuki Aramaki
471 M Nahiri, the Unforgiving @Hiro Usuda
472 M Nahiri, the Unforgiving @Chase Stone
+473 U Necrogen Rotpriest @Dominik Mayer
474 R Ovika, Enigma Goliath @Dominik Mayer
476 R Tyvar, Jubilant Brawler @Iinuma Yuuki
477 R Venser, Corpse Puppet @Dominik Mayer
-478 R Graaz, Unstoppable Juggernaut @Kutat
+478 R Graaz, Unstoppable Juggernaut @kutay
479 U Myr Convert @JungShan
-
diff --git a/forge-gui/res/editions/Unfinity.txt b/forge-gui/res/editions/Unfinity.txt
index 234aa718532..d744ad15908 100644
--- a/forge-gui/res/editions/Unfinity.txt
+++ b/forge-gui/res/editions/Unfinity.txt
@@ -72,7 +72,7 @@ F60 R Treacherous Trapezist @Dave Greco
64 C Wizards of the _____ @Anna Christenson
F65 R Animate Graveyard @Mike Burns
66 U Attempted Murder @Greg Staples
-67 R Black Hole @Greg Borowski
+67 R Black Hole @Greg Bobrowski
68 C Carnival Carnivore @Carl Critchlow
69 C Deadbeat Attendant @Sebastian Giacobino
70 U Discourtesy Clerk @Vladimir Krisetskiy
@@ -96,7 +96,7 @@ F87 U A Real Handful @Tomek Larek
88 R Saw in Half @Sebastian Giacobino
89 U Scampire @Armand Baltazar
90 C Scared Stiff @José Parodi
-F91 C Scooch @Filip Burburan
+F91 C Scooch @Filipe Pagliuso
92 C Six-Sided Die @Ben Wootten
93 C Soul Swindler @Alexander Mokhov
94 C Step Right Up @Bruce Brenneise
@@ -121,15 +121,15 @@ F112 R Ignacio of Myra's Marvels @Gaboleps
F113 U Juggletron @Matt Dixon
114 C Minotaur de Force @Gaboleps
115 C Non-Human Cannonball @Ralph Horsley
-F116 R Omniclown Colossus // Pie-roclasm @Ralph Horsley
+F116 R Omniclown Colossus @Ralph Horsley
117 C One-Clown Band @Ralph Horsley
-F118 M Opening Ceremony @Greg Borowski
-119 U Priority Boarding @Greg Borowski
+F118 M Opening Ceremony @Greg Bobrowski
+119 U Priority Boarding @Greg Bobrowski
120 U Proficient Pyrodancer @John Thacker
121 C Rad Rascal @Dmitry Burmak
F122 C Rock Star @Dave Allsop
-123 C Slight Malfunction @Greg Borowski
-F124 U Ticking Mime Bomb @Greg Borowski
+123 C Slight Malfunction @Greg Bobrowski
+F124 U Ticking Mime Bomb @Greg Bobrowski
F125 U Trigger Happy @Jamroz Gary
F126 M Vorthos, Steward of Myth @Caroline Gariba
127 C Wee Champion @Raluca Marinescu
@@ -148,7 +148,7 @@ F129 C Alpha Guard @Caroline Gariba
140 C Grabby Tabby @Filipe Pagliuso
F141 R Hardy of Myra's Marvels @Gaboleps
F142 U Icing Manipulator @Raluca Marinescu
-F143 C An Incident Has Occurred @Greg Borowski
+F143 C An Incident Has Occurred @Greg Bobrowski
F144 R Jermane, Pride of the Circus @Alexander Mokhov
F145 M Killer Cosplay @Leonardo Santanna
146 U Lineprancers @Ben Maier
@@ -237,7 +237,7 @@ F228 U Squirrel Stack @Andrea Radeck
229 R Storybook Ride @Dmitry Burmak
F230 U The Superlatorium @Simon Dominic
231 R Swinging Ship @Mike Burns
-232 U Trash Bin @Greg Borowski
+232 U Trash Bin @Greg Bobrowski
F233 U Trivia Contest @Caroline Gariba
234 R Tunnel of Love @Vladimir Krisetskiy
235 L Plains @Adam Paquette
@@ -278,7 +278,7 @@ F268 U Pietra, Crafter of Clowns @Stephanie Buscema
270 U The Space Family Goblinson @David Semple
271 U Spinnerette, Arachnobat @David Semple
F272 R Truss, Chief Engineer @Scooter
-273 U Tusk and Whiskers
+273 U Tusk and Whiskers @David Semple
F274 R D00-DL, Caricaturist @Scooter
275 M Comet, Stellar Pup @David Semple
276 M Space Beleren @Scooter
@@ -358,7 +358,7 @@ F346 R Treacherous Trapezist @Dave Greco
350 C Wizards of the _____ @Anna Christenson
F351 R Animate Graveyard @Mike Burns
352 U Attempted Murder @Greg Staples
-353 R Black Hole @Greg Borowski
+353 R Black Hole @Greg Bobrowski
354 C Carnival Carnivore @Carl Critchlow
355 C Deadbeat Attendant @Sebastian Giacobino
356 U Discourtesy Clerk @Vladimir Krisetskiy
@@ -407,15 +407,15 @@ F398 R Ignacio of Myra's Marvels @Gaboleps
F399 U Juggletron @Matt Dixon
400 C Minotaur de Force @Gaboleps
401 C Non-Human Cannonball @Ralph Horsley
-F402 R Omniclown Colossus // Pie-roclasm @Ralph Horsley
+F402 R Omniclown Colossus @Ralph Horsley
403 C One-Clown Band @Ralph Horsley
-F404 M Opening Ceremony @Greg Borowski
-405 U Priority Boarding @Greg Borowski
+F404 M Opening Ceremony @Greg Bobrowski
+405 U Priority Boarding @Greg Bobrowski
406 U Proficient Pyrodancer @John Thacker
407 C Rad Rascal @Dmitry Burmak
F408 C Rock Star @Dave Allsop
-409 C Slight Malfunction @Greg Borowski
-F410 U Ticking Mime Bomb @Greg Borowski
+409 C Slight Malfunction @Greg Bobrowski
+F410 U Ticking Mime Bomb @Greg Bobrowski
F411 U Trigger Happy @Jamroz Gary
F412 M Vorthos, Steward of Myth @Caroline Gariba
413 C Wee Champion @Raluca Marinescu
@@ -434,7 +434,7 @@ F415 C Alpha Guard @Caroline Gariba
426 C Grabby Tabby @Filipe Pagliuso
F427 R Hardy of Myra's Marvels @Gaboleps
F428 U Icing Manipulator @Raluca Marinescu
-F429 C An Incident Has Occurred @Greg Borowski
+F429 C An Incident Has Occurred @Greg Bobrowski
F430 R Jermane, Pride of the Circus @Alexander Mokhov
F431 M Killer Cosplay @Leonardo Santanna
432 U Lineprancers @Ben Maier
diff --git a/forge-gui/res/editions/Warhammer 40,000.txt b/forge-gui/res/editions/Warhammer 40,000 Commander.txt
similarity index 50%
rename from forge-gui/res/editions/Warhammer 40,000.txt
rename to forge-gui/res/editions/Warhammer 40,000 Commander.txt
index fe6848b7a18..a38cd2eeb93 100644
--- a/forge-gui/res/editions/Warhammer 40,000.txt
+++ b/forge-gui/res/editions/Warhammer 40,000 Commander.txt
@@ -1,7 +1,7 @@
[metadata]
Code=40K
Date=2022-10-07
-Name=Warhammer 40,000
+Name=Warhammer 40,000 Commander
Type=Commander
ScryfallCode=40K
@@ -15,165 +15,325 @@ ScryfallCode=40K
7 M Magus Lucea Kane @Bartek Fedyczak
8 M Marneus Calgar @Slawomir Maniak
9 U And They Shall Know No Fear @Games Workshop
+9★ U And They Shall Know No Fear @Games Workshop
10 R Celestine, the Living Saint @Irina Nordsol
+10★ R Celestine, the Living Saint @Irina Nordsol
11 R Defenders of Humanity @Games Workshop
+11★ R Defenders of Humanity @Games Workshop
12 R For the Emperor! @Games Workshop
+12★ R For the Emperor! @Games Workshop
13 U Grey Knight Paragon @Games Workshop
+13★ U Grey Knight Paragon @Games Workshop
14 R Space Marine Devastator @Games Workshop
+14★ R Space Marine Devastator @Games Workshop
15 U Space Marine Scout @Games Workshop
+15★ U Space Marine Scout @Games Workshop
16 U Thunderwolf Cavalry @Oleg Shekhovtsov
+16★ U Thunderwolf Cavalry @Oleg Shekhovtsov
17 R Triumph of Saint Katherine @David Astruga
+17★ R Triumph of Saint Katherine @David Astruga
18 R Ultramarines Honour Guard @Games Workshop
+18★ R Ultramarines Honour Guard @Games Workshop
19 R Vexilus Praetor @Zezhou Chen
+19★ R Vexilus Praetor @Zezhou Chen
20 R Zephyrim @Anna Steinbauer
+20★ R Zephyrim @Anna Steinbauer
21 U Genestealer Locus @Diego Gisbert
+21★ U Genestealer Locus @Diego Gisbert
22 R Genestealer Patriarch @Games Workshop
+22★ R Genestealer Patriarch @Games Workshop
23 U Heralds of Tzeentch @Games Workshop
+23★ U Heralds of Tzeentch @Games Workshop
24 R Lord of Change @Games Workshop
+24★ R Lord of Change @Games Workshop
25 U Sicarian Infiltrator @Games Workshop
+25★ U Sicarian Infiltrator @Games Workshop
26 R Sister of Silence @Games Workshop
+26★ R Sister of Silence @Games Workshop
27 R Vanguard Suppressor @Fajareka Setiawan
+27★ R Vanguard Suppressor @Fajareka Setiawan
28 R Anrakyr the Traveller @L J Koh
+28★ R Anrakyr the Traveller @L J Koh
29 R Arco-Flagellant @Games Workshop
+29★ R Arco-Flagellant @Games Workshop
30 R Biotransference @Anthony Devine
+30★ R Biotransference @Anthony Devine
31 R Blight Grenade @Alexey Kruglov
+31★ R Blight Grenade @Alexey Kruglov
32 R Chronomancer @Alexey Kruglov
+32★ R Chronomancer @Alexey Kruglov
33 R Cryptek @David Álvarez
+33★ R Cryptek @David Álvarez
34 U Flayed One @David Sondered
+34★ U Flayed One @David Sondered
35 R Great Unclean One @Helge C. Balzer
+35★ R Great Unclean One @Helge C. Balzer
36 U Hexmark Destroyer @Wonchun Choi
+36★ U Hexmark Destroyer @Wonchun Choi
37 R Illuminor Szeras @Darren Tan
+37★ R Illuminor Szeras @Darren Tan
38 R Lokhust Heavy Destroyer @Adrián Rodríguez Pérez
+38★ R Lokhust Heavy Destroyer @Adrián Rodríguez Pérez
39 R Lychguard @Games Workshop
+39★ R Lychguard @Games Workshop
40 R Mandate of Abaddon @Games Workshop
+40★ R Mandate of Abaddon @Games Workshop
41 R Mortarion, Daemon Primarch @Helge C. Balzer
+41★ R Mortarion, Daemon Primarch @Helge C. Balzer
42 R Necron Deathmark @Games Workshop
+42★ R Necron Deathmark @Games Workshop
43 R Necron Overlord @David Sondered
+43★ R Necron Overlord @David Sondered
44 R Nurgle's Conscription @Ørjan Ruttenborg Svendsen
+44★ R Nurgle's Conscription @Ørjan Ruttenborg Svendsen
45 U Nurgle's Rot @Roman Tishenin
+45★ U Nurgle's Rot @Roman Tishenin
46 R Out of the Tombs @Games Workshop
+46★ R Out of the Tombs @Games Workshop
47 R Plague Drone @Games Workshop
+47★ R Plague Drone @Games Workshop
48 U Plasmancer @Bartek Fedyczak
+48★ U Plasmancer @Bartek Fedyczak
49 R Poxwalkers @Games Workshop
+49★ R Poxwalkers @Games Workshop
50 R Primaris Eliminator @Logan Feliciano
+50★ R Primaris Eliminator @Logan Feliciano
51 U Psychomancer @Alex Konstad
+51★ U Psychomancer @Alex Konstad
52 R Royal Warden @Artur Nakhodkin
+52★ R Royal Warden @Artur Nakhodkin
53 U Sanguinary Priest @Games Workshop
+53★ U Sanguinary Priest @Games Workshop
54 U Sautekh Immortal @Games Workshop
+54★ U Sautekh Immortal @Games Workshop
55 R Shard of the Nightbringer @Pierre Loyvet
+55★ R Shard of the Nightbringer @Pierre Loyvet
56 R Shard of the Void Dragon @Alex Konstad
+56★ R Shard of the Void Dragon @Alex Konstad
57 U Skorpekh Destroyer @Games Workshop
+57★ U Skorpekh Destroyer @Games Workshop
58 R Skorpekh Lord @Adrián Rodríguez Pérez
+58★ R Skorpekh Lord @Adrián Rodríguez Pérez
59 R Sloppity Bilepiper @Ørjan Ruttenborg Svendsen
+59★ R Sloppity Bilepiper @Ørjan Ruttenborg Svendsen
60 R Tallyman of Nurgle @Games Workshop
+60★ R Tallyman of Nurgle @Games Workshop
61 R Technomancer @David Álvarez
+61★ R Technomancer @David Álvarez
62 R Their Name Is Death @Evan Shipard
+62★ R Their Name Is Death @Evan Shipard
63 R Their Number Is Legion @Games Workshop
+63★ R Their Number Is Legion @Games Workshop
64 R Tomb Blade @Darren Tan
-65 R Trazyn the Infinite @Michał Makowski
+64★ R Tomb Blade @Darren Tan
+65 R Trazyn the Infinite @Michał Miłkowski
+65★ R Trazyn the Infinite @Michał Miłkowski
66 U Triarch Praetorian @Lucas Terryn
+66★ U Triarch Praetorian @Lucas Terryn
67 R Triarch Stalker @JB Casacop
+67★ R Triarch Stalker @JB Casacop
68 R Venomcrawler @Ivan Dedov
+68★ R Venomcrawler @Ivan Dedov
69 R The War in Heaven @Darren Tan
+69★ R The War in Heaven @Darren Tan
70 U Acolyte Hybrid @Slawomir Maniak
+70★ U Acolyte Hybrid @Slawomir Maniak
71 R Aspiring Champion @Miguel Sacristan
+71★ R Aspiring Champion @Miguel Sacristan
72 U Bloodcrusher of Khorne @Games Workshop
+72★ U Bloodcrusher of Khorne @Games Workshop
73 R Bloodthirster @Games Workshop
+73★ R Bloodthirster @Games Workshop
74 U Chaos Terminator Lord @Games Workshop
+74★ U Chaos Terminator Lord @Games Workshop
75 R Dark Apostle @Games Workshop
+75★ R Dark Apostle @Games Workshop
76 R Exocrine @Cory Trego-Erdner
+76★ R Exocrine @Cory Trego-Erdner
77 U Herald of Slaanesh @Alexander Mokhov
+77★ U Herald of Slaanesh @Alexander Mokhov
78 R Keeper of Secrets @Miguel Sacristan
+78★ R Keeper of Secrets @Miguel Sacristan
79 R Kharn the Betrayer @Kekai Kotaki
+79★ R Kharn the Betrayer @Kekai Kotaki
80 R Knight Rampager @Games Workshop
+80★ R Knight Rampager @Games Workshop
81 R Let the Galaxy Burn @Evan Shipard
+81★ R Let the Galaxy Burn @Evan Shipard
82 U Noise Marine @Johan Grenier
+82★ U Noise Marine @Johan Grenier
83 R The Red Terror @Bryan Sola
+83★ R The Red Terror @Bryan Sola
84 R Screamer-Killer @David Auden Nash
+84★ R Screamer-Killer @David Auden Nash
85 U Seeker of Slaanesh @Games Workshop
+85★ U Seeker of Slaanesh @Games Workshop
86 U Aberrant @Games Workshop
+86★ U Aberrant @Games Workshop
87 R Biophagus @Teodora Dumitriu
+87★ R Biophagus @Teodora Dumitriu
88 R Bone Sabres @David Auden Nash
+88★ R Bone Sabres @David Auden Nash
89 R Broodlord @Mathias Kollros
+89★ R Broodlord @Mathias Kollros
90 R Clamavus @Adrián Rodríguez Pérez
+90★ R Clamavus @Adrián Rodríguez Pérez
91 R Haruspex @Helge C. Balzer
+91★ R Haruspex @Helge C. Balzer
92 R Hierophant Bio-Titan @David Astruga
+92★ R Hierophant Bio-Titan @David Astruga
93 R Hormagaunt Horde @Nikola Matkovic
+93★ R Hormagaunt Horde @Nikola Matkovic
94 R Lictor @Games Workshop
+94★ R Lictor @Games Workshop
95 R Nexos @Josu Hernaiz
+95★ R Nexos @Josu Hernaiz
96 R Old One Eye @Mathias Kollros
+96★ R Old One Eye @Mathias Kollros
97 U Purestrain Genestealer @Games Workshop
+97★ U Purestrain Genestealer @Games Workshop
98 R Sporocyst @Fajareka Setiawan
+98★ R Sporocyst @Fajareka Setiawan
99 R Termagant Swarm @Nikola Matkovic
+99★ R Termagant Swarm @Nikola Matkovic
100 R Tervigon @Xavier Ribeiro
+100★ R Tervigon @Xavier Ribeiro
101 R Toxicrene @Logan Feliciano
+101★ R Toxicrene @Logan Feliciano
102 U Tyranid Invasion @Games Workshop
+102★ U Tyranid Invasion @Games Workshop
103 R Tyrant Guard @Xavier Ribeiro
+103★ R Tyrant Guard @Xavier Ribeiro
104 R Assault Intercessor @Steve Argyle
+104★ R Assault Intercessor @Steve Argyle
105 R Atalan Jackal @David Astruga
+105★ R Atalan Jackal @David Astruga
106 R Belisarius Cawl @Lie Setiawan
+106★ R Belisarius Cawl @Lie Setiawan
107 R Birth of the Imperium @Zezhou Chen
+107★ R Birth of the Imperium @Zezhou Chen
108 R Blood for the Blood God! @Artur Nakhodkin
+108★ R Blood for the Blood God! @Artur Nakhodkin
109 R Callidus Assassin @Bryan Sola
+109★ R Callidus Assassin @Bryan Sola
110 R Chaos Defiler @Games Workshop
+110★ R Chaos Defiler @Games Workshop
111 R Chaos Mutation @Lie Setiawan
+111★ R Chaos Mutation @Lie Setiawan
112 R Commissar Severina Raine @Jake Murray
+112★ R Commissar Severina Raine @Jake Murray
113 R Company Commander @Ørjan Ruttenborg Svendsen
+113★ R Company Commander @Ørjan Ruttenborg Svendsen
114 R Cybernetica Datasmith @Marina Ortega Lorente
+114★ R Cybernetica Datasmith @Marina Ortega Lorente
115 R Deathleaper, Terror Weapon @Mirko Failoni
+115★ R Deathleaper, Terror Weapon @Mirko Failoni
116 U Deny the Witch @Games Workshop
+116★ U Deny the Witch @Games Workshop
117 R Drach'Nyen @Artur Nakhodkin
+117★ R Drach'Nyen @Artur Nakhodkin
118 R Epistolary Librarian @Games Workshop
+118★ R Epistolary Librarian @Games Workshop
119 R Exalted Flamer of Tzeentch @Alexey Kruglov
+119★ R Exalted Flamer of Tzeentch @Alexey Kruglov
120 R Exterminatus @Games Workshop
+120★ R Exterminatus @Games Workshop
121 R The First Tyrannic War @Antonio José Manzanedo
+121★ R The First Tyrannic War @Antonio José Manzanedo
122 R The Flesh Is Weak @Games Workshop
+122★ R The Flesh Is Weak @Games Workshop
123 R Gargoyle Flock @Nikola Matkovic
+123★ R Gargoyle Flock @Nikola Matkovic
124 R Ghyrson Starn, Kelermorph @Aaron J. Riley
+124★ R Ghyrson Starn, Kelermorph @Aaron J. Riley
125 R Helbrute @Anton Solovianchyk
+125★ R Helbrute @Anton Solovianchyk
126 R The Horus Heresy @Roman Tishenin
+126★ R The Horus Heresy @Roman Tishenin
127 R Inquisitor Eisenhorn @Jake Murray
+127★ R Inquisitor Eisenhorn @Jake Murray
128 R Kill! Maim! Burn! @Anthony Devine
+128★ R Kill! Maim! Burn! @Anthony Devine
129 U The Lost and the Damned @Henry Peters
+129★ U The Lost and the Damned @Henry Peters
130 R Lucius the Eternal @Evan Shipard
+130★ R Lucius the Eternal @Evan Shipard
131 R Magnus the Red @Wonchun Choi
+131★ R Magnus the Red @Wonchun Choi
132 R Malanthrope @Ørjan Ruttenborg Svendsen
+132★ R Malanthrope @Ørjan Ruttenborg Svendsen
133 R Mawloc @Mathias Kollros
+133★ R Mawloc @Mathias Kollros
134 R Mutalith Vortex Beast @Kekai Kotaki
+134★ R Mutalith Vortex Beast @Kekai Kotaki
135 R Neyam Shai Murad @Fajareka Setiawan
+135★ R Neyam Shai Murad @Fajareka Setiawan
136 R Pink Horror @Games Workshop
+136★ R Pink Horror @Games Workshop
137 U Primaris Chaplain @Diego Gisbert
+137★ U Primaris Chaplain @Diego Gisbert
138 R Ravener @Xavier Ribeiro
+138★ R Ravener @Xavier Ribeiro
139 R The Ruinous Powers @Lie Setiawan
+139★ R The Ruinous Powers @Lie Setiawan
140 R Shadow in the Warp @Kim Sokol
+140★ R Shadow in the Warp @Kim Sokol
141 R Sister Hospitaller @Games Workshop
+141★ R Sister Hospitaller @Games Workshop
142 R Sister Repentia @Seseon Yoon
+142★ R Sister Repentia @Seseon Yoon
143 U Trygon Prime @Mathias Kollros
+143★ U Trygon Prime @Mathias Kollros
144 R Tyranid Harridan @Billy Christian
+144★ R Tyranid Harridan @Billy Christian
145 R Tyranid Prime @Mathias Kollros
+145★ R Tyranid Prime @Mathias Kollros
146 R Tzaangor Shaman @Wisnu Tan
+146★ R Tzaangor Shaman @Wisnu Tan
147 U Venomthrope @Antonio José Manzanedo
+147★ U Venomthrope @Antonio José Manzanedo
148 R Winged Hive Tyrant @Antonio José Manzanedo
+148★ R Winged Hive Tyrant @Antonio José Manzanedo
149 R Zoanthrope @Billy Christian
+149★ R Zoanthrope @Billy Christian
150 R Canoptek Scarab Swarm @Alexey Kruglov
+150★ R Canoptek Scarab Swarm @Alexey Kruglov
151 R Canoptek Spyder @Wisnu Tan
+151★ R Canoptek Spyder @Wisnu Tan
152 R Canoptek Tomb Sentinel @Ivan Dedov
+152★ R Canoptek Tomb Sentinel @Ivan Dedov
153 R Canoptek Wraith @Hector Ortiz
+153★ R Canoptek Wraith @Hector Ortiz
154 R Convergence of Dominion @David Álvarez
+154★ R Convergence of Dominion @David Álvarez
155 R Cryptothrall @Henry Peters
+155★ R Cryptothrall @Henry Peters
156 R Ghost Ark @Alexey Kruglov
+156★ R Ghost Ark @Alexey Kruglov
157 R The Golden Throne @Games Workshop
+157★ R The Golden Throne @Games Workshop
158 U Goliath Truck @Diego Gisbert
+158★ U Goliath Truck @Diego Gisbert
159 R Inquisitorial Rosette @Álvaro Calvo Escudero
+159★ R Inquisitorial Rosette @Álvaro Calvo Escudero
160 R Knight Paladin @Games Workshop
+160★ R Knight Paladin @Games Workshop
161 R Necron Monolith @Anthony Devine
+161★ R Necron Monolith @Anthony Devine
162 U Night Scythe @Calder Moore
+162★ U Night Scythe @Calder Moore
163 R Reaver Titan @Philip Helliwell
+163★ R Reaver Titan @Philip Helliwell
164 R Redemptor Dreadnought @Philip Helliwell
+164★ R Redemptor Dreadnought @Philip Helliwell
165 R Resurrection Orb @Hector Ortiz
-166 R Sceptre of Eternal Glory @Michał Makowski
+165★ R Resurrection Orb @Hector Ortiz
+166 R Sceptre of Eternal Glory @Michał Miłkowski
+166★ R Sceptre of Eternal Glory @Michał Miłkowski
167 R Thunderhawk Gunship @Games Workshop
+167★ R Thunderhawk Gunship @Games Workshop
168 R Tomb Fortress @Josu Solano
+168★ R Tomb Fortress @Josu Solano
169 M Imotekh the Stormlord @JB Casacop
170 M Szarekh, the Silent King @Anton Solovianchyk
171 M Abaddon the Despoiler @Johan Grenier
@@ -188,141 +348,277 @@ ScryfallCode=40K
180 M The Swarmlord @Antonio José Manzanedo
181 R Fabricate @Johan Grenier
182 R Bastion Protector @Steve Argyle
+182★ R Bastion Protector @Steve Argyle
183 R Collective Effort @Games Workshop
+183★ R Collective Effort @Games Workshop
184 R Deploy to the Front @Aaron J. Riley
+184★ R Deploy to the Front @Aaron J. Riley
185 R Entrapment Maneuver @Nikola Matkovic
+185★ R Entrapment Maneuver @Nikola Matkovic
186 R Fell the Mighty @Steve Argyle
+186★ R Fell the Mighty @Steve Argyle
187 R Hour of Reckoning @Games Workshop
+187★ R Hour of Reckoning @Games Workshop
188 R Launch the Fleet @Games Workshop
+188★ R Launch the Fleet @Games Workshop
189 R Martial Coup @Diego Gisbert
+189★ R Martial Coup @Diego Gisbert
190 U Swords to Plowshares @Diego Gisbert
+190★ U Swords to Plowshares @Diego Gisbert
191 U Aetherize @Xavier Ribeiro
+191★ U Aetherize @Xavier Ribeiro
192 C Brainstorm @Alex Konstad
+192★ C Brainstorm @Alex Konstad
193 U Reconnaissance Mission @Billy Christian
+193★ U Reconnaissance Mission @Billy Christian
194 R Beacon of Unrest @Rafater
+194★ R Beacon of Unrest @Rafater
195 U Bile Blight @Games Workshop
+195★ U Bile Blight @Games Workshop
196 C Dark Ritual @Wonchun Choi
+196★ C Dark Ritual @Wonchun Choi
197 C Darkness @Daarken
+197★ C Darkness @Daarken
198 R Decree of Pain @Evan Shipard
+198★ R Decree of Pain @Evan Shipard
199 U Defile @Stanton Feng
+199★ U Defile @Stanton Feng
200 U Dread Return @L J Koh
+200★ U Dread Return @L J Koh
201 C Go for the Throat @Nikola Matkovic
+201★ C Go for the Throat @Nikola Matkovic
202 R Living Death @L J Koh
+202★ R Living Death @L J Koh
203 R Mutilate @Games Workshop
+203★ R Mutilate @Games Workshop
204 R Blasphemous Act @Games Workshop
+204★ R Blasphemous Act @Games Workshop
205 R Chaos Warp @Heonhwa Choe
+205★ R Chaos Warp @Heonhwa Choe
206 M Past in Flames @Johannes Mücke
+206★ M Past in Flames @Johannes Mücke
207 R Reverberate @David Astruga
+207★ R Reverberate @David Astruga
208 R Starstorm @Zhillustrator
+208★ R Starstorm @Zhillustrator
209 R Warstorm Surge @Josu Solano
+209★ R Warstorm Surge @Josu Solano
210 R Abundance @Irina Nordsol
+210★ R Abundance @Irina Nordsol
211 C Cultivate @Slawomir Maniak
+211★ C Cultivate @Slawomir Maniak
212 R Death's Presence @Josu Hernaiz
+212★ R Death's Presence @Josu Hernaiz
213 C Explore @Games Workshop
+213★ C Explore @Games Workshop
214 C Farseek @Irina Nordsol
+214★ C Farseek @Irina Nordsol
215 R Hardened Scales @Mathias Kollros
+215★ R Hardened Scales @Mathias Kollros
216 C Harrow @Filipe Pagliuso
+216★ C Harrow @Filipe Pagliuso
217 U Inspiring Call @Irina Nordsol
+217★ U Inspiring Call @Irina Nordsol
218 C New Horizons @Zhillustrator
+218★ C New Horizons @Zhillustrator
219 C Overgrowth @Marina Ortega Lorente
+219★ C Overgrowth @Marina Ortega Lorente
220 C Rampant Growth @Cory Trego-Erdner
+220★ C Rampant Growth @Cory Trego-Erdner
221 U Bituminous Blast @JB Casacop
+221★ U Bituminous Blast @JB Casacop
222 U Bred for the Hunt @David Astruga
+222★ U Bred for the Hunt @David Astruga
223 C Deny Reality @Artur Nakhodkin
+223★ C Deny Reality @Artur Nakhodkin
224 U Hull Breach @Sergio Cosmai
+224★ U Hull Breach @Sergio Cosmai
225 U Mortify @Billy Christian
+225★ U Mortify @Billy Christian
226 R Utter End @David Astruga
+226★ R Utter End @David Astruga
227 C Arcane Signet @David Astruga
+227★ C Arcane Signet @David Astruga
228 C Arcane Signet @Andrey Nyarl
+228★ C Arcane Signet @Andrey Nyarl
229 C Arcane Signet @Kim Sokol
+229★ C Arcane Signet @Kim Sokol
230 U Assault Suit @Games Workshop
+230★ U Assault Suit @Games Workshop
231 R Caged Sun @Johan Grenier
+231★ R Caged Sun @Johan Grenier
232 R Chromatic Lantern @Anton Solovianchyk
+232★ R Chromatic Lantern @Anton Solovianchyk
233 C Commander's Sphere @Jake Murray
+233★ C Commander's Sphere @Jake Murray
234 C Commander's Sphere @David Sondered
+234★ C Commander's Sphere @David Sondered
235 C Commander's Sphere @Roman Tishenin
+235★ C Commander's Sphere @Roman Tishenin
236 U Cranial Plating @L J Koh
+236★ U Cranial Plating @L J Koh
237 R Endless Atlas @Pierre Loyvet
+237★ R Endless Atlas @Pierre Loyvet
238 R Everflowing Chalice @Álvaro Calvo Escudero
+238★ R Everflowing Chalice @Álvaro Calvo Escudero
239 R Gilded Lotus @Roman Tishenin
+239★ R Gilded Lotus @Roman Tishenin
240 U Hedron Archive @Hector Ortiz
+240★ U Hedron Archive @Hector Ortiz
241 U Herald's Horn @Artur Nakhodkin
+241★ U Herald's Horn @Artur Nakhodkin
242 R Icon of Ancestry @Ivan Dedov
+242★ R Icon of Ancestry @Ivan Dedov
243 U Mask of Memory @Roman Tishenin
+243★ U Mask of Memory @Roman Tishenin
244 U Mind Stone @Steve Argyle
+244★ U Mind Stone @Steve Argyle
245 U Mind Stone @David Sondered
+245★ U Mind Stone @David Sondered
246 R Mystic Forge @Rafater
+246★ R Mystic Forge @Rafater
247 R Sculpting Steel @Pierre Loyvet
+247★ R Sculpting Steel @Pierre Loyvet
248 U Skullclamp @Helge C. Balzer
+248★ U Skullclamp @Helge C. Balzer
249 U Sol Ring @Teodora Dumitriu
+249★ U Sol Ring @Teodora Dumitriu
250 U Sol Ring @Kekai Kotaki
+250★ U Sol Ring @Kekai Kotaki
251 U Sol Ring @Oleg Shekhovtsov
+251★ U Sol Ring @Oleg Shekhovtsov
252 U Sol Ring @Lucas Terryn
+252★ U Sol Ring @Lucas Terryn
253 U Talisman of Creativity @Hector Ortiz
+253★ U Talisman of Creativity @Hector Ortiz
254 U Talisman of Dominance @Philip Helliwell
+254★ U Talisman of Dominance @Philip Helliwell
255 U Talisman of Dominance @Miguel Sacristan
+255★ U Talisman of Dominance @Miguel Sacristan
256 U Talisman of Hierarchy @Philip Helliwell
+256★ U Talisman of Hierarchy @Philip Helliwell
257 U Talisman of Indulgence @Nikola Matkovic
+257★ U Talisman of Indulgence @Nikola Matkovic
258 U Talisman of Progress @Philip Helliwell
+258★ U Talisman of Progress @Philip Helliwell
259 C Thought Vessel @L J Koh
+259★ C Thought Vessel @L J Koh
260 C Unstable Obelisk @Johannes Mücke
+260★ C Unstable Obelisk @Johannes Mücke
261 C Wayfarer's Bauble @Helge C. Balzer
+261★ C Wayfarer's Bauble @Helge C. Balzer
262 C Wayfarer's Bauble @Ivan Dedov
+262★ C Wayfarer's Bauble @Ivan Dedov
263 U Worn Powerstone @David Sondered
+263★ U Worn Powerstone @David Sondered
264 U Arcane Sanctum @Games Workshop
+264★ U Arcane Sanctum @Games Workshop
265 U Ash Barrens @Sergei Leoluch Panin
+265★ U Ash Barrens @Sergei Leoluch Panin
266 U Barren Moor @Rafater
+266★ U Barren Moor @Rafater
267 C Cave of Temptation @Teodora Dumitriu
+267★ C Cave of Temptation @Teodora Dumitriu
268 R Choked Estuary @LiXin Yin
+268★ R Choked Estuary @LiXin Yin
269 R Cinder Glade @Sergio Cosmai
+269★ R Cinder Glade @Sergio Cosmai
270 C Command Tower @Logan Feliciano
+270★ C Command Tower @Logan Feliciano
271 C Command Tower @Games Workshop
+271★ C Command Tower @Games Workshop
272 C Command Tower @Games Workshop
+272★ C Command Tower @Games Workshop
273 U Crumbling Necropolis @David Álvarez
+273★ U Crumbling Necropolis @David Álvarez
274 R Darkwater Catacombs @Eliz Roxs
+274★ R Darkwater Catacombs @Eliz Roxs
275 C Desert of the Glorified @Stanton Feng
+275★ C Desert of the Glorified @Stanton Feng
276 C Dismal Backwater @Henry Peters
+276★ C Dismal Backwater @Henry Peters
277 C Evolving Wilds @Rafater
+277★ C Evolving Wilds @Rafater
278 R Exotic Orchard @Filipe Pagliuso
+278★ R Exotic Orchard @Filipe Pagliuso
279 R Foreboding Ruins @Josu Solano
+279★ R Foreboding Ruins @Josu Solano
280 C Forgotten Cave @Andrey Nyarl
+280★ C Forgotten Cave @Andrey Nyarl
281 U Frontier Bivouac @Álvaro Calvo Escudero
+281★ U Frontier Bivouac @Álvaro Calvo Escudero
282 R Game Trail @LiXin Yin
+282★ R Game Trail @LiXin Yin
283 U Memorial to Glory @Games Workshop
+283★ U Memorial to Glory @Games Workshop
284 U Molten Slagheap @Anthony Devine
+284★ U Molten Slagheap @Anthony Devine
285 U Myriad Landscape @Adrián Rodríguez Pérez
+285★ U Myriad Landscape @Adrián Rodríguez Pérez
286 C Opal Palace @Logan Feliciano
+286★ C Opal Palace @Logan Feliciano
287 C Path of Ancestry @Anthony Devine
+287★ C Path of Ancestry @Anthony Devine
288 C Polluted Mire @Pierre Loyvet
+288★ C Polluted Mire @Pierre Loyvet
289 R Port Town @Eliz Roxs
+289★ R Port Town @Eliz Roxs
290 R Prairie Stream @Henry Peters
+290★ R Prairie Stream @Henry Peters
291 U Reliquary Tower @Lucas Terryn
+291★ U Reliquary Tower @Lucas Terryn
292 C Rugged Highlands @Oleg Shekhovtsov
+292★ C Rugged Highlands @Oleg Shekhovtsov
293 C Scoured Barrens @Teodora Dumitriu
+293★ C Scoured Barrens @Teodora Dumitriu
294 R Skycloud Expanse @Kamila Szutenberg
+294★ R Skycloud Expanse @Kamila Szutenberg
295 R Sunken Hollow @Calder Moore
+295★ R Sunken Hollow @Calder Moore
296 C Swiftwater Cliffs @David Álvarez
+296★ C Swiftwater Cliffs @David Álvarez
297 R Temple of Abandon @Logan Feliciano
+297★ R Temple of Abandon @Logan Feliciano
298 R Temple of Epiphany @Álvaro Calvo Escudero
+298★ R Temple of Epiphany @Álvaro Calvo Escudero
299 R Temple of Mystery @Eliz Roxs
+299★ R Temple of Mystery @Eliz Roxs
300 U Temple of the False God @Josu Hernaiz
+300★ U Temple of the False God @Josu Hernaiz
301 C Terramorphic Expanse @Kekai Kotaki
+301★ C Terramorphic Expanse @Kekai Kotaki
302 C Thornwood Falls @Josu Hernaiz
+302★ C Thornwood Falls @Josu Hernaiz
303 C Tranquil Cove @Eliz Roxs
+303★ C Tranquil Cove @Eliz Roxs
304 U Unclaimed Territory @Henry Peters
+304★ U Unclaimed Territory @Henry Peters
305 C Vault of Whispers @Games Workshop
+305★ C Vault of Whispers @Games Workshop
306 L Plains @Zhillustrator
+306★ L Plains @Zhillustrator
307 L Island @Marina Ortega Lorente
+307★ L Island @Marina Ortega Lorente
308 L Island @Calder Moore
+308★ L Island @Calder Moore
309 L Island @LiXin Yin
+309★ L Island @LiXin Yin
310 L Swamp @JB Casacop
+310★ L Swamp @JB Casacop
311 L Swamp @Johan Grenier
+311★ L Swamp @Johan Grenier
312 L Swamp @Calder Moore
+312★ L Swamp @Calder Moore
313 L Swamp @Andrey Nyarl
+313★ L Swamp @Andrey Nyarl
314 L Swamp @Kamila Szutenberg
+314★ L Swamp @Kamila Szutenberg
315 L Mountain @Diego Gisbert
+315★ L Mountain @Diego Gisbert
316 L Mountain @Evan Shipard
+316★ L Mountain @Evan Shipard
317 L Forest @Kamila Szutenberg
+317★ L Forest @Kamila Szutenberg
318 M Szarekh, the Silent King @Anton Solovianchyk
319 M Abaddon the Despoiler @Johan Grenier
320 M Inquisitor Greyfax @Lie Setiawan
diff --git a/forge-gui/res/tokenscripts/g_x_x_phyrexian_horror.txt b/forge-gui/res/tokenscripts/g_x_x_phyrexian_horror.txt
new file mode 100644
index 00000000000..6ff223f2f15
--- /dev/null
+++ b/forge-gui/res/tokenscripts/g_x_x_phyrexian_horror.txt
@@ -0,0 +1,6 @@
+Name:Phyrexian Horror Token
+ManaCost:no cost
+Types:Creature Phyrexian Horror
+Colors:green
+PT:*/*
+Oracle:
diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java
index ec8da2c1a9b..31e0ee2eb6d 100644
--- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java
+++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java
@@ -390,7 +390,7 @@ public final class InputSelectTargets extends InputSyncronizedBase {
}
private boolean hasAllTargets() {
- return sa.isMaxTargetChosen() || (divisionValues != null && sa.getStillToDivide() == 0)
+ return sa.isMaxTargetChosen() || (divisionValues != null && sa.getStillToDivide() <= 0)
|| (divisionValues == null && sa.isDividedAsYouChoose() && sa.getTargets().size() == sa.getStillToDivide());
}
diff --git a/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java b/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java
index f5010b2f039..69d53309c7e 100644
--- a/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java
+++ b/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java
@@ -94,6 +94,7 @@ public class HumanPlaySpellAbility {
if (!ability.isCopied()) {
ability.resetPaidHash();
+ ability.setPaidLife(0);
}
ability = GameActionUtil.addExtraKeywordCost(ability);
diff --git a/forge-gui/src/main/java/forge/player/TargetSelection.java b/forge-gui/src/main/java/forge/player/TargetSelection.java
index e0f14b22041..c83970eb367 100644
--- a/forge-gui/src/main/java/forge/player/TargetSelection.java
+++ b/forge-gui/src/main/java/forge/player/TargetSelection.java
@@ -170,8 +170,8 @@ public class TargetSelection {
//if no valid cards to target and only one valid non-card, auto-target the non-card
//this handles "target opponent" cards, along with any other cards that can only target a single non-card game entity
//note that we don't handle auto-targeting cards this way since it's possible that the result will be undesirable
- List nonCardTargets = tgt.getAllCandidates(this.ability, true, true);
if (minTargets != 0) {
+ List nonCardTargets = tgt.getAllCandidates(this.ability, true, true);
if (nonCardTargets.size() == 1) {
return ability.getTargets().add(nonCardTargets.get(0));
}
diff --git a/pom.xml b/pom.xml
index bef1b353f41..f13edc15d68 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,9 +70,9 @@
- cardforge-repo
- Forge Releases
- ftp://ftp.cardforge.org/maven/releases/
+ github
+ Github Releases
+ https://maven.pkg.github.com/Card-Forge/forge
cardforge-snapshot-repo