From d2d96d2ecee28315ddbca8f2102ce9ea266f41ff Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 09:23:59 -0400 Subject: [PATCH 01/33] make_your_mark.txt --- forge-gui/res/cardsfolder/upcoming/make_your_mark.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt b/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt index 9db76747dbb..9789cea92ea 100644 --- a/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt +++ b/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt @@ -1,4 +1,4 @@ -Name:Make your Mark +Name:Make Your Mark ManaCost:RW Types:Instant A:SP$ Pump | Cost$ RW | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +1 | SubAbility$ DBEffect | SpellDescription$ Target creature gets +1/+0 until end of turn. When that creature dies this turn, create a 3/2 red and white Spirit creature token. From 4d05e085efc6fe9ece0e7cccb361c554d4726bb7 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 09:24:25 -0400 Subject: [PATCH 02/33] raiders_karve.txt fix TrigDesc --- forge-gui/res/cardsfolder/r/raiders_karve.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/r/raiders_karve.txt b/forge-gui/res/cardsfolder/r/raiders_karve.txt index 886df8152a7..1b453da143c 100644 --- a/forge-gui/res/cardsfolder/r/raiders_karve.txt +++ b/forge-gui/res/cardsfolder/r/raiders_karve.txt @@ -2,7 +2,7 @@ Name:Raiders' Karve ManaCost:3 Types:Artifact Vehicle PT:4/4 -T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ Whenever Raiders' Karve attacks, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped. +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ Whenever CARDNAME attacks, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped. SVar:TrigDig:DB$Dig | DigNum$ 1 | ChangeNum$ All | ForceRevealToController$ True | Optional$ True | PromptToSkipOptionalAbility$ True | OptionalAbilityPrompt$ Would you like to put the land onto the battlefield tapped? | ChangeValid$ Land | DestinationZone$ Battlefield | Tapped$ True | LibraryPosition2$ 0 K:Crew:3 Oracle:Whenever Raiders' Karve attacks, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped.\nCrew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.) From bbfcc87a689f3a9a038ff2b41a3f6cbd793a88e3 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 09:46:00 -0400 Subject: [PATCH 03/33] giants_amulet.txt tidy up --- forge-gui/res/cardsfolder/g/giants_amulet.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/forge-gui/res/cardsfolder/g/giants_amulet.txt b/forge-gui/res/cardsfolder/g/giants_amulet.txt index cb42a4cbe22..0ef1d8e063e 100644 --- a/forge-gui/res/cardsfolder/g/giants_amulet.txt +++ b/forge-gui/res/cardsfolder/g/giants_amulet.txt @@ -2,10 +2,10 @@ Name:Giant's Amulet ManaCost:U Types:Artifact Equipment K:Equip:2 -S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddToughness$ 1 | Description$ Equipped creature gets +0/+1. -S:Mode$ Continuous | Affected$ Creature.EquippedBy+untapped | AddKeyword$ Hexproof | Description$ Equipped creature has hexproof as long as it's untapped. -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {U}{3}. If you do, create a 4/4 blue Giant Wizard creature token, then attach CARDNAME to it. -SVar:TrigToken:AB$ Token | Cost$ 3 U | LegacyImage$ u 4 4 giant wizard khm | TokenScript$ u_4_4_giant_wizard | TokenAmount$ 1 | TokenOwner$ You | RememberTokens$ True | Optional$ True | SubAbility$ DBAttach +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddToughness$ 1 | AddStaticAbility$ Hexproof | Description$ Equipped creature gets +0/+1 has "This creature has hexproof as long as it's untapped." (It can't be the target of spells or abilities your opponents control.) +SVar:Hexproof:Mode$ Continuous | Affected$ Card.Self+untapped | AddKeyword$ Hexproof | Description$ This creature has hexproof as long as it's untapped. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {3}{U}. If you do, create a 4/4 blue Giant Wizard creature token, then attach CARDNAME to it. +SVar:TrigToken:AB$ Token | Cost$ 3 U | TokenScript$ u_4_4_giant_wizard | RememberTokens$ True | SubAbility$ DBAttach SVar:DBAttach:DB$ Attach | Object$ TriggeredCard | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token From 9d29904ec5fa32e854a421d39067192c0a2b3068 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 09:48:55 -0400 Subject: [PATCH 04/33] valkyries_sword.txt remove default/bad params --- forge-gui/res/cardsfolder/v/valkyries_sword.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/v/valkyries_sword.txt b/forge-gui/res/cardsfolder/v/valkyries_sword.txt index 4001957638d..257d58af6c9 100644 --- a/forge-gui/res/cardsfolder/v/valkyries_sword.txt +++ b/forge-gui/res/cardsfolder/v/valkyries_sword.txt @@ -4,7 +4,7 @@ Types:Artifact Equipment K:Equip:3 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 1 | Description$ Equipped creature gets +2/+1. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {4}{W}. If you do, create a 4/4 white Angel Warrior creature token with flying and vigilance, then attach CARDNAME to it. -SVar:TrigToken:AB$ Token | Cost$ 4 W | LegacyImage$ w 4 4 angel warrior flying vigilance khm | TokenScript$ w_4_4_angel_warrior_flying_vigilance | TokenAmount$ 1 | TokenOwner$ You | RememberTokens$ True | Optional$ True | SubAbility$ DBAttach +SVar:TrigToken:AB$ Token | Cost$ 4 W | TokenScript$ w_4_4_angel_warrior_flying_vigilance | RememberTokens$ True | SubAbility$ DBAttach SVar:DBAttach:DB$ Attach | Object$ TriggeredCard | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token From cc4dafa400ef7f9954f775bb9f1b6b5862d1bdac Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 09:50:22 -0400 Subject: [PATCH 05/33] draugrs_helm.txt remove default/bad params --- forge-gui/res/cardsfolder/d/draugrs_helm.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/d/draugrs_helm.txt b/forge-gui/res/cardsfolder/d/draugrs_helm.txt index 3526ee980e9..c23b4049ef2 100644 --- a/forge-gui/res/cardsfolder/d/draugrs_helm.txt +++ b/forge-gui/res/cardsfolder/d/draugrs_helm.txt @@ -4,7 +4,7 @@ Types:Artifact Equipment K:Equip:4 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Menace | Description$ Equipped creature gets +2/+2 and has menace. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {2}{B}. If you do, create a 2/2 black Zombie Berserker creature token, then attach CARDNAME to it. -SVar:TrigToken:AB$ Token | Cost$ 2 B | LegacyImage$ b 2 2 zombie berserker khm | TokenScript$ b_2_2_zombie_berserker | TokenAmount$ 1 | TokenOwner$ You | RememberTokens$ True | Optional$ True | SubAbility$ DBAttach +SVar:TrigToken:AB$ Token | Cost$ 2 B | TokenScript$ b_2_2_zombie_berserker | RememberTokens$ True | SubAbility$ DBAttach SVar:DBAttach:DB$ Attach | Object$ TriggeredCard | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token From 87ff260c9fa7c36ede573b2189fe5da0b4fb8cf9 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 09:51:18 -0400 Subject: [PATCH 06/33] dwarven_hammer.txt remove default/bad params --- forge-gui/res/cardsfolder/d/dwarven_hammer.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/d/dwarven_hammer.txt b/forge-gui/res/cardsfolder/d/dwarven_hammer.txt index 1e3577cb775..47a01fe1202 100644 --- a/forge-gui/res/cardsfolder/d/dwarven_hammer.txt +++ b/forge-gui/res/cardsfolder/d/dwarven_hammer.txt @@ -4,7 +4,7 @@ Types:Artifact Equipment K:Equip:3 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 3 | AddKeyword$ Trample | Description$ Equipped creature gets +3/+0 and has trample. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {2}. If you do, create a 2/1 red Dwarf Berserker creature token, then attach CARDNAME to it. -SVar:TrigToken:AB$ Token | Cost$ 2 | LegacyImage$ r 2 1 dwarf berserker khm | TokenScript$ r_2_1_dwarf_berserker | TokenAmount$ 1 | TokenOwner$ You | RememberTokens$ True | Optional$ True | SubAbility$ DBAttach +SVar:TrigToken:AB$ Token | Cost$ 2 | TokenScript$ r_2_1_dwarf_berserker | RememberTokens$ True | SubAbility$ DBAttach SVar:DBAttach:DB$ Attach | Object$ TriggeredCard | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token From 161b99f252191fa09dc4ed74020df473a75c0d9b Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 09:53:58 -0400 Subject: [PATCH 07/33] elven_bow.txt remove default/bad params and desc typo --- forge-gui/res/cardsfolder/e/elven_bow.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/e/elven_bow.txt b/forge-gui/res/cardsfolder/e/elven_bow.txt index 3bb5f5e7b1c..b5a34ddee35 100644 --- a/forge-gui/res/cardsfolder/e/elven_bow.txt +++ b/forge-gui/res/cardsfolder/e/elven_bow.txt @@ -2,9 +2,9 @@ Name:Elven Bow ManaCost:G Types:Artifact Equipment K:Equip:3 -S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 2 | AddKeyword$ Reach | Description$ Equipped creature gets +3/+0 and has reach. +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 2 | AddKeyword$ Reach | Description$ Equipped creature gets +1/+2 and has reach. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME enters the battlefield, you may pay {2}. If you do, create a 1/1 green Elf Warrior creature token, then attach CARDNAME to it. -SVar:TrigToken:AB$ Token | Cost$ 2 | LegacyImage$ g 1 1 elf warrior khm | TokenScript$ g_1_1_elf_warrior | TokenAmount$ 1 | TokenOwner$ You | RememberTokens$ True | Optional$ True | SubAbility$ DBAttach +SVar:TrigToken:AB$ Token | Cost$ 2 | TokenScript$ g_1_1_elf_warrior | RememberTokens$ True | SubAbility$ DBAttach SVar:DBAttach:DB$ Attach | Object$ TriggeredCard | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token From 10d10ff18df0ea30f8667617643f79ae2a2e71c0 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 12 Apr 2021 16:16:57 +0200 Subject: [PATCH 08/33] FlipACoinAI: add logic for Goblin Bangchuckers --- .../main/java/forge/ai/ability/AttachAi.java | 4 +-- .../java/forge/ai/ability/DamageAiBase.java | 6 ++--- .../java/forge/ai/ability/FlipACoinAi.java | 26 ++++++++++++++++--- .../res/cardsfolder/g/goblin_bangchuckers.txt | 7 +++-- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java index 52b88f28a97..6d5f7f00076 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java @@ -6,6 +6,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; + import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Lists; @@ -1129,8 +1130,7 @@ public class AttachAi extends SpellAbilityAi { for (Card target : list) { for (Trigger t : target.getTriggers()) { if (t.getMode() == TriggerType.SpellCast) { - final Map params = t.getMapParams(); - if ("Card.Self".equals(params.get("TargetsValid")) && "You".equals(params.get("ValidActivatingPlayer"))) { + if ("Card.Self".equals(t.getParam("TargetsValid")) && "You".equals(t.getParam("ValidActivatingPlayer"))) { magnetList.add(target); break; } diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java b/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java index ede5ecf7b2b..3cd8a909a2b 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java @@ -14,7 +14,7 @@ import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.trigger.Trigger; -import forge.game.trigger.TriggerDamageDone; +import forge.game.trigger.TriggerType; import forge.game.zone.ZoneType; import forge.util.MyRandom; @@ -56,7 +56,7 @@ public abstract class DamageAiBase extends SpellAbilityAi { boolean dmgByCardsInHand = false; if ("X".equals(sa.getParam("NumDmg")) && sa.getHostCard() != null && sa.hasSVar(sa.getParam("NumDmg")) && - sa.getHostCard().getSVar(sa.getParam("NumDmg")).equals("TargetedPlayer$CardsInHand")) { + sa.getSVar(sa.getParam("NumDmg")).equals("TargetedPlayer$CardsInHand")) { dmgByCardsInHand = true; } // Not sure if type choice implemented for the AI yet but it should at least recognize this spell hits harder on larger enemy hand size @@ -75,7 +75,7 @@ public abstract class DamageAiBase extends SpellAbilityAi { // If has triggered ability on dealing damage to an opponent, go for it! Card hostcard = sa.getHostCard(); for (Trigger trig : hostcard.getTriggers()) { - if (trig instanceof TriggerDamageDone) { + if (trig.getMode() == TriggerType.DamageDone) { if (("Opponent".equals(trig.getParam("ValidTarget"))) && (!"True".equals(trig.getParam("CombatDamage")))) { return true; diff --git a/forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java b/forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java index 7d61025c40d..984f3c75fab 100644 --- a/forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/FlipACoinAi.java @@ -16,14 +16,32 @@ public class FlipACoinAi extends SpellAbilityAi { protected boolean canPlayAI(Player ai, SpellAbility sa) { if (sa.hasParam("AILogic")) { - String AILogic = sa.getParam("AILogic"); - if (AILogic.equals("Never")) { + String ailogic = sa.getParam("AILogic"); + if (ailogic.equals("Never")) { return false; - } else if (AILogic.equals("PhaseOut")) { + } else if (ailogic.equals("PhaseOut")) { if (!ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), sa).contains(sa.getHostCard())) { return false; } - } else if (AILogic.equals("KillOrcs")) { + } else if (ailogic.equals("Bangchuckers")) { + if (ai.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.END_OF_TURN) ) { + return false; + } + sa.resetTargets(); + for (Player o : ai.getOpponents()) { + if (sa.canTarget(o) && o.canLoseLife() && !o.cantLose()) { + sa.getTargets().add(o); + return true; + } + } + for (Card c : ai.getOpponents().getCreaturesInPlay()) { + if (sa.canTarget(c)) { + sa.getTargets().add(c); + return true; + } + } + return false; + } else if (ailogic.equals("KillOrcs")) { if (ai.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.END_OF_TURN) ) { return false; } diff --git a/forge-gui/res/cardsfolder/g/goblin_bangchuckers.txt b/forge-gui/res/cardsfolder/g/goblin_bangchuckers.txt index daaf5b4567f..c92f619ac77 100644 --- a/forge-gui/res/cardsfolder/g/goblin_bangchuckers.txt +++ b/forge-gui/res/cardsfolder/g/goblin_bangchuckers.txt @@ -2,9 +2,8 @@ Name:Goblin Bangchuckers ManaCost:2 R R Types:Creature Goblin Warrior PT:2/2 -A:AB$ FlipACoin | Cost$ T | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | WinSubAbility$ DBDamageTarget | LoseSubAbility$ DBDamageSelf | SpellDescription$ Flip a coin. If you win the flip, CARDNAME deals 2 damage to any target. If you lose the flip, CARDNAME deals 2 damage to itself. -SVar:DBDamageTarget:DB$DealDamage | Defined$ Targeted | NumDmg$ 2 -SVar:DBDamageSelf:DB$DealDamage | Defined$ Self | NumDmg$ 2 +A:AB$ FlipACoin | Cost$ T | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | WinSubAbility$ DBDamageTarget | LoseSubAbility$ DBDamageSelf | AILogic$ Bangchuckers | SpellDescription$ Flip a coin. If you win the flip, CARDNAME deals 2 damage to any target. If you lose the flip, CARDNAME deals 2 damage to itself. +SVar:DBDamageTarget:DB$ DealDamage | Defined$ Targeted | NumDmg$ 2 +SVar:DBDamageSelf:DB$ DealDamage | Defined$ Self | NumDmg$ 2 AI:RemoveDeck:All -SVar:Picture:http://www.wizards.com/global/images/magic/general/goblin_bangchuckers.jpg Oracle:{T}: Flip a coin. If you win the flip, Goblin Bangchuckers deals 2 damage to any target. If you lose the flip, Goblin Bangchuckers deals 2 damage to itself. From 35d7046d6939e8c06f2ecd378f681986697a3d85 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 11:20:36 -0400 Subject: [PATCH 09/33] gifts_ungiven.txt eliminate ChooseCard line --- forge-gui/res/cardsfolder/g/gifts_ungiven.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/forge-gui/res/cardsfolder/g/gifts_ungiven.txt b/forge-gui/res/cardsfolder/g/gifts_ungiven.txt index abc1291290d..965daeca26f 100644 --- a/forge-gui/res/cardsfolder/g/gifts_ungiven.txt +++ b/forge-gui/res/cardsfolder/g/gifts_ungiven.txt @@ -1,9 +1,8 @@ Name:Gifts Ungiven ManaCost:3 U Types:Instant -A:SP$ ChangeZone | Cost$ 3 U | Origin$ Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 4 | RememberChanged$ True | Reveal$ True | Shuffle$ False | DifferentNames$ True | StackDescription$ SpellDescription | SubAbility$ DBChoose | StackDescription$ {p:You} searches their library for up to four cards with different names and reveals them. | SpellDescription$ Search your library for up to four cards with different names and reveal them. Target opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest into your hand. Then shuffle your library. -SVar:DBChoose:DB$ ChooseCard | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Choices$ Card.IsRemembered | ChoiceZone$ Library | ChoiceTitle$ Choose two cards for the graveyard | Mandatory$ True | Amount$ 2 | SubAbility$ DBChangeZone1 | StackDescription$ {p:Targeted} chooses two of those cards. -SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Graveyard | Defined$ ChosenCard | ChangeNum$ 2 | Mandatory$ True | NoLooking$ True | SelectPrompt$ Select a card for the graveyard | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ {p:You} puts the chosen cards into their graveyard -SVar:DBChangeZone2:DB$ ChangeZoneAll | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | Mandatory$ True | NoLooking$ True | Shuffle$ True | SelectPrompt$ Select a card for the hand | StackDescription$ and the rest into their hand. Then {p:You} shuffles their library. | SubAbility$ DBCleanup +A:SP$ ChangeZone | Cost$ 3 U | Origin$ Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 4 | RememberChanged$ True | Reveal$ True | Shuffle$ False | DifferentNames$ True | SubAbility$ DBChangeZone1 | StackDescription$ {p:You} searches their library for up to four cards with different names and reveals them. | SpellDescription$ Search your library for up to four cards with different names and reveal them. Target opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest into your hand. Then shuffle your library. +SVar:DBChangeZone1:DB$ ChangeZone | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | DefinedPlayer$ You | Chooser$ Targeted | SelectPrompt$ Choose two cards for the graveyard | NoLooking$ True | Hidden$ True | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.IsRemembered | ChangeNum$ 2 | Mandatory$ True | SelectPrompt$ Select two cards for the graveyard | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ {p:Targeted} chooses two of those cards. {p:You} puts the chosen cards into their graveyard +SVar:DBChangeZone2:DB$ ChangeZoneAll | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | Mandatory$ True | NoLooking$ True | Shuffle$ True | StackDescription$ and the rest into their hand. Then {p:You} shuffles their library. | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Search your library for up to four cards with different names and reveal them. Target opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest into your hand. Then shuffle your library. From d8e850673b3a163dba132766a06ab990a0cd57dd Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 12 Apr 2021 17:56:42 +0200 Subject: [PATCH 10/33] StaticAbilityContinuous: fix GainsAbilitiesOfDefined --- .../main/java/forge/game/StaticEffect.java | 2 +- .../game/staticability/StaticAbility.java | 2 +- .../StaticAbilityContinuous.java | 30 +++++-------------- forge-gui/res/cardsfolder/b/banefire.txt | 3 +- forge-gui/res/cardsfolder/d/demonfire.txt | 3 +- .../cardsfolder/d/dragonlords_prerogative.txt | 3 +- .../res/cardsfolder/e/exquisite_firecraft.txt | 3 +- forge-gui/res/cardsfolder/h/havengul_lich.txt | 2 +- .../res/cardsfolder/i/illusionists_gambit.txt | 2 +- .../res/cardsfolder/m/molten_disaster.txt | 2 +- 10 files changed, 17 insertions(+), 35 deletions(-) diff --git a/forge-game/src/main/java/forge/game/StaticEffect.java b/forge-game/src/main/java/forge/game/StaticEffect.java index 06f32ae801c..d0ee86b9945 100644 --- a/forge-game/src/main/java/forge/game/StaticEffect.java +++ b/forge-game/src/main/java/forge/game/StaticEffect.java @@ -255,7 +255,7 @@ public class StaticEffect { } // remove abilities - if (hasParam("AddAbility") || hasParam("GainsAbilitiesOf") || hasParam("GainsAbilitiesDefined") + if (hasParam("AddAbility") || hasParam("GainsAbilitiesOf") || hasParam("GainsAbilitiesOfDefined") || hasParam("AddTrigger") || hasParam("AddStaticAbility") || hasParam("AddReplacementEffects") || hasParam("RemoveAllAbilities") || hasParam("RemoveLandTypes")) { affectedCard.removeChangedCardTraits(getTimestamp()); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index 797234ba22a..3f0b0a39a3e 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -162,7 +162,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone layers.add(StaticAbilityLayer.COLOR); } - if (hasParam("RemoveAllAbilities") || hasParam("GainsAbilitiesOf") || hasParam("GainsAbilitiesDefined")) { + if (hasParam("RemoveAllAbilities") || hasParam("GainsAbilitiesOf") || hasParam("GainsAbilitiesOfDefined")) { layers.add(StaticAbilityLayer.ABILITIES); } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index 84dd3759c70..fe5d0ddd5b5 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -951,12 +951,11 @@ public final class StaticAbilityContinuous { } private static CardCollectionView getAffectedCards(final StaticAbility stAb, final CardCollectionView preList) { - final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); final Game game = hostCard.getGame(); final Player controller = hostCard.getController(); - if (params.containsKey("CharacteristicDefining")) { + if (stAb.hasParam("CharacteristicDefining")) { return new CardCollection(hostCard); // will always be the card itself } @@ -966,37 +965,24 @@ public final class StaticAbilityContinuous { // add preList in addition to the normal affected cards // need to add before game cards to have preference over them if (!preList.isEmpty()) { - if (params.containsKey("AffectedZone")) { + if (stAb.hasParam("AffectedZone")) { affectedCards.addAll(CardLists.filter(preList, CardPredicates.inZone( - ZoneType.listValueOf(params.get("AffectedZone"))))); + ZoneType.listValueOf(stAb.getParam("AffectedZone"))))); } else { affectedCards.addAll(CardLists.filter(preList, CardPredicates.inZone(ZoneType.Battlefield))); } } - if (params.containsKey("AffectedZone")) { - affectedCards.addAll(game.getCardsIn(ZoneType.listValueOf(params.get("AffectedZone")))); + if (stAb.hasParam("AffectedZone")) { + affectedCards.addAll(game.getCardsIn(ZoneType.listValueOf(stAb.getParam("AffectedZone")))); } else { affectedCards.addAll(game.getCardsIn(ZoneType.Battlefield)); } - - if (params.containsKey("Affected") && !params.get("Affected").contains(",")) { - if (params.get("Affected").contains("Self")) { - affectedCards = new CardCollection(hostCard); - } else if (params.get("Affected").contains("EnchantedBy")) { - affectedCards = new CardCollection(hostCard.getEnchantingCard()); - } else if (params.get("Affected").contains("EquippedBy")) { - affectedCards = new CardCollection(hostCard.getEquipping()); - } else if (params.get("Affected").equals("EffectSource")) { - affectedCards = new CardCollection(AbilityUtils.getDefinedCards(hostCard, params.get("Affected"), null)); - return affectedCards; - } + if (stAb.hasParam("Affected")) { + affectedCards = CardLists.getValidCards(affectedCards, stAb.getParam("Affected").split(","), controller, hostCard, stAb); } - if (params.containsKey("Affected")) { - affectedCards = CardLists.getValidCards(affectedCards, params.get("Affected").split(","), controller, hostCard, null); - } - affectedCards.removeAll((List) stAb.getIgnoreEffectCards()); + affectedCards.removeAll(stAb.getIgnoreEffectCards()); return affectedCards; } } diff --git a/forge-gui/res/cardsfolder/b/banefire.txt b/forge-gui/res/cardsfolder/b/banefire.txt index 3e5a213f9ed..045cc0d744d 100644 --- a/forge-gui/res/cardsfolder/b/banefire.txt +++ b/forge-gui/res/cardsfolder/b/banefire.txt @@ -3,7 +3,6 @@ ManaCost:X R Types:Sorcery A:SP$ DealDamage | Cost$ X R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | ConditionCheckSVar$ X | ConditionSVarCompare$ LT5 | SubAbility$ BanefulDmg | SpellDescription$ CARDNAME deals X damage to any target. SVar:BanefulDmg:DB$ DealDamage | Defined$ Targeted | NumDmg$ X | NoPrevention$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE5 | StackDescription$ If X is 5 or more, CARDNAME can't be countered by spells or abilities and the damage can't be prevented. -S:Mode$ Continuous | Affected$ Self | AffectedZone$ Stack | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ X | SVarCompare$ GE5 | Description$ If X is 5 or more, CARDNAME can't be countered by spells or abilities and the damage can't be prevented. +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ X | SVarCompare$ GE5 | Description$ If X is 5 or more, CARDNAME can't be countered by spells or abilities and the damage can't be prevented. SVar:X:Count$xPaid -SVar:Picture:http://www.wizards.com/global/images/magic/general/banefire.jpg Oracle:Banefire deals X damage to any target.\nIf X is 5 or more, this spell can't be countered and the damage can't be prevented. diff --git a/forge-gui/res/cardsfolder/d/demonfire.txt b/forge-gui/res/cardsfolder/d/demonfire.txt index 028acdb497a..0c023a9cf72 100644 --- a/forge-gui/res/cardsfolder/d/demonfire.txt +++ b/forge-gui/res/cardsfolder/d/demonfire.txt @@ -4,8 +4,7 @@ Types:Sorcery A:SP$ DealDamage | Cost$ X R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ X | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE1 | RememberDamaged$ True | ReplaceDyingDefined$ Remembered | SubAbility$ DBDemonfire | SpellDescription$ CARDNAME deals X damage to any target. If a creature dealt damage this way would die this turn, exile it instead. SVar:DBDemonfire:DB$ DealDamage | Defined$ Targeted | NumDmg$ X | NoPrevention$ True | ConditionCheckSVar$ Y | ConditionSVarCompare$ EQ0 | RememberDamaged$ True | ReplaceDyingDefined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -S:Mode$ Continuous | Affected$ Self | AffectedZone$ Stack | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ Y | SVarCompare$ EQ0 | Description$ Hellbent — If you have no cards in hand, this spell can't be countered and the damage can't be prevented. +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ Y | SVarCompare$ EQ0 | Description$ Hellbent — If you have no cards in hand, this spell can't be countered and the damage can't be prevented. SVar:X:Count$xPaid SVar:Y:Count$InYourHand -SVar:Picture:http://www.wizards.com/global/images/magic/general/demonfire.jpg Oracle:Demonfire deals X damage to any target. If a creature dealt damage this way would die this turn, exile it instead.\nHellbent — If you have no cards in hand, this spell can't be countered and the damage can't be prevented. diff --git a/forge-gui/res/cardsfolder/d/dragonlords_prerogative.txt b/forge-gui/res/cardsfolder/d/dragonlords_prerogative.txt index 664ad67b9df..a732e6edbba 100644 --- a/forge-gui/res/cardsfolder/d/dragonlords_prerogative.txt +++ b/forge-gui/res/cardsfolder/d/dragonlords_prerogative.txt @@ -2,8 +2,7 @@ Name:Dragonlord's Prerogative ManaCost:4 U U Types:Instant K:Presence:Dragon -S:Mode$ Continuous | Affected$ Self | AffectedZone$ Stack | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | Presence$ Dragon | Description$ If you revealed a Dragon card or controlled a Dragon as you cast this spell, this spell can't be countered. +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | Presence$ Dragon | Description$ If you revealed a Dragon card or controlled a Dragon as you cast this spell, this spell can't be countered. A:SP$ Draw | Cost$ 4 U U | NumCards$ 4 | SpellDescription$ Draw four cards. DeckHints:Type$Dragon -SVar:Picture:http://www.wizards.com/global/images/magic/general/dragonlords_prerogative.jpg Oracle:As an additional cost to cast this spell, you may reveal a Dragon card from your hand.\nIf you revealed a Dragon card or controlled a Dragon as you cast this spell, this spell can't be countered.\nDraw four cards. diff --git a/forge-gui/res/cardsfolder/e/exquisite_firecraft.txt b/forge-gui/res/cardsfolder/e/exquisite_firecraft.txt index 7e71a2d3a23..85a6190c627 100644 --- a/forge-gui/res/cardsfolder/e/exquisite_firecraft.txt +++ b/forge-gui/res/cardsfolder/e/exquisite_firecraft.txt @@ -2,7 +2,6 @@ Name:Exquisite Firecraft ManaCost:1 R R Types:Sorcery A:SP$ DealDamage | Cost$ 1 R R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to any target. -S:Mode$ Continuous | Affected$ Self | AffectedZone$ Stack | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ X | SVarCompare$ GE2 | Description$ Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered. +S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | AddHiddenKeyword$ CARDNAME can't be countered. | CheckSVar$ X | SVarCompare$ GE2 | Description$ Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered. SVar:X:Count$ValidGraveyard Instant.YouOwn,Sorcery.YouOwn -SVar:Picture:http://www.wizards.com/global/images/magic/general/exquisite_firecraft.jpg Oracle:Exquisite Firecraft deals 4 damage to any target.\nSpell mastery — If there are two or more instant and/or sorcery cards in your graveyard, this spell can't be countered. diff --git a/forge-gui/res/cardsfolder/h/havengul_lich.txt b/forge-gui/res/cardsfolder/h/havengul_lich.txt index 448dcf2b8f5..0324379a40a 100644 --- a/forge-gui/res/cardsfolder/h/havengul_lich.txt +++ b/forge-gui/res/cardsfolder/h/havengul_lich.txt @@ -6,6 +6,6 @@ A:AB$ Effect | Name$ Havengul Lich Delayed Trigger | Cost$ 1 | ValidTgts$ Creatu SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Graveyard | Description$ Until end of turn, you may cast a creature card in a graveyard. SVar:DTCast:Mode$ SpellCast | ValidCard$ Card.IsRemembered | Execute$ StealAbs | TriggerDescription$ When you cast that card this turn, Havengul Lich gains all activated abilities of that card until end of turn. SVar:StealAbs:DB$ Effect | Name$ Havengul Lich effect | RememberObjects$ TriggeredCard | StaticAbilities$ STSteal -SVar:STSteal:Mode$ Continuous | Affected$ EffectSource | EffectZone$ Command | GainsAbilitiesOfDefined$ RememberedLKI | Description$ Havengul Lich gains all activated abilities of that card until end of turn. +SVar:STSteal:Mode$ Continuous | Affected$ Card.EffectSource | EffectZone$ Command | GainsAbilitiesOfDefined$ RememberedLKI | Description$ Havengul Lich gains all activated abilities of that card until end of turn. AI:RemoveDeck:All Oracle:{1}: You may cast target creature card in a graveyard this turn. When you cast it this turn, Havengul Lich gains all activated abilities of that card until end of turn. diff --git a/forge-gui/res/cardsfolder/i/illusionists_gambit.txt b/forge-gui/res/cardsfolder/i/illusionists_gambit.txt index 021b16da5aa..f705cdf59d7 100644 --- a/forge-gui/res/cardsfolder/i/illusionists_gambit.txt +++ b/forge-gui/res/cardsfolder/i/illusionists_gambit.txt @@ -8,6 +8,6 @@ SVar:DBDelayedEffect:DB$ DelayedTrigger | Mode$ Phase | Phase$ BeginCombat | Exe SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STCantAttack,STMustAttack | SubAbility$ DBCleanup | Duration$ UntilEndOfCombat SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:STCantAttack:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature.IsRemembered | Target$ You,Planeswalker.YouCtrl | Description$ Each of those creatures attacks that combat if able. -SVar:STMustAttack:Mode$ Continuous | EffectZone$ Command | ValidCard$ Creature.IsRemembered | AddHiddenKeyword$ CARDNAME attacks each combat if able. +SVar:STMustAttack:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.IsRemembered | AddHiddenKeyword$ CARDNAME attacks each combat if able. AI:RemoveDeck:All Oracle:Cast this spell only during the declare blockers step on an opponent's turn.\nRemove all attacking creatures from combat and untap them. After this phase, there is an additional combat phase. Each of those creatures attacks that combat if able. They can't attack you or a planeswalker you control that combat. diff --git a/forge-gui/res/cardsfolder/m/molten_disaster.txt b/forge-gui/res/cardsfolder/m/molten_disaster.txt index 33b7b1471c7..da8cc208d88 100644 --- a/forge-gui/res/cardsfolder/m/molten_disaster.txt +++ b/forge-gui/res/cardsfolder/m/molten_disaster.txt @@ -2,7 +2,7 @@ Name:Molten Disaster ManaCost:X R R Types:Sorcery K:Kicker:R -S:Mode$ Continuous | Affected$ Self | AffectedZone$ Stack | EffectZone$ All | IsPresent$ Card.Self+kicked | PresentZone$ Stack | CharacteristicDefining$ True | AddKeyword$ Split second | Description$ If this spell was kicked, it has split second. (As long as this spell is on the stack, players can't cast spells or activate abilities that aren't mana abilities.) +S:Mode$ Continuous | EffectZone$ All | IsPresent$ Card.Self+kicked | PresentZone$ Stack | CharacteristicDefining$ True | AddKeyword$ Split second | Description$ If this spell was kicked, it has split second. (As long as this spell is on the stack, players can't cast spells or activate abilities that aren't mana abilities.) A:SP$ DamageAll | Cost$ X R R | ValidCards$ Creature.withoutFlying | ValidPlayers$ Player | NumDmg$ X | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals X damage to each creature without flying and each player. SVar:X:Count$xPaid Oracle:Kicker {R} (You may pay an additional {R} as you cast this spell.)\nIf this spell was kicked, it has split second. (As long as this spell is on the stack, players can't cast spells or activate abilities that aren't mana abilities.)\nMolten Disaster deals X damage to each creature without flying and each player. From b4b039b2b0af013a917a83c70cc598371e2a2f86 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 13:03:54 -0400 Subject: [PATCH 11/33] intuition.txt eliminate ChooseCard line --- forge-gui/res/cardsfolder/i/intuition.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-gui/res/cardsfolder/i/intuition.txt b/forge-gui/res/cardsfolder/i/intuition.txt index 651dda79140..18d28054a0a 100644 --- a/forge-gui/res/cardsfolder/i/intuition.txt +++ b/forge-gui/res/cardsfolder/i/intuition.txt @@ -1,9 +1,9 @@ Name:Intuition ManaCost:2 U Types:Instant -A:SP$ ChangeZone | Cost$ 2 U | Origin$ Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 3 | Mandatory$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChoose | StackDescription$ {p:You} searches their library for three cards and reveals them. | SpellDescription$ Search your library for three cards and reveal them. Target opponent chooses one. Put that card into your hand and the rest into your graveyard. Then shuffle your library. -SVar:DBChoose:DB$ ChooseCard | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Choices$ Card.IsRemembered | ChoiceZone$ Library | ChoiceTitle$ Choose a card for the hand | Mandatory$ True | Amount$ 1 | SubAbility$ DBChangeZone1 | StackDescription$ {p:Targeted} chooses one. -SVar:DBChangeZone1:DB$ ChangeZone | Origin$ Library | Destination$ Hand | Defined$ ChosenCard | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ {p:You} puts that card into their hand +A:SP$ ChangeZone | Cost$ 2 U | Origin$ Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 3 | Mandatory$ True | RememberChanged$ True | Reveal$ True | Shuffle$ False | AILogic$ Intuition | SubAbility$ DBChangeZone1 | StackDescription$ {p:You} searches their library for three cards and reveals them. | SpellDescription$ Search your library for three cards and reveal them. Target opponent chooses one. Put that card into your hand and the rest into your graveyard. Then shuffle your library. +SVar:DBChangeZone1:DB$ ChangeZone | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | DefinedPlayer$ You | Chooser$ Targeted | ChangeType$ Card.IsRemembered | SelectPrompt$ Choose a card for the hand | Hidden$ True | Origin$ Library | Destination$ Hand | ChangeNum$ 1 | Mandatory$ True | Shuffle$ False | NoLooking$ True | SubAbility$ DBChangeZone2 | StackDescription$ {p:Targeted} chooses one. {p:You} puts that card into their hand SVar:DBChangeZone2:DB$ ChangeZoneAll | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.IsRemembered | Shuffle$ True | StackDescription$ and the rest into their graveyard. Then {p:You} shuffles their library. | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHints:Ability$Graveyard Oracle:Search your library for three cards and reveal them. Target opponent chooses one. Put that card into your hand and the rest into your graveyard. Then shuffle your library. From 1bc834efe89cbbe34462da326c15ca9ad00a3b13 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 13:24:32 -0400 Subject: [PATCH 12/33] add DeckHints --- forge-gui/res/cardsfolder/g/gifts_ungiven.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/res/cardsfolder/g/gifts_ungiven.txt b/forge-gui/res/cardsfolder/g/gifts_ungiven.txt index 965daeca26f..2453241be65 100644 --- a/forge-gui/res/cardsfolder/g/gifts_ungiven.txt +++ b/forge-gui/res/cardsfolder/g/gifts_ungiven.txt @@ -5,4 +5,5 @@ A:SP$ ChangeZone | Cost$ 3 U | Origin$ Library | Destination$ Library | ChangeTy SVar:DBChangeZone1:DB$ ChangeZone | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | DefinedPlayer$ You | Chooser$ Targeted | SelectPrompt$ Choose two cards for the graveyard | NoLooking$ True | Hidden$ True | Origin$ Library | Destination$ Graveyard | ChangeType$ Card.IsRemembered | ChangeNum$ 2 | Mandatory$ True | SelectPrompt$ Select two cards for the graveyard | Shuffle$ False | SubAbility$ DBChangeZone2 | StackDescription$ {p:Targeted} chooses two of those cards. {p:You} puts the chosen cards into their graveyard SVar:DBChangeZone2:DB$ ChangeZoneAll | Origin$ Library | Destination$ Hand | ChangeType$ Card.IsRemembered | Mandatory$ True | NoLooking$ True | Shuffle$ True | StackDescription$ and the rest into their hand. Then {p:You} shuffles their library. | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHints:Ability$Graveyard Oracle:Search your library for up to four cards with different names and reveal them. Target opponent chooses two of those cards. Put the chosen cards into your graveyard and the rest into your hand. Then shuffle your library. From 094cf9e4004826f6c43d3fc7544e228d497e0824 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 13:30:33 -0400 Subject: [PATCH 13/33] make_your_mark.txt improve Effect behavior + add cleanup --- forge-gui/res/cardsfolder/upcoming/make_your_mark.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt b/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt index 9789cea92ea..8babe7e4ffa 100644 --- a/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt +++ b/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt @@ -2,8 +2,10 @@ Name:Make Your Mark ManaCost:RW Types:Instant A:SP$ Pump | Cost$ RW | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +1 | SubAbility$ DBEffect | SpellDescription$ Target creature gets +1/+0 until end of turn. When that creature dies this turn, create a 3/2 red and white Spirit creature token. -SVar:DBEffect:DB$ Effect | Triggers$ SpiritEmerge | RememberObjects$ ParentTarget | ExileOnMoved$ Battlefield | StackDescription$ When {c:Targeted} dies this turn, create a 3/2 red and white Spirit creature token. +SVar:DBEffect:DB$ Effect | Triggers$ SpiritEmerge | RememberObjects$ Targeted | SubAbility$ DBCleanup| StackDescription$ When {c:Targeted} dies this turn, create a 3/2 red and white Spirit creature token. SVar:SpiritEmerge:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | Execute$ DBToken | TriggerDescription$ When that creature dies this turn, create a 3/2 red and white Spirit creature token. -SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ rw_3_2_spirit | TokenOwner$ You +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ rw_3_2_spirit | TokenOwner$ You | SubAbility$ DBExileSelf +SVar:DBExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token Oracle:Target creature gets +1/+0 until end of turn. When that creature dies this turn, create a 3/2 red and white Spirit creature token. From 1023cc5cb23200eb9d4e7c067be731768f8e3783 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Mon, 12 Apr 2021 17:15:56 -0400 Subject: [PATCH 14/33] make_your_mark.txt remove unneeded cleanup --- forge-gui/res/cardsfolder/upcoming/make_your_mark.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt b/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt index 8babe7e4ffa..a9e6f9471c1 100644 --- a/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt +++ b/forge-gui/res/cardsfolder/upcoming/make_your_mark.txt @@ -2,10 +2,9 @@ Name:Make Your Mark ManaCost:RW Types:Instant A:SP$ Pump | Cost$ RW | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +1 | SubAbility$ DBEffect | SpellDescription$ Target creature gets +1/+0 until end of turn. When that creature dies this turn, create a 3/2 red and white Spirit creature token. -SVar:DBEffect:DB$ Effect | Triggers$ SpiritEmerge | RememberObjects$ Targeted | SubAbility$ DBCleanup| StackDescription$ When {c:Targeted} dies this turn, create a 3/2 red and white Spirit creature token. +SVar:DBEffect:DB$ Effect | Triggers$ SpiritEmerge | RememberObjects$ Targeted | StackDescription$ When {c:Targeted} dies this turn, create a 3/2 red and white Spirit creature token. SVar:SpiritEmerge:Mode$ ChangesZone | ValidCard$ Creature.IsRemembered | Origin$ Battlefield | Destination$ Graveyard | Execute$ DBToken | TriggerDescription$ When that creature dies this turn, create a 3/2 red and white Spirit creature token. SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ rw_3_2_spirit | TokenOwner$ You | SubAbility$ DBExileSelf SVar:DBExileSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile -SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True DeckHas:Ability$Token Oracle:Target creature gets +1/+0 until end of turn. When that creature dies this turn, create a 3/2 red and white Spirit creature token. From e5d4979f3e32d264adb69d5e467f5cb16727e2d3 Mon Sep 17 00:00:00 2001 From: Lyu Zong-Hong Date: Tue, 13 Apr 2021 10:13:51 +0900 Subject: [PATCH 15/33] Update Japanese Localization --- forge-gui/res/languages/ja-JP.properties | 90 ++++++++++++------------ 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index afb8377f166..bd33ab60fa2 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -117,8 +117,8 @@ cbpCounterDisplayLocation=カウンター表示場所 cbpGraveyardOrdering=墓地に置かれるカードの順番指定を許可する lblAltLifeDisplay=代替のプレイヤーレイアウト(ランドスケープモード時) nlAltLifeDisplay=代替のレイアウトでプレイヤーライフ、毒、エネルギーと経験カウンターを表示する -lblPreferredArt=Preferred Art -nlPreferredArt=Sets the preferred art for cards. +lblPreferredArt=好むのアート +nlPreferredArt=カードの好むのアートを設定します。 Troubleshooting=トラブルシューティング GeneralConfiguration=一般設定 lblPlayerName=プレイヤー名 @@ -594,7 +594,7 @@ lblNetArchivePioneerDecks=ネットアーカイブデッキ パイオニア lblNetArchiveModernDecks=ネットアーカイブデッキ モダン lblNetArchiveLegacyDecks=ネットアーカイブデッキ レガシー lblNetArchiveVintageDecks=ネットアーカイブデッキ ビンテージ -lblNetArchiveBlockDecks=Net Archive Block Decks +lblNetArchiveBlockDecks=ネットアーカイブデッキ ブロック #VSubmenuTutorial lblTutorial=チュートリアル lblTutorialMode=チュートリアルモード @@ -605,11 +605,11 @@ lblPuzzleModeSolve=パズルモード: 解く lblPuzzleModeCreate=パズルモード: 作成 lblCreate=作成 lblCreateNewPuzzle=新しいパズルを作る -lblCreatePuzzleDest1=In this mode, you will start with a clean battlefield and empty zones. -lblCreatePuzzleDest2=You will need to use the Developer Mode tools to create a game state for your puzzle. -lblCreatePuzzleDest3=Then, use the Dump Game State command to export your game state with metadata template. -lblCreatePuzzleDest4=You can edit the exported file in a text editor to change the puzzle name, description, and objectives. -lblCreatePuzzleDest5=The puzzle file needs to have the .pzl extension and must be placed in res/puzzles. +lblCreatePuzzleDest1=このモードでは空白の戦場と各領域から始まります。 +lblCreatePuzzleDest2=開発者モードのツールを使って、パズルのゲームステートを設置します。 +lblCreatePuzzleDest3=そして、ゲームステート保存コマンドでゲームのステートとメタテンプレートと一生に保存します。 +lblCreatePuzzleDest4=保存されたファイルをテキストエディタで開いて、パズルの名前、説明、目標なとを編集してください。 +lblCreatePuzzleDest5=最後に、パズルファイルの拡張子を「.pzl」に変更して、「res/puzzles」の下に置いてください。 #VSubmenuGauntletLoad.java lblQuickGauntlets=クイックガントレット lblQuickGauntlet=クイックガントレット @@ -703,7 +703,7 @@ lblWinbyTurn10=10ターン以内に勝利 lblWinbyTurn5=5ターン以内に勝利 lblFirstTurnWin=1ターン目に勝利 lblMaxLifeDiffBonus=ノーダメージ報酬 -lblExcludePromosFromRewardPool=Exclude Promos +lblExcludePromosFromRewardPool=プロモカードを除く lblEasy=簡単 lblMedium=普通 lblHard=難しい @@ -927,7 +927,7 @@ lblCost=コスト ttCost=コスト lblDecks=デッキ lblDeleteEdit=削除/編集 -lblSetEdition=Mystery column. We don''t know what it does or if that''s what it should do. +lblSetEdition=使われていない項目かも ttFavorite=お気に入り lblFolder=フォルダ ttFormats=使用可能なフォーマット @@ -1186,7 +1186,7 @@ lblCallBack=呼び戻す lblDisabled=無効 lblSelectAttackCreatures=攻撃するクリーチャーを選んでください lblSelectAttackTarget=または、攻撃したいプレイヤー/プレインズウォーカーを選びます。 -lblSelectBandingTarget= To attack as a band, select an attacking creature to activate its ''band'' then select another to join it. +lblSelectBandingTarget=バンドの宣言はまず一つの攻撃クリーチャーを再度選んで、「バンド」が有効になります、そして他のクリーチャーを追加してください。 #InputBlock.java lblSelectBlockTarget=ブロッカーを宣言する別の攻撃者を選びます。 lblSelectBlocker=ブロックするクリーチャーを選んでください @@ -1220,7 +1220,7 @@ lblYouMustHavePrioritytoUseThisFeature=この機能を使用するには優先 lblNameTheCard=カード名を選ぶ lblWhichPlayerShouldRoll=誰がロールしますか? lblChooseResult=結果を選択 -lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=The chosen card is not a permanent or can''t exist independently on the battlefield.\nIf you''d like to cast a non-permanent spell, or if you''d like to cast a permanent spell and place it on stack, please use the Cast Spell/Play Land button. +lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=選択したカードがパーマネントじゃない、あるいは単独に戦場に存在できない。\nパーマネントじゃない呪文、あるいはパーマネント呪文を唱えてスタックに置きたい場合、「呪文/土地をプレイ」ボタンを使ってください。 lblError=エラー lblWinGame=ゲームに勝利 lblSetLifetoWhat=ライフを何に設定しますか? @@ -1317,12 +1317,12 @@ lblRemoveCardBelongingWitchPlayer=どのプレイヤーに属するカードを lblRemoveCardFromWhichZone=どのゾーンからカードを削除しますか? lblChooseCardsRemoveFromGame=ゲームから削除するカードを選んでください lblRemoved=削除しました -lblEnterASequence=Enter a sequence (card IDs and/or "opponent"/"me"). (e.g. 7, opponent, 18) +lblEnterASequence=シーケンス(カードID、または「opponent」/「me」)を入力してください。(例:7, opponent, 18) lblActionSequenceCleared=アクションシーケンスがクリアされました。 -lblRestartingActionSequence=Restarting action sequence. -lblErrorPleaseCheckID=Error: Check IDs and ensure they''re separated by spaces and/or commas. -lblErrorEntityWithId=Error: Entity with ID -lblNotFound=not found +lblRestartingActionSequence=アクションシーケンスをやり直す。 +lblErrorPleaseCheckID=エラー: IDをスペースや「,」で分けてください。 +lblErrorEntityWithId=エラー: オブジェクト ID +lblNotFound=が見つかりません lblChooseAnnounceForCard={1}の{0}を選ぶ lblSacrifice=生け贄 lblLookCardInPlayerZone={0} {1}のカードを見る @@ -1774,7 +1774,7 @@ lblCancelSearchUpToSelectNumCards=探しを中止しますか? あと {0}枚 #ChangeZoneAllEffect.java lblMoveTargetFromOriginToDestination={0}を {1}から {2}へ移動しますか? #CharmEffect.java -lblWouldYouLikeCharm=Do you want to choose modes? +lblWouldYouLikeCharm=モードを選択しますか? #ChooseCardEffect.java lblChoose=選ぶ lblSelectCreatureWithTotalPowerLessOrEqualTo=パワーの合計が {0}以下になるように望む数のクリーチャーを選ぶ @@ -1952,30 +1952,30 @@ lblHowManyAdditionalVotesDoYouWant=追加に何票を投票します? #InputPayMana.java lblChooseManaAbility=マナ能力を選択: #VDevMenu.java -lblUnlimitedLands=Play Unlimited Lands -lblGenerateMana=Generate Mana -lblViewAll=View All Cards -lblSetupGame=Setup Game State -lblDumpGame=Dump Game State -lblTutor=Tutor for Card -lblRollbackPhase=Rollback Phase -lblAddCounterPermanent=Add Counters to Card -lblSubCounterPermanent=Sub Counters from Card -lblTapPermanent=Tap Permanents -lblUntapPermanent=Untap Permanents -lblSetLife=Set Player Life -lblCardToBattlefield=Add Card to Battlefield -lblExileFromPlay=Exile Card from Play -lblCardToHand=Add Card to Hand -lblExileFromHand=Exile Card from Hand -lblCardToLibrary=Add Card to Library -lblCardToGraveyard=Add Card to Graveyard -lblCardToExile=Add Card to Exile -lblCastSpellOrPlayLand=Cast Spell/Play Land -lblRepeatAddCard=Repeat Last Add Card -lblRemoveFromGame=Remove Card from Game -lblRiggedRoll=Rigged Planar Roll -lblWalkTo=Planeswalk to +lblUnlimitedLands=土地無制限プレイ +lblGenerateMana=マナ生成 +lblViewAll=全部のカードが見える +lblSetupGame=ゲームステートの設置 +lblDumpGame=ゲームステートの保存 +lblTutor=カードを教示 +lblRollbackPhase=前のフェイズに戻る +lblAddCounterPermanent=カードのカウンターを追加 +lblSubCounterPermanent=カードのカウンターを減少 +lblTapPermanent=パーマネントをタップ +lblUntapPermanent=パーマネントをアンタップ +lblSetLife=プレイヤーライフを設定 +lblCardToBattlefield=戦場にカードを追加 +lblExileFromPlay=戦場からカードを除外 +lblCardToHand=手札にカードを追加 +lblExileFromHand=手札のカードを除外 +lblCardToLibrary=ライブラリーにカードを追加 +lblCardToGraveyard=墓地にカードを追加 +lblCardToExile=除外領域にカードを追加 +lblCastSpellOrPlayLand=呪文/土地をプレイ +lblRepeatAddCard=最後の追加カードを再度追加 +lblRemoveFromGame=ゲームからカードを削除 +lblRiggedRoll=次元ダイスを指定 +lblWalkTo=次元カードを指定 #PhaseType.java lblUntapStep=アンタップ・ステップ lblUpkeepStep=アップキープ・ステップ @@ -2581,8 +2581,8 @@ lblDeveloperCorner=開発者コーナー lblPleaseFirstSelectAPuzzleFromList=まずリストからパズルを選択してください! lblNoSelectedPuzzle=パズルを選択していない #CSubmenuPuzzleCreate.java -lblWhoShouldBeFirstTakeTurn=Who should be the first to take a turn? -lblWelcomePuzzleModeMessage=Welcome to the Create a Puzzle mode.\n\nPlease make sure that Developer Mode is enabled in Forge preferences.\nRemember that rule enforcement is active, so players will lose the game\nfor drawing from empty library! +lblWhoShouldBeFirstTakeTurn=誰が最初にターンを始めますか? +lblWelcomePuzzleModeMessage=パズル作成モードへようこそ。\n\n設定で開発者モードが有効になっているのを確認してください。\n普通ーのゲームルールは有効なので、例えば空のライブラリーからカードを引く場合は負けます! #CDock.java lblTargetingArcsOff=ターゲットアーク:オフ lblTargetingArcsCardMouseover=ターゲットアーク:マウスオーバー @@ -2667,7 +2667,7 @@ lblDetectedInvalidHostAddress=無効なアドレス ({0}) を見つかりまし lblChooseACompanion=相棒を指定してください lblChooseAColorFor={0}に色 1色を指定してください lblRevealFaceDownCards=裏向きのカードを公開します: -lblLearnALesson=Learn a Lesson +lblLearnALesson=履修を行う #QuestPreferences.java lblWildOpponentNumberError=ワイルカード相手は 0~3 を設定してください #GauntletWinLose.java From 39f3feb2103e08ff3d0c15df666c5a8e1929907c Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 13 Apr 2021 05:10:27 +0000 Subject: [PATCH 16/33] Update Commander 2021.txt --- forge-gui/res/editions/Commander 2021.txt | 64 ++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/forge-gui/res/editions/Commander 2021.txt b/forge-gui/res/editions/Commander 2021.txt index 13286349526..13fee397d02 100644 --- a/forge-gui/res/editions/Commander 2021.txt +++ b/forge-gui/res/editions/Commander 2021.txt @@ -139,12 +139,29 @@ Type=Other 132 C Traumatic Visions 133 C Treasure Cruise 134 U Ambition's Cost -137 R Forgotten Ancient +135 U Ancient Craving +136 U Bloodthirsty Aerialist +137 R Bloodtracker 138 U Curse of Disturbance +139 R Damnable Pact +140 R Deadly Tempest 141 R Deathbringer Regent +142 R Defiant Bloodlord +143 C Epicure of Blood +144 C Feed the Swarm +145 R Greed 146 R Infernal Offering 147 M Necropolis Regent +148 M Noxious Gearhulk +149 M Ob Nixilis Reignited 150 U Parasitic Impetus +151 U Reckless Spite +152 R Sangromancer +153 U Sanguine Bond +154 U Silversmote Ghoul +155 U Suffer the Past +156 R Taste of Death +157 U Vampire Nighthawk 158 M Apex of Power 159 R Blasphemous Act 160 R Brass's Bounty @@ -171,10 +188,14 @@ Type=Other 181 U Thopter Engineer 182 R Volcanic Vision 183 R Wildfire Devils +184 R Ageless Entity 185 R Arashi, the Sky Asunder 186 U Beast Within +187 U Cultivate 188 R Ezuri's Predation +189 R Forgotten Ancient 190 M Garruk, Primal Hunter +191 C Gift of Paradise 192 R Hornet Nest 193 R Hornet Queen 194 R Hydra Broodmaster @@ -184,10 +205,14 @@ Type=Other 198 U Krosan Grip 199 R Managorger Hydra 200 U Nissa's Expedition +201 R Nissa's Renewal +202 U Pulse of Murasa 203 R Rampaging Baloths +204 C Rampant Growth 205 R Return of the Wildspeaker 206 R Shamanic Revelation 207 R Terastodon +208 R Verdant Sun's Avatar 209 R Biomass Mutation 210 U Boros Charm 211 R Call the Skybreaker @@ -196,17 +221,23 @@ Type=Other 214 R Deathbringer Liege 215 R Debtors' Knell 216 M Epic Experiment +217 R Gaze of Granite +218 R Gluttonous Troll 219 U Incubation // Incongruity 220 R Jor Kadeen, the Prevailer 221 M Kaseto, Orochi Archmage +222 U Leyline Prowler 223 R Magister of Worth 224 M Master Biomancer +225 U Moldervine Reclamation 226 U Plaxcaster Frogling 227 U Primal Empathy +228 R Sapling of Colfenor 229 R Spitting Image 230 R Teysa, Envoy of Ghosts 231 U Trygon Predator 232 R Utter End +233 M Alhammarret's Archive 234 C Arcane Signet 235 U Bloodthirsty Blade 236 C Boros Locket @@ -214,19 +245,24 @@ Type=Other 238 U Burnished Hart 239 C Commander's Sphere 240 R Coveted Jewel +241 R Druidic Satchel 242 R Duplicant +243 U Elixir of Immortality 244 U Hedron Archive 245 C Ichor Wellspring 246 R Idol of Oblivion 247 C Izzet Signet 248 R Key to the City +249 R Loxodon Warhammer 250 U Meteor Golem 251 U Mind Stone 252 C Mycosynth Wellspring 253 R Myr Battlesphere 254 U Orzhov Signet +255 U Paradise Plume 256 R Pendant of Prosperity 257 C Pilgrim's Eye +258 C Pristine Talisman 259 M Pyromancer's Goggles 260 R Scrap Trawler 261 R Sculpting Steel @@ -236,50 +272,76 @@ Type=Other 265 U Spectral Searchlight 266 R Steel Hellkite 267 R Steel Overseer +268 U Sun Droplet 269 U Talisman of Creativity +270 U Talisman of Resilience 271 R Thousand-Year Elixir 272 U Unstable Obelisk +273 R Venser's Journal 274 R Victory Chimes +275 R Well of Lost Dreams 276 C Ancient Den 277 U Barren Moor 278 R Battlefield Forge 279 U Blighted Cataract +280 U Blighted Woodland 281 C Bojuka Bog 282 U Boros Garrison 283 R Caves of Koilos +284 C Command Tower 285 U Darksteel Citadel 286 C Desert of the Fervent 287 C Desert of the Mindful +288 R Exotic Orchard +289 C Forgotten Cave +290 C Gingerbread Cabin +291 U Golgari Rot Farm 292 C Great Furnace +293 R High Market 294 U Izzet Boilerworks +295 C Jungle Hollow 296 U Llanowar Reborn +297 R Llanowar Wastes +298 C Lonely Sandbar 299 R Lumbering Falls 300 U Mage-Ring Network 301 U Memorial to Genius 302 R Mikokoro, Center of the Sea 303 R Mosswort Bridge +304 U Myriad Landscape 305 U Novijen, Heart of Progress +306 C Opal Palace 307 R Oran-Rief, the Vastwood 308 U Orzhov Basilica 309 U Phyrexia's Core +310 C Radiant Fountain 311 U Reliquary Tower +312 U Rogue's Passage +313 U Sapseep Forest 314 R Scavenger Grounds +315 C Secluded Steppe 316 R Shivan Reef 317 U Simic Growth Chamber 318 R Slayers' Stronghold 319 U Sunhome, Fortress of the Legion 320 U Tainted Field +321 U Tainted Wood 322 R Temple of Epiphany +323 R Temple of Malady 324 R Temple of Mystery 325 R Temple of Silence +326 U Temple of the False God 327 R Temple of Triumph 328 M Breena, the Demagogue +329 M Felisa, Fang of Silverquill 330 M Veyran, Voice of Duality 331 M Zaffai, Thunder Conductor +332 M Gyome, Master Chef 333 M Willowdusk, Essence Seer 334 M Alibou, Ancient Witness 335 M Osgir, the Reconstructor 336 M Adrix and Nev, Twincasters +337 M Esix, Fractal Bloom 338 R Angel of the Ruins 339 R Archaeomancer's Map 340 R Bronze Guardian From 82f404e627a8bf120361402d73d1b119a7c4043e Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Tue, 13 Apr 2021 14:08:56 +0800 Subject: [PATCH 17/33] each draft boosters should be contain 1 sta card and 1 lesson card. --- .../editions/Strixhaven School of Mages.txt | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/forge-gui/res/editions/Strixhaven School of Mages.txt b/forge-gui/res/editions/Strixhaven School of Mages.txt index ce0c23d2922..0f079836db9 100644 --- a/forge-gui/res/editions/Strixhaven School of Mages.txt +++ b/forge-gui/res/editions/Strixhaven School of Mages.txt @@ -6,7 +6,7 @@ Code2=STX MciCode=stx Type=Expansion BoosterCovers=3 -Booster=10 Common, 3 Uncommon, 1 RareMythic, 1 BasicLand +Booster=1 fromSheet("STX lesson"), 9 Common, 3 Uncommon, 1 RareMythic, 1 fromSheet("STA cards") Prerelease=6 Boosters, 1 RareMythic+ [cards] @@ -405,6 +405,28 @@ Prerelease=6 Boosters, 1 RareMythic+ 381 U Rip Apart 382 U Decisive Denial +[lesson] +383 Environmental Sciences +384 Expanded Anatomy +385 Introduction to Annihilation +386 Introduction to Prophecy +387 Mascot Exhibition +388 Academic Probation +389 Reduce to Memory +390 Mercurial Transformation +391 Teachings of the Archaics +392 Confront the Past +393 Necrotic Fumes +394 Illuminate History +395 Start from Scratch +396 Basic Conjuration +397 Containment Breach +398 Elemental Summoning +399 Fractal Summoning +400 Inkling Summoning +401 Pest Summoning +402 Spirit Summoning + [tokens] bg_1_1_pest_lifegain br_3_6_avatar_haste_bolt From 29d260db9deab596a4a8dd46f4ad94d4bb68e38d Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Tue, 13 Apr 2021 10:32:16 +0200 Subject: [PATCH 18/33] Cards: use CharacteristicDefining for Alternative Cost for now --- .../java/forge/game/staticability/StaticAbility.java | 2 +- .../game/staticability/StaticAbilityContinuous.java | 10 +++++----- forge-gui/res/cardsfolder/c/cho_arrim_legate.txt | 3 +-- forge-gui/res/cardsfolder/c/crashing_tide.txt | 3 +-- forge-gui/res/cardsfolder/d/deadly_rollick.txt | 4 ++-- forge-gui/res/cardsfolder/d/deepwood_legate.txt | 2 +- forge-gui/res/cardsfolder/d/deflecting_swat.txt | 4 ++-- forge-gui/res/cardsfolder/f/flawless_maneuver.txt | 2 +- forge-gui/res/cardsfolder/k/kyren_legate.txt | 3 +-- forge-gui/res/cardsfolder/l/land_grant.txt | 2 +- forge-gui/res/cardsfolder/m/massacre.txt | 3 +-- forge-gui/res/cardsfolder/m/mogg_salvage.txt | 3 +-- forge-gui/res/cardsfolder/m/mutual_destruction.txt | 2 +- forge-gui/res/cardsfolder/o/obscuring_haze.txt | 2 +- forge-gui/res/cardsfolder/o/once_upon_a_time.txt | 2 +- forge-gui/res/cardsfolder/q/qasali_ambusher.txt | 3 +-- forge-gui/res/cardsfolder/r/refreshing_rain.txt | 3 +-- forge-gui/res/cardsfolder/r/rushwood_legate.txt | 3 +-- forge-gui/res/cardsfolder/s/saprazzan_legate.txt | 3 +-- forge-gui/res/cardsfolder/s/sivvis_ruse.txt | 3 +-- forge-gui/res/cardsfolder/s/submerge.txt | 3 +-- 21 files changed, 27 insertions(+), 38 deletions(-) diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index 3f0b0a39a3e..16e43f05de7 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -514,7 +514,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone return false; } } - } else { + } else if (!hasParam("CharacteristicDefining")) { if (!getHostCard().isInZone(ZoneType.Battlefield)) { // default return false; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index fe5d0ddd5b5..406a61fad43 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -168,7 +168,7 @@ public final class StaticAbilityContinuous { if (layer == StaticAbilityLayer.TEXT && params.containsKey("GainTextOf")) { final String valid = params.get("GainTextOf"); - CardCollection allValid = CardLists.getValidCards(game.getCardsInGame(), valid, hostCard.getController(), hostCard, null); + CardCollection allValid = CardLists.getValidCards(game.getCardsInGame(), valid, hostCard.getController(), hostCard, stAb); if (allValid.size() > 1) { // TODO: if ever necessary, support gaining text of multiple cards at the same time System.err.println("Error: GainTextOf parameter was not defined as a unique card for " + hostCard); @@ -271,7 +271,7 @@ public final class StaticAbilityContinuous { String keywordDefined = params.get("KeywordDefined"); CardCollectionView definedCards = game.getCardsIn(ZoneType.Battlefield); definedCards = CardLists.getValidCards(definedCards, keywordDefined, hostCard.getController(), - hostCard, null); + hostCard, stAb); for (Card c : definedCards) { final int cmc = c.getCMC(); String y = (input.replace(" from EachCMCAmongDefined", ":Card.cmcEQ" @@ -504,7 +504,7 @@ public final class StaticAbilityContinuous { if ("True".equals(look)) { look = "You"; } - mayLookAt = AbilityUtils.getDefinedPlayers(hostCard, look, null); + mayLookAt = AbilityUtils.getDefinedPlayers(hostCard, look, stAb); } if (params.containsKey("MayPlay")) { controllerMayPlay = true; @@ -567,7 +567,7 @@ public final class StaticAbilityContinuous { } } if (params.containsKey("ControlOpponentsSearchingLibrary")) { - Player cntl = Iterables.getFirst(AbilityUtils.getDefinedPlayers(hostCard, params.get("ControlOpponentsSearchingLibrary"), null), null); + Player cntl = Iterables.getFirst(AbilityUtils.getDefinedPlayers(hostCard, params.get("ControlOpponentsSearchingLibrary"), stAb), null); p.addControlledWhileSearching(se.getTimestamp(), cntl); } @@ -941,7 +941,7 @@ public final class StaticAbilityContinuous { final String[] strngs = params.get("Affected").split(","); for (Player p : controller.getGame().getPlayersInTurnOrder()) { - if (p.isValid(strngs, controller, hostCard, null)) { + if (p.isValid(strngs, controller, hostCard, stAb)) { players.add(p); } } diff --git a/forge-gui/res/cardsfolder/c/cho_arrim_legate.txt b/forge-gui/res/cardsfolder/c/cho_arrim_legate.txt index 28cc0bf6045..902b37f3c81 100644 --- a/forge-gui/res/cardsfolder/c/cho_arrim_legate.txt +++ b/forge-gui/res/cardsfolder/c/cho_arrim_legate.txt @@ -2,9 +2,8 @@ Name:Cho-Arrim Legate ManaCost:2 W Types:Creature Human Soldier PT:1/2 -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Swamp and you control a Plains, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Swamp and you control a Plains, you may cast this spell without paying its mana cost. K:Protection from black SVar:X:Count$Valid Swamp.OppCtrl SVar:Y:Count$Valid Plains.YouCtrl -SVar:Picture:http://www.wizards.com/global/images/magic/general/cho_arrim_legate.jpg Oracle:If an opponent controls a Swamp and you control a Plains, you may cast this spell without paying its mana cost.\nProtection from black diff --git a/forge-gui/res/cardsfolder/c/crashing_tide.txt b/forge-gui/res/cardsfolder/c/crashing_tide.txt index ff477823985..eb2e3b43077 100644 --- a/forge-gui/res/cardsfolder/c/crashing_tide.txt +++ b/forge-gui/res/cardsfolder/c/crashing_tide.txt @@ -1,10 +1,9 @@ Name:Crashing Tide ManaCost:2 U Types:Sorcery -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Flash | IsPresent$ Merfolk.YouCtrl | Description$ This spell has flash as long as you control a Merfolk. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Flash | IsPresent$ Merfolk.YouCtrl | Description$ This spell has flash as long as you control a Merfolk. A:SP$ ChangeZone | Cost$ 2 U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBDraw | SpellDescription$ Return target creature to its owner's hand. Draw a card. SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 DeckHints:Type$Merfolk SVar:BuffedBy:Merfolk -SVar:Picture:http://www.wizards.com/global/images/magic/general/crashing_tide.jpg Oracle:This spell has flash as long as you control a Merfolk.\nReturn target creature to its owner's hand.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/d/deadly_rollick.txt b/forge-gui/res/cardsfolder/d/deadly_rollick.txt index 6644c5c8d05..6a4bf7543d6 100644 --- a/forge-gui/res/cardsfolder/d/deadly_rollick.txt +++ b/forge-gui/res/cardsfolder/d/deadly_rollick.txt @@ -1,6 +1,6 @@ Name:Deadly Rollick ManaCost:3 B Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ ChangeZone | Cost$ 3 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature. -Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nExile target creature. \ No newline at end of file +Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nExile target creature. diff --git a/forge-gui/res/cardsfolder/d/deepwood_legate.txt b/forge-gui/res/cardsfolder/d/deepwood_legate.txt index 0e2e3596ec2..0360721ca03 100644 --- a/forge-gui/res/cardsfolder/d/deepwood_legate.txt +++ b/forge-gui/res/cardsfolder/d/deepwood_legate.txt @@ -2,7 +2,7 @@ Name:Deepwood Legate ManaCost:3 B Types:Creature Shade PT:1/1 -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Forest and you control a Swamp, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Forest and you control a Swamp, you may cast this spell without paying its mana cost. A:AB$ Pump | Cost$ B | Defined$ Self | NumAtt$ +1 | NumDef$ +1 | SpellDescription$ CARDNAME gets +1/+1 until end of turn. SVar:X:Count$Valid Forest.OppCtrl SVar:Y:Count$Valid Swamp.YouCtrl diff --git a/forge-gui/res/cardsfolder/d/deflecting_swat.txt b/forge-gui/res/cardsfolder/d/deflecting_swat.txt index 7221e374958..02de0439a89 100755 --- a/forge-gui/res/cardsfolder/d/deflecting_swat.txt +++ b/forge-gui/res/cardsfolder/d/deflecting_swat.txt @@ -1,6 +1,6 @@ Name:Deflecting Swat ManaCost:2 R Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ ChangeTargets | Cost$ 2 R | TargetType$ Spell,Activated,Triggered | Optional$ True | ValidTgts$ Card | TgtPrompt$ Select target spell or ability | SpellDescription$ You may choose new targets for target spell or ability. -Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nYou may choose new targets for target spell or ability. \ No newline at end of file +Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nYou may choose new targets for target spell or ability. diff --git a/forge-gui/res/cardsfolder/f/flawless_maneuver.txt b/forge-gui/res/cardsfolder/f/flawless_maneuver.txt index 4dc1d40d6bc..e500193d7f1 100755 --- a/forge-gui/res/cardsfolder/f/flawless_maneuver.txt +++ b/forge-gui/res/cardsfolder/f/flawless_maneuver.txt @@ -1,6 +1,6 @@ Name:Flawless Maneuver ManaCost:2 W Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ PumpAll | Cost$ 2 W | ValidCards$ Creature.YouCtrl | KW$ Indestructible | SpellDescription$ Creatures you control gain indestructible until end of turn. Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nCreatures you control gain indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/k/kyren_legate.txt b/forge-gui/res/cardsfolder/k/kyren_legate.txt index 7cd200701fd..1e132b392fd 100644 --- a/forge-gui/res/cardsfolder/k/kyren_legate.txt +++ b/forge-gui/res/cardsfolder/k/kyren_legate.txt @@ -2,9 +2,8 @@ Name:Kyren Legate ManaCost:1 R Types:Creature Goblin PT:1/1 -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Plains and you control a Mountain, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Plains and you control a Mountain, you may cast this spell without paying its mana cost. K:Haste SVar:X:Count$Valid Plains.OppCtrl SVar:Y:Count$Valid Mountain.YouCtrl -SVar:Picture:http://www.wizards.com/global/images/magic/general/kyren_legate.jpg Oracle:If an opponent controls a Plains and you control a Mountain, you may cast this spell without paying its mana cost.\nHaste diff --git a/forge-gui/res/cardsfolder/l/land_grant.txt b/forge-gui/res/cardsfolder/l/land_grant.txt index b1c4fdd234f..3a227629013 100644 --- a/forge-gui/res/cardsfolder/l/land_grant.txt +++ b/forge-gui/res/cardsfolder/l/land_grant.txt @@ -1,7 +1,7 @@ Name:Land Grant ManaCost:1 G Types:Sorcery -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:Reveal<1/Hand> | CheckSVar$ X | SVarCompare$ EQ0 | Description$ If you have no land cards in hand, you may reveal your hand rather than pay Land Grant's mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:Reveal<1/Hand> | CheckSVar$ X | SVarCompare$ EQ0 | Description$ If you have no land cards in hand, you may reveal your hand rather than pay Land Grant's mana cost. SVar:X:Count$TypeInYourHand.Land A:SP$ ChangeZone | Cost$ 1 G | Origin$ Library | Destination$ Hand | ChangeType$ Forest | ChangeNum$ 1 | SpellDescription$ Search your library for a Forest card, reveal that card, and put it into your hand. Then shuffle your library. Oracle:If you have no land cards in hand, you may reveal your hand rather than pay this spell's mana cost.\nSearch your library for a Forest card, reveal that card, and put it into your hand. Then shuffle your library. diff --git a/forge-gui/res/cardsfolder/m/massacre.txt b/forge-gui/res/cardsfolder/m/massacre.txt index b9a2e89c0e5..910bc919d19 100644 --- a/forge-gui/res/cardsfolder/m/massacre.txt +++ b/forge-gui/res/cardsfolder/m/massacre.txt @@ -1,9 +1,8 @@ Name:Massacre ManaCost:2 B B Types:Sorcery -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Plains and you control a Swamp, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Plains and you control a Swamp, you may cast this spell without paying its mana cost. SVar:X:Count$Valid Plains.OppCtrl SVar:Y:Count$Valid Swamp.YouCtrl A:SP$ PumpAll | Cost$ 2 B B | ValidCards$ Creature | NumAtt$ -2 | NumDef$ -2 | IsCurse$ True | SpellDescription$ All creatures get -2/-2 until end of turn. -SVar:Picture:http://www.wizards.com/global/images/magic/general/massacre.jpg Oracle:If an opponent controls a Plains and you control a Swamp, you may cast this spell without paying its mana cost.\nAll creatures get -2/-2 until end of turn. diff --git a/forge-gui/res/cardsfolder/m/mogg_salvage.txt b/forge-gui/res/cardsfolder/m/mogg_salvage.txt index 2887cfe3ae5..784b759fe1d 100644 --- a/forge-gui/res/cardsfolder/m/mogg_salvage.txt +++ b/forge-gui/res/cardsfolder/m/mogg_salvage.txt @@ -1,9 +1,8 @@ Name:Mogg Salvage ManaCost:2 R Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls an Island and you control a Mountain, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls an Island and you control a Mountain, you may cast this spell without paying its mana cost. SVar:X:Count$Valid Island.OppCtrl SVar:Y:Count$Valid Mountain.YouCtrl A:SP$ Destroy | Cost$ 2 R | ValidTgts$ Artifact | TgtPrompt$ Select target artifact | SpellDescription$ Destroy target artifact. -SVar:Picture:http://www.wizards.com/global/images/magic/general/mogg_salvage.jpg Oracle:If an opponent controls an Island and you control a Mountain, you may cast this spell without paying its mana cost.\nDestroy target artifact. diff --git a/forge-gui/res/cardsfolder/m/mutual_destruction.txt b/forge-gui/res/cardsfolder/m/mutual_destruction.txt index fed0117d0b1..0ce98b47e83 100755 --- a/forge-gui/res/cardsfolder/m/mutual_destruction.txt +++ b/forge-gui/res/cardsfolder/m/mutual_destruction.txt @@ -1,7 +1,7 @@ Name:Mutual Destruction ManaCost:B Types:Sorcery -S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Flash | IsPresent$ Permanent.YouCtrl+hasKeywordFlash | EffectZone$ All | Description$ CARDNAME has flash as long as you control a permanent with flash. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Flash | IsPresent$ Permanent.YouCtrl+hasKeywordFlash | Description$ CARDNAME has flash as long as you control a permanent with flash. A:SP$ Destroy | Cost$ B Sac<1/Creature> | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Destroy target creature. SVar:AICostPreference:SacCost$Creature.Token,Creature.cmcLE2 Oracle:This spell has flash as long as you control a permanent with flash.\nAs an additional cost to cast this spell, sacrifice a creature.\nDestroy target creature. diff --git a/forge-gui/res/cardsfolder/o/obscuring_haze.txt b/forge-gui/res/cardsfolder/o/obscuring_haze.txt index 227a65915b3..67f04d51372 100755 --- a/forge-gui/res/cardsfolder/o/obscuring_haze.txt +++ b/forge-gui/res/cardsfolder/o/obscuring_haze.txt @@ -1,7 +1,7 @@ Name:Obscuring Haze ManaCost:2 G Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ Effect | Cost$ 2 G | ReplacementEffects$ RPrevent | AILogic$ Fog | SpellDescription$ Prevent all damage that would be dealt this turn by creatures your opponents control. SVar:RPrevent:Event$ DamageDone | Prevent$ True | ActiveZones$ Command | ValidSource$ Creature.OppCtrl | Description$ Prevent all damage that would be dealt this turn by creatures your opponents control. Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nPrevent all damage that would be dealt this turn by creatures your opponents control. diff --git a/forge-gui/res/cardsfolder/o/once_upon_a_time.txt b/forge-gui/res/cardsfolder/o/once_upon_a_time.txt index d4a0ca42d5f..ac74f45271c 100644 --- a/forge-gui/res/cardsfolder/o/once_upon_a_time.txt +++ b/forge-gui/res/cardsfolder/o/once_upon_a_time.txt @@ -1,7 +1,7 @@ Name:Once Upon a Time ManaCost:1 G Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | CheckSVar$ X | SVarCompare$ EQ0 | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | Description$ If this spell is the first spell you've cast this game, you may cast it without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | CheckSVar$ X | SVarCompare$ EQ0 | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | Description$ If this spell is the first spell you've cast this game, you may cast it without paying its mana cost. SVar:X:Count$YouCastThisGame A:SP$ Dig | Cost$ 1 G | DigNum$ 5 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Card.Creature,Card.Land | RestRandomOrder$ True | SpellDescription$ Look at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. Oracle:If this spell is the first spell you've cast this game, you may cast it without paying its mana cost.\nLook at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/q/qasali_ambusher.txt b/forge-gui/res/cardsfolder/q/qasali_ambusher.txt index 36ff5381dde..65cb68170d5 100644 --- a/forge-gui/res/cardsfolder/q/qasali_ambusher.txt +++ b/forge-gui/res/cardsfolder/q/qasali_ambusher.txt @@ -3,9 +3,8 @@ ManaCost:1 G W Types:Creature Cat Warrior PT:2/3 K:Reach -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | CheckSVar$ X | CheckSecondSVar$ Y | CheckThirdSVar$ Z | MayPlay$ True | MayPlayWithoutManaCost$ True | MayPlayWithFlash$ True | MayPlayDontGrantZonePermissions$ True | Description$ If a creature is attacking you and you control a Forest and a Plains, you may cast CARDNAME without paying its mana cost and as though it had flash. +S:Mode$ Continuous | CharacteristicDefining$ True | CheckSVar$ X | CheckSecondSVar$ Y | CheckThirdSVar$ Z | MayPlay$ True | MayPlayWithoutManaCost$ True | MayPlayWithFlash$ True | MayPlayDontGrantZonePermissions$ True | Description$ If a creature is attacking you and you control a Forest and a Plains, you may cast CARDNAME without paying its mana cost and as though it had flash. SVar:X:Count$Valid Creature.attackingYou SVar:Y:Count$Valid Forest.YouCtrl SVar:Z:Count$Valid Plains.YouCtrl -SVar:Picture:http://www.wizards.com/global/images/magic/general/qasali_ambusher.jpg Oracle:Reach\nIf a creature is attacking you and you control a Forest and a Plains, you may cast Qasali Ambusher without paying its mana cost and as though it had flash. diff --git a/forge-gui/res/cardsfolder/r/refreshing_rain.txt b/forge-gui/res/cardsfolder/r/refreshing_rain.txt index 2349ba8f8a9..650b5a08d6d 100644 --- a/forge-gui/res/cardsfolder/r/refreshing_rain.txt +++ b/forge-gui/res/cardsfolder/r/refreshing_rain.txt @@ -1,9 +1,8 @@ Name:Refreshing Rain ManaCost:3 G Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Swamp and you control a Forest, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Swamp and you control a Forest, you may cast this spell without paying its mana cost. SVar:X:Count$Valid Swamp.OppCtrl SVar:Y:Count$Valid Forest.YouCtrl A:SP$ GainLife | Cost$ 3 G | LifeAmount$ 6 | ValidTgts$ Player | TgtPrompt$ Choose a player | SpellDescription$ Target player gains 6 life. -SVar:Picture:http://www.wizards.com/global/images/magic/general/refreshing_rain.jpg Oracle:If an opponent controls a Swamp and you control a Forest, you may cast this spell without paying its mana cost.\nTarget player gains 6 life. diff --git a/forge-gui/res/cardsfolder/r/rushwood_legate.txt b/forge-gui/res/cardsfolder/r/rushwood_legate.txt index 4c24c78870a..1e6fefab32a 100644 --- a/forge-gui/res/cardsfolder/r/rushwood_legate.txt +++ b/forge-gui/res/cardsfolder/r/rushwood_legate.txt @@ -2,8 +2,7 @@ Name:Rushwood Legate ManaCost:2 G Types:Creature Dryad PT:2/1 -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls an Island and you control a Forest, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls an Island and you control a Forest, you may cast this spell without paying its mana cost. SVar:X:Count$Valid Island.OppCtrl SVar:Y:Count$Valid Forest.YouCtrl -SVar:Picture:http://www.wizards.com/global/images/magic/general/rushwood_legate.jpg Oracle:If an opponent controls an Island and you control a Forest, you may cast this spell without paying its mana cost. diff --git a/forge-gui/res/cardsfolder/s/saprazzan_legate.txt b/forge-gui/res/cardsfolder/s/saprazzan_legate.txt index 5ce08feed83..985f0aedec7 100644 --- a/forge-gui/res/cardsfolder/s/saprazzan_legate.txt +++ b/forge-gui/res/cardsfolder/s/saprazzan_legate.txt @@ -2,9 +2,8 @@ Name:Saprazzan Legate ManaCost:3 U Types:Creature Merfolk Soldier PT:1/3 -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Mountain and you control an Island, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Mountain and you control an Island, you may cast this spell without paying its mana cost. K:Flying SVar:X:Count$Valid Mountain.OppCtrl SVar:Y:Count$Valid Island.YouCtrl -SVar:Picture:http://www.wizards.com/global/images/magic/general/saprazzan_legate.jpg Oracle:If an opponent controls a Mountain and you control an Island, you may cast this spell without paying its mana cost.\nFlying diff --git a/forge-gui/res/cardsfolder/s/sivvis_ruse.txt b/forge-gui/res/cardsfolder/s/sivvis_ruse.txt index 2f085d4299c..f1a2d13f331 100644 --- a/forge-gui/res/cardsfolder/s/sivvis_ruse.txt +++ b/forge-gui/res/cardsfolder/s/sivvis_ruse.txt @@ -1,11 +1,10 @@ Name:Sivvi's Ruse ManaCost:2 W W Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Mountain and you control a Plains, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Mountain and you control a Plains, you may cast this spell without paying its mana cost. A:SP$ Effect | Cost$ 2 W W | Name$ Sivvi's Ruse Effect | ReplacementEffects$ RPrevent | SpellDescription$ Prevent all damage that would be dealt this turn to creatures you control. SVar:RPrevent:Event$ DamageDone | Prevent$ True | ActiveZones$ Command | ValidTarget$ Creature.YouCtrl | Description$ Prevent all damage that would be dealt this turn to creatures you control. SVar:X:Count$Valid Mountain.OppCtrl SVar:Y:Count$Valid Plains.YouCtrl AI:RemoveDeck:All -SVar:Picture:http://www.wizards.com/global/images/magic/general/sivvis_ruse.jpg Oracle:If an opponent controls a Mountain and you control a Plains, you may cast this spell without paying its mana cost.\nPrevent all damage that would be dealt this turn to creatures you control. diff --git a/forge-gui/res/cardsfolder/s/submerge.txt b/forge-gui/res/cardsfolder/s/submerge.txt index 31bfd5eede7..72849324a56 100644 --- a/forge-gui/res/cardsfolder/s/submerge.txt +++ b/forge-gui/res/cardsfolder/s/submerge.txt @@ -1,9 +1,8 @@ Name:Submerge ManaCost:4 U Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Forest and you control an Island, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | CheckSecondSVar$ Y | Description$ If an opponent controls a Forest and you control an Island, you may cast this spell without paying its mana cost. SVar:X:Count$Valid Forest.OppCtrl SVar:Y:Count$Valid Island.YouCtrl A:SP$ ChangeZone | Cost$ 4 U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 0 | SpellDescription$ Put target creature on top of its owner's library. -SVar:Picture:http://www.wizards.com/global/images/magic/general/submerge.jpg Oracle:If an opponent controls a Forest and you control an Island, you may cast this spell without paying its mana cost.\nPut target creature on top of its owner's library. From cf7d0792a2937a79a446e866d2d1cea459bb8d08 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 13 Apr 2021 21:13:46 +0800 Subject: [PATCH 19/33] update cards --- forge-gui/res/cardsfolder/d/deadly_rollick.txt | 3 ++- forge-gui/res/cardsfolder/d/deflecting_swat.txt | 3 ++- forge-gui/res/cardsfolder/f/fierce_guardianship.txt | 3 ++- forge-gui/res/cardsfolder/f/flawless_maneuver.txt | 3 ++- forge-gui/res/cardsfolder/o/obscuring_haze.txt | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/forge-gui/res/cardsfolder/d/deadly_rollick.txt b/forge-gui/res/cardsfolder/d/deadly_rollick.txt index 6a4bf7543d6..5d70062ae5d 100644 --- a/forge-gui/res/cardsfolder/d/deadly_rollick.txt +++ b/forge-gui/res/cardsfolder/d/deadly_rollick.txt @@ -1,6 +1,7 @@ Name:Deadly Rollick ManaCost:3 B Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ ChangeZone | Cost$ 3 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature. +SVar:X:Count$Valid Card.IsCommander+YouCtrl Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nExile target creature. diff --git a/forge-gui/res/cardsfolder/d/deflecting_swat.txt b/forge-gui/res/cardsfolder/d/deflecting_swat.txt index 02de0439a89..33b2c79c840 100755 --- a/forge-gui/res/cardsfolder/d/deflecting_swat.txt +++ b/forge-gui/res/cardsfolder/d/deflecting_swat.txt @@ -1,6 +1,7 @@ Name:Deflecting Swat ManaCost:2 R Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True |AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ ChangeTargets | Cost$ 2 R | TargetType$ Spell,Activated,Triggered | Optional$ True | ValidTgts$ Card | TgtPrompt$ Select target spell or ability | SpellDescription$ You may choose new targets for target spell or ability. +SVar:X:Count$Valid Card.IsCommander+YouCtrl Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nYou may choose new targets for target spell or ability. diff --git a/forge-gui/res/cardsfolder/f/fierce_guardianship.txt b/forge-gui/res/cardsfolder/f/fierce_guardianship.txt index 5624538c8e9..5abe2812cd5 100644 --- a/forge-gui/res/cardsfolder/f/fierce_guardianship.txt +++ b/forge-gui/res/cardsfolder/f/fierce_guardianship.txt @@ -1,6 +1,7 @@ Name:Fierce Guardianship ManaCost:2 U Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ Counter | Cost$ 2 U | TargetType$ Spell | TgtPrompt$ Select target noncreature Spell | ValidTgts$ Card.nonCreature | SpellDescription$ Counter target noncreature spell. +SVar:X:Count$Valid Card.IsCommander+YouCtrl Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nCounter target noncreature spell. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/f/flawless_maneuver.txt b/forge-gui/res/cardsfolder/f/flawless_maneuver.txt index e500193d7f1..1dba675b08c 100755 --- a/forge-gui/res/cardsfolder/f/flawless_maneuver.txt +++ b/forge-gui/res/cardsfolder/f/flawless_maneuver.txt @@ -1,6 +1,7 @@ Name:Flawless Maneuver ManaCost:2 W Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ PumpAll | Cost$ 2 W | ValidCards$ Creature.YouCtrl | KW$ Indestructible | SpellDescription$ Creatures you control gain indestructible until end of turn. +SVar:X:Count$Valid Card.IsCommander+YouCtrl Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nCreatures you control gain indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/o/obscuring_haze.txt b/forge-gui/res/cardsfolder/o/obscuring_haze.txt index 67f04d51372..437319c2b9b 100755 --- a/forge-gui/res/cardsfolder/o/obscuring_haze.txt +++ b/forge-gui/res/cardsfolder/o/obscuring_haze.txt @@ -1,7 +1,8 @@ Name:Obscuring Haze ManaCost:2 G Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ Effect | Cost$ 2 G | ReplacementEffects$ RPrevent | AILogic$ Fog | SpellDescription$ Prevent all damage that would be dealt this turn by creatures your opponents control. +SVar:X:Count$Valid Card.IsCommander+YouCtrl SVar:RPrevent:Event$ DamageDone | Prevent$ True | ActiveZones$ Command | ValidSource$ Creature.OppCtrl | Description$ Prevent all damage that would be dealt this turn by creatures your opponents control. Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nPrevent all damage that would be dealt this turn by creatures your opponents control. From a718986e2d94826ac8356e0de87d8ca8a6c01836 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Tue, 13 Apr 2021 17:55:57 +0200 Subject: [PATCH 20/33] Fix typo --- forge-gui/res/cardsfolder/a/azure_fleet_admiral.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/a/azure_fleet_admiral.txt b/forge-gui/res/cardsfolder/a/azure_fleet_admiral.txt index 44826c8a6f7..e21e1ea241b 100644 --- a/forge-gui/res/cardsfolder/a/azure_fleet_admiral.txt +++ b/forge-gui/res/cardsfolder/a/azure_fleet_admiral.txt @@ -4,5 +4,5 @@ Types:Creature Human Pirate PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMonarch | TriggerDescription$ When CARDNAME enters the battlefield, you become the monarch. SVar:TrigMonarch:DB$ BecomeMonarch | Defined$ You -S:Mode$ CantBlockBy | ValidAttacker$ Card.Self | ValidBlocker$ Creature.ControlledBy Player.IsMonarch | Description$ CARDNAME can't be blocked by creatures the monarch controls. +S:Mode$ CantBlockBy | ValidAttacker$ Card.Self | ValidBlocker$ Creature.ControlledBy Player.isMonarch | Description$ CARDNAME can't be blocked by creatures the monarch controls. Oracle:When Azure Fleet Admiral enters the battlefield, you become the monarch.\nAzure Fleet Admiral can't be blocked by creatures the monarch controls. From f56aa6cc299f07c1b76abaf10984a737544705de Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Tue, 13 Apr 2021 18:17:51 +0200 Subject: [PATCH 21/33] Fix typo --- forge-gui/res/cardsfolder/upcoming/team_pennant.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/team_pennant.txt b/forge-gui/res/cardsfolder/upcoming/team_pennant.txt index 7e62f86b1b2..9873338c690 100644 --- a/forge-gui/res/cardsfolder/upcoming/team_pennant.txt +++ b/forge-gui/res/cardsfolder/upcoming/team_pennant.txt @@ -1,7 +1,7 @@ Name:Team Pennant ManaCost:1 Types:Artifact Equipment -K:Equip:1:Creature.YouCtrl+Token:token creature +K:Equip:1:Creature.YouCtrl+token:token creature K:Equip:3 S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddToughness$ 1 | AddKeyword$ Vigilance & Trample | Description$ Equipped creature gets +1/+1 and has vigilance and trample. Oracle:Equipped creature gets +1/+1 and has vigilance and trample.\nEquip creature token {1} \nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) From f4971589c6ba3cc052ef04e7a0118b2881b610c7 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Tue, 13 Apr 2021 18:26:34 +0200 Subject: [PATCH 22/33] Fix AltCost --- forge-gui/res/cardsfolder/o/once_upon_a_time.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/o/once_upon_a_time.txt b/forge-gui/res/cardsfolder/o/once_upon_a_time.txt index ac74f45271c..799631f1a7b 100644 --- a/forge-gui/res/cardsfolder/o/once_upon_a_time.txt +++ b/forge-gui/res/cardsfolder/o/once_upon_a_time.txt @@ -1,7 +1,7 @@ Name:Once Upon a Time ManaCost:1 G Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | CheckSVar$ X | SVarCompare$ EQ0 | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | Description$ If this spell is the first spell you've cast this game, you may cast it without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | SVarCompare$ EQ0 | Description$ If this spell is the first spell you've cast this game, you may cast it without paying its mana cost. SVar:X:Count$YouCastThisGame A:SP$ Dig | Cost$ 1 G | DigNum$ 5 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Card.Creature,Card.Land | RestRandomOrder$ True | SpellDescription$ Look at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. Oracle:If this spell is the first spell you've cast this game, you may cast it without paying its mana cost.\nLook at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. From b0cecebe34eb26ed78d7134128c5cba8341ed1d1 Mon Sep 17 00:00:00 2001 From: Adam Pantel <> Date: Tue, 13 Apr 2021 12:38:52 -0400 Subject: [PATCH 23/33] Card fixes --- forge-gui/res/cardsfolder/d/dormant_sliver.txt | 6 +++--- forge-gui/res/cardsfolder/g/grim_reminder.txt | 2 +- forge-gui/res/cardsfolder/p/primal_empathy.txt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/forge-gui/res/cardsfolder/d/dormant_sliver.txt b/forge-gui/res/cardsfolder/d/dormant_sliver.txt index 37138b951ff..3df98f0caeb 100644 --- a/forge-gui/res/cardsfolder/d/dormant_sliver.txt +++ b/forge-gui/res/cardsfolder/d/dormant_sliver.txt @@ -3,8 +3,8 @@ ManaCost:2 G U Types:Creature Sliver PT:2/2 S:Mode$ Continuous | Affected$ Creature.Sliver | AddKeyword$ Defender | Description$ All Sliver creatures have defender. -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Sliver | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ All Slivers have "When this permanent enters the battlefield, draw a card." -SVar:TrigDraw:DB$Draw | Defined$ TriggeredCardController | NumCards$ 1 +S:Mode$ Continuous | Affected$ Permanent.Sliver | AddTrigger$ TrigEnter | Description$ All Slivers have "When this permanent enters the battlefield, draw a card." +SVar:TrigEnter:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When this permanent enters the battlefield, draw a card. +SVar:TrigDraw:DB$ Draw SVar:BuffedBy:Sliver -SVar:Picture:http://www.wizards.com/global/images/magic/general/dormant_sliver.jpg Oracle:All Sliver creatures have defender.\nAll Slivers have "When this permanent enters the battlefield, draw a card." diff --git a/forge-gui/res/cardsfolder/g/grim_reminder.txt b/forge-gui/res/cardsfolder/g/grim_reminder.txt index ff70e72182c..1f8f1331623 100644 --- a/forge-gui/res/cardsfolder/g/grim_reminder.txt +++ b/forge-gui/res/cardsfolder/g/grim_reminder.txt @@ -1,7 +1,7 @@ Name:Grim Reminder ManaCost:2 B Types:Instant -A:SP$ ChangeZone | Cost$ 2 B | Origin$ Library | Destination$ Library | ChangeType$ Card | ChangeNum$ 1 | Imprint$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBRepeat | SpellDescription$ Search your library for a nonland card and reveal it. Each opponent who cast a spell this turn with the same name as that card loses 6 life. Then shuffle your library. +A:SP$ ChangeZone | Cost$ 2 B | Origin$ Library | Destination$ Library | ChangeType$ Card.nonLand | ChangeNum$ 1 | Imprint$ True | Reveal$ True | Shuffle$ False | StackDescription$ SpellDescription | SubAbility$ DBRepeat | SpellDescription$ Search your library for a nonland card and reveal it. Each opponent who cast a spell this turn with the same name as that card loses 6 life. Then shuffle your library. SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Opponent | RepeatSubAbility$ DBLoseLife | SubAbility$ DBShuffle SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ 6 | ConditionCheckSVar$ LoseLifeCheck | ConditionSVarCompare$ GE1 SVar:DBShuffle:DB$ Shuffle | Defined$ You | SubAbility$ DBCleanup diff --git a/forge-gui/res/cardsfolder/p/primal_empathy.txt b/forge-gui/res/cardsfolder/p/primal_empathy.txt index 9acc327603a..6478f105474 100755 --- a/forge-gui/res/cardsfolder/p/primal_empathy.txt +++ b/forge-gui/res/cardsfolder/p/primal_empathy.txt @@ -2,10 +2,10 @@ Name:Primal Empathy ManaCost:1 G U Types:Enchantment T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigBranch | TriggerDescription$ At the beginning of your upkeep, draw a card if you control a creature with the greatest power among creatures on the battlefield. Otherwise, put a +1/+1 counter on a creature you control. -SVar:TrigBranch:DB$ Branch | ConditionPresent$ Creature.YouCtrl | ConditionCompare$ GE1 | BranchConditionSVar$ Y | BranchConditionSVarCompare$ GEZ | TrueSubAbility$ Draw | FalseSubAbility$ PutCounter +SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ Y | BranchConditionSVarCompare$ GE1 | TrueSubAbility$ Draw | FalseSubAbility$ PutCounter SVar:Draw:DB$ Draw | Defined$ You | NumCards$ 1 SVar:PutCounter:DB$ PutCounter | Choices$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 -SVar:Y:Count$GreatestPower_Creature.YouCtrl -SVar:Z:Count$GreatestPower_Creature.YouDontCtrl +SVar:X:Count$GreatestPower_Creature +SVar:Y:Count$Valid Creature.powerGEX+YouCtrl DeckHas:Ability$Counters Oracle:At the beginning of your upkeep, draw a card if you control a creature with the greatest power among creatures on the battlefield. Otherwise, put a +1/+1 counter on a creature you control. From d2ea3e49864970c0ecd440ea60fea1e71e973fc0 Mon Sep 17 00:00:00 2001 From: paul_snoops Date: Tue, 13 Apr 2021 18:07:52 +0100 Subject: [PATCH 24/33] Add AILogic to Morophon, the Boundless and move to scripts into correct folders --- forge-gui/res/cardsfolder/{m => g}/goblin_bowling_team.txt | 0 forge-gui/res/cardsfolder/{l => j}/jack_in_the_mox.txt | 0 forge-gui/res/cardsfolder/m/morophon_the_boundless.txt | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename forge-gui/res/cardsfolder/{m => g}/goblin_bowling_team.txt (100%) rename forge-gui/res/cardsfolder/{l => j}/jack_in_the_mox.txt (100%) diff --git a/forge-gui/res/cardsfolder/m/goblin_bowling_team.txt b/forge-gui/res/cardsfolder/g/goblin_bowling_team.txt similarity index 100% rename from forge-gui/res/cardsfolder/m/goblin_bowling_team.txt rename to forge-gui/res/cardsfolder/g/goblin_bowling_team.txt diff --git a/forge-gui/res/cardsfolder/l/jack_in_the_mox.txt b/forge-gui/res/cardsfolder/j/jack_in_the_mox.txt similarity index 100% rename from forge-gui/res/cardsfolder/l/jack_in_the_mox.txt rename to forge-gui/res/cardsfolder/j/jack_in_the_mox.txt diff --git a/forge-gui/res/cardsfolder/m/morophon_the_boundless.txt b/forge-gui/res/cardsfolder/m/morophon_the_boundless.txt index 288faf866d9..880d77fc42c 100644 --- a/forge-gui/res/cardsfolder/m/morophon_the_boundless.txt +++ b/forge-gui/res/cardsfolder/m/morophon_the_boundless.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Shapeshifter PT:6/6 K:Changeling K:ETBReplacement:Other:ChooseCT -SVar:ChooseCT:DB$ ChooseType | Defined$ You | Type$ Creature | SpellDescription$ As CARDNAME enters the battlefield, choose a creature type. | StackDescription$ SpellDescription +SVar:ChooseCT:DB$ ChooseType | Defined$ You | Type$ Creature | SpellDescription$ As CARDNAME enters the battlefield, choose a creature type. | StackDescription$ SpellDescription | AILogic$ MostProminentInComputerDeck AI:RemoveDeck:Random S:Mode$ ReduceCost | ValidCard$ Card.ChosenType | Type$ Spell | Activator$ You | Amount$ 1 | Color$ W U B R G | Description$ Spells of the chosen type you cast cost {W}{U}{B}{R}{G} less to cast. This effect reduces only the amount of colored mana you pay. S:Mode$ Continuous | Affected$ Creature.ChosenType+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other creatures you control of the chosen type get +1/+1. From 27d01500fafbca9c364d977540df02695aca12fa Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 13 Apr 2021 16:39:47 -0400 Subject: [PATCH 25/33] KHM updated rankings + nonbasic land rankings! --- forge-gui/res/draft/rankings.txt | 522 ++++++++++++++++--------------- 1 file changed, 271 insertions(+), 251 deletions(-) diff --git a/forge-gui/res/draft/rankings.txt b/forge-gui/res/draft/rankings.txt index 953758a406e..2f93a151984 100644 --- a/forge-gui/res/draft/rankings.txt +++ b/forge-gui/res/draft/rankings.txt @@ -343,266 +343,286 @@ #3|Halvar, God of Battle|M|KHM #4|Quakebringer|M|KHM #5|Toralf, God of Fury|M|KHM -#6|Tyvar Kell|M|KHM +#6|Koma, Cosmos Serpent|M|KHM #7|Burning-Rune Demon|M|KHM #8|Eradicator Valkyrie|M|KHM -#9|Battle Mammoth|M|KHM -#10|Koma, Cosmos Serpent|M|KHM +#9|Kaya the Inexorable|M|KHM +#10|Battle Mammoth|M|KHM #11|Vorinclex, Monstrous Raider|M|KHM -#12|Kaya the Inexorable|M|KHM -#13|Firja's Retribution|R|KHM -#14|Glorious Protector|R|KHM -#15|Draugr Necromancer|R|KHM -#16|Esika's Chariot|R|KHM +#12|Immersturm Predator|R|KHM +#13|Esika's Chariot|R|KHM +#14|Goldspan Dragon|M|KHM +#15|Firja's Retribution|R|KHM +#16|Draugr Necromancer|R|KHM #17|Niko Aris|M|KHM -#18|Immersturm Predator|R|KHM -#19|Birgi, God of Storytelling|R|KHM -#20|Resplendent Marshal|M|KHM -#21|Dragonkin Berserker|R|KHM -#22|Alrund's Epiphany|M|KHM -#23|Alrund, God of the Cosmos|M|KHM -#24|Tergrid, God of Fright|R|KHM -#25|Elvish Warmaster|R|KHM -#26|Sarulf, Realm Eater|R|KHM -#27|Cosima, God of the Voyage|R|KHM -#28|Goldspan Dragon|M|KHM -#29|Varragoth, Bloodsky Sire|R|KHM -#30|Binding the Old Gods|U|KHM -#31|Old-Growth Troll|R|KHM -#32|Battle for Bretagard|R|KHM -#33|Orvar, the All-Form|M|KHM -#34|Righteous Valkyrie|R|KHM -#35|Cosmos Charger|R|KHM -#36|Sigrid, God-Favored|R|KHM -#37|Jorn, God of Winter|R|KHM -#38|Poison the Cup|U|KHM -#39|Doomskar|R|KHM -#40|Egon, God of Death|R|KHM -#41|The Bears of Littjara|R|KHM -#42|Tundra Fumarole|R|KHM -#43|Kolvori, God of Kinship|R|KHM -#44|Calamity Bearer|R|KHM -#45|Realmwalker|R|KHM +#18|Birgi, God of Storytelling|R|KHM +#19|Resplendent Marshal|M|KHM +#20|Dragonkin Berserker|R|KHM +#21|Alrund's Epiphany|M|KHM +#22|Alrund, God of the Cosmos|M|KHM +#23|Tyvar Kell|M|KHM +#24|Glorious Protector|R|KHM +#25|Tergrid, God of Fright|R|KHM +#26|Elvish Warmaster|R|KHM +#27|Sarulf, Realm Eater|R|KHM +#28|Showdown of the Skalds|R|KHM +#29|Reidane, God of the Worthy|R|KHM +#30|Cosima, God of the Voyage|R|KHM +#31|Varragoth, Bloodsky Sire|R|KHM +#32|Binding the Old Gods|U|KHM +#33|Old-Growth Troll|R|KHM +#34|Battle for Bretagard|R|KHM +#35|Orvar, the All-Form|M|KHM +#36|Righteous Valkyrie|R|KHM +#37|Sigrid, God-Favored|R|KHM +#38|Jorn, God of Winter|R|KHM +#39|Poison the Cup|U|KHM +#40|Cosmos Elixir|R|KHM +#41|Doomskar|R|KHM +#42|Waking the Trolls|R|KHM +#43|Cosmos Charger|R|KHM +#44|Egon, God of Death|R|KHM +#45|The Bears of Littjara|R|KHM #46|Skemfar Avenger|R|KHM -#47|Ascendant Spirit|R|KHM -#48|Crippling Fear|R|KHM -#49|Icebreaker Kraken|R|KHM -#50|Toski, Bearer of Secrets|R|KHM -#51|Showdown of the Skalds|R|KHM -#52|Cosmos Elixir|R|KHM -#53|Icebind Pillar|U|KHM -#54|Harald, King of Skemfar|U|KHM -#55|Narfi, Betrayer King|U|KHM -#56|Battle of Frost and Fire|R|KHM -#57|Magda, Brazen Outlaw|R|KHM -#58|Fall of the Impostor|U|KHM -#59|Kardur, Doomscourge|U|KHM -#60|Demon Bolt|C|KHM -#61|Reidane, God of the Worthy|R|KHM -#62|Arni Slays the Troll|U|KHM -#63|Arni Brokenbrow|R|KHM -#64|Blood on the Snow|R|KHM -#65|The Bloodsky Massacre|R|KHM -#66|Firja, Judge of Valor|U|KHM -#67|Koll, the Forgemaster|U|KHM -#68|Invasion of the Giants|U|KHM -#69|Harald Unites the Elves|R|KHM -#70|Aegar, the Freezing Flame|U|KHM -#71|The Raven's Warning|R|KHM -#72|Maja, Bretagard Protector|U|KHM -#73|Svella, Ice Shaper|U|KHM -#74|Dream Devourer|R|KHM -#75|Moritte of the Frost|U|KHM -#76|Maskwood Nexus|R|KHM -#77|Vega, the Watcher|U|KHM -#78|Behold the Multiverse|C|KHM -#79|Sarulf's Packmate|C|KHM -#80|Feed the Serpent|C|KHM -#81|Basalt Ravager|U|KHM -#82|Clarion Spirit|U|KHM -#83|Cyclone Summoner|R|KHM -#84|Avalanche Caller|U|KHM -#85|Fynn, the Fangbearer|U|KHM -#86|Bloodsky Berserker|U|KHM -#87|Spirit of the Aldergard|U|KHM +#47|Calamity Bearer|R|KHM +#48|Toski, Bearer of Secrets|R|KHM +#49|Crippling Fear|R|KHM +#50|Realmwalker|R|KHM +#51|Shepherd of the Cosmos|U|KHM +#52|Blood on the Snow|R|KHM +#53|The Bloodsky Massacre|R|KHM +#54|Glimpse the Cosmos|U|KHM +#55|Sarulf's Packmate|C|KHM +#56|Magda, Brazen Outlaw|R|KHM +#57|Harald Unites the Elves|R|KHM +#58|Basalt Ravager|U|KHM +#59|Clarion Spirit|U|KHM +#60|Battle of Frost and Fire|R|KHM +#61|Arni Brokenbrow|R|KHM +#62|Dream Devourer|R|KHM +#63|Icebind Pillar|U|KHM +#64|Kardur, Doomscourge|U|KHM +#65|Demon Bolt|C|KHM +#66|Avalanche Caller|U|KHM +#67|Svella, Ice Shaper|U|KHM +#68|Vega, the Watcher|U|KHM +#69|Firja, Judge of Valor|U|KHM +#70|Koll, the Forgemaster|U|KHM +#71|Harald, King of Skemfar|U|KHM +#72|Aegar, the Freezing Flame|U|KHM +#73|Narfi, Betrayer King|U|KHM +#74|Cyclone Summoner|R|KHM +#75|Arni Slays the Troll|U|KHM +#76|Tundra Fumarole|R|KHM +#77|The Raven's Warning|R|KHM +#78|Maja, Bretagard Protector|U|KHM +#79|Dwarven Hammer|U|KHM +#80|Moritte of the Frost|U|KHM +#81|Spirit of the Aldergard|U|KHM +#82|Kolvori, God of Kinship|R|KHM +#83|Behold the Multiverse|C|KHM +#84|Fall of the Impostor|U|KHM +#85|Bloodsky Berserker|U|KHM +#86|Maskwood Nexus|R|KHM +#87|Path to the World Tree|U|KHM #88|Reflections of Littjara|R|KHM -#89|Frost Bite|C|KHM -#90|Boreal Outrider|U|KHM -#91|Haunting Voyage|M|KHM -#92|In Search of Greatness|R|KHM -#93|Vengeful Reaper|U|KHM -#94|Skemfar Shadowsage|U|KHM -#95|Iron Verdict|C|KHM -#96|Giant's Amulet|U|KHM -#97|Bound in Gold|C|KHM -#98|Shepherd of the Cosmos|U|KHM -#99|Draugr's Helm|U|KHM -#100|Niko Defies Destiny|U|KHM -#101|Usher of the Fallen|U|KHM -#102|Doomskar Titan|U|KHM -#103|Graven Lore|R|KHM +#89|Bound in Gold|C|KHM +#90|Feed the Serpent|C|KHM +#91|Boreal Outrider|U|KHM +#92|Berg Strider|C|KHM +#93|Fynn, the Fangbearer|U|KHM +#94|Haunting Voyage|M|KHM +#95|Vengeful Reaper|U|KHM +#96|Iron Verdict|C|KHM +#97|Sculptor of Winter|C|KHM +#98|Frost Bite|C|KHM +#99|Invasion of the Giants|U|KHM +#100|Squash|C|KHM +#101|Fearless Liberator|U|KHM +#102|Usher of the Fallen|U|KHM +#103|Ascendant Spirit|R|KHM #104|Blessing of Frost|R|KHM -#105|King Narfi's Betrayal|R|KHM -#106|The Three Seasons|U|KHM +#105|Shimmerdrift Vale|C|KHM +#106|King Narfi's Betrayal|R|KHM #107|Runeforge Champion|R|KHM -#108|Elven Bow|U|KHM -#109|Struggle for Skemfar|C|KHM -#110|Blizzard Brawl|U|KHM -#111|Sculptor of Winter|C|KHM -#112|Pyre of Heroes|R|KHM -#113|Elderfang Disciple|C|KHM -#114|Gates of Istfell|U|KHM -#115|Fearless Liberator|U|KHM -#116|Valkyrie's Sword|U|KHM -#117|Rootless Yew|U|KHM -#118|Battershield Warrior|U|KHM -#119|Dwarven Hammer|U|KHM -#120|Frenzied Raider|U|KHM -#121|Mistwalker|C|KHM -#122|Kaya's Onslaught|U|KHM -#123|Rally the Ranks|R|KHM -#124|Rise of the Dread Marn|R|KHM -#125|Reckless Crew|R|KHM -#126|Waking the Trolls|R|KHM -#127|Doomskar Oracle|C|KHM -#128|Hailstorm Valkyrie|U|KHM -#129|Glimpse the Cosmos|U|KHM -#130|Augury Raven|C|KHM -#131|Axgard Cavalry|C|KHM -#132|Kardur's Vicious Return|U|KHM -#133|Tergrid's Shadow|U|KHM -#134|Elderleaf Mentor|C|KHM -#135|Squash|C|KHM -#136|Axgard Armory|U|KHM -#137|Stalwart Valkyrie|C|KHM -#138|Skemfar Elderhall|U|KHM -#139|Littjara Glade-Warden|U|KHM -#140|Provoke the Trolls|U|KHM -#141|Shimmerdrift Vale|C|KHM -#142|Bind the Monster|C|KHM -#143|Guardian Gladewalker|C|KHM -#144|The World Tree|R|KHM -#145|Esika, God of the Tree|M|KHM -#146|Path to the World Tree|U|KHM -#147|The Trickster-God's Heist|U|KHM +#108|Mistwalker|C|KHM +#109|Elven Bow|U|KHM +#110|Struggle for Skemfar|C|KHM +#111|Rimewood Falls|C|KHM +#112|Rally the Ranks|R|KHM +#113|Blizzard Brawl|U|KHM +#114|The Trickster-God's Heist|U|KHM +#115|Giant's Amulet|U|KHM +#116|Elderfang Disciple|C|KHM +#117|Tergrid's Shadow|U|KHM +#118|Draugr's Helm|U|KHM +#119|Gates of Istfell|U|KHM +#120|Rootless Yew|U|KHM +#121|Doomskar Titan|U|KHM +#122|Frenzied Raider|U|KHM +#123|Snow-Covered Forest|C|KHM +#124|Snow-Covered Forest 2|C|KHM +#125|Ice Tunnel|C|KHM +#126|Skemfar Shadowsage|U|KHM +#127|Kaya's Onslaught|U|KHM +#128|Rise of the Dread Marn|R|KHM +#129|Replicating Ring|U|KHM +#130|The World Tree|R|KHM +#131|Esika, God of the Tree|M|KHM +#132|Axgard Cavalry|C|KHM +#133|Kardur's Vicious Return|U|KHM +#134|Divine Gambit|U|KHM +#135|Axgard Armory|U|KHM +#136|Skemfar Elderhall|U|KHM +#137|Valkyrie's Sword|U|KHM +#138|Battershield Warrior|U|KHM +#139|Provoke the Trolls|U|KHM +#140|Graven Lore|R|KHM +#141|Icebreaker Kraken|R|KHM +#142|Snow-Covered Island|C|KHM +#143|Snow-Covered Island 2|C|KHM +#144|Guardian Gladewalker|C|KHM +#145|Bloodline Pretender|U|KHM +#146|Spectral Steel|U|KHM +#147|Hailstorm Valkyrie|U|KHM #148|Bretagard Stronghold|U|KHM -#149|Inga Rune-Eyes|U|KHM -#150|Frostpyre Arcanist|U|KHM -#151|Run Amok|C|KHM -#152|Berg Strider|C|KHM -#153|Surtland Frostpyre|U|KHM -#154|Tuskeri Firewalker|C|KHM -#155|Goldmaw Champion|C|KHM -#156|Gnottvold Slumbermound|U|KHM -#157|Dwarven Reinforcements|C|KHM -#158|Frost Augur|U|KHM -#159|Colossal Plow|U|KHM -#160|Littjara Mirrorlake|U|KHM -#161|Immersturm Raider|C|KHM -#162|Port of Karfell|U|KHM -#163|Great Hall of Starnheim|U|KHM -#164|Weigh Down|C|KHM -#165|Depart the Realm|C|KHM -#166|Littjara Kinseekers|C|KHM -#167|Bloodline Pretender|U|KHM -#168|Faceless Haven|R|KHM -#169|Grim Draugr|C|KHM -#170|Spectral Steel|U|KHM -#171|Saw It Coming|U|KHM -#172|Ravenform|C|KHM -#173|Barkchannel Pathway|R|KHM -#174|Hengegate Pathway|R|KHM -#175|Blightstep Pathway|R|KHM -#176|Darkbore Pathway|R|KHM -#177|Divine Gambit|U|KHM -#178|Rune of Flight|U|KHM -#179|Infernal Pet|C|KHM -#180|Dual Strike|U|KHM -#181|Crush the Weak|U|KHM -#182|Runed Crown|U|KHM -#183|Mystic Reflection|R|KHM -#184|Breakneck Berserker|C|KHM -#185|Beskir Shieldmate|C|KHM -#186|Axgard Braggart|C|KHM -#187|Ascent of the Worthy|U|KHM -#188|Ravenous Lindwurm|C|KHM -#189|Grizzled Outrider|C|KHM -#190|Return Upon the Tide|U|KHM -#191|Icehide Troll|C|KHM -#192|Draugr Thought-Thief|C|KHM -#193|Tyrite Sanctum|R|KHM -#194|Horizon Seeker|C|KHM -#195|Priest of the Haunted Edge|C|KHM -#196|Immersturm Skullcairn|U|KHM -#197|Starnheim Courser|C|KHM -#198|Craven Hulk|C|KHM -#199|Rune of Might|U|KHM -#200|Rune of Speed|U|KHM -#201|Mists of Littjara|C|KHM -#202|Rune of Mortality|U|KHM -#203|Rune Of Sustenance|U|KHM -#204|Draugr Recruiter|C|KHM -#205|Deathknell Berserker|C|KHM -#206|Snakeskin Veil|C|KHM -#207|Gods' Hall Guardian|C|KHM -#208|Koma's Faithful|C|KHM -#209|Forging the Tyrite Sword|U|KHM -#210|Glittering Frost|C|KHM -#211|Withercrown|C|KHM -#212|Tormentor's Helm|C|KHM -#213|Raise the Draugr|C|KHM -#214|Run Ashore|C|KHM -#215|Search for Glory|R|KHM -#216|Jaspera Sentinel|C|KHM -#217|Karfell Kennel-Master|C|KHM -#218|Gnottvold Recluse|C|KHM -#219|Karfell Harbinger|C|KHM -#220|Story Seeker|C|KHM -#221|Battlefield Raptor|C|KHM -#222|Disdainful Stroke|C|KHM -#223|Skull Raid|C|KHM -#224|Brinebarrow Intruder|C|KHM -#225|Hagi Mob|C|KHM -#226|Replicating Ring|U|KHM -#227|Village Rites|C|KHM -#228|Raiders' Karve|C|KHM -#229|Giant Ox|C|KHM -#230|Cinderheart Giant|C|KHM -#231|Pilfering Hawk|C|KHM -#232|Mammoth Growth|C|KHM -#233|Frostpeak Yeti|C|KHM -#234|Funeral Longboat|C|KHM -#235|Wings of the Cosmos|C|KHM -#236|Duskwielder|C|KHM -#237|Scorn Effigy|C|KHM -#238|Raven Wings|C|KHM -#239|Master Skald|C|KHM -#240|Fearless Pup|C|KHM -#241|Jarl of the Forsaken|C|KHM -#242|Valor of the Worthy|C|KHM -#243|Undersea Invader|C|KHM -#244|Seize the Spoils|C|KHM -#245|Masked Vandal|C|KHM -#246|Roots of Wisdom|C|KHM -#247|Dogged Pursuit|C|KHM -#248|Open the Omenpaths|C|KHM -#249|Dread Rider|C|KHM -#250|Codespell Cleric|C|KHM -#251|Goldvein Pick|C|KHM -#252|King Harald's Revenge|C|KHM -#253|Vault Robber|C|KHM -#254|Revitalize|C|KHM -#255|Strategic Planning|C|KHM -#256|Warhorn Blast|C|KHM -#257|Arachnoform|C|KHM -#258|Demonic Gifts|C|KHM -#259|Shackles of Treachery|C|KHM -#260|Broken Wings|C|KHM -#261|Smashing Success|C|KHM -#262|Invoke the Divine|C|KHM -#263|Annul|C|KHM -#264|Weathered Runestone|U|KHM -#265|Tibalt's Trickery|R|KHM +#149|Augury Raven|C|KHM +#150|Masked Vandal|C|KHM +#151|Frostpyre Arcanist|U|KHM +#152|Run Amok|C|KHM +#153|Runed Crown|U|KHM +#154|Stalwart Valkyrie|C|KHM +#155|Surtland Frostpyre|U|KHM +#156|Tuskeri Firewalker|C|KHM +#157|Goldmaw Champion|C|KHM +#158|Gnottvold Slumbermound|U|KHM +#159|Dwarven Reinforcements|C|KHM +#160|Littjara Glade-Warden|U|KHM +#161|Littjara Mirrorlake|U|KHM +#162|Icehide Troll|C|KHM +#163|Horizon Seeker|C|KHM +#164|Skull Raid|C|KHM +#165|Port of Karfell|U|KHM +#166|Great Hall of Starnheim|U|KHM +#167|Craven Hulk|C|KHM +#168|Depart the Realm|C|KHM +#169|Woodland Chasm|C|KHM +#170|Volatile Fjord|C|KHM +#171|Highland Forest|C|KHM +#172|Glacial Floodplain|C|KHM +#173|Arctic Treeline|C|KHM +#174|Littjara Kinseekers|C|KHM +#175|Saw It Coming|U|KHM +#176|Doomskar Oracle|C|KHM +#177|Glittering Frost|C|KHM +#178|Inga Rune-Eyes|U|KHM +#179|Barkchannel Pathway|R|KHM +#180|Hengegate Pathway|R|KHM +#181|Blightstep Pathway|R|KHM +#182|Darkbore Pathway|R|KHM +#183|Tormentor's Helm|C|KHM +#184|Raise the Draugr|C|KHM +#185|Rune of Flight|U|KHM +#186|Elderleaf Mentor|C|KHM +#187|Crush the Weak|U|KHM +#188|Goldvein Pick|C|KHM +#189|Breakneck Berserker|C|KHM +#190|Niko Defies Destiny|U|KHM +#191|Beskir Shieldmate|C|KHM +#192|Colossal Plow|U|KHM +#193|Ascent of the Worthy|U|KHM +#194|Ravenous Lindwurm|C|KHM +#195|Grizzled Outrider|C|KHM +#196|Return Upon the Tide|U|KHM +#197|Tyrite Sanctum|R|KHM +#198|Priest of the Haunted Edge|C|KHM +#199|Immersturm Skullcairn|U|KHM +#200|Starnheim Courser|C|KHM +#201|In Search of Greatness|R|KHM +#202|The Three Seasons|U|KHM +#203|Weigh Down|C|KHM +#204|Rune of Might|U|KHM +#205|Rune of Speed|U|KHM +#206|Bind the Monster|C|KHM +#207|Rune of Mortality|U|KHM +#208|Rune of Sustenance|U|KHM +#209|Draugr Recruiter|C|KHM +#210|Snow-Covered Swamp|C|KHM +#211|Snow-Covered Swamp 2|C|KHM +#212|Sulfurous Mire|C|KHM +#213|Snowfield Sinkhole|C|KHM +#214|Alpine Meadow|C|KHM +#215|Deathknell Berserker|C|KHM +#216|Snakeskin Veil|C|KHM +#217|Grim Draugr|C|KHM +#218|Gods' Hall Guardian|C|KHM +#219|Koma's Faithful|C|KHM +#220|Raiders' Karve|C|KHM +#221|Run Ashore|C|KHM +#222|Codespell Cleric|C|KHM +#223|Gnottvold Recluse|C|KHM +#224|Axgard Braggart|C|KHM +#225|Story Seeker|C|KHM +#226|Battlefield Raptor|C|KHM +#227|Disdainful Stroke|C|KHM +#228|Master Skald|C|KHM +#229|Immersturm Raider|C|KHM +#230|Jarl of the Forsaken|C|KHM +#231|Hagi Mob|C|KHM +#232|Seize the Spoils|C|KHM +#233|Village Rites|C|KHM +#234|Ravenform|C|KHM +#235|Withercrown|C|KHM +#236|Infernal Pet|C|KHM +#237|Pilfering Hawk|C|KHM +#238|Dual Strike|U|KHM +#239|Mammoth Growth|C|KHM +#240|Karfell Kennel-Master|C|KHM +#241|Mystic Reflection|R|KHM +#242|Funeral Longboat|C|KHM +#243|Wings of the Cosmos|C|KHM +#244|Karfell Harbinger|C|KHM +#245|King Harald's Revenge|C|KHM +#246|Scorn Effigy|C|KHM +#247|Raven Wings|C|KHM +#248|Fearless Pup|C|KHM +#249|Valor of the Worthy|C|KHM +#250|Mists of Littjara|C|KHM +#251|Snow-Covered Plains|C|KHM +#252|Snow-Covered Plains 2|C|KHM +#253|Snow-Covered Mountain|C|KHM +#254|Snow-Covered Mountain 2|C|KHM +#255|Reckless Crew|R|KHM +#256|Broken Wings|C|KHM +#257|Undersea Invader|C|KHM +#258|Giant Ox|C|KHM +#259|Cinderheart Giant|C|KHM +#260|Search for Glory|R|KHM +#261|Jaspera Sentinel|C|KHM +#262|Dread Rider|C|KHM +#263|Frost Augur|U|KHM +#264|Warhorn Blast|C|KHM +#265|Demonic Gifts|C|KHM +#266|Brinebarrow Intruder|C|KHM +#267|Faceless Haven|R|KHM +#268|Forging the Tyrite Sword|U|KHM +#269|Pyre of Heroes|R|KHM +#270|Roots of Wisdom|C|KHM +#271|Frostpeak Yeti|C|KHM +#272|Duskwielder|C|KHM +#273|Smashing Success|C|KHM +#274|Vault Robber|C|KHM +#275|Arachnoform|C|KHM +#276|Draugr Thought-Thief|C|KHM +#277|Shackles of Treachery|C|KHM +#278|Invoke the Divine|C|KHM +#279|Annul|C|KHM +#280|Dogged Pursuit|C|KHM +#281|Revitalize|C|KHM +#282|Strategic Planning|C|KHM +#283|Open the Omenpaths|C|KHM +#284|Tibalt's Trickery|R|KHM +#285|Weathered Runestone|U|KHM //Rank|Name|Rarity|Set #1|Phylath, World Sculptor|R|ZNR #2|Zagras, Thief of Heartbeats|R|ZNR From b9bcfef8177cd5541512a2dcd76e5a56007a4b42 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Sun, 11 Apr 2021 07:49:48 -0400 Subject: [PATCH 26/33] promise_of_loyalty.txt --- .../res/cardsfolder/upcoming/promise_of_loyalty.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt diff --git a/forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt b/forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt new file mode 100644 index 00000000000..6505908ec18 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt @@ -0,0 +1,10 @@ +Name:Promise of Loyalty +ManaCost:4 W +Types:Sorcery +A:SP$ RepeatEach | Cost$ 4 W | RepeatPlayers$ Player | RepeatSubAbility$ DBPutCounter | SubAbility$ DBEffect | SpellDescription$ Each player puts a vow counter on a creature they control and sacrifices the rest. Each of those creatures can’t attack you for as long as it has a vow counter on it. +SVar:DBPutCounter:DB$ PutCounter | Choices$ Creature.ControlledBy Player.IsRemembered | ChoiceTitle$ Choose a creature you control | Chooser$ Player.IsRemembered | Placer$ Player.IsRemembered | CounterType$ VOW | CounterNum$ 1 | RememberCards$ True | SubAbility$ SacAllOthers +SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.IsNotRemembered+ControlledBy Player.IsRemembered +SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ VowStatic | ForgetOnMoved$ Battlefield | ForgetCounter$ VOW | Duration$ Permanent | SubAbility$ DBCleanup +SVar:VowStatic:Mode$ CantAttack | ValidCard$ Card.IsRemembered | Target$ You | Description$ Each of these creatures can’t attack you for as long as it has a vow counter on it. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +Oracle:Each player puts a vow counter on a creature they control and sacrifices the rest. Each of those creatures can’t attack you for as long as it has a vow counter on it. From 0eb2d59eccb65a03d06247c7fc945a522d1bcec0 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Tue, 13 Apr 2021 20:06:09 -0400 Subject: [PATCH 27/33] add AI DeckHas --- forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt b/forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt index 6505908ec18..4a69e6307ca 100644 --- a/forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt +++ b/forge-gui/res/cardsfolder/upcoming/promise_of_loyalty.txt @@ -7,4 +7,5 @@ SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.IsNotRemembered+Contro SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ VowStatic | ForgetOnMoved$ Battlefield | ForgetCounter$ VOW | Duration$ Permanent | SubAbility$ DBCleanup SVar:VowStatic:Mode$ CantAttack | ValidCard$ Card.IsRemembered | Target$ You | Description$ Each of these creatures can’t attack you for as long as it has a vow counter on it. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckHas:Ability$Counters Oracle:Each player puts a vow counter on a creature they control and sacrifices the rest. Each of those creatures can’t attack you for as long as it has a vow counter on it. From 7b6e08f791442dcdce3185f07466746af17a867f Mon Sep 17 00:00:00 2001 From: Lyu Zong-Hong Date: Wed, 14 Apr 2021 16:29:57 +0900 Subject: [PATCH 28/33] Remove X max limit for Emblazoned Golem --- .../src/main/java/forge/player/PlayerControllerHuman.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 92128f2890b..f36bf4a921d 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -396,9 +396,6 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont canChooseZero = false; } } - if (ability.getHostCard().hasKeyword("Spend only colored mana on X. No more than one mana of each color may be spent this way.")) { - max = 5; - } } final int min = canChooseZero ? 0 : 1; From edc40f4a6c4ba660600b02ec0cdf3650e8161dc8 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 14 Apr 2021 18:06:27 +0800 Subject: [PATCH 29/33] remove extra svar --- forge-gui/res/cardsfolder/d/deadly_rollick.txt | 3 +-- forge-gui/res/cardsfolder/d/deflecting_swat.txt | 3 +-- forge-gui/res/cardsfolder/f/fierce_guardianship.txt | 3 +-- forge-gui/res/cardsfolder/f/flawless_maneuver.txt | 3 +-- forge-gui/res/cardsfolder/o/obscuring_haze.txt | 3 +-- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/forge-gui/res/cardsfolder/d/deadly_rollick.txt b/forge-gui/res/cardsfolder/d/deadly_rollick.txt index 5d70062ae5d..0f99c3ab93c 100644 --- a/forge-gui/res/cardsfolder/d/deadly_rollick.txt +++ b/forge-gui/res/cardsfolder/d/deadly_rollick.txt @@ -1,7 +1,6 @@ Name:Deadly Rollick ManaCost:3 B Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ ChangeZone | Cost$ 3 B | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature. -SVar:X:Count$Valid Card.IsCommander+YouCtrl Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nExile target creature. diff --git a/forge-gui/res/cardsfolder/d/deflecting_swat.txt b/forge-gui/res/cardsfolder/d/deflecting_swat.txt index 33b2c79c840..2c3bea1ac36 100755 --- a/forge-gui/res/cardsfolder/d/deflecting_swat.txt +++ b/forge-gui/res/cardsfolder/d/deflecting_swat.txt @@ -1,7 +1,6 @@ Name:Deflecting Swat ManaCost:2 R Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True |AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True |AddKeyword$ Alternative Cost:0 | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ ChangeTargets | Cost$ 2 R | TargetType$ Spell,Activated,Triggered | Optional$ True | ValidTgts$ Card | TgtPrompt$ Select target spell or ability | SpellDescription$ You may choose new targets for target spell or ability. -SVar:X:Count$Valid Card.IsCommander+YouCtrl Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nYou may choose new targets for target spell or ability. diff --git a/forge-gui/res/cardsfolder/f/fierce_guardianship.txt b/forge-gui/res/cardsfolder/f/fierce_guardianship.txt index 5abe2812cd5..58d09e8d352 100644 --- a/forge-gui/res/cardsfolder/f/fierce_guardianship.txt +++ b/forge-gui/res/cardsfolder/f/fierce_guardianship.txt @@ -1,7 +1,6 @@ Name:Fierce Guardianship ManaCost:2 U Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ Counter | Cost$ 2 U | TargetType$ Spell | TgtPrompt$ Select target noncreature Spell | ValidTgts$ Card.nonCreature | SpellDescription$ Counter target noncreature spell. -SVar:X:Count$Valid Card.IsCommander+YouCtrl Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nCounter target noncreature spell. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/f/flawless_maneuver.txt b/forge-gui/res/cardsfolder/f/flawless_maneuver.txt index 1dba675b08c..1e3767f75ba 100755 --- a/forge-gui/res/cardsfolder/f/flawless_maneuver.txt +++ b/forge-gui/res/cardsfolder/f/flawless_maneuver.txt @@ -1,7 +1,6 @@ Name:Flawless Maneuver ManaCost:2 W Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ PumpAll | Cost$ 2 W | ValidCards$ Creature.YouCtrl | KW$ Indestructible | SpellDescription$ Creatures you control gain indestructible until end of turn. -SVar:X:Count$Valid Card.IsCommander+YouCtrl Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nCreatures you control gain indestructible until end of turn. diff --git a/forge-gui/res/cardsfolder/o/obscuring_haze.txt b/forge-gui/res/cardsfolder/o/obscuring_haze.txt index 437319c2b9b..5addb91334a 100755 --- a/forge-gui/res/cardsfolder/o/obscuring_haze.txt +++ b/forge-gui/res/cardsfolder/o/obscuring_haze.txt @@ -1,8 +1,7 @@ Name:Obscuring Haze ManaCost:2 G Types:Instant -S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | CheckSVar$ X | Description$ If you control a commander, you may cast this spell without paying its mana cost. +S:Mode$ Continuous | CharacteristicDefining$ True | AddKeyword$ Alternative Cost:0 | IsPresent$ Card.IsCommander+YouCtrl | Description$ If you control a commander, you may cast this spell without paying its mana cost. A:SP$ Effect | Cost$ 2 G | ReplacementEffects$ RPrevent | AILogic$ Fog | SpellDescription$ Prevent all damage that would be dealt this turn by creatures your opponents control. -SVar:X:Count$Valid Card.IsCommander+YouCtrl SVar:RPrevent:Event$ DamageDone | Prevent$ True | ActiveZones$ Command | ValidSource$ Creature.OppCtrl | Description$ Prevent all damage that would be dealt this turn by creatures your opponents control. Oracle:If you control a commander, you may cast this spell without paying its mana cost.\nPrevent all damage that would be dealt this turn by creatures your opponents control. From 1b1e6c394dac5f712d9829cd3939b843f47f2e29 Mon Sep 17 00:00:00 2001 From: Hythonia Date: Wed, 14 Apr 2021 12:38:17 +0200 Subject: [PATCH 30/33] Card cleanup and Historic update --- forge-gui/res/cardsfolder/b/bell_borca_spectral_sergeant.txt | 2 +- .../c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt | 2 +- forge-gui/res/cardsfolder/c/corpse_churn.txt | 5 ++--- forge-gui/res/cardsfolder/g/grapple_with_the_past.txt | 5 ++--- forge-gui/res/formats/Digital/Historic.txt | 2 +- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/forge-gui/res/cardsfolder/b/bell_borca_spectral_sergeant.txt b/forge-gui/res/cardsfolder/b/bell_borca_spectral_sergeant.txt index 94fab640e16..a8e2e1b16ce 100644 --- a/forge-gui/res/cardsfolder/b/bell_borca_spectral_sergeant.txt +++ b/forge-gui/res/cardsfolder/b/bell_borca_spectral_sergeant.txt @@ -3,7 +3,7 @@ ManaCost:2 R W Types:Legendary Creature Spirit Soldier PT:*/5 Text:Note the converted mana cost of each card as it's put into exile. -T:Mode$ ChangesZone | Destination$ Exile | ValidCard$ Card | TriggerZones$ Battlefield | Execute$ TrigNoteNum | Static$ True +T:Mode$ ChangesZone | Destination$ Exile | ValidCard$ Card.nonToken | TriggerZones$ Battlefield | Execute$ TrigNoteNum | Static$ True SVar:TrigNoteNum:DB$ StoreSVar | SVar$ ExiledCMC | Type$ Triggered | Expression$ CardManaCost | ConditionCheckSVar$ X | ConditionSVarCompare$ GTExiledCMC SVar:ExiledCMC:Number$0 SVar:X:TriggeredCard$CardManaCost diff --git a/forge-gui/res/cardsfolder/c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt b/forge-gui/res/cardsfolder/c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt index 7defc079869..1df2a3699ab 100644 --- a/forge-gui/res/cardsfolder/c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt +++ b/forge-gui/res/cardsfolder/c/chandra_fire_of_kaladesh_chandra_roaring_flame.txt @@ -22,7 +22,7 @@ Loyalty:4 A:AB$ DealDamage | Cost$ AddCounter<1/LOYALTY> | ValidTgts$ Player,Planeswalker | TgtPrompt$ Select target player or planeswalker | Planeswalker$ True | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target player or planeswalker A:AB$ DealDamage | Cost$ SubCounter<2/LOYALTY> | ValidTgts$ Creature | Planeswalker$ True | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature. A:AB$ DealDamage | Cost$ SubCounter<7/LOYALTY> | Defined$ Player.Opponent | Planeswalker$ True | Ultimate$ True | NumDmg$ 6 | RememberDamaged$ True | SubAbility$ DBUltimateEmblem | SpellDescription$ CARDNAME deals 6 damage to each opponent. Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you." -SVar:DBUltimateEmblem:DB$ Effect | Name$ Emblem - Chandra, Roaring Flame | Image$ emblem_chandra_roaring_flame | Stackable$ True | Triggers$ FlameTrigger | Duration$ Permanent | AILogic$ Always | EffectOwner$ Player.IsRemembered | SubAbility$ DBCleanup | SpellDescription$ Each player dealt damage this way gets an emblem with "At the beginning of your upkeep, this emblem deals 3 damage to you." +SVar:DBUltimateEmblem:DB$ Effect | Name$ Emblem - Chandra, Roaring Flame | Image$ emblem_chandra_roaring_flame | Stackable$ True | Triggers$ FlameTrigger | Duration$ Permanent | AILogic$ Always | EffectOwner$ Player.IsRemembered | SubAbility$ DBCleanup SVar:FlameTrigger:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigDealDamage | TriggerDescription$ At the beginning of your upkeep, CARDNAME deals 3 damage to you. SVar:TrigDealDamage:DB$DealDamage | Defined$ You | NumDmg$ 3 SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True diff --git a/forge-gui/res/cardsfolder/c/corpse_churn.txt b/forge-gui/res/cardsfolder/c/corpse_churn.txt index b6a65ea4c75..3e5190c40f8 100644 --- a/forge-gui/res/cardsfolder/c/corpse_churn.txt +++ b/forge-gui/res/cardsfolder/c/corpse_churn.txt @@ -1,8 +1,7 @@ Name:Corpse Churn ManaCost:1 B Types:Instant -A:SP$ Mill | Cost$ 1 B | NumCards$ 3 | Defined$ You | SubAbility$ DBChooseCard | SpellDescription$ Mill three cards, then you may return a creature card from your graveyard to your hand. (To mill a card, put the top card of your library into your graveyard.) -SVar:DBChooseCard:DB$ ChooseCard | Choices$ Creature.YouOwn | Optional$ Yes | ChoiceZone$ Graveyard | Amount$ 1 | SubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ChosenCard +A:SP$ Mill | Cost$ 1 B | NumCards$ 3 | Defined$ You | SubAbility$ DBChangeZone | SpellDescription$ Mill three cards, then you may return a creature card from your graveyard to your hand. (To mill a card, put the top card of your library into your graveyard.) +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ChangeType$ Creature.YouCtrl | ChangeNum$ 1 | Hidden$ True DeckHas:Ability$Graveyard Oracle:Mill three cards, then you may return a creature card from your graveyard to your hand. (To mill a card, put the top card of your library into your graveyard.) diff --git a/forge-gui/res/cardsfolder/g/grapple_with_the_past.txt b/forge-gui/res/cardsfolder/g/grapple_with_the_past.txt index 56eddf0a47a..f8d1e06100b 100644 --- a/forge-gui/res/cardsfolder/g/grapple_with_the_past.txt +++ b/forge-gui/res/cardsfolder/g/grapple_with_the_past.txt @@ -1,9 +1,8 @@ Name:Grapple with the Past ManaCost:1 G Types:Instant -A:SP$ Mill | Cost$ 1 G | NumCards$ 3 | Defined$ You | SubAbility$ DBChooseCard | SpellDescription$ Mill three cards, then you may return a creature or land card from your graveyard to your hand. -SVar:DBChooseCard:DB$ ChooseCard | Choices$ Creature.YouOwn,Land.YouOwn | Optional$ Yes | ChoiceZone$ Graveyard | Amount$ 1 | SubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ChosenCard +A:SP$ Mill | Cost$ 1 G | NumCards$ 3 | Defined$ You | SubAbility$ DBChangeZone | SpellDescription$ Mill three cards, then you may return a creature or land card from your graveyard to your hand. +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | ChangeType$ Creature.YouCtrl,Land.YouCtrl | ChangeNum$ 1 | Hidden$ True DeckHints:Ability$Delirium DeckHas:Ability$Graveyard Oracle:Mill three cards, then you may return a creature or land card from your graveyard to your hand. diff --git a/forge-gui/res/formats/Digital/Historic.txt b/forge-gui/res/formats/Digital/Historic.txt index d71911fed22..61f08ba4ca4 100644 --- a/forge-gui/res/formats/Digital/Historic.txt +++ b/forge-gui/res/formats/Digital/Historic.txt @@ -5,4 +5,4 @@ Subtype:Arena Effective:2019-11-21 Order:142 Sets:XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AKR, ZNR, KLR, KHM -Banned:Agent of Treachery; Field of the Dead; Fires of Invention; Oko, Thief of Crowns; Omnath, Locus of Creation; Nexus of Fate; Once Upon a Time; Teferi, Time Raveler; Veil of Summer; Uro, Titan of Nature's Wrath; Wilderness Reclamation; Winota, Joiner of Forces +Banned:Agent of Treachery; Channel; Counterspell; Dark Ritual; Demonic Tutor; Field of the Dead; Fires of Invention; Lightning Bolt; Oko, Thief of Crowns; Omnath, Locus of Creation; Natural Order; Nexus of Fate; Once Upon a Time; Swords to Plowshares; Teferi, Time Raveler; Veil of Summer; Uro, Titan of Nature's Wrath; Wilderness Reclamation; Winota, Joiner of Forces From 9a5c58aae8d3aee4caa677198c78bf61cb3f2340 Mon Sep 17 00:00:00 2001 From: Hythonia Date: Wed, 14 Apr 2021 12:41:40 +0200 Subject: [PATCH 31/33] Add Strixhaven and Mystical Archives --- forge-gui/res/formats/Digital/Historic.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/formats/Digital/Historic.txt b/forge-gui/res/formats/Digital/Historic.txt index 61f08ba4ca4..c33db5cb32d 100644 --- a/forge-gui/res/formats/Digital/Historic.txt +++ b/forge-gui/res/formats/Digital/Historic.txt @@ -4,5 +4,5 @@ Type:Digital Subtype:Arena Effective:2019-11-21 Order:142 -Sets:XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AKR, ZNR, KLR, KHM +Sets:XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AKR, ZNR, KLR, KHM, STX, STA; Banned:Agent of Treachery; Channel; Counterspell; Dark Ritual; Demonic Tutor; Field of the Dead; Fires of Invention; Lightning Bolt; Oko, Thief of Crowns; Omnath, Locus of Creation; Natural Order; Nexus of Fate; Once Upon a Time; Swords to Plowshares; Teferi, Time Raveler; Veil of Summer; Uro, Titan of Nature's Wrath; Wilderness Reclamation; Winota, Joiner of Forces From 1f9094caecc27b83a0515a9433fed4db913f30aa Mon Sep 17 00:00:00 2001 From: Hythonia Date: Wed, 14 Apr 2021 12:43:33 +0200 Subject: [PATCH 32/33] Removed semicolon --- forge-gui/res/formats/Digital/Historic.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/formats/Digital/Historic.txt b/forge-gui/res/formats/Digital/Historic.txt index c33db5cb32d..45aa2c1aaa1 100644 --- a/forge-gui/res/formats/Digital/Historic.txt +++ b/forge-gui/res/formats/Digital/Historic.txt @@ -4,5 +4,5 @@ Type:Digital Subtype:Arena Effective:2019-11-21 Order:142 -Sets:XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AKR, ZNR, KLR, KHM, STX, STA; +Sets:XLN, RIX, DOM, M19, GRN, G18, RNA, WAR, M20, ELD, HA1, THB, HA2, IKO, HA3, M21, JMP, AKR, ZNR, KLR, KHM, STX, STA Banned:Agent of Treachery; Channel; Counterspell; Dark Ritual; Demonic Tutor; Field of the Dead; Fires of Invention; Lightning Bolt; Oko, Thief of Crowns; Omnath, Locus of Creation; Natural Order; Nexus of Fate; Once Upon a Time; Swords to Plowshares; Teferi, Time Raveler; Veil of Summer; Uro, Titan of Nature's Wrath; Wilderness Reclamation; Winota, Joiner of Forces From ce34e937d67d4ef78bd18ff675416c68f9770eb3 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 14 Apr 2021 17:48:42 +0200 Subject: [PATCH 33/33] CostExile: fixed exile cost with mana value X --- forge-game/src/main/java/forge/game/cost/CostExile.java | 4 +++- .../res/cardsfolder/upcoming/osgir_the_reconstructor.txt | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/cost/CostExile.java b/forge-game/src/main/java/forge/game/cost/CostExile.java index 58e69a36baa..a08efb3f9bf 100644 --- a/forge-game/src/main/java/forge/game/cost/CostExile.java +++ b/forge-game/src/main/java/forge/game/cost/CostExile.java @@ -141,7 +141,9 @@ public class CostExile extends CostPartWithList { return list.contains(source); } - list = CardLists.getValidCards(list, type.split(";"), payer, source, ability); + if (!type.contains("X")) { + list = CardLists.getValidCards(list, type.split(";"), payer, source, ability); + } final Integer amount = this.convertAmount(); if ((amount != null) && (list.size() < amount)) { diff --git a/forge-gui/res/cardsfolder/upcoming/osgir_the_reconstructor.txt b/forge-gui/res/cardsfolder/upcoming/osgir_the_reconstructor.txt index 0b3ee5ed526..d1ff8a3474e 100644 --- a/forge-gui/res/cardsfolder/upcoming/osgir_the_reconstructor.txt +++ b/forge-gui/res/cardsfolder/upcoming/osgir_the_reconstructor.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Giant Artificer PT:4/4 K:Vigilance A:AB$ Pump | Cost$ 1 Sac<1/Artifact> | NumAtt$ +2 | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SpellDescription$ Target creature you control gets +2/+0 until end of turn. -A:AB$ CopyPermanent | Cost$ T Mana ExileFromGrave<1/Artifact> | Defined$ Exiled | NumCopies$ 2 | SorcerySpeed$ True | StackDescription$ SpellDescription | SpellDescription$ Create two tokens that are copies of the exiled card. Activate only as a sorcery. +A:AB$ CopyPermanent | Cost$ X T ExileFromGrave<1/Artifact.cmcEQX/artifact card with mana value X> | Defined$ Exiled | NumCopies$ 2 | SorcerySpeed$ True | StackDescription$ SpellDescription | SpellDescription$ Create two tokens that are copies of the exiled card. Activate only as a sorcery. SVar:X:Count$xPaid DeckHas:Ability$Token DeckHints:Type$Artifact