From 1970ed6cb41d93688f22c00ab71fb354d311ae99 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 6 Nov 2022 18:56:45 -0500 Subject: [PATCH 01/32] bladecoil_serpent.txt --- .../cardsfolder/upcoming/bladecoil_serpent.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/bladecoil_serpent.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bladecoil_serpent.txt b/forge-gui/res/cardsfolder/upcoming/bladecoil_serpent.txt new file mode 100644 index 00000000000..983569eba03 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bladecoil_serpent.txt @@ -0,0 +1,16 @@ +Name:Bladecoil Serpent +ManaCost:X 6 +Types:Artifact Creature Serpent +PT:5/4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ UU | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, for each {U}{U} spent to cast it, draw a card. +SVar:TrigDraw:DB$ Draw | NumCards$ UU +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ BB | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, for each {B}{B} spent to cast it, each opponent discards a card. +SVar:TrigDiscard:DB$ Discard | Defined$ Opponent | NumCards$ BB | Mode$ TgtChoose +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ RR | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, for each {R}{R} spent to cast it, it gets +1/+0 and gains trample and haste until end of turn. +SVar:TrigPump:DB$ Pump | KW$ Trample & Haste | NumAtt$ RR +SVar:UU:Count$Each2SpentToCast_U +SVar:BB:Count$Each2SpentToCast_B +SVar:RR:Count$Each2SpentToCast_R +SVar:X:Count$xPaid +DeckHints:Color$Blue|Black|Red +Oracle:When Bladecoil Serpent enters the battlefield, for each {U}{U} spent to cast it, draw a card.\nWhen Bladecoil Serpent enters the battlefield, for each {B}{B} spent to cast it, each opponent discards a card.\nWhen Bladecoil Serpent enters the battlefield, for each {R}{R} spent to cast it, it gets +1/+0 and gains trample and haste until end of turn. From 37b0e13941e8037727d830a850147ba4b0a41519 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 6 Nov 2022 18:57:10 -0500 Subject: [PATCH 02/32] clay_champion.txt --- .../res/cardsfolder/upcoming/clay_champion.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/clay_champion.txt diff --git a/forge-gui/res/cardsfolder/upcoming/clay_champion.txt b/forge-gui/res/cardsfolder/upcoming/clay_champion.txt new file mode 100644 index 00000000000..d64d9ab98ac --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/clay_champion.txt @@ -0,0 +1,13 @@ +Name:Clay Champion +ManaCost:X 4 +Types:Artifact Creature Construct +PT:2/2 +K:etbCounter:P1P1:GG:no condition:CARDNAME enters the battlefield with three +1/+1 counters on it for each {G}{G} spent to cast it. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters the battlefield, choose up to two other target creatures you control. For each {W}{W} spent to cast CARDNAME, put a +1/+1 counter on each of them. +SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Choose up to two other target creatures you control | TargetMin$ 0 | TargetMax$ 2 | CounterType$ P1P1 | CounterNum$ WW +SVar:GG:Count$Each2SpentToCast_G/Times.3 +SVar:WW:Count$Each2SpentToCast_W +SVar:X:Count$xPaid +DeckHas:Ability$Counters +DeckHints:Color$Green|White +Oracle:Clay Champion enters the battlefield with three +1/+1 counters on it for each {G}{G} spent to cast it.\nWhen Clay Champion enters the battlefield, choose up to two other target creatures you control. For each {W}{W} spent to cast Clay Champion, put a +1/+1 counter on each of them. From d5bea4140d63fbf61750376fedffa52bf5c76e10 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 6 Nov 2022 18:57:52 -0500 Subject: [PATCH 03/32] AbilityUtils.xCount support "Each2SpentToCast" --- .../java/forge/game/ability/AbilityUtils.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 05ab6ce2870..55177825cb4 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2087,6 +2087,24 @@ public class AbilityUtils { return doXMath(castSA == null ? 0 : castSA.getPayingColors().countColors(), expr, c, ctb); } + if (sq[0].startsWith("Each2SpentToCast")) { + SpellAbility castSA = c.getCastSA(); + final List paidMana = castSA.getPayingMana(); + final String type = sq[0].split("_")[1]; + int count = 0; + int t = 0; + for (Mana m : paidMana) { + if (m.toString().equals(type)) { + t++; + if (t == 2) { + count++; + t = 0; + } + } + } + return doXMath(count, expr, c, ctb); + } + // Count$wasCastFrom.. if (sq[0].startsWith("wasCastFrom")) { boolean your = sq[0].contains("Your"); From cf9a8013f068ebd91971d08c9b82ad8e10cd7795 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 7 Nov 2022 16:49:33 -0500 Subject: [PATCH 04/32] v2 --- .../java/forge/game/ability/AbilityUtils.java | 15 +++++++-------- .../cardsfolder/upcoming/bladecoil_serpent.txt | 6 +++--- .../res/cardsfolder/upcoming/clay_champion.txt | 7 ++++--- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 55177825cb4..6f9a78e61af 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2087,19 +2087,18 @@ public class AbilityUtils { return doXMath(castSA == null ? 0 : castSA.getPayingColors().countColors(), expr, c, ctb); } - if (sq[0].startsWith("Each2SpentToCast")) { + if (sq[0].startsWith("EachSpentToCast")) { SpellAbility castSA = c.getCastSA(); + if (castSA == null) { + return 0; + } final List paidMana = castSA.getPayingMana(); - final String type = sq[0].split("_")[1]; + final String type = sq[1]; int count = 0; - int t = 0; for (Mana m : paidMana) { if (m.toString().equals(type)) { - t++; - if (t == 2) { - count++; - t = 0; - } + count++; + } } return doXMath(count, expr, c, ctb); diff --git a/forge-gui/res/cardsfolder/upcoming/bladecoil_serpent.txt b/forge-gui/res/cardsfolder/upcoming/bladecoil_serpent.txt index 983569eba03..f7b6dbac179 100644 --- a/forge-gui/res/cardsfolder/upcoming/bladecoil_serpent.txt +++ b/forge-gui/res/cardsfolder/upcoming/bladecoil_serpent.txt @@ -8,9 +8,9 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigDiscard:DB$ Discard | Defined$ Opponent | NumCards$ BB | Mode$ TgtChoose T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | CheckSVar$ RR | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, for each {R}{R} spent to cast it, it gets +1/+0 and gains trample and haste until end of turn. SVar:TrigPump:DB$ Pump | KW$ Trample & Haste | NumAtt$ RR -SVar:UU:Count$Each2SpentToCast_U -SVar:BB:Count$Each2SpentToCast_B -SVar:RR:Count$Each2SpentToCast_R +SVar:UU:Count$EachSpentToCast.U/HalfDown +SVar:BB:Count$EachSpentToCast.B/HalfDown +SVar:RR:Count$EachSpentToCast.R/HalfDown SVar:X:Count$xPaid DeckHints:Color$Blue|Black|Red Oracle:When Bladecoil Serpent enters the battlefield, for each {U}{U} spent to cast it, draw a card.\nWhen Bladecoil Serpent enters the battlefield, for each {B}{B} spent to cast it, each opponent discards a card.\nWhen Bladecoil Serpent enters the battlefield, for each {R}{R} spent to cast it, it gets +1/+0 and gains trample and haste until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/clay_champion.txt b/forge-gui/res/cardsfolder/upcoming/clay_champion.txt index d64d9ab98ac..3fbb6183b0e 100644 --- a/forge-gui/res/cardsfolder/upcoming/clay_champion.txt +++ b/forge-gui/res/cardsfolder/upcoming/clay_champion.txt @@ -2,11 +2,12 @@ Name:Clay Champion ManaCost:X 4 Types:Artifact Creature Construct PT:2/2 -K:etbCounter:P1P1:GG:no condition:CARDNAME enters the battlefield with three +1/+1 counters on it for each {G}{G} spent to cast it. +K:etbCounter:P1P1:GGx3:no condition:CARDNAME enters the battlefield with three +1/+1 counters on it for each {G}{G} spent to cast it. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters the battlefield, choose up to two other target creatures you control. For each {W}{W} spent to cast CARDNAME, put a +1/+1 counter on each of them. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Choose up to two other target creatures you control | TargetMin$ 0 | TargetMax$ 2 | CounterType$ P1P1 | CounterNum$ WW -SVar:GG:Count$Each2SpentToCast_G/Times.3 -SVar:WW:Count$Each2SpentToCast_W +SVar:GG:Count$EachSpentToCast.G/HalfDown +SVar:GGx3:SVar$GG/Times.3 +SVar:WW:Count$EachSpentToCast.W/HalfDown SVar:X:Count$xPaid DeckHas:Ability$Counters DeckHints:Color$Green|White From fe4d2c327287b67c5d8d031172433946058744d5 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 11:04:32 -0500 Subject: [PATCH 05/32] blitz_automaton.txt --- forge-gui/res/cardsfolder/upcoming/blitz_automaton.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/blitz_automaton.txt diff --git a/forge-gui/res/cardsfolder/upcoming/blitz_automaton.txt b/forge-gui/res/cardsfolder/upcoming/blitz_automaton.txt new file mode 100644 index 00000000000..2649397afc0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/blitz_automaton.txt @@ -0,0 +1,7 @@ +Name:Blitz Automaton +ManaCost:7 +Types:Artifact Creature Construct +PT:6/4 +K:Prototype:2 R:3:2 +K:Haste +Oracle:Prototype {2}{R} - 3/2 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nHaste From cf0222f80d99fe95e26d6ea5f86381045063f203 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Tue, 8 Nov 2022 18:03:07 +0100 Subject: [PATCH 06/32] Improve isCardAddedThisTurn --- .../src/main/java/forge/game/zone/Zone.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/zone/Zone.java b/forge-game/src/main/java/forge/game/zone/Zone.java index c6fa0cad66c..2a04c25c0d1 100644 --- a/forge-game/src/main/java/forge/game/zone/Zone.java +++ b/forge-game/src/main/java/forge/game/zone/Zone.java @@ -214,7 +214,26 @@ public class Zone implements java.io.Serializable, Iterable { if (!cardsAddedThisTurn.containsKey(origin)) { return false; } - return cardsAddedThisTurn.get(origin).contains(card); + if (cardsAddedThisTurn.get(origin).contains(card)) { + long ts = getCardsAddedThisTurn(origin).get(getCardsAddedThisTurn(origin).lastIndexOf(card)).getTimestamp(); + // need to check other zones if card didn't change again + for (ZoneType z : cardsAddedThisTurn.keySet()) { + if (z == origin) { + continue; + } + + if (cardsAddedThisTurn.get(z).contains(card)) { + long tsAlt = getCardsAddedThisTurn(z).get(getCardsAddedThisTurn(z).lastIndexOf(card)).getTimestamp(); + // the most recent version of this card did not come from the requested zone + if (tsAlt > ts) { + return false; + } + } + } + + return true; + } + return false; } private static List getCardsAdded(final MapOfLists cardsAdded, final ZoneType origin) { From 6989ad17ae67a13dcb03ac4e20a87f907d367127 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 11:38:48 -0500 Subject: [PATCH 07/32] prototype is not an AlternativeCost --- forge-game/src/main/java/forge/game/card/CardFactoryUtil.java | 2 -- .../src/main/java/forge/game/spellability/AlternativeCost.java | 1 - 2 files changed, 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 724e469c1df..965cda1e12b 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3212,8 +3212,6 @@ public class CardFactoryUtil { sb.append("(").append(inst.getReminderText()).append(")"); newSA.setDescription(sb.toString()); - newSA.setAlternativeCost(AlternativeCost.Prototype); - newSA.setIntrinsic(intrinsic); inst.addSpellAbility(newSA); } else if (keyword.startsWith("Prowl")) { diff --git a/forge-game/src/main/java/forge/game/spellability/AlternativeCost.java b/forge-game/src/main/java/forge/game/spellability/AlternativeCost.java index 4e2d2d5f36d..b33858ff990 100644 --- a/forge-game/src/main/java/forge/game/spellability/AlternativeCost.java +++ b/forge-game/src/main/java/forge/game/spellability/AlternativeCost.java @@ -17,7 +17,6 @@ public enum AlternativeCost { Mutate, Offering, Outlast, // ActivatedAbility - Prototype, Prowl, Spectacle, Surge; From 4e79675c0c3428b8b2a4179d081eac3986429694 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 13:27:20 -0500 Subject: [PATCH 08/32] prototype description fix --- forge-game/src/main/java/forge/game/card/Card.java | 7 ++++++- .../src/main/java/forge/game/card/CardFactoryUtil.java | 9 ++------- 2 files changed, 8 insertions(+), 8 deletions(-) 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 c2df8c3f5c5..e6191cf65b3 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2210,6 +2210,11 @@ public class Card extends GameEntity implements Comparable, IHasSVars { sbLong.append(k[0]).append(" ").append(k[1]).append(" (As this enters the battlefield, you may "); sbLong.append("sacrifice any number of ").append(t).append("s. This creature enters the "); sbLong.append("battlefield with that many +1/+1 counters on it.)"); + } else if (keyword.startsWith("Prototype")) { + final String[] k = keyword.split(":"); + final Cost cost = new Cost(k[1], false); + sbLong.append(k[0]).append(" ").append(cost.toSimpleString()).append(" ").append("[").append(k[2]); + sbLong.append("/").append(k[3]).append("] ").append("(").append(inst.getReminderText()).append(")"); } else if (keyword.startsWith("Modular") || keyword.startsWith("Bloodthirst") || keyword.startsWith("Dredge") || keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift") || keyword.startsWith("Bushido") || keyword.startsWith("Crew") || keyword.startsWith("Tribute") || keyword.startsWith("Absorb") @@ -2286,7 +2291,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { || keyword.startsWith("Transfigure") || keyword.startsWith("Aura swap") || keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling") || keyword.startsWith("Encore") || keyword.startsWith("Mutate") || keyword.startsWith("Dungeon") - || keyword.startsWith("Class") || keyword.startsWith("Blitz") || keyword.startsWith("Prototype") + || keyword.startsWith("Class") || keyword.startsWith("Blitz") || keyword.startsWith("Specialize") || keyword.equals("Ravenous")) { // keyword parsing takes care of adding a proper description } else if(keyword.startsWith("Read ahead")) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 965cda1e12b..e31f9bb2735 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3202,15 +3202,10 @@ public class CardFactoryUtil { newSA.putParam("SetColorByManaCost", "True"); newSA.putParam("SetPower", k[2]); newSA.putParam("SetToughness", k[3]); - newSA.putParam("PrecostDesc", "Prototype"); newSA.putParam("Prototype", "True"); - newSA.putParam("CostDesc", ManaCostParser.parse(k[1])); - // makes new SpellDescription - final StringBuilder sb = new StringBuilder(); - sb.append(newSA.getCostDescription()).append("[").append(k[2]).append("/").append(k[3]).append("] "); - sb.append("(").append(inst.getReminderText()).append(")"); - newSA.setDescription(sb.toString()); + // only makes description for prompt + newSA.setDescription(k[0] + " " + ManaCostParser.parse(k[1]) + " [" + k[2] + "/" + k[3] + "]"); newSA.setIntrinsic(intrinsic); inst.addSpellAbility(newSA); From 07f919a56b3f7fa98aa04263656db0cdde9e6210 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 14:55:24 -0500 Subject: [PATCH 09/32] fix typos from PR 1809 --- forge-gui/res/cardsfolder/upcoming/junkyard_genius.txt | 2 +- ...{keeper_of_the_cadencet.txt => keeper_of_the_cadence.txt} | 3 ++- .../{kill-zone_acrobat.txt => kill_zone_acrobat.txt} | 5 +++-- forge-gui/res/cardsfolder/upcoming/koilos_roc.txt | 2 +- .../upcoming/{lat-nam_adept.txt => lat_nam_adept.txt} | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) rename forge-gui/res/cardsfolder/upcoming/{keeper_of_the_cadencet.txt => keeper_of_the_cadence.txt} (84%) rename forge-gui/res/cardsfolder/upcoming/{kill-zone_acrobat.txt => kill_zone_acrobat.txt} (80%) rename forge-gui/res/cardsfolder/upcoming/{lat-nam_adept.txt => lat_nam_adept.txt} (94%) diff --git a/forge-gui/res/cardsfolder/upcoming/junkyard_genius.txt b/forge-gui/res/cardsfolder/upcoming/junkyard_genius.txt index 36dd1baa027..dd895a5aacf 100644 --- a/forge-gui/res/cardsfolder/upcoming/junkyard_genius.txt +++ b/forge-gui/res/cardsfolder/upcoming/junkyard_genius.txt @@ -4,7 +4,7 @@ Types:Creature Human Artificer PT:2/2 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a tapped Powerstone token. (It's an artifact with "{T}: Add {C}. This mana can't be spent to cast a nonartifact spell.") SVar:TrigToken:DB$ Token | TokenTapped$ True | TokenScript$ c_a_powerstone -A:AB$ PumpAll | Cost$ 1 B R Sac<1/Creature.Other;Artifact/another creature or artifact> | ValidCards$ Creature.YouCtrl+Other | NumAtt$ 1 | KW$ Menace & Haste | SpellDescription$ Until end of turn, other creatures you control get +1/+0 and gain menace and haste. +A:AB$ PumpAll | Cost$ 1 B R Sac<1/Creature.Other;Artifact.Other/another creature or artifact> | ValidCards$ Creature.YouCtrl+Other | NumAtt$ 1 | KW$ Menace & Haste | SpellDescription$ Until end of turn, other creatures you control get +1/+0 and gain menace and haste. SVar:PlayMain1:TRUE SVar:AIPreference:SacCost$Artifact.Token,Creature.Other+cmcLE2,Artifact.cmcEQ1 DeckHas:Ability$Token|Sacrifice & Type$Artifact diff --git a/forge-gui/res/cardsfolder/upcoming/keeper_of_the_cadencet.txt b/forge-gui/res/cardsfolder/upcoming/keeper_of_the_cadence.txt similarity index 84% rename from forge-gui/res/cardsfolder/upcoming/keeper_of_the_cadencet.txt rename to forge-gui/res/cardsfolder/upcoming/keeper_of_the_cadence.txt index 4adadf25830..be56a1fc4b3 100644 --- a/forge-gui/res/cardsfolder/upcoming/keeper_of_the_cadencet.txt +++ b/forge-gui/res/cardsfolder/upcoming/keeper_of_the_cadence.txt @@ -2,5 +2,6 @@ Name:Keeper of the Cadence ManaCost:4 U Types:Creature Human Wizard PT:2/2 -A:AB$ ChangeZone | Cost$ 3 | ValidTgts$ Artifact,Instant,Sorcery | TgtPrompt$ Select target artifact, instant, ot sorcery card | TgtZone$ Graveyard | Origin$ Graveyard | Destination$ Library | LibraryPosition$ -1 | SpellDescription$ Put target artifact, instant, or sorcery card from a graveyard on the bottom of its owner's library. +A:AB$ ChangeZone | Cost$ 3 | ValidTgts$ Artifact,Instant,Sorcery | TgtPrompt$ Select target artifact, instant, or sorcery card | TgtZone$ Graveyard | Origin$ Graveyard | Destination$ Library | LibraryPosition$ -1 | SpellDescription$ Put target artifact, instant, or sorcery card from a graveyard on the bottom of its owner's library. +AI:RemoveDeck:Random Oracle:{3}: Put target artifact, instant, or sorcery card from a graveyard on the bottom of its owner's library. diff --git a/forge-gui/res/cardsfolder/upcoming/kill-zone_acrobat.txt b/forge-gui/res/cardsfolder/upcoming/kill_zone_acrobat.txt similarity index 80% rename from forge-gui/res/cardsfolder/upcoming/kill-zone_acrobat.txt rename to forge-gui/res/cardsfolder/upcoming/kill_zone_acrobat.txt index afb69b4347b..ab2fab045c5 100644 --- a/forge-gui/res/cardsfolder/upcoming/kill-zone_acrobat.txt +++ b/forge-gui/res/cardsfolder/upcoming/kill_zone_acrobat.txt @@ -5,7 +5,8 @@ PT:3/2 T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, you may sacrifice another creature or artifact. If you do, CARDNAME gains flying until end of turn. SVar:TrigPump:AB$ Pump | Cost$ Sac<1/Creature.Other;Artifact.Other/another creature or artifact> | Defined$ Self | KW$ Flying SVar:PlayMain1:TRUE -SVar:AIPreference:SacCost$Artifact.Token,Creature.Other+cmcLE2,Artifact.cmcEQ1 +SVar:AIPreference:SacCost$Artifact.Token,Creature.Other+cmcLE2+withoutFlying,Artifact.cmcEQ1 +SVar:HasAttackEffect:TRUE DeckHas:Ability$Sacrifice DeckHints:Type$Artifact -Oracle:Whenever Kill-Zone Acrobat attacks, you may sacrifice another creature or artifact. If you do, Kill-Zone Acrobat gains flying until end of turn. \ No newline at end of file +Oracle:Whenever Kill-Zone Acrobat attacks, you may sacrifice another creature or artifact. If you do, Kill-Zone Acrobat gains flying until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/koilos_roc.txt b/forge-gui/res/cardsfolder/upcoming/koilos_roc.txt index bc7e013715a..205173433a1 100644 --- a/forge-gui/res/cardsfolder/upcoming/koilos_roc.txt +++ b/forge-gui/res/cardsfolder/upcoming/koilos_roc.txt @@ -8,4 +8,4 @@ T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.S SVar:TrigToken:DB$ Token | TokenTapped$ True | TokenScript$ c_a_powerstone DeckHas:Ability$Token & Type$Artifact DeckHints:Type$Artifact -Oracle:Flash\nFlash\nWhen Koilos Roc enters the battlefield, create a tapped Powerstone token. (It's an artifact with "{T}: Add {C}. This mana can't be spent to cast a nonartifact spell.") +Oracle:Flash\nFlying\nWhen Koilos Roc enters the battlefield, create a tapped Powerstone token. (It's an artifact with "{T}: Add {C}. This mana can't be spent to cast a nonartifact spell.") diff --git a/forge-gui/res/cardsfolder/upcoming/lat-nam_adept.txt b/forge-gui/res/cardsfolder/upcoming/lat_nam_adept.txt similarity index 94% rename from forge-gui/res/cardsfolder/upcoming/lat-nam_adept.txt rename to forge-gui/res/cardsfolder/upcoming/lat_nam_adept.txt index efefa54e562..4da0ba4a1f0 100644 --- a/forge-gui/res/cardsfolder/upcoming/lat-nam_adept.txt +++ b/forge-gui/res/cardsfolder/upcoming/lat_nam_adept.txt @@ -5,4 +5,4 @@ PT:3/3 T:Mode$ Drawn | ValidCard$ Card.YouCtrl | Number$ 2 | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you draw your second card each turn, put a +1/+1 counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 DeckHas:Ability$Counters -Oracle:Whenever you draw your second card each turn, put a +1/+1 counter on Lat-Nam Adept. \ No newline at end of file +Oracle:Whenever you draw your second card each turn, put a +1/+1 counter on Lat-Nam Adept. From 77f1056368eab33b17c12a769f6d871ad964f670 Mon Sep 17 00:00:00 2001 From: paulsnoops Date: Tue, 8 Nov 2022 20:23:20 +0000 Subject: [PATCH 10/32] Booster Draft for BRO & 30A --- forge-gui/res/blockdata/blocks.txt | 2 + forge-gui/res/draft/rankings.txt | 1145 +++++++++++++---- .../res/editions/30th Anniversary Edition.txt | 304 +++++ forge-gui/res/editions/The Brothers War.txt | 26 + 4 files changed, 1234 insertions(+), 243 deletions(-) diff --git a/forge-gui/res/blockdata/blocks.txt b/forge-gui/res/blockdata/blocks.txt index 4ebe8318e05..d78703a2e27 100644 --- a/forge-gui/res/blockdata/blocks.txt +++ b/forge-gui/res/blockdata/blocks.txt @@ -105,3 +105,5 @@ Kamigawa: Neon Dynasty, 3/6/NEO, NEO Streets of New Capenna, 3/6/SNC, SNC Double Masters 2022, 3/6/2X2, 2X2 Dominaria United, 3/6/DMU, DMU +The Brothers' War, 3/6/BRO, BRO +30th Anniversary Edition, 3/6/30A, 30A diff --git a/forge-gui/res/draft/rankings.txt b/forge-gui/res/draft/rankings.txt index b629fcbb9cf..037f06a9d80 100644 --- a/forge-gui/res/draft/rankings.txt +++ b/forge-gui/res/draft/rankings.txt @@ -1,262 +1,921 @@ //Rank|Name|Rarity|Set +#1|Ancestral Recall|R|30A +#2|Time Walk|R|30A +#3|Demonic Tutor|U|30A +#4|Black Lotus|R|30A +#5|Balance|R|30A +#6|Control Magic|U|30A +#7|Timetwister|R|30A +#8|Sol Ring 1|C|30A +#9|Sol Ring 2|U|30A +#10|Swords to Plowshares|U|30A +#11|Wrath of God|R|30A +#12|Animate Dead|U|30A +#13|Mind Twist|R|30A +#14|Manabarbs|R|30A +#15|Channel|U|30A +#16|Mox Emerald|R|30A +#17|Mox Jet|R|30A +#18|Mox Pearl|R|30A +#19|Mox Ruby|R|30A +#20|Mox Sapphire|R|30A +#21|Serra Angel|U|30A +#22|Counterspell|U|30A +#23|Terror|C|30A +#24|Lightning Bolt|C|30A +#25|Regrowth|U|30A +#26|Personal Incarnation|R|30A +#27|Air Elemental|U|30A +#28|Mahamoti Djinn|R|30A +#29|Drain Life|C|30A +#30|Pestilence|C|30A +#31|Disintegrate|C|30A +#32|Fireball|C|30A +#33|Shivan Dragon|R|30A +#34|Wheel of Fortune|R|30A +#35|Howling Mine|R|30A +#36|Meekstone|R|30A +#37|Nevinyrral's Disk|R|30A +#38|Northern Paladin|R|30A +#39|White Knight|U|30A +#40|Braingeyser|R|30A +#41|Black Knight|U|30A +#42|Hypnotic Specter|U|30A +#43|Earthquake|R|30A +#44|Birds of Paradise|R|30A +#45|Prodigal Sorcerer|C|30A +#46|Psionic Blast|U|30A +#47|Sengir Vampire|U|30A +#48|Phantom Monster|U|30A +#49|Red Elemental Blast|C|30A +#50|Roc of Kher Ridges|R|30A +#51|Circle of Protection Red|C|30A +#52|Savannah Lions|R|30A +#53|Clone|U|30A +#54|Royal Assassin|R|30A +#55|Wild Growth|C|30A +#56|Forcefield|R|30A +#57|Mana Vault|R|30A +#58|Island Sanctuary|R|30A +#59|Karma|U|30A +#60|Vesuvan Doppelganger|R|30A +#61|Bad Moon|R|30A +#62|Demonic Hordes|R|30A +#63|Nightmare|R|30A +#64|Berserk|U|30A +#65|Llanowar Elves|C|30A +#66|Tsunami|U|30A +#67|Ankh of Mishra|R|30A +#68|Disrupting Scepter|R|30A +#69|Gauntlet of Might|R|30A +#70|Badlands|R|30A +#71|Bayou|R|30A +#72|Plateau|R|30A +#73|Savannah|R|30A +#74|Scrubland|R|30A +#75|Taiga|R|30A +#76|Tropical Island|R|30A +#77|Tundra|R|30A +#78|Underground Sea|R|30A +#79|Volcanic Island|R|30A +#80|Badlands|R|30A +#81|Bayou|R|30A +#82|Plateau|R|30A +#83|Savannah|R|30A +#84|Scrubland|R|30A +#85|Taiga|R|30A +#86|Tropical Island|R|30A +#87|Tundra|R|30A +#88|Underground Sea|R|30A +#89|Volcanic Island|R|30A +#90|Circle of Protection Black|C|30A +#91|Circle of Protection Green|C|30A +#92|Circle of Protection White|C|30A +#93|Pirate Ship|R|30A +#94|Power Sink|C|30A +#95|Sinkhole|C|30A +#96|Dragon Whelp|U|30A +#97|Force of Nature|R|30A +#98|Ice Storm|U|30A +#99|Clockwork Beast|R|30A +#100|Two-Headed Giant of Foriys|R|30A +#101|Unsummon|C|30A +#102|Water Elemental|U|30A +#103|Zombie Master|R|30A +#104|Sedge Troll|R|30A +#105|Stone Giant|U|30A +#106|Stone Rain|C|30A +#107|Cockatrice|R|30A +#108|Elvish Archers|R|30A +#109|Hurricane|U|30A +#110|Armageddon|R|30A +#111|Circle of Protection Blue|C|30A +#112|Disenchant|C|30A +#113|Red Ward|U|30A +#114|Resurrection|U|30A +#115|Veteran Bodyguard|R|30A +#116|Lord of Atlantis|R|30A +#117|Siren's Call|U|30A +#118|Spell Blast|C|30A +#119|Wall of Air|U|30A +#120|Bog Wraith|U|30A +#121|Dark Ritual|C|30A +#122|Drudge Skeletons|C|30A +#123|Paralyze|C|30A +#124|Raise Dead|C|30A +#125|Word of Command|R|30A +#126|Earth Elemental|U|30A +#127|Fire Elemental|U|30A +#128|Goblin King|R|30A +#129|Ironclaw Orcs|C|30A +#130|Keldon Warlord|U|30A +#131|Mana Flare|R|30A +#132|Orcish Artillery|U|30A +#133|Rock Hydra|R|30A +#134|Uthden Troll|U|30A +#135|Fastbond|R|30A +#136|Giant Growth|C|30A +#137|Giant Spider|C|30A +#138|Grizzly Bears|C|30A +#139|Thicket Basilisk|U|30A +#140|Verduran Enchantress|R|30A +#141|Wall of Brambles|U|30A +#142|War Mammoth|C|30A +#143|Basalt Monolith|U|30A +#144|Chaos Orb|R|30A +#145|Jayemdae Tome|R|30A +#146|Juggernaut|U|30A +#147|Obsianus Golem|U|30A +#148|Winter Orb|R|30A +#149|Death Ward|C|30A +#150|Wall of Swords|U|30A +#151|Lifetap|U|30A +#152|Phantasmal Forces|U|30A +#153|Sea Serpent|C|30A +#154|Twiddle|C|30A +#155|Volcanic Eruption|R|30A +#156|Wall of Water|U|30A +#157|Howl from Beyond|C|30A +#158|Lord of the Pit|R|30A +#159|Nettling Imp|U|30A +#160|Simulacrum|U|30A +#161|Wall of Bone|U|30A +#162|Will-o'-the-Wisp|R|30A +#163|Dwarven Warriors|C|30A +#164|Firebreathing|C|30A +#165|Goblin Balloon Brigade|U|30A +#166|Granite Gargoyle|R|30A +#167|Hill Giant|C|30A +#168|Hurloon Minotaur|C|30A +#169|Raging River|R|30A +#170|Shatter|C|30A +#171|Craw Wurm|C|30A +#172|Ironroot Treefolk|C|30A +#173|Ley Druid|U|30A +#174|Lure|U|30A +#175|Wall of Ice|U|30A +#176|Jade Statue|U|30A +#177|Kormus Bell|R|30A +#178|Lance|U|30A +#179|Mesa Pegasus|C|30A +#180|Pearled Unicorn|C|30A +#181|Righteousness|R|30A +#182|Blue Elemental Blast|C|30A +#183|Invisibility|C|30A +#184|Steal Artifact|U|30A +#185|Fear|C|30A +#186|Frozen Shade|C|30A +#187|Sacrifice|U|30A +#188|Scathe Zombies|C|30A +#189|Scavenging Ghoul|U|30A +#190|Unholy Strength|C|30A +#191|Warp Artifact|R|30A +#192|Dwarven Demolition Team|U|30A +#193|False Orders|C|30A +#194|Fork|R|30A +#195|Gray Ogre|C|30A +#196|Mons's Goblin Raiders|C|30A +#197|Orcish Oriflamme|U|30A +#198|Fungusaur|R|30A +#199|Instill Energy|U|30A +#200|Lifeforce|U|30A +#201|Scryb Sprites|C|30A +#202|Shanodin Dryads|C|30A +#203|Tranquility|C|30A +#204|Living Wall|U|30A +#205|Rod of Ruin|U|30A +#206|Benalish Hero|C|30A +#207|Black Ward|U|30A +#208|Blessing|R|30A +#209|Blue Ward|U|30A +#210|Green Ward|U|30A +#211|Guardian Angel|C|30A +#212|Healing Salve|C|30A +#213|Holy Strength|C|30A +#214|Samite Healer|C|30A +#215|White Ward|U|30A +#216|Copy Artifact|R|30A +#217|Creature Bond|C|30A +#218|Flight|C|30A +#219|Merfolk of the Pearl Trident|C|30A +#220|Power Leak|C|30A +#221|Stasis|R|30A +#222|Cursed Land|U|30A +#223|Deathgrip|U|30A +#224|Evil Presence|U|30A +#225|Gloom|U|30A +#226|Lich|R|30A +#227|Nether Shadow|R|30A +#228|Flashfires|U|30A +#229|Smoke|R|30A +#230|Aspect of Wolf|R|30A +#231|Fog|C|30A +#232|Gaea's Liege|R|30A +#233|Kudzu|R|30A +#234|Regeneration|C|30A +#235|Stream of Life|C|30A +#236|Timber Wolves|R|30A +#237|Wall of Wood|C|30A +#238|Web|R|30A +#239|Black Vise|U|30A +#240|Copper Tablet|U|30A +#241|The Hive|R|30A +#242|Icy Manipulator|U|30A +#243|Illusionary Mask|R|30A +#244|Jade Monolith|R|30A +#245|Library of Leng|U|30A +#246|Blaze of Glory|R|30A +#247|Animate Artifact|U|30A +#248|Psychic Venom|C|30A +#249|Deathlace|R|30A +#250|Burrowing|U|30A +#251|Wall of Fire|U|30A +#252|Wall of Stone|U|30A +#253|Animate Wall|R|30A +#254|Castle|U|30A +#255|Holy Armor|C|30A +#256|Reverse Damage|R|30A +#257|Drain Power|R|30A +#258|Feedback|U|30A +#259|Jump|C|30A +#260|Sleight of Mind|R|30A +#261|Thoughtlace|R|30A +#262|Plague Rats|C|30A +#263|Chaoslace|R|30A +#264|Tunnel|U|30A +#265|Lifelace|R|30A +#266|Natural Selection|R|30A +#267|Wanderlust|U|30A +#268|Conservator|U|30A +#269|Crystal Rod|U|30A +#270|Iron Star|U|30A +#271|Ivory Cup|U|30A +#272|Soul Net|U|30A +#273|Magical Hack|R|30A +#274|Mana Short|R|30A +#275|Phantasmal Terrain|C|30A +#276|Camouflage|U|30A +#277|Living Artifact|R|30A +#278|Living Lands|R|30A +#279|Celestial Prism|U|30A +#280|Cyclopean Tomb|R|30A +#281|Dingus Egg|R|30A +#282|Glasses of Urza|U|30A +#283|Helm of Chatzuk|R|30A +#284|Throne of Bone|U|30A +#285|Time Vault|R|30A +#286|Wooden Sphere|U|30A +#287|Purelace|R|30A +#288|Power Surge|R|30A +#289|Sunglasses of Urza|R|30A +#290|Consecrate Land|U|30A +#291|Conversion|U|30A +#292|Farmstead|R|30A +#293|Plains 1|C|30A +#294|Plains 2|C|30A +#295|Plains 3|C|30A +#296|Island 1|C|30A +#297|Island 2|C|30A +#298|Island 3|C|30A +#299|Swamp 1|C|30A +#300|Swamp 2|C|30A +#301|Swamp 3|C|30A +#302|Mountain 1|C|30A +#303|Mountain 2|C|30A +#304|Mountain 3|C|30A +#305|Forest 1|C|30A +#306|Forest 2|C|30A +#307|Forest 3|C|30A +//Rank|Name|Rarity|Set +#1|Wurmcoil Engine|M|BRR +#2|Platoon Dispenser|M|BRO +#3|Teferi, Temporal Pilgrim|M|BRO +#4|Tyrant of Kher Ridges|R|BRO +#5|In the Trenches|M|BRO +#6|Phyrexian Fleshgorger|M|BRO +#7|Steel Seraph|R|BRO +#8|Surge Engine|M|BRO +#9|Gix, Yawgmoth Praetor|M|BRO +#10|Rootwire Amalgam|M|BRO +#11|Saheeli, Filigree Master|M|BRO +#12|Skitterbeam Battalion|M|BRO +#13|Clay Champion|M|BRO +#14|Myrel, Shield of Argive|M|BRO +#15|Skystrike Officer|R|BRO +#16|Arcane Proxy|M|BRO +#17|Gix's Command|R|BRO +#18|Draconic Destiny|M|BRO +#19|Visions of Phyrexia|R|BRO +#20|Simian Simulacrum|R|BRO +#21|Mishra, Claimed by Gix|M|BRO +#22|Bladecoil Serpent|M|BRO +#23|Staff of Domination|M|BRR +#24|Autonomous Assembler|R|BRO +#25|Gixian Puppeteer|R|BRO +#26|Misery's Shadow|R|BRO +#27|Titania's Command|R|BRO +#28|Tocasia, Dig Site Mentor|R|BRO +#29|Cityscape Leveler|M|BRO +#30|Siege Veteran|R|BRO +#31|Hurkyl, Master Wizard|R|BRO +#32|Phyrexian Dragon Engine|R|BRO +#33|Legions to Ashes|R|BRO +#34|Sarinth Greatwurm|M|BRO +#35|Platinum Angel|M|BRR +#36|Go for the Throat|U|BRO +#37|Titania, Voice of Gaea|M|BRO +#38|Urza, Prince of Kroog|R|BRO +#39|The Mightstone and Weakstone|R|BRO +#40|Portal to Phyrexia|M|BRO +#41|Horned Stoneseeker|U|BRO +#42|Kayla's Command|R|BRO +#43|Loran of the Third Path|R|BRO +#44|The Temporal Anchor|R|BRO +#45|Brotherhood's End|R|BRO +#46|Obliterating Bolt|U|BRO +#47|Teething Wurmlet|R|BRO +#48|Mishra, Tamer of Mak Fawa|R|BRO +#49|Mazemind Tome|R|BRR +#50|Perilous Vault|M|BRR +#51|Static Net|U|BRO +#52|Combat Thresher|U|BRO +#53|Urza's Command|R|BRO +#54|Ashnod, Flesh Mechanist|R|BRO +#55|Razorlash Transmogrant|R|BRO +#56|Feldon, Ronom Excavator|R|BRO +#57|Mishra's Command|R|BRO +#58|Fade from History|R|BRO +#59|Gwenna, Eyes of Gaea|R|BRO +#60|Obstinate Baloth|U|BRO +#61|Battery Bearer|U|BRO +#62|Harbin, Vanguard Aviator|R|BRO +#63|Hero of the Dunes|U|BRO +#64|Skyfisher Spider|U|BRO +#65|Third Path Iconoclast|U|BRO +#66|Excavation Explosion|C|BRO +#67|Caged Sun|M|BRR +#68|Precursor Golem|R|BRR +#69|Recruitment Officer|U|BRO +#70|Drafna, Founder of Lat-Nam|R|BRO +#71|Thopter Mechanic|U|BRO +#72|Overwhelming Remorse|C|BRO +#73|Transmogrant's Crown|R|BRO +#74|Sarinth Steelseeker|U|BRO +#75|Arbalest Engineers|U|BRO +#76|Evangel of Synthesis|U|BRO +#77|Hajar, Loyal Bodyguard|R|BRO +#78|Junkyard Genius|U|BRO +#79|Yotian Dissident|U|BRO +#80|Liberator, Urza's Battlethopter|R|BRO +#81|Prison Sentence|C|BRO +#82|Ramos, Dragon Engine|M|BRR +#83|Sundering Titan|M|BRR +#84|Loran, Disciple of History|U|BRO +#85|Zephyr Sentinel|U|BRO +#86|Disfigure|C|BRO +#87|Gruesome Realization|U|BRO +#88|Bushwhack|U|BRO +#89|Gaea's Courser|U|BRO +#90|Fallaji Vanguard|U|BRO +#91|Queen Kayla bin-Kroog|R|BRO +#92|Urza, Lord Protector|M|BRO +#93|Thran Spider|R|BRO +#94|Yotian Tactician|U|BRO +#95|Helm of the Host|M|BRR +#96|Lodestone Golem|R|BRR +#97|Sculpting Steel|R|BRR +#98|Urza's Sylex|M|BRO +#99|Stern Lesson|C|BRO +#100|Urza, Powerstone Prodigy|U|BRO +#101|Weakstone's Subjugation|C|BRO +#102|Battlefield Butcher|U|BRO +#103|Gurgling Anointer|U|BRO +#104|Giant Cindermaw|U|BRO +#105|Mishra, Excavation Prodigy|U|BRO +#106|Epic Confrontation|C|BRO +#107|Fauna Shaman|R|BRO +#108|Perennial Behemoth|R|BRO +#109|Blast Zone|R|BRO +#110|Fortified Beachhead|R|BRO +#111|Mishra's Foundry|R|BRO +#112|Wing Commando|C|BRO +#113|Perimeter Patrol|C|BRO +#114|Altar of Dementia|M|BRR +#115|Foundry Inspector|U|BRR +#116|Key to the City|R|BRR +#117|Mystic Forge|M|BRR +#118|Phyrexian Processor|R|BRR +#119|Pristine Talisman|U|BRR +#120|Scrap Trawler|R|BRR +#121|Airlift Chaplain|C|BRO +#122|Disenchant|C|BRO +#123|Soul Partition|R|BRO +#124|Thopter Architect|U|BRO +#125|Tocasia's Welcome|R|BRO +#126|Defabricate|U|BRO +#127|Fallaji Archaeologist|C|BRO +#128|Machine Over Matter|C|BRO +#129|Third Path Savant|C|BRO +#130|Urza's Rebuff|C|BRO +#131|Spotter Thopter|U|BRO +#132|Diabolic Intent|R|BRO +#133|Gix's Caress|C|BRO +#134|No One Left Behind|U|BRO +#135|Ashnod's Harvester|U|BRO +#136|Monastery Swiftspear|U|BRO +#137|Raze to the Ground|C|BRO +#138|Fallaji Dragon Engine|U|BRO +#139|Mishra's Research Desk|U|BRO +#140|Argothian Opportunist|C|BRO +#141|Audacity|U|BRO +#142|Awaken the Woods|M|BRO +#143|Wasteful Harvest|C|BRO +#144|Iron-Craw Crusher|U|BRO +#145|Mask of the Jadecrafter|U|BRO +#146|Rust Goliath|C|BRO +#147|Deathbloom Ritualist|R|BRO +#148|Tawnos, the Toymaker|R|BRO +#149|Argivian Avenger|U|BRO +#150|Steel Exemplar|U|BRO +#151|Argoth, Sanctum of Nature|R|BRO +#152|Hall of Tagsin|R|BRO +#153|Meticulous Excavation|U|BRO +#154|Conscripted Infantry|C|BRO +#155|Scatter Ray|C|BRO +#156|Hostile Negotiations|R|BRO +#157|Unleash Shell|C|BRO +#158|Shoot Down|C|BRO +#159|Blackblade Reforged|R|BRR +#160|Burnished Hart|U|BRR +#161|Chromatic Star|U|BRR +#162|Gilded Lotus|R|BRR +#163|Ichor Wellspring|U|BRR +#164|Psychosis Crawler|R|BRR +#165|Self-Assembler|U|BRR +#166|Swiftfoot Boots|U|BRR +#167|Aeronaut Cavalry|C|BRO +#168|Phalanx Vanguard|C|BRO +#169|Repair and Recharge|U|BRO +#170|Warlord's Elite|C|BRO +#171|Scrapwork Cohort|C|BRO +#172|Flow of Knowledge|U|BRO +#173|Koilos Roc|C|BRO +#174|Lat-Nam Adept|C|BRO +#175|One with the Multiverse|M|BRO +#176|Combat Courier|C|BRO +#177|Depth Charge Colossus|C|BRO +#178|Hulking Metamorph|U|BRO +#179|Terisian Mindbreaker|R|BRO +#180|Disciples of Gix|U|BRO +#181|Gnawing Vermin|U|BRO +#182|Powerstone Fracture|C|BRO +#183|Transmogrant Altar|U|BRO +#184|Pyrrhic Blast|U|BRO +#185|Heavyweight Demolisher|U|BRO +#186|Mishra's Juggernaut|C|BRO +#187|Argothian Sprite|C|BRO +#188|Fallaji Excavation|U|BRO +#189|Giant Growth|C|BRO +#190|Haywire Mite|U|BRO +#191|Levitating Statue|U|BRO +#192|Reconstructed Thopter|U|BRO +#193|Su-Chi Cave Guard|U|BRO +#194|Symmetry Matrix|U|BRO +#195|Battlefield Forge|R|BRO +#196|Brushland|R|BRO +#197|Llanowar Wastes|R|BRO +#198|Underground River|R|BRO +#199|Burrowing Razormaw|C|BRO +#200|Roc Hunter|C|BRO +#201|Penregon Strongbull|C|BRO +#202|Emergency Weld|C|BRO +#203|Air Marshal|C|BRO +#204|Gnarlroot Pallbearer|C|BRO +#205|Cradle Clearcutter|U|BRO +#206|Deadly Riposte|C|BRO +#207|Kill-Zone Acrobat|C|BRO +#208|Thraxodemon|C|BRO +#209|Scrapwork Mutt|C|BRO +#210|Blanchwood Prowler|C|BRO +#211|Adaptive Automaton|R|BRR +#212|Chromatic Lantern|R|BRR +#213|Elsewhere Flask|U|BRR +#214|Inspiring Statuary|R|BRR +#215|Mishra's Bauble|U|BRR +#216|Phyrexian Revoker|R|BRR +#217|Runechanter's Pike|R|BRR +#218|Great Desert Prospector|U|BRO +#219|Lay Down Arms|U|BRO +#220|Mass Production|U|BRO +#221|Powerstone Engineer|C|BRO +#222|Union of the Third Path|C|BRO +#223|Tocasia's Onulet|C|BRO +#224|Forging the Anchor|U|BRO +#225|Keeper of the Cadence|U|BRO +#226|Mightstone's Animation|C|BRO +#227|Ashnod's Intervention|C|BRO +#228|Corrupt|U|BRO +#229|Dreams of Steel and Oil|U|BRO +#230|Painful Quandary|R|BRO +#231|Bitter Reunion|C|BRO +#232|The Fall of Kroog|U|BRO +#233|Fallaji Chaindancer|C|BRO +#234|Mechanized Warfare|R|BRO +#235|Mishra's Onslaught|C|BRO +#236|Sibling Rivalry|C|BRO +#237|Alloy Animist|U|BRO +#238|Blanchwood Armor|U|BRO +#239|Gaea's Gift|C|BRO +#240|Tawnos's Tinkering|C|BRO +#241|Goblin Firebomb|C|BRO +#242|Mine Worker|C|BRO +#243|Power Plant Worker|C|BRO +#244|Tocasia's Dig Site|C|BRO +#245|Evolving Wilds|C|BRO +#246|Tomakul Scrapsmith|C|BRO +#247|Dwarven Forge-Chanter|C|BRO +#248|Desynchronize|C|BRO +#249|Involuntary Cooldown|U|BRO +#250|Gixian Infiltrator|C|BRO +#251|Tomakul Honor Guard|C|BRO +#252|Boulderbranch Golem|C|BRO +#253|Ravenous Gigamole|C|BRO +#254|Scrapwork Rager|C|BRO +#255|Whirling Strike|C|BRO +#256|Aetherflux Reservoir|M|BRR +#257|Ashnod's Altar|R|BRR +#258|Astral Cornucopia|R|BRR +#259|Cloud Key|R|BRR +#260|Goblin Charbelcher|R|BRR +#261|Journeyer's Kite|R|BRR +#262|Liquimetal Coating|U|BRR +#263|Mesmeric Orb|M|BRR +#264|Mind's Eye|M|BRR +#265|Quietus Spike|R|BRR +#266|Semblance Anvil|R|BRR +#267|Sigil of Valor|U|BRR +#268|Soul-Guide Lantern|U|BRR +#269|Sword of the Meek|R|BRR +#270|Well of Lost Dreams|R|BRR +#271|Ambush Paratrooper|C|BRO +#272|Kayla's Reconstruction|R|BRO +#273|Recommission|C|BRO +#274|Survivor of Korlis|C|BRO +#275|Yotian Medic|C|BRO +#276|Veteran's Powerblade|C|BRO +#277|Yotian Frontliner|U|BRO +#278|Splitting the Powerstone|U|BRO +#279|Take Flight|U|BRO +#280|Fateful Handoff|R|BRO +#281|Thran Vigil|U|BRO +#282|Clay Revenant|C|BRO +#283|Goblin Blast-Runner|C|BRO +#284|Mishra's Domination|C|BRO +#285|Sardian Cliffstomper|U|BRO +#286|Fog of War|C|BRO +#287|Thran Power Suit|U|BRO +#288|Tower Worker|C|BRO +#289|Slagstone Refinery|U|BRO +#290|Aeronaut's Wings|C|BRO +#291|Blitz Automaton|C|BRO +#292|Goring Warplow|C|BRO +#293|Trench Stalker|C|BRO +#294|Carrion Locust|C|BRO +#295|Military Discipline|C|BRO +#296|Loran's Escape|C|BRO +#297|Citanul Stalwart|C|BRO +#298|Hoarding Recluse|C|BRO +#299|Gixian Skullflayer|C|BRO +#300|Dredging Claw|C|BRO +#301|Jalum Tome|U|BRR +#302|Millstone|U|BRR +#303|Mox Amber|M|BRR +#304|Ornithopter|U|BRR +#305|Quicksilver Amulet|R|BRR +#306|Springleaf Drum|U|BRR +#307|Thorn of Amethyst|R|BRR +#308|Arms Race|U|BRO +#309|The Stasis Coffin|R|BRO +#310|Supply Drop|C|BRO +#311|Stone Retrieval Unit|C|BRO +#312|Energy Refractor|C|BRO +#313|Moment of Defiance|C|BRO +#314|Coastal Bulwark|C|BRO +#315|Retrieval Agent|C|BRO +#316|Curate|C|BRO +#317|Bone Saw|U|BRR +#318|Howling Mine|R|BRR +#319|Ivory Tower|U|BRR +#320|Keening Stone|R|BRR +#321|Unwinding Clock|R|BRR +#322|Calamity's Wake|U|BRO +#323|Hurkyl's Final Meditation|R|BRO +#324|Swiftgear Drake|C|BRO +#325|Over the Top|R|BRO +#326|Door to Nothingness|R|BRR +#327|The Stone Brain|R|BRO +#328|Demolition Field|U|BRO +#329|Spectrum Sentinel|U|BRO +#330|Defense Grid|R|BRR +#331|Plains 1|C|BRO +#332|Plains 2|C|BRO +#333|Island 1|C|BRO +#334|Island 2|C|BRO +#335|Swamp 1|C|BRO +#336|Swamp 2|C|BRO +#337|Mountain 1|C|BRO +#338|Mountain 2|C|BRO +#339|Forest 1|C|BRO +#340|Forest 2|C|BRO +#341|Plains 3|C|BRO +#342|Plains 4|C|BRO +#343|Island 3|C|BRO +#345|Island 4|C|BRO +#346|Swamp 3|C|BRO +#347|Swamp 4|C|BRO +#348|Mountain 3|C|BRO +#349|Mountain 4|C|BRO +#350|Forest 3|C|BRO +#351|Forest 4|C|BRO +//Rank|Name|Rarity|Set #1|Sheoldred, the Apocalypse|M|DMU #2|Archangel of Wrath|R|DMU -#3|Shivan Devastator|M|DMU -#4|Rith, Liberated Primeval|M|DMU -#5|Serra Paragon|M|DMU -#6|Sphinx of Clear Skies|M|DMU -#7|Nemata, Primeval Warden|R|DMU -#8|Jaya, Fiery Negotiator|M|DMU -#9|Temporal Firestorm|R|DMU -#10|Wingmantle Chaplain|U|DMU -#11|The Elder Dragon War|R|DMU -#12|Defiler of Vigor|R|DMU -#13|The Cruelty of Gix|R|DMU -#14|Vodalian Mindsinger|R|DMU -#15|Drag to the Bottom|R|DMU -#16|Herd Migration|R|DMU -#17|Silverback Elder|M|DMU -#18|King Darien XLVIII|R|DMU -#19|Sol'Kanar the Tainted|M|DMU -#20|Defiler of Instinct|R|DMU -#21|Llanowar Greenwidow|R|DMU -#22|Ajani, Sleeper Agent|M|DMU -#23|Soul of Windgrace|M|DMU -#24|Guardian of New Benalia|R|DMU -#25|Leyline Binding|R|DMU -#26|Evolved Sleeper|R|DMU -#27|Sprouting Goblin|U|DMU -#28|Llanowar Loamspeaker|R|DMU -#29|Quirion Beastcaller|R|DMU -#30|Shanna, Purifying Blade|M|DMU -#31|Defiler of Dreams|R|DMU -#32|Rona's Vortex|U|DMU -#33|Danitha, Benalia's Hope|R|DMU -#34|Bortuk Bonerattle|U|DMU -#35|Tatyova, Steward of Tides|U|DMU -#36|Defiler of Faith|R|DMU +#3|Serra Paragon|M|DMU +#4|Sphinx of Clear Skies|M|DMU +#5|Shivan Devastator|M|DMU +#6|Rith, Liberated Primeval|M|DMU +#7|Jaya, Fiery Negotiator|M|DMU +#8|Temporal Firestorm|R|DMU +#9|Herd Migration|R|DMU +#10|Nemata, Primeval Warden|R|DMU +#11|Wingmantle Chaplain|U|DMU +#12|Drag to the Bottom|R|DMU +#13|The Elder Dragon War|R|DMU +#14|Defiler of Vigor|R|DMU +#15|The Cruelty of Gix|R|DMU +#16|Silverback Elder|M|DMU +#17|Guardian of New Benalia|R|DMU +#18|Vodalian Mindsinger|R|DMU +#19|Llanowar Greenwidow|R|DMU +#20|Ajani, Sleeper Agent|M|DMU +#21|King Darien XLVIII|R|DMU +#22|Sol'Kanar the Tainted|M|DMU +#23|Leyline Binding|R|DMU +#24|Rona's Vortex|U|DMU +#25|Evolved Sleeper|R|DMU +#26|Defiler of Instinct|R|DMU +#27|Llanowar Loamspeaker|R|DMU +#28|Quirion Beastcaller|R|DMU +#29|Soul of Windgrace|M|DMU +#30|Tatyova, Steward of Tides|U|DMU +#31|Sprouting Goblin|U|DMU +#32|Danitha, Benalia's Hope|R|DMU +#33|Braids, Arisen Nightmare|R|DMU +#34|Shanna, Purifying Blade|M|DMU +#35|Aether Channeler|R|DMU +#36|Defiler of Dreams|R|DMU #37|Haughty Djinn|R|DMU -#38|Defiler of Flesh|R|DMU +#38|Nishoba Brawler|U|DMU #39|Tear Asunder|U|DMU #40|Ertai Resurrected|R|DMU -#41|Phyrexian Missionary|U|DMU -#42|Aether Channeler|R|DMU -#43|Radha's Firebrand|R|DMU -#44|Nishoba Brawler|U|DMU -#45|Braids, Arisen Nightmare|R|DMU -#46|Squee, Dubious Monarch|R|DMU -#47|Aron, Benalia's Ruin|U|DMU -#48|Nael, Avizoa Aeronaut|U|DMU -#49|Najal, the Storm Runner|U|DMU -#50|Baird, Argivian Recruiter|U|DMU -#51|Anointed Peacekeeper|R|DMU -#52|Prayer of Binding|U|DMU -#53|Frostfist Strider|U|DMU -#54|Cult Conscript|U|DMU -#55|Extinguish the Light|C|DMU -#56|Liliana of the Veil|M|DMU -#57|Fires of Victory|U|DMU +#41|Bortuk Bonerattle|U|DMU +#42|Raff, Weatherlight Stalwart|U|DMU +#43|Anointed Peacekeeper|R|DMU +#44|Defiler of Faith|R|DMU +#45|Phyrexian Missionary|U|DMU +#46|Defiler of Flesh|R|DMU +#47|Electrostatic Infantry|U|DMU +#48|Fires of Victory|U|DMU +#49|The Weatherseed Treaty|U|DMU +#50|Karn's Sylex|M|DMU +#51|Squee, Dubious Monarch|R|DMU +#52|Aron, Benalia's Ruin|U|DMU +#53|Balmor, Battlemage Captain|U|DMU +#54|Prayer of Binding|U|DMU +#55|Frostfist Strider|U|DMU +#56|Extinguish the Light|C|DMU +#57|Liliana of the Veil|M|DMU #58|Hurloon Battle Hymn|U|DMU #59|Lightning Strike|C|DMU -#60|Tail Swipe|U|DMU +#60|Radha's Firebrand|R|DMU #61|Territorial Maro|U|DMU -#62|Karn's Sylex|M|DMU -#63|The Raven Man|R|DMU -#64|Balmor, Battlemage Captain|U|DMU -#65|Queen Allenal of Ruadach|U|DMU -#66|Raff, Weatherlight Stalwart|U|DMU -#67|Rulik Mons, Warren Chief|U|DMU -#68|Garna, Bloodfist of Keld|U|DMU -#69|Cleaving Skyrider|U|DMU -#70|Knight of Dawn's Light|U|DMU -#71|Valiant Veteran|R|DMU -#72|Battlewing Mystic|U|DMU -#73|Tolarian Terror|C|DMU -#74|Cut Down|U|DMU -#75|Phyrexian Rager|C|DMU -#76|Electrostatic Infantry|U|DMU -#77|Keldon Flamesage|R|DMU -#78|Strength of the Coalition|U|DMU -#79|The Weatherseed Treaty|U|DMU -#80|Meria's Outrider|C|DMU -#81|Elas il-Kor, Sadistic Pilgrim|U|DMU -#82|Lagomos, Hand of Hatred|U|DMU -#83|Rona, Sheoldred's Faithful|U|DMU -#84|Tori D'Avenant, Fury Rider|U|DMU -#85|Jodah, the Unifier|M|DMU -#86|Citizen's Arrest|C|DMU -#87|Tolarian Geyser|C|DMU -#88|Balduvian Berserker|U|DMU -#89|Dragon Whelp|U|DMU -#90|Linebreaker Baloth|U|DMU -#91|Vineshaper Prodigy|C|DMU -#92|Yavimaya Iconoclast|U|DMU -#93|Bite Down|C|DMU -#94|Talas Lookout|C|DMU -#95|Floriferous Vinewall|C|DMU -#96|Knight of Dusk's Shadow|U|DMU -#97|Uurg, Spawn of Turg|U|DMU -#98|Zar Ojanen, Scion of Efrava|U|DMU -#99|Karn, Living Legacy|M|DMU -#100|Shalai's Acolyte|U|DMU -#101|Djinn of the Fountain|U|DMU -#102|Micromancer|U|DMU -#103|Silver Scrutiny|R|DMU -#104|Balduvian Atrocity|U|DMU -#105|Tribute to Urborg|C|DMU -#106|Urborg Repossession|C|DMU -#107|Phoenix Chick|U|DMU +#62|Meria's Outrider|C|DMU +#63|Elas il-Kor, Sadistic Pilgrim|U|DMU +#64|Lagomos, Hand of Hatred|U|DMU +#65|Nael, Avizoa Aeronaut|U|DMU +#66|Najal, the Storm Runner|U|DMU +#67|Queen Allenal of Ruadach|U|DMU +#68|Vohar, Vodalian Desecrator|U|DMU +#69|Baird, Argivian Recruiter|U|DMU +#70|Jodah, the Unifier|M|DMU +#71|Knight of Dawn's Light|U|DMU +#72|Valiant Veteran|R|DMU +#73|Battlewing Mystic|U|DMU +#74|Micromancer|U|DMU +#75|Tolarian Geyser|C|DMU +#76|Cut Down|U|DMU +#77|Phyrexian Rager|C|DMU +#78|Keldon Flamesage|R|DMU +#79|Tail Swipe|U|DMU +#80|Knight of Dusk's Shadow|U|DMU +#81|The Raven Man|R|DMU +#82|Rulik Mons, Warren Chief|U|DMU +#83|Tori D'Avenant, Fury Rider|U|DMU +#84|Uurg, Spawn of Turg|U|DMU +#85|Zar Ojanen, Scion of Efrava|U|DMU +#86|Garna, Bloodfist of Keld|U|DMU +#87|Citizen's Arrest|C|DMU +#88|Cleaving Skyrider|U|DMU +#89|Tolarian Terror|C|DMU +#90|Cult Conscript|U|DMU +#91|Tribute to Urborg|C|DMU +#92|Urborg Repossession|C|DMU +#93|Strength of the Coalition|U|DMU +#94|Yavimaya Iconoclast|U|DMU +#95|Bite Down|C|DMU +#96|Talas Lookout|C|DMU +#97|Essence Scatter|C|DMU +#98|Destroy Evil|C|DMU +#99|Radha, Coalition Warlord|U|DMU +#100|Tura Kennerüd, Skyknight|U|DMU +#101|Argivian Cavalier|C|DMU +#102|Runic Shot|U|DMU +#103|Shalai's Acolyte|U|DMU +#104|Silver Scrutiny|R|DMU +#105|Balduvian Berserker|U|DMU +#106|Dragon Whelp|U|DMU +#107|Elvish Hydromancer|U|DMU #108|Gaea's Might|C|DMU -#109|Magnigoth Sentry|C|DMU -#110|Mossbeard Ancient|U|DMU -#111|Urborg Lhurgoyf|R|DMU -#112|Jodah's Codex|U|DMU -#113|Shield-Wall Sentinel|C|DMU -#114|Argivian Phalanx|C|DMU -#115|Deathbloom Gardener|C|DMU -#116|Flowstone Infusion|C|DMU -#117|Eerie Soultender|C|DMU -#118|Essence Scatter|C|DMU -#119|Destroy Evil|C|DMU -#120|Choking Miasma|U|DMU -#121|Ivy, Gleeful Spellthief|R|DMU -#122|Radha, Coalition Warlord|U|DMU -#123|Ratadrabik of Urborg|R|DMU -#124|Tura Kennerüd, Skyknight|U|DMU -#125|Vohar, Vodalian Desecrator|U|DMU -#126|Argivian Cavalier|C|DMU -#127|Benalish Sleeper|C|DMU -#128|Resolute Reinforcements|U|DMU -#129|Runic Shot|U|DMU -#130|Coral Colony|U|DMU -#131|Phyrexian Espionage|C|DMU -#132|Timely Interference|C|DMU -#133|Vesuvan Duplimancy|M|DMU -#134|Blight Pile|U|DMU -#135|Phyrexian Warhorse|C|DMU -#136|Sengir Connoisseur|U|DMU -#137|Writhing Necromass|C|DMU -#138|Twinferno|U|DMU -#139|Yavimaya Steelcrusher|C|DMU -#140|Bog Badger|C|DMU -#141|Elvish Hydromancer|U|DMU -#142|Sunbathing Rootwalla|C|DMU -#143|Yavimaya Sojourner|C|DMU -#144|Golden Argosy|R|DMU -#145|Relic of Legends|U|DMU -#146|Geothermal Bog|C|DMU -#147|Haunted Mire|C|DMU -#148|Idyllic Beachfront|C|DMU -#149|Molten Tributary|C|DMU -#150|Radiant Grove|C|DMU -#151|Sacred Peaks|C|DMU -#152|Sunlit Marsh|C|DMU -#153|Tangled Islet|C|DMU -#154|Wooded Ridgeline|C|DMU -#155|Contaminated Aquifer|C|DMU -#156|Impulse|C|DMU -#157|Artillery Blast|C|DMU -#158|Griffin Protector|C|DMU -#159|Gibbering Barricade|C|DMU -#160|Keldon Strike Team|C|DMU -#161|Goblin Picker|C|DMU -#162|Flowstone Kavu|C|DMU -#163|Splatter Goblin|C|DMU -#164|Phyrexian Vivisector|C|DMU -#165|Battlefly Swarm|C|DMU -#166|Soaring Drake|C|DMU -#167|Clockwork Drawbridge|C|DMU -#168|Captain's Call|C|DMU -#169|Rivaz of the Claw|R|DMU -#170|Stenn, Paranoid Partisan|R|DMU -#171|Coalition Skyknight|U|DMU -#172|Join Forces|U|DMU -#173|Juniper Order Rootweaver|C|DMU -#174|Love Song of Night and Day|U|DMU -#175|Academy Wall|C|DMU -#176|Joint Exploration|U|DMU -#177|Braids's Frightful Return|U|DMU +#109|Linebreaker Baloth|U|DMU +#110|Magnigoth Sentry|C|DMU +#111|Mossbeard Ancient|U|DMU +#112|Sunbathing Rootwalla|C|DMU +#113|Vineshaper Prodigy|C|DMU +#114|Floriferous Vinewall|C|DMU +#115|Flowstone Infusion|C|DMU +#116|Eerie Soultender|C|DMU +#117|Choking Miasma|U|DMU +#118|Ivy, Gleeful Spellthief|R|DMU +#119|Ratadrabik of Urborg|R|DMU +#120|Rona, Sheoldred's Faithful|U|DMU +#121|Karn, Living Legacy|M|DMU +#122|Benalish Sleeper|C|DMU +#123|Resolute Reinforcements|U|DMU +#124|Djinn of the Fountain|U|DMU +#125|Phyrexian Espionage|C|DMU +#126|Timely Interference|C|DMU +#127|Balduvian Atrocity|U|DMU +#128|Phyrexian Warhorse|C|DMU +#129|Sengir Connoisseur|U|DMU +#130|Writhing Necromass|C|DMU +#131|Phoenix Chick|U|DMU +#132|Twinferno|U|DMU +#133|Warhost's Frenzy|U|DMU +#134|Bog Badger|C|DMU +#135|Yavimaya Sojourner|C|DMU +#136|Golden Argosy|R|DMU +#137|Geothermal Bog|C|DMU +#138|Haunted Mire|C|DMU +#139|Idyllic Beachfront|C|DMU +#140|Molten Tributary|C|DMU +#141|Radiant Grove|C|DMU +#142|Sacred Peaks|C|DMU +#143|Sunlit Marsh|C|DMU +#144|Tangled Islet|C|DMU +#145|Wooded Ridgeline|C|DMU +#146|Contaminated Aquifer|C|DMU +#147|Impulse|C|DMU +#148|Artillery Blast|C|DMU +#149|Griffin Protector|C|DMU +#150|Gibbering Barricade|C|DMU +#151|Keldon Strike Team|C|DMU +#152|Deathbloom Gardener|C|DMU +#153|Flowstone Kavu|C|DMU +#154|Shadow Prophecy|C|DMU +#155|Battlefly Swarm|C|DMU +#156|Soaring Drake|C|DMU +#157|Shore Up|C|DMU +#158|Clockwork Drawbridge|C|DMU +#159|Captain's Call|C|DMU +#160|Astor, Bearer of Blades|R|DMU +#161|Rivaz of the Claw|R|DMU +#162|Stenn, Paranoid Partisan|R|DMU +#163|Join Forces|U|DMU +#164|Juniper Order Rootweaver|C|DMU +#165|Love Song of Night and Day|U|DMU +#166|Mesa Cavalier|C|DMU +#167|Stall for Time|C|DMU +#168|Take Up the Shield|C|DMU +#169|Academy Loremaster|R|DMU +#170|Academy Wall|C|DMU +#171|Coral Colony|U|DMU +#172|Joint Exploration|U|DMU +#173|Protect the Negotiators|U|DMU +#174|Vesuvan Duplimancy|M|DMU +#175|Voda Sea Scavenger|C|DMU +#176|Blight Pile|U|DMU +#177|Monstrous War-Leech|U|DMU #178|Pilfer|U|DMU -#179|Toxic Abomination|C|DMU -#180|Hurler Cyclops|U|DMU -#181|Jaya's Firenado|C|DMU -#182|Molten Monstrosity|C|DMU -#183|Thrill of Possibility|C|DMU -#184|Warhost's Frenzy|U|DMU -#185|Leaf-Crowned Visionary|R|DMU -#186|Scout the Wilderness|C|DMU -#187|Slimefoot's Survey|U|DMU -#188|Automatic Librarian|C|DMU -#189|Inscribed Tablet|U|DMU -#190|Weatherlight Compleated|M|DMU -#191|Adarkar Wastes|R|DMU -#192|Caves of Koilos|R|DMU -#193|Karplusan Forest|R|DMU -#194|Shivan Reef|R|DMU -#195|Sulfurous Springs|R|DMU -#196|Yavimaya Coast|R|DMU -#197|Ertai's Scorn|U|DMU -#198|In Thrall to the Pit|C|DMU -#199|Aggressive Sabotage|C|DMU -#200|Bone Splinters|C|DMU -#201|Ghitu Amplifier|C|DMU -#202|Pixie Illusionist|C|DMU -#203|Crystal Grotto|C|DMU -#204|Furious Bellow|C|DMU -#205|Coalition Warbrute|C|DMU -#206|Shadow Prophecy|C|DMU -#207|Shore Up|C|DMU -#208|Astor, Bearer of Blades|R|DMU -#209|Meria, Scholar of Antiquity|R|DMU -#210|Mesa Cavalier|C|DMU -#211|Stall for Time|C|DMU -#212|Take Up the Shield|C|DMU -#213|Academy Loremaster|R|DMU -#214|The Phasing of Zhalfir|R|DMU -#215|Protect the Negotiators|U|DMU -#216|Voda Sea Scavenger|C|DMU -#217|Vodalian Hexcatcher|R|DMU -#218|Volshe Tideturner|C|DMU -#219|Monstrous War-Leech|U|DMU -#220|Shadow-Rite Priest|R|DMU -#221|Stronghold Arena|R|DMU -#222|Viashino Branchrider|C|DMU -#223|Colossal Growth|C|DMU -#224|Snarespinner|C|DMU -#225|Threats Undetected|R|DMU -#226|The World Spell|M|DMU -#227|Hero's Heirloom|U|DMU -#228|Walking Bulwark|U|DMU -#229|Plaza of Heroes|R|DMU -#230|Thran Portal|R|DMU -#231|Combat Research|U|DMU -#232|Haunting Figment|C|DMU +#179|Shadow-Rite Priest|R|DMU +#180|Stronghold Arena|R|DMU +#181|Hurler Cyclops|U|DMU +#182|Jaya's Firenado|C|DMU +#183|Molten Monstrosity|C|DMU +#184|Thrill of Possibility|C|DMU +#185|Yavimaya Steelcrusher|C|DMU +#186|Leaf-Crowned Visionary|R|DMU +#187|Scout the Wilderness|C|DMU +#188|Urborg Lhurgoyf|R|DMU +#189|Automatic Librarian|C|DMU +#190|Jodah's Codex|U|DMU +#191|Relic of Legends|U|DMU +#192|Shield-Wall Sentinel|C|DMU +#193|Walking Bulwark|U|DMU +#194|Adarkar Wastes|R|DMU +#195|Caves of Koilos|R|DMU +#196|Karplusan Forest|R|DMU +#197|Shivan Reef|R|DMU +#198|Sulfurous Springs|R|DMU +#199|Yavimaya Coast|R|DMU +#200|Combat Research|U|DMU +#201|Ertai's Scorn|U|DMU +#202|Aggressive Sabotage|C|DMU +#203|Argivian Phalanx|C|DMU +#204|Ghitu Amplifier|C|DMU +#205|Crystal Grotto|C|DMU +#206|Goblin Picker|C|DMU +#207|Coalition Warbrute|C|DMU +#208|Splatter Goblin|C|DMU +#209|Phyrexian Vivisector|C|DMU +#210|Battle-Rage Blessing|C|DMU +#211|Meria, Scholar of Antiquity|R|DMU +#212|Coalition Skyknight|U|DMU +#213|Samite Herbalist|C|DMU +#214|Vodalian Hexcatcher|R|DMU +#215|Volshe Tideturner|C|DMU +#216|Braids's Frightful Return|U|DMU +#217|Toxic Abomination|C|DMU +#218|Viashino Branchrider|C|DMU +#219|Colossal Growth|C|DMU +#220|Slimefoot's Survey|U|DMU +#221|Snarespinner|C|DMU +#222|Threats Undetected|R|DMU +#223|The World Spell|M|DMU +#224|Inscribed Tablet|U|DMU +#225|Weatherlight Compleated|M|DMU +#226|Plaza of Heroes|R|DMU +#227|Thran Portal|R|DMU +#228|In Thrall to the Pit|C|DMU +#229|Bone Splinters|C|DMU +#230|Haunting Figment|C|DMU +#231|Pixie Illusionist|C|DMU +#232|Salvaged Manaworker|C|DMU #233|Hexbane Tortoise|C|DMU #234|Elfhame Wurm|C|DMU #235|Barkweave Crusher|C|DMU -#236|Battle-Rage Blessing|C|DMU -#237|Heroic Charge|C|DMU -#238|Jhoira, Ageless Innovator|R|DMU -#239|Zur, Eternal Schemer|M|DMU -#240|Charismatic Vanguard|C|DMU -#241|Samite Herbalist|C|DMU +#236|Furious Bellow|C|DMU +#237|Tidepool Turtle|C|DMU +#238|Heroic Charge|C|DMU +#239|Jhoira, Ageless Innovator|R|DMU +#240|Zur, Eternal Schemer|M|DMU +#241|Charismatic Vanguard|C|DMU #242|Impede Momentum|C|DMU #243|Negate|C|DMU -#244|Sheoldred's Restoration|U|DMU -#245|Tattered Apparition|C|DMU -#246|Smash to Dust|C|DMU -#247|Salvaged Manaworker|C|DMU -#248|Meteorite|C|DMU -#249|Llanowar Stalker|C|DMU -#250|Broken Wings|C|DMU -#251|Hammerhand|C|DMU -#252|Tidepool Turtle|C|DMU -#253|Benalish Faithbonder|C|DMU -#254|Temporary Lockdown|R|DMU -#255|Rundvelt Hordemaster|R|DMU -#256|Yotia Declares War|U|DMU -#257|Timeless Lotus|M|DMU -#258|Vanquisher's Axe|C|DMU +#244|The Phasing of Zhalfir|R|DMU +#245|Sheoldred's Restoration|U|DMU +#246|Tattered Apparition|C|DMU +#247|Smash to Dust|C|DMU +#248|Hero's Heirloom|U|DMU +#249|Timeless Lotus|M|DMU +#250|Meteorite|C|DMU +#251|Llanowar Stalker|C|DMU +#252|Broken Wings|C|DMU +#253|Hammerhand|C|DMU +#254|Benalish Faithbonder|C|DMU +#255|Yotia Declares War|U|DMU +#256|Vanquisher's Axe|C|DMU +#257|Temporary Lockdown|R|DMU +#258|Rundvelt Hordemaster|R|DMU #259|Founding the Third Path|U|DMU #260|Chaotic Transformation|R|DMU #261|Urza Assembles the Titans|R|DMU diff --git a/forge-gui/res/editions/30th Anniversary Edition.txt b/forge-gui/res/editions/30th Anniversary Edition.txt index 3420c289735..4b22a7f7d65 100644 --- a/forge-gui/res/editions/30th Anniversary Edition.txt +++ b/forge-gui/res/editions/30th Anniversary Edition.txt @@ -3,6 +3,10 @@ Code=30A Date=2022-11-28 Name=30th Anniversary Edition Type=Collector_Edition +BoosterCovers=3 +Booster=7 Common:fromsheet("30A cards"), 3 Uncommon:fromSheet("30A cards"), 1 Rare:fromSheet("30A cards"), 2 BasicLand:fromSheet("30A cards"), 1 fromSheet("30A retrolands"), 1 fromSheet("30A retrocards") +Prerelease=6 Boosters, 1 RareMythic+ +BoosterBox=36 ScryfallCode=30A [cards] @@ -601,6 +605,306 @@ ScryfallCode=30A 593 L Forest @Christopher Rush 594 L Forest @Christopher Rush +[retrocards] +1 Animate Wall|30A|2 +1 Armageddon|30A|2 +1 Balance|30A|2 +1 Benalish Hero|30A|2 +1 Black Ward|30A|2 +1 Blaze of Glory|30A|2 +1 Blessing|30A|2 +1 Blue Ward|30A|2 +1 Castle|30A|2 +1 Circle of Protection: Black|30A|2 +1 Circle of Protection: Blue|30A|2 +1 Circle of Protection: Green|30A|2 +1 Circle of Protection: Red|30A|2 +1 Circle of Protection: White|30A|2 +1 Consecrate Land|30A|2 +1 Conversion|30A|2 +1 Death Ward|30A|2 +1 Disenchant|30A|2 +1 Farmstead|30A|2 +1 Green Ward|30A|2 +1 Guardian Angel|30A|2 +1 Healing Salve|30A|2 +1 Holy Armor|30A|2 +1 Holy Strength|30A|2 +1 Island Sanctuary|30A|2 +1 Karma|30A|2 +1 Lance|30A|2 +1 Mesa Pegasus|30A|2 +1 Northern Paladin|30A|2 +1 Pearled Unicorn|30A|2 +1 Personal Incarnation|30A|2 +1 Purelace|30A|2 +1 Red Ward|30A|2 +1 Resurrection|30A|2 +1 Reverse Damage|30A|2 +1 Righteousness|30A|2 +1 Samite Healer|30A|2 +1 Savannah Lions|30A|2 +1 Serra Angel|30A|2 +1 Swords to Plowshares|30A|2 +1 Veteran Bodyguard|30A|2 +1 Wall of Swords|30A|2 +1 White Knight|30A|2 +1 White Ward|30A|2 +1 Wrath of God|30A|2 +1 Air Elemental|30A|2 +1 Ancestral Recall|30A|2 +1 Animate Artifact|30A|2 +1 Blue Elemental Blast|30A|2 +1 Braingeyser|30A|2 +1 Clone|30A|2 +1 Control Magic|30A|2 +1 Copy Artifact|30A|2 +1 Counterspell|30A|2 +1 Creature Bond|30A|2 +1 Drain Power|30A|2 +1 Feedback|30A|2 +1 Flight|30A|2 +1 Invisibility|30A|2 +1 Jump|30A|2 +1 Lifetap|30A|2 +1 Lord of Atlantis|30A|2 +1 Magical Hack|30A|2 +1 Mahamoti Djinn|30A|2 +1 Mana Short|30A|2 +1 Merfolk of the Pearl Trident|30A|2 +1 Phantasmal Forces|30A|2 +1 Phantasmal Terrain|30A|2 +1 Phantom Monster|30A|2 +1 Pirate Ship|30A|2 +1 Power Leak|30A|2 +1 Power Sink|30A|2 +1 Prodigal Sorcerer|30A|2 +1 Psionic Blast|30A|2 +1 Psychic Venom|30A|2 +1 Sea Serpent|30A|2 +1 Siren's Call|30A|2 +1 Sleight of Mind|30A|2 +1 Spell Blast|30A|2 +1 Stasis|30A|2 +1 Steal Artifact|30A|2 +1 Thoughtlace|30A|2 +1 Time Walk|30A|2 +1 Timetwister|30A|2 +1 Twiddle|30A|2 +1 Unsummon|30A|2 +1 Vesuvan Doppelganger|30A|2 +1 Volcanic Eruption|30A|2 +1 Wall of Air|30A|2 +1 Wall of Water|30A|2 +1 Water Elemental|30A|2 +1 Animate Dead|30A|2 +1 Bad Moon|30A|2 +1 Black Knight|30A|2 +1 Bog Wraith|30A|2 +1 Cursed Land|30A|2 +1 Dark Ritual|30A|2 +1 Deathgrip|30A|2 +1 Deathlace|30A|2 +1 Demonic Hordes|30A|2 +1 Demonic Tutor|30A|2 +1 Drain Life|30A|2 +1 Drudge Skeletons|30A|2 +1 Evil Presence|30A|2 +1 Fear|30A|2 +1 Frozen Shade|30A|2 +1 Gloom|30A|2 +1 Howl from Beyond|30A|2 +1 Hypnotic Specter|30A|2 +1 Lich|30A|2 +1 Lord of the Pit|30A|2 +1 Mind Twist|30A|2 +1 Nether Shadow|30A|2 +1 Nettling Imp|30A|2 +1 Nightmare|30A|2 +1 Paralyze|30A|2 +1 Pestilence|30A|2 +1 Plague Rats|30A|2 +1 Raise Dead|30A|2 +1 Royal Assassin|30A|2 +1 Sacrifice|30A|2 +1 Scathe Zombies|30A|2 +1 Scavenging Ghoul|30A|2 +1 Sengir Vampire|30A|2 +1 Simulacrum|30A|2 +1 Sinkhole|30A|2 +1 Terror|30A|2 +1 Unholy Strength|30A|2 +1 Wall of Bone|30A|2 +1 Warp Artifact|30A|2 +1 Sol Ring|30A|2 +1 Will-o'-the-Wisp|30A|2 +1 Word of Command|30A|2 +1 Zombie Master|30A|2 +1 Burrowing|30A|2 +1 Chaoslace|30A|2 +1 Disintegrate|30A|2 +1 Dragon Whelp|30A|2 +1 Dwarven Demolition Team|30A|2 +1 Dwarven Warriors|30A|2 +1 Earth Elemental|30A|2 +1 Earthquake|30A|2 +1 False Orders|30A|2 +1 Fire Elemental|30A|2 +1 Fireball|30A|2 +1 Firebreathing|30A|2 +1 Flashfires|30A|2 +1 Fork|30A|2 +1 Goblin Balloon Brigade|30A|2 +1 Goblin King|30A|2 +1 Granite Gargoyle|30A|2 +1 Gray Ogre|30A|2 +1 Hill Giant|30A|2 +1 Hurloon Minotaur|30A|2 +1 Ironclaw Orcs|30A|2 +1 Keldon Warlord|30A|2 +1 Lightning Bolt|30A|2 +1 Mana Flare|30A|2 +1 Manabarbs|30A|2 +1 Mons's Goblin Raiders|30A|2 +1 Orcish Artillery|30A|2 +1 Orcish Oriflamme|30A|2 +1 Power Surge|30A|2 +1 Raging River|30A|2 +1 Red Elemental Blast|30A|2 +1 Roc of Kher Ridges|30A|2 +1 Rock Hydra|30A|2 +1 Sedge Troll|30A|2 +1 Shatter|30A|2 +1 Shivan Dragon|30A|2 +1 Smoke|30A|2 +1 Stone Giant|30A|2 +1 Stone Rain|30A|2 +1 Tunnel|30A|2 +1 Two-Headed Giant of Foriys|30A|2 +1 Uthden Troll|30A|2 +1 Wall of Fire|30A|2 +1 Wall of Stone|30A|2 +1 Wheel of Fortune|30A|2 +1 Aspect of Wolf|30A|2 +1 Berserk|30A|2 +1 Birds of Paradise|30A|2 +1 Camouflage|30A|2 +1 Channel|30A|2 +1 Cockatrice|30A|2 +1 Craw Wurm|30A|2 +1 Elvish Archers|30A|2 +1 Fastbond|30A|2 +1 Fog|30A|2 +1 Force of Nature|30A|2 +1 Fungusaur|30A|2 +1 Gaea's Liege|30A|2 +1 Giant Growth|30A|2 +1 Giant Spider|30A|2 +1 Grizzly Bears|30A|2 +1 Hurricane|30A|2 +1 Ice Storm|30A|2 +1 Instill Energy|30A|2 +1 Ironroot Treefolk|30A|2 +1 Kudzu|30A|2 +1 Ley Druid|30A|2 +1 Lifeforce|30A|2 +1 Lifelace|30A|2 +1 Living Artifact|30A|2 +1 Living Lands|30A|2 +1 Llanowar Elves|30A|2 +1 Lure|30A|2 +1 Natural Selection|30A|2 +1 Regeneration|30A|2 +1 Regrowth|30A|2 +1 Scryb Sprites|30A|2 +1 Shanodin Dryads|30A|2 +1 Stream of Life|30A|2 +1 Thicket Basilisk|30A|2 +1 Timber Wolves|30A|2 +1 Tranquility|30A|2 +1 Tsunami|30A|2 +1 Verduran Enchantress|30A|2 +1 Wall of Brambles|30A|2 +1 Wall of Ice|30A|2 +1 Wall of Wood|30A|2 +1 Wanderlust|30A|2 +1 War Mammoth|30A|2 +1 Web|30A|2 +1 Wild Growth|30A|2 +1 Ankh of Mishra|30A|2 +1 Basalt Monolith|30A|2 +1 Black Lotus|30A|2 +1 Black Vise|30A|2 +1 Celestial Prism|30A|2 +1 Chaos Orb|30A|2 +1 Clockwork Beast|30A|2 +1 Conservator|30A|2 +1 Copper Tablet|30A|2 +1 Crystal Rod|30A|2 +1 Cyclopean Tomb|30A|2 +1 Dingus Egg|30A|2 +1 Disrupting Scepter|30A|2 +1 Forcefield|30A|2 +1 Gauntlet of Might|30A|2 +1 Glasses of Urza|30A|2 +1 Helm of Chatzuk|30A|2 +1 The Hive|30A|2 +1 Howling Mine|30A|2 +1 Icy Manipulator|30A|2 +1 Illusionary Mask|30A|2 +1 Iron Star|30A|2 +1 Ivory Cup|30A|2 +1 Jade Monolith|30A|2 +1 Jade Statue|30A|2 +1 Jayemdae Tome|30A|2 +1 Juggernaut|30A|2 +1 Kormus Bell|30A|2 +1 Library of Leng|30A|2 +1 Living Wall|30A|2 +1 Mana Vault|30A|2 +1 Meekstone|30A|2 +1 Mox Emerald|30A|2 +1 Mox Jet|30A|2 +1 Mox Pearl|30A|2 +1 Mox Ruby|30A|2 +1 Mox Sapphire|30A|2 +1 Nevinyrral's Disk|30A|2 +1 Obsianus Golem|30A|2 +1 Rod of Ruin|30A|2 +1 Sol Ring|30A|2 +1 Soul Net|30A|2 +1 Sunglasses of Urza|30A|2 +1 Throne of Bone|30A|2 +1 Time Vault|30A|2 +1 Winter Orb|30A|2 +1 Wooden Sphere|30A|2 +1 Badlands|30A|2 +1 Bayou|30A|2 +1 Plateau|30A|2 +1 Savannah|30A|2 +1 Scrubland|30A|2 +1 Taiga|30A|2 +1 Tropical Island|30A|2 +1 Tundra|30A|2 +1 Underground Sea|30A|2 +1 Volcanic Island|30A|2 + +[retrolands] +1 Plains|30A|4 +1 Plains|30A|5 +1 Plains|30A|6 +1 Island|30A|4 +1 Island|30A|5 +1 Island|30A|6 +1 Swamp|30A|4 +1 Swamp|30A|5 +1 Swamp|30A|6 +1 Mountain|30A|4 +1 Mountain|30A|5 +1 Mountain|30A|6 +1 Forest|30A|4 +1 Forest|30A|5 +1 Forest|30A|6 [tokens] b_1_1_skeleton diff --git a/forge-gui/res/editions/The Brothers War.txt b/forge-gui/res/editions/The Brothers War.txt index 6eafc21a3ea..de28cd5417f 100644 --- a/forge-gui/res/editions/The Brothers War.txt +++ b/forge-gui/res/editions/The Brothers War.txt @@ -5,6 +5,10 @@ Name=The Brothers' War Code2=BRO MciCode=bro Type=Expansion +BoosterCovers=3 +Booster=9 Common:fromsheet("BRO cards"), 3 Uncommon:fromSheet("BRO cards"), 1 RareMythic:fromSheet("BRO cards"), 1 fromSheet("BRO lands"), 1 fromSheet("BRR cards") +Prerelease=6 Boosters, 1 RareMythic+ +BoosterBox=36 ScryfallCode=BRO [cards] @@ -403,6 +407,28 @@ ScryfallCode=BRO 383 U Sardian Cliffstomper @Joseph Weston 384 U Blanchwood Armor @Manuel Castañón +[lands] +2 Plains|BRO|1 +2 Plains|BRO|2 +1 Plains|BRO|3 +1 Plains|BRO|4 +2 Island|BRO|1 +2 Island|BRO|2 +1 Island|BRO|3 +1 Island|BRO|4 +2 Swamp|BRO|1 +2 Swamp|BRO|2 +1 Swamp|BRO|3 +1 Swamp|BRO|4 +2 Mountain|BRO|1 +2 Mountain|BRO|2 +1 Mountain|BRO|3 +1 Mountain|BRO|4 +2 Forest|BRO|1 +2 Forest|BRO|2 +1 Forest|BRO|3 +1 Forest|BRO|4 + [tokens] c_0_0_a_construct_total_artifacts c_1_1_a_soldier From 09636fabf01a435530607be220846aac5e18fb48 Mon Sep 17 00:00:00 2001 From: paulsnoops Date: Tue, 8 Nov 2022 20:50:24 +0000 Subject: [PATCH 11/32] Remove - from cardscript file names --- .../b/{battle-rage_blessing.txt => battle_rage_blessing.txt} | 0 ...ensleeves_maro-sorcerer.txt => greensleeves_maro_sorcerer.txt} | 0 .../l/{leaf-crowned_visionary.txt => leaf_crowned_visionary.txt} | 0 .../m/{monstrous_war-leech.txt => monstrous_war_leech.txt} | 0 .../n/{nine-fingers_keene.txt => nine_fingers_keene.txt} | 0 .../s/{shadow-rite_priest.txt => shadow_rite_priest.txt} | 0 .../s/{shield-wall_sentinel.txt => shield_wall_sentinel.txt} | 0 .../t/{the_ever-changing_dane.txt => the_ever_changing_dane.txt} | 0 .../t/{two-headed_hellkite.txt => two_headed_hellkite.txt} | 0 .../{blast-furnace_hellkite.txt => blast_furnace_hellkite.txt} | 0 .../{hierophant_bio-titan.txt => hierophant_bio_titan.txt} | 0 .../{queen_kayla_bin-kroog.txt => queen_kayla_bin_kroog.txt} | 0 .../upcoming/{screamer-killer.txt => screamer_killer.txt} | 0 .../{wyll_pact-bound_duelist.txt => wyll_pact_bound_duelist.txt} | 0 .../y/{yuan-ti_scaleshield.txt => yuan_ti_scaleshield.txt} | 0 15 files changed, 0 insertions(+), 0 deletions(-) rename forge-gui/res/cardsfolder/b/{battle-rage_blessing.txt => battle_rage_blessing.txt} (100%) rename forge-gui/res/cardsfolder/g/{greensleeves_maro-sorcerer.txt => greensleeves_maro_sorcerer.txt} (100%) rename forge-gui/res/cardsfolder/l/{leaf-crowned_visionary.txt => leaf_crowned_visionary.txt} (100%) rename forge-gui/res/cardsfolder/m/{monstrous_war-leech.txt => monstrous_war_leech.txt} (100%) rename forge-gui/res/cardsfolder/n/{nine-fingers_keene.txt => nine_fingers_keene.txt} (100%) rename forge-gui/res/cardsfolder/s/{shadow-rite_priest.txt => shadow_rite_priest.txt} (100%) rename forge-gui/res/cardsfolder/s/{shield-wall_sentinel.txt => shield_wall_sentinel.txt} (100%) rename forge-gui/res/cardsfolder/t/{the_ever-changing_dane.txt => the_ever_changing_dane.txt} (100%) rename forge-gui/res/cardsfolder/t/{two-headed_hellkite.txt => two_headed_hellkite.txt} (100%) rename forge-gui/res/cardsfolder/upcoming/{blast-furnace_hellkite.txt => blast_furnace_hellkite.txt} (100%) rename forge-gui/res/cardsfolder/upcoming/{hierophant_bio-titan.txt => hierophant_bio_titan.txt} (100%) rename forge-gui/res/cardsfolder/upcoming/{queen_kayla_bin-kroog.txt => queen_kayla_bin_kroog.txt} (100%) rename forge-gui/res/cardsfolder/upcoming/{screamer-killer.txt => screamer_killer.txt} (100%) rename forge-gui/res/cardsfolder/w/{wyll_pact-bound_duelist.txt => wyll_pact_bound_duelist.txt} (100%) rename forge-gui/res/cardsfolder/y/{yuan-ti_scaleshield.txt => yuan_ti_scaleshield.txt} (100%) diff --git a/forge-gui/res/cardsfolder/b/battle-rage_blessing.txt b/forge-gui/res/cardsfolder/b/battle_rage_blessing.txt similarity index 100% rename from forge-gui/res/cardsfolder/b/battle-rage_blessing.txt rename to forge-gui/res/cardsfolder/b/battle_rage_blessing.txt diff --git a/forge-gui/res/cardsfolder/g/greensleeves_maro-sorcerer.txt b/forge-gui/res/cardsfolder/g/greensleeves_maro_sorcerer.txt similarity index 100% rename from forge-gui/res/cardsfolder/g/greensleeves_maro-sorcerer.txt rename to forge-gui/res/cardsfolder/g/greensleeves_maro_sorcerer.txt diff --git a/forge-gui/res/cardsfolder/l/leaf-crowned_visionary.txt b/forge-gui/res/cardsfolder/l/leaf_crowned_visionary.txt similarity index 100% rename from forge-gui/res/cardsfolder/l/leaf-crowned_visionary.txt rename to forge-gui/res/cardsfolder/l/leaf_crowned_visionary.txt diff --git a/forge-gui/res/cardsfolder/m/monstrous_war-leech.txt b/forge-gui/res/cardsfolder/m/monstrous_war_leech.txt similarity index 100% rename from forge-gui/res/cardsfolder/m/monstrous_war-leech.txt rename to forge-gui/res/cardsfolder/m/monstrous_war_leech.txt diff --git a/forge-gui/res/cardsfolder/n/nine-fingers_keene.txt b/forge-gui/res/cardsfolder/n/nine_fingers_keene.txt similarity index 100% rename from forge-gui/res/cardsfolder/n/nine-fingers_keene.txt rename to forge-gui/res/cardsfolder/n/nine_fingers_keene.txt diff --git a/forge-gui/res/cardsfolder/s/shadow-rite_priest.txt b/forge-gui/res/cardsfolder/s/shadow_rite_priest.txt similarity index 100% rename from forge-gui/res/cardsfolder/s/shadow-rite_priest.txt rename to forge-gui/res/cardsfolder/s/shadow_rite_priest.txt diff --git a/forge-gui/res/cardsfolder/s/shield-wall_sentinel.txt b/forge-gui/res/cardsfolder/s/shield_wall_sentinel.txt similarity index 100% rename from forge-gui/res/cardsfolder/s/shield-wall_sentinel.txt rename to forge-gui/res/cardsfolder/s/shield_wall_sentinel.txt diff --git a/forge-gui/res/cardsfolder/t/the_ever-changing_dane.txt b/forge-gui/res/cardsfolder/t/the_ever_changing_dane.txt similarity index 100% rename from forge-gui/res/cardsfolder/t/the_ever-changing_dane.txt rename to forge-gui/res/cardsfolder/t/the_ever_changing_dane.txt diff --git a/forge-gui/res/cardsfolder/t/two-headed_hellkite.txt b/forge-gui/res/cardsfolder/t/two_headed_hellkite.txt similarity index 100% rename from forge-gui/res/cardsfolder/t/two-headed_hellkite.txt rename to forge-gui/res/cardsfolder/t/two_headed_hellkite.txt diff --git a/forge-gui/res/cardsfolder/upcoming/blast-furnace_hellkite.txt b/forge-gui/res/cardsfolder/upcoming/blast_furnace_hellkite.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/blast-furnace_hellkite.txt rename to forge-gui/res/cardsfolder/upcoming/blast_furnace_hellkite.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hierophant_bio-titan.txt b/forge-gui/res/cardsfolder/upcoming/hierophant_bio_titan.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hierophant_bio-titan.txt rename to forge-gui/res/cardsfolder/upcoming/hierophant_bio_titan.txt diff --git a/forge-gui/res/cardsfolder/upcoming/queen_kayla_bin-kroog.txt b/forge-gui/res/cardsfolder/upcoming/queen_kayla_bin_kroog.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/queen_kayla_bin-kroog.txt rename to forge-gui/res/cardsfolder/upcoming/queen_kayla_bin_kroog.txt diff --git a/forge-gui/res/cardsfolder/upcoming/screamer-killer.txt b/forge-gui/res/cardsfolder/upcoming/screamer_killer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/screamer-killer.txt rename to forge-gui/res/cardsfolder/upcoming/screamer_killer.txt diff --git a/forge-gui/res/cardsfolder/w/wyll_pact-bound_duelist.txt b/forge-gui/res/cardsfolder/w/wyll_pact_bound_duelist.txt similarity index 100% rename from forge-gui/res/cardsfolder/w/wyll_pact-bound_duelist.txt rename to forge-gui/res/cardsfolder/w/wyll_pact_bound_duelist.txt diff --git a/forge-gui/res/cardsfolder/y/yuan-ti_scaleshield.txt b/forge-gui/res/cardsfolder/y/yuan_ti_scaleshield.txt similarity index 100% rename from forge-gui/res/cardsfolder/y/yuan-ti_scaleshield.txt rename to forge-gui/res/cardsfolder/y/yuan_ti_scaleshield.txt From 3124e567bf8a078bb9ce0d042bdf499b96f2406d Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 17:52:32 -0500 Subject: [PATCH 12/32] fix typos from PR 1778 --- forge-gui/res/cardsfolder/b/brass_knuckles.txt | 1 + .../upcoming/liberator_urzas_battlethopter.txt | 6 +++--- .../res/cardsfolder/upcoming/simian_simulacrum.txt | 2 +- .../res/cardsfolder/upcoming/thran_power_suit.txt | 6 ++++-- forge-gui/res/cardsfolder/upcoming/urzas_sylex.txt | 10 +++++----- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/forge-gui/res/cardsfolder/b/brass_knuckles.txt b/forge-gui/res/cardsfolder/b/brass_knuckles.txt index 9812bdf4bd2..1abf07ad97c 100644 --- a/forge-gui/res/cardsfolder/b/brass_knuckles.txt +++ b/forge-gui/res/cardsfolder/b/brass_knuckles.txt @@ -7,4 +7,5 @@ S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Double Strike | K:Equip:1 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddSVar$ EquipMe | Secondary$ True SVar:EquipMe:SVar:EquipMe:Multiple +DeckHas:Ability$Token Oracle:When you cast this spell, copy it. (The copy becomes a token.)\nEquipped creature has double strike as long as two or more Equipment are attached to it.\nEquip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/upcoming/liberator_urzas_battlethopter.txt b/forge-gui/res/cardsfolder/upcoming/liberator_urzas_battlethopter.txt index a6edbec8902..8af12213a07 100644 --- a/forge-gui/res/cardsfolder/upcoming/liberator_urzas_battlethopter.txt +++ b/forge-gui/res/cardsfolder/upcoming/liberator_urzas_battlethopter.txt @@ -5,9 +5,9 @@ PT:1/2 K:Flash K:Flying S:Mode$ CastWithFlash | ValidCard$ Artifact,Card.Colorless | ValidSA$ Spell | Caster$ You | Description$ You may cast colorless spells and artifact spells as though they had flash. -T:Mode$ SpellCast | ValidCard$ Card | ValidSA$ Spell.ManaSpent GTX | Execute$ TrigCounter | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell, if the amount of mana spent to cast that spell is greater than CARDNAME power, put a +1/+1 counter on NICKNAME. +T:Mode$ SpellCast | ValidCard$ Card | ValidSA$ Spell.ManaSpent GTX | Execute$ TrigCounter | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell, if the amount of mana spent to cast that spell is greater than CARDNAME's power, put a +1/+1 counter on NICKNAME. SVar:TrigCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 SVar:X:Count$CardPower -DeckHints:Type$Urza|Eldrazi|Ugin|Artificer -DeckHas:Type$Artifact & Ability$Counters +DeckHints:Type$Urza|Eldrazi|Ugin|Artificer|Artifact & Color$Colorless +DeckHas:Ability$Counters Oracle:Flash\nFlying\nYou may cast colorless spells and artifact spells as though they had flash.\nWhenever you cast a spell, if the amount of mana spent to cast that spell is greater than Liberator, Urza's Battlethopter's power, put a +1/+1 counter on Liberator. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/simian_simulacrum.txt b/forge-gui/res/cardsfolder/upcoming/simian_simulacrum.txt index 00346c6adf3..d8220e6fed6 100644 --- a/forge-gui/res/cardsfolder/upcoming/simian_simulacrum.txt +++ b/forge-gui/res/cardsfolder/upcoming/simian_simulacrum.txt @@ -3,7 +3,7 @@ ManaCost:3 Types:Artifact Creature Ape PT:2/1 K:Unearth:2 G G -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$When CARDNAME enters the battlefield, put two +1/+1 counters on target creature you control. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters the battlefield, put two +1/+1 counters on target creature you control. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 2 DeckHas:Ability$Graveyard|Counters DeckHints:Color$Green diff --git a/forge-gui/res/cardsfolder/upcoming/thran_power_suit.txt b/forge-gui/res/cardsfolder/upcoming/thran_power_suit.txt index d1713abbee2..d599da39a9e 100644 --- a/forge-gui/res/cardsfolder/upcoming/thran_power_suit.txt +++ b/forge-gui/res/cardsfolder/upcoming/thran_power_suit.txt @@ -1,9 +1,11 @@ Name:Thran Power Suit ManaCost:2 Types:Artifact Equipment -S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddToughness$ X | AddPower$ X | AddKeyword$ Ward:2 | Description$ Equipped creature gets +1/+1 for each Aura and Equipment attached to it and has Ward {2}. (Whenever equipped creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.) +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddToughness$ X | AddPower$ X | AddKeyword$ Ward:2 | AddSVar$ EquipMe & EnchantMe | Description$ Equipped creature gets +1/+1 for each Aura and Equipment attached to it and has Ward {2}. (Whenever equipped creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.) +SVar:EquipMe:SVar:EquipMe:Multiple +SVar:EnchantMe:SVar:EnchantMe:Multiple K:Equip:2 SVar:X:Count$Valid Aura.AttachedTo Creature.EquippedBy/Plus.Y SVar:Y:Count$Valid Equipment.AttachedTo Creature.EquippedBy DeckHints:Type$Aura|Equipment -Oracle:Equipped creature gets +1/+1 for each Aura and Equipment attached to it and has Ward {2}. (Whenever equipped creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) \ No newline at end of file +Oracle:Equipped creature gets +1/+1 for each Aura and Equipment attached to it and has Ward {2}. (Whenever equipped creature becomes the target of a spell or ability an opponent controls, counter it unless that player pays {2}.)\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/upcoming/urzas_sylex.txt b/forge-gui/res/cardsfolder/upcoming/urzas_sylex.txt index 0735a9645a6..494838f1a89 100644 --- a/forge-gui/res/cardsfolder/upcoming/urzas_sylex.txt +++ b/forge-gui/res/cardsfolder/upcoming/urzas_sylex.txt @@ -1,12 +1,12 @@ Name:Urza's Sylex ManaCost:3 Types:Legendary Artifact -A:AB$ RepeatEach | Cost$ 2 W W T Exile<1/CARDNAME> | RepeatPlayers$ Player | RepeatSubAbility$ ChooseSixLands | SorcerySpeed$ True | SubAbility$ DestroyAll | SpellDescription$ Each player chooses six lands they control. Destroy all other permanents. Activate only as a sorcery. -SVar:ChooseSixLands:DB$ ChooseCard | Defined$ Remembered | Choices$ Land.RememberedPlayerCtrl | ChoiceTitle$ Choose six lands to keep. | Amount$ 6 | Mandatory$ True | RememberChosen$ True -SVar:DestroyAll:DB$ DestroyAll | ValidCards$ Permanent.IsNotRemembered | StackDescription$ Destroy all other permanents. | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +A:AB$ RepeatEach | Cost$ 2 W W T Exile<1/CARDNAME> | RepeatPlayers$ Player | RepeatSubAbility$ ChooseSixLands | SorcerySpeed$ True | SubAbility$ DestroyAll | SpellDescription$ Each player chooses six lands they control. +SVar:ChooseSixLands:DB$ ChooseCard | Defined$ Remembered | Choices$ Land.RememberedPlayerCtrl | ChoiceTitle$ Choose six lands you control | Amount$ 6 | Mandatory$ True | RememberChosen$ True +SVar:DestroyAll:DB$ DestroyAll | ValidCards$ Permanent.IsNotRemembered | SubAbility$ DBCleanup | SpellDescription$ Destroy all other permanents. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | SpellDescription$ Activate only as a sorcery. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Exile | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigSearch | TriggerDescription$ When CARDNAME is put into exile from the battlefield, you may pay {2}. If you do, search your library for a planeswalker card, reveal it, put it into your hand, then shuffle. SVar:TrigSearch:AB$ ChangeZone | Cost$ 2 | ChangeType$ Planeswalker.YouOwn | Origin$ Library | Destination$ Hand DeckHas:Ability$Sacrifice DeckHints:Type$Planeswalker -Oracle:{2}{W}{W},{T}, Exile Urza's Sylex: Each player chooses six lands they control. Destroy all other permanents. Activate only as a sorcery.\nWhen Urza's Sylex is put into exile from the battlefield, you may pay {2}. If you do, search your library for a planeswalker card, reveal it, put it into your hand, then shuffle. +Oracle:{2}{W}{W}, {T}, Exile Urza's Sylex: Each player chooses six lands they control. Destroy all other permanents. Activate only as a sorcery.\nWhen Urza's Sylex is put into exile from the battlefield, you may pay {2}. If you do, search your library for a planeswalker card, reveal it, put it into your hand, then shuffle. From 88cb12158a72e98b33e0f116ebe4f46189eb16c5 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 19:54:39 -0500 Subject: [PATCH 13/32] phyrexian_fleshgorger.txt --- .../cardsfolder/upcoming/phyrexian_fleshgorger.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/phyrexian_fleshgorger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/phyrexian_fleshgorger.txt b/forge-gui/res/cardsfolder/upcoming/phyrexian_fleshgorger.txt new file mode 100644 index 00000000000..dac37b95cc6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/phyrexian_fleshgorger.txt @@ -0,0 +1,12 @@ +Name:Phyrexian Fleshgorger +ManaCost:7 +Types:Artifact Creature Phyrexian Wurm +PT:7/5 +K:Prototype:1 B B:3:3 +K:Menace +K:Lifelink +K:Ward:PayLife +SVar:X:Count$CardPower +DeckHas:Ability$LifeGain +DeckHints:Color$Black +Oracle:Prototype {1}{B}{B} — 3/3 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nMenace, lifelink\nWard—Pay life equal to Phyrexian Fleshgorger's power. From f09bbc15bdf05f467f012bad2a68c553c4e8109e Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 19:55:01 -0500 Subject: [PATCH 14/32] minthara_merciless_soul.txt update Ward --- forge-gui/res/cardsfolder/m/minthara_merciless_soul.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/m/minthara_merciless_soul.txt b/forge-gui/res/cardsfolder/m/minthara_merciless_soul.txt index 71ef84a6d07..cddb1e7b3f1 100644 --- a/forge-gui/res/cardsfolder/m/minthara_merciless_soul.txt +++ b/forge-gui/res/cardsfolder/m/minthara_merciless_soul.txt @@ -2,7 +2,7 @@ Name:Minthara, Merciless Soul ManaCost:2 W B Types:Legendary Creature Elf Cleric PT:2/2 -K:Ward:X +K:Ward:X:where X is the number of experience counters you have T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Revolt$ True | Execute$ TrigExperience | TriggerDescription$ At the beginning of your end step, if a permanent you controlled left the battlefield this turn, you get an experience counter. SVar:TrigExperience:DB$ PutCounter | Defined$ You | CounterType$ Experience | CounterNum$ 1 S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ X | Description$ Creatures you control get +1/+0 for each experience counter you have. From ca7083b96d23dacbb4aebcd0e67d5465e8ffa9fd Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 19:55:15 -0500 Subject: [PATCH 15/32] mishra_tamer_of_mak_fawa.txt update --- .../res/cardsfolder/upcoming/mishra_tamer_of_mak_fawa.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/mishra_tamer_of_mak_fawa.txt b/forge-gui/res/cardsfolder/upcoming/mishra_tamer_of_mak_fawa.txt index f7fbd6f6ab2..222c5405ada 100644 --- a/forge-gui/res/cardsfolder/upcoming/mishra_tamer_of_mak_fawa.txt +++ b/forge-gui/res/cardsfolder/upcoming/mishra_tamer_of_mak_fawa.txt @@ -2,8 +2,8 @@ Name:Mishra, Tamer of Mak Fawa ManaCost:3 B R Types:Legendary Creature Human Artificer PT:4/4 -S:Mode$ Continuous | Affected$ Permanent.YouCtrl | AddKeyword$ Ward:Sac<1/Permanent> | Description$ Permanents you control have "Ward - Sacrifice a permanent." +S:Mode$ Continuous | Affected$ Permanent.YouCtrl | AddKeyword$ Ward:Sac<1/Permanent> | Description$ Permanents you control have "Ward—Sacrifice a permanent." S:Mode$ Continuous | Affected$ Artifact.YouOwn | AddKeyword$ Unearth:1 B R | AffectedZone$ Graveyard | Description$ Each artifact card in your graveyard has unearth {1}{B}{R}. ({1}{B}{R}: Return the card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.) -DeckHints:Type$Artifact +DeckHints:Type$Artifact & Ability$Discard|Sacrifice|Mill DeckHas:Ability$Graveyard & Keyword$Ward|Unearth -Oracle:Permanents you control have "Ward - Sacrifice a permanent."\nEach artifact card in your graveyard has unearth {1}{B}{R}. ({1}{B}{R}: Return the card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.) +Oracle:Permanents you control have "Ward—Sacrifice a permanent."\nEach artifact card in your graveyard has unearth {1}{B}{R}. ({1}{B}{R}: Return the card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.) From 5a075c929742ce4ddde853451c56a9a422db7f76 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 19:56:48 -0500 Subject: [PATCH 16/32] CostSacrifice.toString parse Permanent to lowercase --- forge-game/src/main/java/forge/game/cost/CostSacrifice.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/cost/CostSacrifice.java b/forge-game/src/main/java/forge/game/cost/CostSacrifice.java index 329fb45188f..59bf5131025 100644 --- a/forge-game/src/main/java/forge/game/cost/CostSacrifice.java +++ b/forge-game/src/main/java/forge/game/cost/CostSacrifice.java @@ -92,7 +92,8 @@ public class CostSacrifice extends CostPartWithList { } else { String desc; if (this.getTypeDescription() == null) { - desc = CardType.CoreType.isValidEnum(this.getType()) ? this.getType().toLowerCase() : this.getType(); + final String typeS = this.getType(); + desc = typeS.equals("Permanent") || CardType.CoreType.isValidEnum(typeS) ? typeS.toLowerCase() : typeS; } else { desc = this.getTypeDescription(); } From 1a4e67273feb044eea1a0f5d6c658e17246f9a63 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 19:57:42 -0500 Subject: [PATCH 17/32] Card.keywordsToText() improve Ward parsing --- forge-game/src/main/java/forge/game/card/Card.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) 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 c2df8c3f5c5..ae97b41aaf8 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2256,15 +2256,13 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } else if (keyword.startsWith("Ward")) { final String[] k = keyword.split(":"); final Cost cost = new Cost(k[1], false); + final boolean onlyMana = cost.isOnlyManaCost(); + final boolean complex = k[1].contains("X") || k[1].contains("Sac<"); + final String extra = k.length > 2 ? ", " + k[2] + "." : ""; - StringBuilder sbCost = new StringBuilder(k[0]); - if (!cost.isOnlyManaCost()) { - sbCost.append("—"); - } else { - sbCost.append(" "); - } - sbCost.append(cost.toSimpleString()); - sbLong.append(sbCost).append(" (").append(inst.getReminderText()).append(")"); + sbLong.append(k[0]).append(onlyMana ? " " : "—").append(cost.toSimpleString()); + sbLong.append(onlyMana? "" : ".").append(extra); + sbLong.append(!complex ? " (" + (inst.getReminderText()) + ")" : ""); sbLong.append("\r\n"); } else if (keyword.endsWith(" offering")) { String offeringType = keyword.split(" ")[0]; From d100154cc55aeb86b47b6d342d283568489810e8 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 20:19:39 -0500 Subject: [PATCH 18/32] arcane_proxy.txt --- forge-gui/res/cardsfolder/upcoming/arcane_proxy.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/arcane_proxy.txt diff --git a/forge-gui/res/cardsfolder/upcoming/arcane_proxy.txt b/forge-gui/res/cardsfolder/upcoming/arcane_proxy.txt new file mode 100644 index 00000000000..e67d00dfd07 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/arcane_proxy.txt @@ -0,0 +1,12 @@ +Name:Arcane Proxy +ManaCost:7 +Types:Artifact Creature Wizard +PT:4/3 +K:Prototype:1 U U:2:1 +T:Mode$ ChangesZone | ValidCard$ Card.Self+wasCastByYou | Destination$ Battlefield | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, if you cast it, exile target instant or sorcery card with mana value less than or equal to CARDNAME's power from your graveyard. Copy that card. You may cast the copy without paying its mana cost. +SVar:TrigExile:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Select target instant or sorcery card with mana value less than or equal to CARDNAME's power | ValidTgts$ Instant.YouOwn+cmcLEX,Sorcery.YouOwn+cmcLEX | RememberChanged$ True | SubAbility$ DBPlay +SVar:DBPlay:DB$ Play | Valid$ Card.IsRemembered | ValidZone$ Exile | Controller$ You | CopyCard$ True | WithoutManaCost$ True | ValidSA$ Spell | Optional$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHints:Type$Instant|Sorcery & Color$Blue +SVar:X:Count$CardPower +Oracle:Prototype {1}{U}{U} — 2/1 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nWhen Arcane Proxy enters the battlefield, if you cast it, exile target instant or sorcery card with mana value less than or equal to Arcane Proxy's power from your graveyard. Copy that card. You may cast the copy without paying its mana cost. From 838f5c9f0e0b5abb4dbf08c7ce03770b0b256c9c Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 20:20:05 -0500 Subject: [PATCH 19/32] autonomous_assembler.txt --- .../res/cardsfolder/upcoming/autonomous_assembler.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/autonomous_assembler.txt diff --git a/forge-gui/res/cardsfolder/upcoming/autonomous_assembler.txt b/forge-gui/res/cardsfolder/upcoming/autonomous_assembler.txt new file mode 100644 index 00000000000..43c6b75e346 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/autonomous_assembler.txt @@ -0,0 +1,10 @@ +Name:Autonomous Assembler +ManaCost:5 +Types:Artifact Creature Assembly-Worker +PT:4/5 +K:Prototype:1 W:2:2 +K:Vigilance +A:AB$ PutCounter | Cost$ 1 T | ValidTgts$ Assembly-Worker.YouCtrl | TgtPrompt$ Select target Assembly-Worker you control | CounterType$ P1P1 | SpellDescription$ Put a +1/+1 counter on target Assembly-Worker you control. +DeckHas:Ability$Counters +DeckHints:Type$Assembly-Worker & Color$White +Oracle:Prototype {1}{W} — 2/2 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nVigilance\n{1}, {T}: Put a +1/+1 counter on target Assembly-Worker you control. From c30d1bbf2bb16f364f59b35c8fbd25cf328976b0 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 20:20:48 -0500 Subject: [PATCH 20/32] hulking_metamorph.txt --- .../res/cardsfolder/upcoming/hulking_metamorph.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/hulking_metamorph.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hulking_metamorph.txt b/forge-gui/res/cardsfolder/upcoming/hulking_metamorph.txt new file mode 100644 index 00000000000..1ce741271ce --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hulking_metamorph.txt @@ -0,0 +1,11 @@ +Name:Hulking Metamorph +ManaCost:9 +Types:Artifact Creature Shapeshifter +PT:7/7 +K:Prototype:2 U U:3:3 +K:ETBReplacement:Copy:DBCopy:Optional +SVar:DBCopy:DB$ Clone | Choices$ Artifact.YouCtrl+Other,Creature.YouCtrl+Other | AddTypes$ Artifact & Creature | SetPower$ X | SetToughness$ Y | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of an artifact or creature you control, except it's an artifact creature in addition to its other types, and its power and toughness are equal to CARDNAME's power and toughness. +SVar:X:Count$CardPower +SVar:Y:Count$CardToughness +DeckHints:Color$Blue +Oracle:Prototype {2}{U}{U} — 3/3 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nYou may have Hulking Metamorph enter the battlefield as a copy of an artifact or creature you control, except it's an artifact creature in addition to its other types, and its power and toughness are equal to Hulking Metamorph's power and toughness. From 387084fbe50c8280547eb36ad66eb16d065d3e02 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 20:20:57 -0500 Subject: [PATCH 21/32] woodcaller_automaton.txt --- .../cardsfolder/upcoming/woodcaller_automaton.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/woodcaller_automaton.txt diff --git a/forge-gui/res/cardsfolder/upcoming/woodcaller_automaton.txt b/forge-gui/res/cardsfolder/upcoming/woodcaller_automaton.txt new file mode 100644 index 00000000000..1bb0852c6a6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/woodcaller_automaton.txt @@ -0,0 +1,13 @@ +Name:Woodcaller Automaton +ManaCost:10 +Types:Artifact Creature Construct +PT:8/8 +K:Prototype:2 G G:3:3 +T:Mode$ ChangesZone | ValidCard$ Card.Self+wasCastByYou | Destination$ Battlefield | Execute$ TrigUntap | TriggerDescription$ When CARDNAME enters the battlefield, if you cast it, untap target land you control. It becomes a Treefolk creature with haste and base power and toughness equal to CARDNAME's power and toughness. It's still a land. +SVar:TrigUntap:DB$ Untap | ValidTgts$ Land.YouCtrl | TgtPrompt$ Select target land you control | SubAbility$ DBAnimate +SVar:DBAnimate:DB$ Animate | Power$ X | Toughness$ Y | Defined$ Targeted | Types$ Creature,Treefolk | Keywords$ Haste | Duration$ Permanent +SVar:X:Count$CardPower +SVar:Y:Count$CardToughness +DeckHas:Type$Treefolk +DeckHints:Color$Green +Oracle:Prototype {2}{G}{G} — 3/3 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nWhen Woodcaller Automaton enters the battlefield, if you cast it, untap target land you control. It becomes a Treefolk creature with haste and base power and toughness equal to Woodcaller Automaton's power and toughness. It's still a land. From a246527877fc94fcc8ff9a6c023207c547f60b61 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 20:21:25 -0500 Subject: [PATCH 22/32] soundwave_sonic_spy_soundwave_superior_captain.txt fix --- .../soundwave_sonic_spy_soundwave_superior_captain.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/soundwave_sonic_spy_soundwave_superior_captain.txt b/forge-gui/res/cardsfolder/upcoming/soundwave_sonic_spy_soundwave_superior_captain.txt index d79b27e39c9..06664308715 100644 --- a/forge-gui/res/cardsfolder/upcoming/soundwave_sonic_spy_soundwave_superior_captain.txt +++ b/forge-gui/res/cardsfolder/upcoming/soundwave_sonic_spy_soundwave_superior_captain.txt @@ -2,8 +2,8 @@ Name:Soundwave, Sonic Spy ManaCost:1 W U B Types:Legendary Artifact Creature Robot PT:5/4 -K:More Than Meets the Eye:1 W U B -T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Creature.token+YouCtrl | TriggerZones$ Battlefield | ValidTarget$ Player | Execute$ TrigCast | TriggerDescription$ nWhenever one or more creature tokens you control deal combat damage to a player, exile target instant or sorcery card with mana value equal to the damage dealt from their graveyard. Copy it. You may cast the copy without paying its mana cost. If you do, convert NICKNAME. +K:More Than Meets the Eye:2 W U B +T:Mode$ DamageDoneOnce | CombatDamage$ True | ValidSource$ Creature.token+YouCtrl | TriggerZones$ Battlefield | ValidTarget$ Player | Execute$ TrigCast | TriggerDescription$ Whenever one or more creature tokens you control deal combat damage to a player, exile target instant or sorcery card with mana value equal to the damage dealt from their graveyard. Copy it. You may cast the copy without paying its mana cost. If you do, convert NICKNAME. SVar:TrigCast:DB$ ChangeZone | Origin$ Graveyard | Destination$ Exile | TgtPrompt$ Choose target instant or sorcery card in that player's graveyard | ValidTgts$ Instant.cmcEQX+OwnedBy TriggeredTarget,Sorcery.cmcEQX+OwnedBy TriggeredTarget | RememberChanged$ True | SubAbility$ DBPlay SVar:DBPlay:DB$ Play | Valid$ Card.IsRemembered | ValidZone$ Exile | Controller$ You | CopyCard$ True | WithoutManaCost$ True | ValidSA$ Spell | Optional$ True | ImprintPlayed$ True | SubAbility$ DBConvert SVar:DBConvert:DB$ SetState | Mode$ Convert | ConditionDefined$ Imprinted | ConditionPresent$ Card | ConditionCompare$ EQ1 | SubAbility$ DBCleanup @@ -11,6 +11,7 @@ SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True | ClearRemembered$ True SVar:X:TriggerCount$DamageAmount AlternateMode:Convert DeckHas:Ability$Graveyard +DeckHints:Type$Instant|Sorcery DeckNeeds:Ability$Token Oracle:More Than Meets the Eye {2}{W}{U}{B} (You may cast this card converted for {2}{W}{U}{B}.)\nWhenever one or more creature tokens you control deal combat damage to a player, exile target instant or sorcery card with mana value equal to the damage dealt from their graveyard. Copy it. You may cast the copy without paying its mana cost. If you do, convert Soundwave. @@ -20,7 +21,7 @@ Name:Soundwave, Superior Captain ManaCost:no cost Colors:white,blue,black Types:Legendary Artifact -T:Mode$ SpellCast | ValidCard$ Card.cmcOdd | ValidActivatingPlayer$ You | Execute$ TrigConvertRavage | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell with an odd mana value, convert NICKNAME. If you do, create Ravage, a legendary 3/3 black Robot artifact creature token with menace and deathtouch +T:Mode$ SpellCast | ValidCard$ Card.cmcOdd | ValidActivatingPlayer$ You | Execute$ TrigConvertRavage | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell with an odd mana value, convert NICKNAME. If you do, create Ravage, a legendary 3/3 black Robot artifact creature token with menace and deathtouch. SVar:TrigConvertRavage:DB$ SetState | Mode$ Convert | RememberChanged$ True | SubAbility$ DBTokenRavage SVar:DBTokenRavage:DB$ Token | TokenScript$ ravage | ConditionDefined$ Remembered | ConditionPresent$ Card.Self | ConditionCompare$ GE1 | SubAbility$ DBCleanup T:Mode$ SpellCast | ValidCard$ Card.cmcEven | ValidActivatingPlayer$ You | Execute$ TrigConvertLaserbeak | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell with an even mana value, convert NICKNAME. If you do, create Laserbeak, a legendary 2/2 blue Robot artifact creature token with flying and hexproof. From e16365161248846bfae0c87dfe45c9ad2b28be41 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 8 Nov 2022 20:24:41 -0500 Subject: [PATCH 23/32] boulderbranch_golem.txt --- .../res/cardsfolder/upcoming/boulderbranch_golem.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/boulderbranch_golem.txt diff --git a/forge-gui/res/cardsfolder/upcoming/boulderbranch_golem.txt b/forge-gui/res/cardsfolder/upcoming/boulderbranch_golem.txt new file mode 100644 index 00000000000..2ecb8d809be --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/boulderbranch_golem.txt @@ -0,0 +1,10 @@ +Name:Boulderbranch Golem +ManaCost:7 +Types:Artifact Creature Golem +PT:6/5 +K:Prototype:3 G:3:3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBGainLife | TriggerDescription$ When CARDNAME enters the battlefield, you gain life equal to its power. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ X +SVar:X:Count$CardPower +DeckHas:Ability$LifeGain +Oracle:Prototype {3}{G} — 3/3 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nWhen Boulderbranch Golem enters the battlefield, you gain life equal to its power. From 308ad68c7f246f488069af67ddd77d4dac3cb13b Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 9 Nov 2022 09:28:03 +0800 Subject: [PATCH 24/32] improve readability --- forge-game/src/main/java/forge/game/zone/Zone.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/zone/Zone.java b/forge-game/src/main/java/forge/game/zone/Zone.java index 2a04c25c0d1..14a5e5f4a42 100644 --- a/forge-game/src/main/java/forge/game/zone/Zone.java +++ b/forge-game/src/main/java/forge/game/zone/Zone.java @@ -215,7 +215,9 @@ public class Zone implements java.io.Serializable, Iterable { return false; } if (cardsAddedThisTurn.get(origin).contains(card)) { - long ts = getCardsAddedThisTurn(origin).get(getCardsAddedThisTurn(origin).lastIndexOf(card)).getTimestamp(); + List cardsAddedThisTurnOrigin = getCardsAddedThisTurn(origin); + int cardIndexOrigin = cardsAddedThisTurnOrigin.lastIndexOf(card); + long cardTimestampOrigin = cardsAddedThisTurnOrigin.get(cardIndexOrigin).getTimestamp(); // need to check other zones if card didn't change again for (ZoneType z : cardsAddedThisTurn.keySet()) { if (z == origin) { @@ -223,9 +225,11 @@ public class Zone implements java.io.Serializable, Iterable { } if (cardsAddedThisTurn.get(z).contains(card)) { - long tsAlt = getCardsAddedThisTurn(z).get(getCardsAddedThisTurn(z).lastIndexOf(card)).getTimestamp(); + List cardsAddedThisTurnNonOrigin = getCardsAddedThisTurn(z); + int cardIndex = cardsAddedThisTurnNonOrigin.lastIndexOf(card); + long cardTimestamp = cardsAddedThisTurnNonOrigin.get(cardIndex).getTimestamp(); // the most recent version of this card did not come from the requested zone - if (tsAlt > ts) { + if (cardTimestamp > cardTimestampOrigin) { return false; } } From e92a394fd1e6f971e21c0b37b6e843130d57fc2f Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 9 Nov 2022 10:01:14 +0800 Subject: [PATCH 25/32] Update argoth_sanctum_of_nature.txt --- .../res/cardsfolder/upcoming/argoth_sanctum_of_nature.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/argoth_sanctum_of_nature.txt b/forge-gui/res/cardsfolder/upcoming/argoth_sanctum_of_nature.txt index e1a297ac358..7a059dea713 100644 --- a/forge-gui/res/cardsfolder/upcoming/argoth_sanctum_of_nature.txt +++ b/forge-gui/res/cardsfolder/upcoming/argoth_sanctum_of_nature.txt @@ -4,9 +4,10 @@ Types:Land K:ETBReplacement:Other:LandTapped SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionPresent$ Creature.Legendary+YouCtrl+Green | ConditionCompare$ EQ0 | SpellDescription$ CARDNAME enters the battlefield tapped unless you control a legendary green creature. A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}. -A:AB$ Token | Cost$ 2 G G T | TokenScript$ g_2_2_bear | SorcerySpeed$ True | SpellDescription$ Create a 2/2 green bear creature token. Activate only as a sorcery. +A:AB$ Token | Cost$ 2 G G T | TokenScript$ g_2_2_bear | SorcerySpeed$ True | SubAbility$ DBMill | SpellDescription$ Create a 2/2 green Bear creature token, then mill three cards. Activate only as a sorcery. +SVar:DBMill:DB$ Mill | NumCards$ 3 | Defined$ You MeldPair:Titania, Voice of Gaea AlternateMode:Meld DeckHas:Ability$Token & Type$Bear DeckNeeds:Name$Titania, Voice of Gaea -Oracle:Argoth, Sanctum of Nature enters the battlefield tapped unless you control a legendary green creature.\n{T}: Add {G}.\n{2}{G}{G},{T}:Create a 2/2 green bear creature token. +Oracle:Argoth, Sanctum of Nature enters the battlefield tapped unless you control a legendary green creature.\n{T}: Add {G}.\n{2}{G}{G},{T}:Create a 2/2 green Bear creature token, then mill three cards. Activate only as a sorcery. From 7fbdad88dbd0c1a8fa01de2dd13c5d19f8d7e9d1 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 9 Nov 2022 12:14:40 +0800 Subject: [PATCH 26/32] Update seafloor_stalker.txt - closes #1837 --- forge-gui/res/cardsfolder/s/seafloor_stalker.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/s/seafloor_stalker.txt b/forge-gui/res/cardsfolder/s/seafloor_stalker.txt index e530e036814..344b66c71e3 100644 --- a/forge-gui/res/cardsfolder/s/seafloor_stalker.txt +++ b/forge-gui/res/cardsfolder/s/seafloor_stalker.txt @@ -3,7 +3,7 @@ ManaCost:2 U Types:Creature Merfolk Rogue PT:2/3 A:AB$ Pump | Cost$ 4 U | NumAtt$ +1 | SubAbility$ DBUnblockable | ReduceCost$ X | StackDescription$ CARDNAME gets +1/+0 until end of turn and can't be blocked this turn. | SpellDescription$ CARDNAME gets +1/+0 until end of turn and can't be blocked this turn. This ability costs {1} less to activate for each creature in your party. -SVar:DBUnblockable:DB$ Effect | ConditionDefined$ Remembered | ConditionPresent$ Card.Land | RememberObjects$ Self | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable +SVar:DBUnblockable:DB$ Effect | RememberObjects$ Self | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ EFFECTSOURCE can't be blocked this turn. SVar:X:Count$Party DeckHas:Ability$Party From a5f0550546e25a1adf4174464476bf2b8b47d531 Mon Sep 17 00:00:00 2001 From: JohnWilliams77 <103562494+JohnWilliams77@users.noreply.github.com> Date: Wed, 9 Nov 2022 17:02:25 +0000 Subject: [PATCH 27/32] Update 30th Anniversary Play Promos.txt --- forge-gui/res/editions/30th Anniversary Play Promos.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/res/editions/30th Anniversary Play Promos.txt b/forge-gui/res/editions/30th Anniversary Play Promos.txt index 3dc3f5debd8..6de1bf64f95 100644 --- a/forge-gui/res/editions/30th Anniversary Play Promos.txt +++ b/forge-gui/res/editions/30th Anniversary Play Promos.txt @@ -35,5 +35,6 @@ ScryfallCode=P30A 27 R Dovin's Veto @Drew Tucker 28 R Vito, Thorn of the Dusk Rose @Lie Setiawan 29 R Deadly Dispute @Irina Nordsol +30 R Urza, Prince of Kroog @Joshua Raphael 1F R Arcane Signet @Gaboleps F1★ R Richard Garfield, Ph.D. @Dave Dorman From f0498d54770035ebeae83f51ca4bab8e54afc906 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Wed, 9 Nov 2022 19:06:20 +0100 Subject: [PATCH 28/32] Auras 400.7f --- .../main/java/forge/game/card/CardProperty.java | 11 +---------- .../src/main/java/forge/game/zone/MagicStack.java | 15 +++++++++++++++ forge-gui/res/cardsfolder/a/angelic_destiny.txt | 4 ++-- forge-gui/res/cardsfolder/c/crush_underfoot.txt | 2 +- forge-gui/res/cardsfolder/e/endless_evil.txt | 4 ++-- .../res/cardsfolder/g/genju_of_the_cedars.txt | 4 ++-- .../res/cardsfolder/g/genju_of_the_falls.txt | 4 ++-- forge-gui/res/cardsfolder/g/genju_of_the_fens.txt | 4 ++-- .../res/cardsfolder/g/genju_of_the_fields.txt | 4 ++-- .../res/cardsfolder/g/genju_of_the_realm.txt | 4 ++-- .../res/cardsfolder/g/genju_of_the_spires.txt | 4 ++-- .../res/cardsfolder/g/gift_of_immortality.txt | 2 +- forge-gui/res/cardsfolder/i/infectious_rage.txt | 2 +- ...journey_to_eternity_atzal_cave_of_eternity.txt | 6 ++---- forge-gui/res/cardsfolder/n/necrotic_plague.txt | 2 +- forge-gui/res/cardsfolder/n/next_of_kin.txt | 4 ++-- forge-gui/res/cardsfolder/p/puppet_master.txt | 4 ++-- .../r/radiant_grace_radiant_restraints.txt | 4 ++-- .../res/cardsfolder/s/screams_from_within.txt | 4 ++-- .../cardsfolder/s/skin_invasion_skin_shedder.txt | 4 ++-- .../res/cardsfolder/upcoming/draconic_destiny.txt | 4 ++-- .../res/cardsfolder/upcoming/nurgles_rot.txt | 4 ++-- 22 files changed, 52 insertions(+), 48 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index de647f176d6..e4a40ffc851 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -387,10 +387,6 @@ public class CardProperty { if (!card.canBeSacrificedBy((SpellAbility) spellAbility, false)) { return false; } - } else if (property.startsWith("AttachedBy")) { - if (!card.hasCardAttachment(source)) { - return false; - } } else if (property.equals("Attached")) { if (!source.hasCardAttachment(card)) { return false; @@ -498,7 +494,7 @@ public class CardProperty { return false; } } - } else if (property.startsWith("EquippedBy")) { + } else if (property.startsWith("EquippedBy") || property.startsWith("AttachedBy")) { if (property.substring(10).equals("Targeted")) { for (final Card c : AbilityUtils.getDefinedCards(source, "Targeted", spellAbility)) { if (!card.hasCardAttachment(c)) { @@ -523,11 +519,6 @@ public class CardProperty { if (!card.canBeAttached(source, null)) { return false; } - } else if (property.startsWith("Fortified")) { - // FIXME TODO what property has this? - if (!source.hasCardAttachment(card)) { - return false; - } } else if (property.startsWith("HauntedBy")) { if (!card.isHauntedBy(source)) { return false; diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index fcdfe3302f6..e4bf85331e9 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -59,6 +59,7 @@ import forge.game.spellability.OptionalCost; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetChoices; +import forge.game.trigger.Trigger; import forge.game.trigger.TriggerType; import forge.game.trigger.WrappedAbility; import forge.util.TextUtil; @@ -835,6 +836,8 @@ public class MagicStack /* extends MyObservable */ implements Iterable Date: Wed, 9 Nov 2022 20:58:50 +0100 Subject: [PATCH 29/32] BRO remaining Prototype cards (#1843) * update * UPDATE * update * Update rootwire_amalgam.txt --- .../cardsfolder/upcoming/depth_charge_colossus.txt | 9 +++++++++ .../cardsfolder/upcoming/fallaji_dragon_engine.txt | 9 +++++++++ .../res/cardsfolder/upcoming/iron_craw_crusher.txt | 11 +++++++++++ .../res/cardsfolder/upcoming/rootwire_amalgam.txt | 10 ++++++++++ forge-gui/res/cardsfolder/upcoming/rust_goliath.txt | 9 +++++++++ .../cardsfolder/upcoming/skitterbeam_battalion.txt | 12 ++++++++++++ .../res/cardsfolder/upcoming/spotter_thopter.txt | 11 +++++++++++ forge-gui/res/tokenscripts/c_x_x_a_golem.txt | 5 +++++ 8 files changed, 76 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/depth_charge_colossus.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/fallaji_dragon_engine.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/iron_craw_crusher.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/rootwire_amalgam.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/rust_goliath.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/skitterbeam_battalion.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/spotter_thopter.txt create mode 100644 forge-gui/res/tokenscripts/c_x_x_a_golem.txt diff --git a/forge-gui/res/cardsfolder/upcoming/depth_charge_colossus.txt b/forge-gui/res/cardsfolder/upcoming/depth_charge_colossus.txt new file mode 100644 index 00000000000..c7d6bb1b67c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/depth_charge_colossus.txt @@ -0,0 +1,9 @@ +Name:Depth Charge Colossus +ManaCost:9 +Types:Artifact Creature Dreadnought +PT:9/9 +K:Prototype:4 U U:2:2 +K:CARDNAME doesn't untap during your untap step. +A:AB$ Untap | Cost$ 3 | SpellDescription$ Untap CARDNAME. +DeckHints:Color$Blue +Oracle:\nPrototype {4}{U}{U} — 6/6 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nDepth Charge Colossus doesn't untap during your untap step.\n{3}: Untap Depth Charge Colossus. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/fallaji_dragon_engine.txt b/forge-gui/res/cardsfolder/upcoming/fallaji_dragon_engine.txt new file mode 100644 index 00000000000..2f36d2df396 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fallaji_dragon_engine.txt @@ -0,0 +1,9 @@ +Name:Fallaji Dragon Engine +ManaCost:8 +Types:Artifact Creature Dragon +PT:5/5 +K:Prototype:2 R:1:3 +K:Flying +A:AB$ Pump | Cost$ 2 | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. +DeckHints:Color$Red +Oracle:Flying\n{2}: Fallaji Dragon Engine gets +1/+0 until end of turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/iron_craw_crusher.txt b/forge-gui/res/cardsfolder/upcoming/iron_craw_crusher.txt new file mode 100644 index 00000000000..c916660f3f2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/iron_craw_crusher.txt @@ -0,0 +1,11 @@ +Name:Iron-Craw Crusher +ManaCost:7 +Types:Artifact Creature Wurm +PT:4/6 +K:Prototype:2 G G:2:5 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, target attacking creature gets +X/+0 until end of turn, where X is CARDNAME's power. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | NumAtt$ X +SVar:HasAttackEffect:TRUE +SVar:X:Count$CardPower +DeckHints:Color$Green +Oracle:Prototype {2}{G}{G} — 2/5 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nWhenever Iron-Craw Crusher attacks, target attacking creature gets +X/+0 until end of turn, where X is Iron-Craw Crusher's power. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/rootwire_amalgam.txt b/forge-gui/res/cardsfolder/upcoming/rootwire_amalgam.txt new file mode 100644 index 00000000000..ddf19fe0929 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rootwire_amalgam.txt @@ -0,0 +1,10 @@ +Name:Rootwire Amalgam +ManaCost:5 +Types:Artifact Creature Golem +PT:5/5 +K:Prototype:1 G:2:3 +A:AB$ Token | Cost$ 3 G G Sac<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ c_x_x_a_golem | TokenPower$ X | TokenToughness$ X | PumpDuration$ EOT | TokenOwner$ You | PumpKeywords$ Haste | SorcerySpeed$ True | SpellDescription$ Create an X/X colorless Golem artifact creature token, where X is three times CARDNAME's power. It gains haste until end of turn. Activate only as a sorcery. +SVar:X:Sacrificed$CardPower/Times.3 +DeckHas:Ability$Token|Sacrifice +DeckHints:Color$Green +Oracle:Prototype {1}{G} — 2/3 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\n{3}{G}{G}, Sacrifice Rootwire Amalgam: Create an X/X colorless Golem artifact creature token, where X is three times Rootwire Amalgam's power. It gains haste until end of turn. Activate only as a sorcery. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/rust_goliath.txt b/forge-gui/res/cardsfolder/upcoming/rust_goliath.txt new file mode 100644 index 00000000000..1aa0bb929be --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rust_goliath.txt @@ -0,0 +1,9 @@ +Name:Rust Goliath +ManaCost:10 +Types:Artifact Creature Construct +PT:10/10 +K:Prototype:3 G G:3:5 +K:Reach +K:Trample +DeckHints:Color$Green +Oracle:Prototype {3}{G}{G} — 3/5 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nReach, trample \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/skitterbeam_battalion.txt b/forge-gui/res/cardsfolder/upcoming/skitterbeam_battalion.txt new file mode 100644 index 00000000000..20d240b10f6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/skitterbeam_battalion.txt @@ -0,0 +1,12 @@ +Name:Skitterbeam Battalion +ManaCost:9 +Types:Artifact Creature Construct +PT:4/4 +K:Trample +K:Haste +K:Prototype:3 R R:2:2 +T:Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self+wasCastByYou | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield, if you cast it, create two tokens that are copies of it. +SVar:TrigToken:DB$ CopyPermanent | Defined$ TriggeredCard | NumCopies$ 2 +DeckHas:Ability$Token +DeckHints:Color$Red +Oracle:Prototype {3}{R}{R} — 2/2 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nTrample, haste\nWhen Skitterbeam Battalion enters the battlefield, if you cast it, create two tokens that are copies of it. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/spotter_thopter.txt b/forge-gui/res/cardsfolder/upcoming/spotter_thopter.txt new file mode 100644 index 00000000000..321d3a82267 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/spotter_thopter.txt @@ -0,0 +1,11 @@ +Name:Spotter Thopter +ManaCost:8 +Types:Artifact Creature Thopter +PT:4/5 +K:Prototype:3 U:2:3 +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry X, where X is its power. +SVar:TrigScry:DB$ Scry | ScryNum$ X +SVar:X:Count$CardPower +DeckHints:Color$Blue +Oracle:Prototype {3}{U} — 2/3 (You may cast this spell with different mana cost, color, and size. It keeps its abilities and types.)\nFlying\nWhen Spotter Thopter enters the battlefield, scry X, where X is its power. \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/c_x_x_a_golem.txt b/forge-gui/res/tokenscripts/c_x_x_a_golem.txt new file mode 100644 index 00000000000..13a11b90c20 --- /dev/null +++ b/forge-gui/res/tokenscripts/c_x_x_a_golem.txt @@ -0,0 +1,5 @@ +Name:Golem Token +ManaCost:no cost +Types:Artifact Creature Golem +PT:*/* +Oracle: From 20b3765b15bc6978557d17f00ec9843c24fa9d78 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 10 Nov 2022 08:02:25 +0800 Subject: [PATCH 30/32] Update arcee_sharpshooter_arcee_acrobatic_coupe.txt --- .../upcoming/arcee_sharpshooter_arcee_acrobatic_coupe.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/arcee_sharpshooter_arcee_acrobatic_coupe.txt b/forge-gui/res/cardsfolder/upcoming/arcee_sharpshooter_arcee_acrobatic_coupe.txt index 44637429081..9c5cd96e1a7 100644 --- a/forge-gui/res/cardsfolder/upcoming/arcee_sharpshooter_arcee_acrobatic_coupe.txt +++ b/forge-gui/res/cardsfolder/upcoming/arcee_sharpshooter_arcee_acrobatic_coupe.txt @@ -7,7 +7,7 @@ K:First Strike A:AB$ DealDamage | Cost$ 1 XCantBe0 SubCounter | ValidTgts$ Creature | NumDmg$ X | SubAbility$ DBConvert | SpellDescription$ It deals that much damage to target creature. SVar:DBConvert:DB$ SetState | Mode$ Convert | StackDescription$ SpellDescription | SpellDescription$ Convert NICKNAME. SVar:X:Count$xPaid -AlternateMode:DoubleFaced +AlternateMode:Convert DeckNeeds:Ability$Counters Oracle:More Than Meets the Eye {R}{W} (You may cast this card converted for {R}{W}.)\nFirst strike\n{1}, Remove one or more +1/+1 counters from Arcee: It deals that much damage to target creature. Convert Arcee. From 15098a016ea8a0e1392de70f09913d52d0b32599 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 10 Nov 2022 08:03:22 +0800 Subject: [PATCH 31/32] Update flamewar_brash_veteran_flamewar_streetwise_operative.txt --- .../flamewar_brash_veteran_flamewar_streetwise_operative.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/res/cardsfolder/upcoming/flamewar_brash_veteran_flamewar_streetwise_operative.txt b/forge-gui/res/cardsfolder/upcoming/flamewar_brash_veteran_flamewar_streetwise_operative.txt index 58853de1cac..193b7db76af 100644 --- a/forge-gui/res/cardsfolder/upcoming/flamewar_brash_veteran_flamewar_streetwise_operative.txt +++ b/forge-gui/res/cardsfolder/upcoming/flamewar_brash_veteran_flamewar_streetwise_operative.txt @@ -8,6 +8,7 @@ SVar:DBConvert:DB$ SetState | Mode$ Convert | StackDescription$ Convert NICKNAME A:AB$ ChangeZone | Cost$ 1 Discard<1/Hand> | ValidCard$ Card.counters_GE1_INTEL+YouOwn | Origin$ Exile | Destination$ Hand | SpellDescription$ Put all exiled cards you own with intel counters on them into your hand. DeckHints:Ability$Counters DeckHas:Ability$Sacrifice|Discard|Counters +AlternateMode:Convert Oracle:More Than Meets the Eye {B}{R} (You may cast this card converted for {B}{R}.)\nSacrifice another artifact: Put a +1/+1 counter on Flamewar and convert it. Activate only as a sorcery.\n{1}, Discard your hand: Put all exiled cards you own with intel counters on them into your hand. ALTERNATE From e5137f2c80e8a046ed71aab591dc465f7fdedbe4 Mon Sep 17 00:00:00 2001 From: Simisays <67333662+Simisays@users.noreply.github.com> Date: Thu, 10 Nov 2022 06:03:58 +0100 Subject: [PATCH 32/32] update (#1846) --- forge-gui/res/cardsfolder/a/all_hallows_eve.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/forge-gui/res/cardsfolder/a/all_hallows_eve.txt b/forge-gui/res/cardsfolder/a/all_hallows_eve.txt index 993743cd5d2..bcce465d46c 100644 --- a/forge-gui/res/cardsfolder/a/all_hallows_eve.txt +++ b/forge-gui/res/cardsfolder/a/all_hallows_eve.txt @@ -9,4 +9,9 @@ SVar:TrigRemoveCounter:DB$ RemoveCounter | Defined$ Self | CounterType$ SCREAM | SVar:DBMoveToGraveyard:DB$ ChangeZone | Origin$ Exile | Destination$ Graveyard | Defined$ Self | SubAbility$ DBResurrection | ConditionDefined$ Self | ConditionPresent$ Card.counters_EQ0_SCREAM SVar:DBResurrection:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature | ConditionDefined$ Self | ConditionPresent$ Card.counters_EQ0_SCREAM SVar:IsReanimatorCard:TRUE +SVar:NeedsToPlayVar:CountOpps LTCountMe +SVar:CountOpps:Count$ValidGraveyard Creature.OppOwn/LimitMax.10 +SVar:CountMe:Count$ValidGraveyard Creature.YouOwn +DeckHas:Ability$Counters +DeckNeeds:Ability$Graveyard Oracle:Exile All Hallow's Eve with two scream counters on it.\nAt the beginning of your upkeep, if All Hallow's Eve is exiled with a scream counter on it, remove a scream counter from it. If there are no more scream counters on it, put it into your graveyard and each player returns all creature cards from their graveyard to the battlefield.