diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index 920333ca5c2..c775ed2e00c 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -797,7 +797,7 @@ public class ComputerUtil { final int max = Math.min(remaining.size(), amount); - if (exceptSelf) { + if (exceptSelf && max < remaining.size()) { removedSelf = remaining.remove(source.getHostCard()); } diff --git a/forge-gui/res/cardsfolder/p/precursor_golem.txt b/forge-gui/res/cardsfolder/p/precursor_golem.txt index 32b40d965d0..42d46b53287 100644 --- a/forge-gui/res/cardsfolder/p/precursor_golem.txt +++ b/forge-gui/res/cardsfolder/p/precursor_golem.txt @@ -4,7 +4,7 @@ Types:Artifact Creature Golem PT:3/3 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create two 3/3 colorless Golem artifact creature tokens. SVar:TrigToken:DB$ Token | TokenAmount$ 2 | TokenScript$ c_3_3_a_golem | TokenOwner$ You | LegacyImage$ c 3 3 a golem -T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ Player | IsSingleTarget$ True | TargetsValid$ Golem | Execute$ TrigCopy | TriggerZones$ Battlefield | TriggerDescription$ Whenever a player casts an instant or sorcery spell that targets only a single Golem, that player copies that spell for each other Golem that spell could target. Each copy targets a different one of those Golems. -SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Controller$ TriggeredSpellAbilityController | CopyForEachCanTarget$ Golem +T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ Player | IsSingleTarget$ True | TargetsValid$ Golem.inZoneBattlefield | Execute$ TrigCopy | TriggerZones$ Battlefield | TriggerDescription$ Whenever a player casts an instant or sorcery spell that targets only a single Golem, that player copies that spell for each other Golem that spell could target. Each copy targets a different one of those Golems. +SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | Controller$ TriggeredSpellAbilityController | CopyForEachCanTarget$ Golem.inZoneBattlefield SVar:Picture:http://www.wizards.com/global/images/magic/general/precursor_golem.jpg Oracle:When Precursor Golem enters the battlefield, create two 3/3 colorless Golem artifact creature tokens.\nWhenever a player casts an instant or sorcery spell that targets only a single Golem, that player copies that spell for each other Golem that spell could target. Each copy targets a different one of those Golems. diff --git a/forge-gui/res/cardsfolder/upcoming/flood_of_tears.txt b/forge-gui/res/cardsfolder/upcoming/flood_of_tears.txt index 67033068e13..880168b9625 100644 --- a/forge-gui/res/cardsfolder/upcoming/flood_of_tears.txt +++ b/forge-gui/res/cardsfolder/upcoming/flood_of_tears.txt @@ -1,7 +1,7 @@ Name:Flood of Tears ManaCost:4 U U Types:Sorcery -A:SP$ ChangeZoneAll | Cost$ 4 U U | ChangeType$ Permanent.nonLand | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBChangeZone | SpellDescription$ Return all nonland permanents to their owners' hands. If you return four or more nontoken permanents you control this way, you may put a permanent card from your hand onto the battlefield. -SVar:DBChangeZone:DB$ ChangeZone | Optional$ True | Origin$ Hand | Destination$ Battlefield | ChangeType$ Permanent.nonToken+YouCtrl | Optional$ True | ChangeNum$ 1 | SubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Origin$ Hand | Destination$ Battlefield | ChangeType$ Permanent.nonToken+YouCtrl | Optional$ True | ChangeNum$ 1 | ConditionDefined$ Remembered | ConditionPresent +A:SP$ ChangeZoneAll | Cost$ 4 U U | ChangeType$ Permanent.nonLand | Origin$ Battlefield | Destination$ Hand | RememberChanged$ True | SubAbility$ DBChangeZone | SpellDescription$ Return all nonland permanents to their owners' hands. If you return four or more nontoken permanents you control this way, you may put a permanent card from your hand onto the battlefield. +SVar:DBChangeZone:DB$ ChangeZone | Optional$ True | Origin$ Hand | Destination$ Battlefield | ChangeType$ Permanent.YouCtrl | Optional$ True | ChangeNum$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Permanent.nonToken+YouCtrl | ConditionCompare$ GE4 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Return all nonland permanents to their owners' hands. If you return four or more nontoken permanents you control this way, you may put a permanent card from your hand onto the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/gauntlets_of_light.txt b/forge-gui/res/cardsfolder/upcoming/gauntlets_of_light.txt index bca13a0deb1..79471c055bf 100644 --- a/forge-gui/res/cardsfolder/upcoming/gauntlets_of_light.txt +++ b/forge-gui/res/cardsfolder/upcoming/gauntlets_of_light.txt @@ -3,7 +3,7 @@ ManaCost:2 W Types:Enchantment Aura K:Enchant creature A:SP$ Attach | Cost$ 2 W | ValidTgts$ Creature | AILogic$ Pump -S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddToughness$ 2 | AddHiddenKeyword$ CARDNAME assigns combat damage equal to its toughness rather than its power. | Description$ Enchanted creature gets +0/+2 and assigns combat damage equal to its toughness rather than its power. +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddToughness$ 2 | AddHiddenKeyword$ CARDNAME assigns combat damage equal to its toughness rather than its power | Description$ Enchanted creature gets +0/+2 and assigns combat damage equal to its toughness rather than its power. S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddAbility$ GauntletsUntap | Description$ Enchanted creature has "{2}{W}: Untap this creature." SVar:GauntletsUntap:AB$ Untap | Cost$ 2 W | Defined$ Self | SpellDescription$ Untap this creature. Oracle:Enchant creature\nEnchanted creature gets +0/+2 and assigns combat damage equal to its toughness rather than its power.\nEnchanted creature has "{2}{W}: Untap this creature." diff --git a/forge-gui/res/cardsfolder/upcoming/herald_of_the_sun.txt b/forge-gui/res/cardsfolder/upcoming/herald_of_the_sun.txt index 6408e2a8e37..fe1c7e158f2 100644 --- a/forge-gui/res/cardsfolder/upcoming/herald_of_the_sun.txt +++ b/forge-gui/res/cardsfolder/upcoming/herald_of_the_sun.txt @@ -3,5 +3,5 @@ ManaCost:4 W W Types:Creature Angel PT:4/4 K:Flying -A:AB$ PutCounter | Cost$ 3 W | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature with flying | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on another target creature with flying. +A:AB$ PutCounter | Cost$ 3 W | ValidTgts$ Creature.Other+withFlying | TgtPrompt$ Select another target creature with flying | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on another target creature with flying. Oracle:Flying\n{3}{W}: Put a +1/+1 counter on another target creature with flying. diff --git a/forge-gui/res/cardsfolder/upcoming/nightpack_ambusher.txt b/forge-gui/res/cardsfolder/upcoming/nightpack_ambusher.txt index 93d2ee40203..f24a8d3009a 100644 --- a/forge-gui/res/cardsfolder/upcoming/nightpack_ambusher.txt +++ b/forge-gui/res/cardsfolder/upcoming/nightpack_ambusher.txt @@ -5,7 +5,7 @@ PT:4/4 K:Flash S:Mode$ Continuous | Affected$ Wolf.Other+YouCtrl,Werewolf.Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Wolves and Werewolves you control get +1/+1. SVar:PlayMain1:TRUE -T:Mode$ Phase | Phase$ End of Turn | CheckSVar$ X | SVarCompare$ EQ0 | References$ X | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, if you didn't cast a spell this turn, create a 2/2 green Wolf creature token. +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | CheckSVar$ X | SVarCompare$ EQ0 | References$ X | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, if you didn't cast a spell this turn, create a 2/2 green Wolf creature token. SVar:TrigToken:DB$ Token | TokenOwner$ You | TokenScript$ g_2_2_wolf | LegacyImage$ g 2 2 wolf m20 | TokenAmount$ 1 SVar:X:Count$ThisTurnCast_Card.YouCtrl Oracle:Flash\nOther Wolves and Werewolves you control get +1/+1.\nAt the beginning of your end step, if you didn't cast a spell this turn, create a 2/2 green Wolf creature token. diff --git a/forge-gui/res/cardsfolder/upcoming/risen_reef.txt b/forge-gui/res/cardsfolder/upcoming/risen_reef.txt index 35d97fb2bb8..3c64017c542 100644 --- a/forge-gui/res/cardsfolder/upcoming/risen_reef.txt +++ b/forge-gui/res/cardsfolder/upcoming/risen_reef.txt @@ -5,7 +5,7 @@ PT:1/1 T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPeek | TriggerDescription$ Whenever CARDNAME or another Elemental enters the battlefield under your control, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped. If you don't put the card onto the battlefield, put it into your hand. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Elemental.Other+YouCtrl | TriggerZones$ Battlefield | Secondary$ True | Execute$ TrigPeek | TriggerDescription$ Whenever CARDNAME or another Elemental enters the battlefield under your control, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped. If you don't put the card onto the battlefield, put it into your hand. SVar:TrigPeek:DB$ PeekAndReveal | PeekAmount$ 1 | NoReveal$ True | RememberPeeked$ True | SubAbility$ DBChangeZone -SVar:DBChangeZone:DB$ ChangeZone | Optional$ True | ForgetChanged$ True | Origin$ Library | Destination$ Battlefield | Defined$ Remembered | ConditionDefined$ Remembered | ConditionPresent$ Land | ConditionCompare$ GE1 | SubAbility$ DBHand +SVar:DBChangeZone:DB$ ChangeZone | Optional$ True | ForgetChanged$ True | Origin$ Library | Destination$ Battlefield | Defined$ Remembered | ConditionDefined$ Remembered | ConditionPresent$ Land | ConditionCompare$ GE1 | Tapped$ True | SubAbility$ DBHand SVar:DBHand:DB$ ChangeZone | Origin$ Library | Destination$ Hand | Defined$ Remembered | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True Oracle:Whenever Risen Reef or another Elemental enters the battlefield under your control, look at the top card of your library. If it's a land card, you may put it onto the battlefield tapped. If you don't put the card onto the battlefield, put it into your hand. diff --git a/forge-gui/res/cardsfolder/upcoming/season_of_growth.txt b/forge-gui/res/cardsfolder/upcoming/season_of_growth.txt index 99a25386ef4..e0e02612032 100644 --- a/forge-gui/res/cardsfolder/upcoming/season_of_growth.txt +++ b/forge-gui/res/cardsfolder/upcoming/season_of_growth.txt @@ -3,6 +3,6 @@ ManaCost:1 G Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigScry | TriggerDescription$ Whenever a creature enters the battlefield under your control, scry 1. (Look at the top card of your library, then you may put that card on the bottom of your library.) SVar:TrigScry:DB$ Scry | ScryNum$ 1 -T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | ValidActivatingPlayer$ You | TargetsValid$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever you cast a spell that targets a creature you control, draw a card. +T:Mode$ SpellCast | ValidCard$ Card.YouCtrl | ValidActivatingPlayer$ You | TargetsValid$ Creature.YouCtrl+inZoneBattlefield | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever you cast a spell that targets a creature you control, draw a card. SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 Oracle:Whenever a creature enters the battlefield under your control, scry 1. (Look at the top card of your library, then you may put that card on the bottom of your library.)\nWhenever you cast a spell that targets a creature you control, draw a card. diff --git a/forge-gui/res/puzzle/PS_WAR9.pzl b/forge-gui/res/puzzle/PS_WAR9.pzl new file mode 100644 index 00000000000..e9661387dde --- /dev/null +++ b/forge-gui/res/puzzle/PS_WAR9.pzl @@ -0,0 +1,20 @@ +[metadata] +Name:Possibility Storm - War of the Spark #09 +URL:http://www.possibilitystorm.com/wp-content/uploads/2019/06/119.-WAR9-2.jpg +Goal:Win +Turns:1 +Difficulty:Mythic +Description:Win this turn. Start at the beginning of your upkeep. Due to your cast Rubble Reading and Run Aground, you know that the second card of your library is Electrodominance and the first card of your library is Run Aground; the first card of opponent's library is Benalish Marshal. Forbidding Spirit entered the battlefield on your opponent's last turn. +[state] +humanlife=20 +ailife=20 +turn=3 +activeplayer=human +activephase=UPKEEP +humanhand=Finale of Promise;Release to the Wind;Maximize Velocity;Act of Treason +humanlibrary=Run Aground;Electrodominance;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt +humangraveyard=Thud;Rubble Reading;Run Aground;Beacon Bolt +humanbattlefield=God-Eternal Kefnet;Etali, Primal Storm;Jaya, Venerated Firemage|Counters:LOYALTY=3;Dreadhorde Arcanist;Emergence Zone;Island;Island;Island;Island;Island;Mountain;Mountain;Mountain;Mountain;Mountain;Mountain +ailibrary=Benalish Marshal;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt +aibattlefield=Forbidding Spirit;Teferi, Time Raveler|Counters:LOYALTY=6;Lavinia, Azorius Renegade;Raff Capashen, Ship's Mage +aiprecast=Forbidding Spirit:TempAttackTax