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