diff --git a/.gitattributes b/.gitattributes index be5de277322..48b8791dcd3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7534,6 +7534,7 @@ forge-gui/res/cardsfolder/m/man_o_war.txt svneol=native#text/plain forge-gui/res/cardsfolder/m/mana_bloom.txt -text forge-gui/res/cardsfolder/m/mana_breach.txt svneol=native#text/plain forge-gui/res/cardsfolder/m/mana_chains.txt -text +forge-gui/res/cardsfolder/m/mana_charged_dragon.txt -text forge-gui/res/cardsfolder/m/mana_clash.txt -text forge-gui/res/cardsfolder/m/mana_crypt.txt svneol=native#text/plain forge-gui/res/cardsfolder/m/mana_cylix.txt svneol=native#text/plain diff --git a/forge-gui/res/cardsfolder/c/cleansing.txt b/forge-gui/res/cardsfolder/c/cleansing.txt index 4e9b9d7d457..f49370b2d04 100644 --- a/forge-gui/res/cardsfolder/c/cleansing.txt +++ b/forge-gui/res/cardsfolder/c/cleansing.txt @@ -2,7 +2,7 @@ Name:Cleansing ManaCost:W W W Types:Sorcery A:SP$ RepeatEach | Cost$ W W W | RepeatSubAbility$ DBSac | RepeatCards$ Land | SpellDescription$ For each land, destroy that land unless any player pays 1 life. -SVar:DBSac:DB$ Destroy | UnlessCost$ PayLife<1> | UnlessPayer$ Player | UnlessAI$ DefinedRememberedController | Defined$ Remembered +SVar:DBSac:DB$ Destroy | UnlessCost$ PayLife<1> | UnlessPayer$ Player | UnlessAI$ DefinedRememberedController | Defined$ Remembered | StackDescription$ Destroy {c:Remembered} SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/cleansing.jpg Oracle:For each land, destroy that land unless any player pays 1 life. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/c/cut_the_tethers.txt b/forge-gui/res/cardsfolder/c/cut_the_tethers.txt index 6ff43237b50..ea5ebb0ac3e 100644 --- a/forge-gui/res/cardsfolder/c/cut_the_tethers.txt +++ b/forge-gui/res/cardsfolder/c/cut_the_tethers.txt @@ -2,6 +2,6 @@ Name:Cut the Tethers ManaCost:2 U U Types:Sorcery A:SP$ RepeatEach | Cost$ 2 U U | RepeatSubAbility$ DBReturn | RepeatCards$ Creature.Spirit | SpellDescription$ For each Spirit, return it to its owner's hand unless that player pays {3}. -SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Hand | UnlessCost$ 3 | UnlessPayer$ RememberedController +SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Hand | UnlessCost$ 3 | UnlessPayer$ RememberedController | ShowCurrentCard$ Remembered SVar:Picture:http://www.wizards.com/global/images/magic/general/cut_the_tethers.jpg Oracle:For each Spirit, return it to its owner's hand unless that player pays {3}. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/d/dream_tides.txt b/forge-gui/res/cardsfolder/d/dream_tides.txt index ed00e338f24..d27f7a503bf 100644 --- a/forge-gui/res/cardsfolder/d/dream_tides.txt +++ b/forge-gui/res/cardsfolder/d/dream_tides.txt @@ -5,7 +5,7 @@ S:Mode$ Continuous | Affected$ Creature | AddHiddenKeyword$ CARDNAME doesn't unt T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of each player's upkeep, that player may choose any number of tapped nongreen creatures he or she controls and pay {2} for each creature chosen this way. If the player does, untap those creatures. SVar:TrigChoose:DB$ ChooseCard | Defined$ TriggeredPlayer | Amount$ X | References$ X | Choices$ Creature.tapped+nonGreen | TargetControls$ True | ChoiceTitle$ Choose any number of tapped nongreen creatures you control | ChoiceZone$ Battlefield | SubAbility$ DBUntap SVar:DBUntap:DB$ RepeatEach | DefinedCards$ ChosenCard | RepeatSubAbility$ UntapEach -SVar:UntapEach:DB$ Untap | Defined$ Remembered | UnlessCost$ 2 | UnlessPayer$ RememberedController | UnlessSwitched$ True +SVar:UntapEach:DB$ Untap | Defined$ Remembered | UnlessCost$ 2 | UnlessPayer$ RememberedController | UnlessSwitched$ True | ShowCurrentCard$ Remembered SVar:X:Count$Valid Creature.tapped+nonGreen+ActivePlayerCtrl SVar:RemRandomDeck:True SVar:NonStackingEffect:True diff --git a/forge-gui/res/cardsfolder/h/heroism.txt b/forge-gui/res/cardsfolder/h/heroism.txt index bf1538abac8..6510f233040 100644 --- a/forge-gui/res/cardsfolder/h/heroism.txt +++ b/forge-gui/res/cardsfolder/h/heroism.txt @@ -2,7 +2,7 @@ Name:Heroism ManaCost:2 W Types:Enchantment A:AB$ RepeatEach | Cost$ Sac<1/Creature.White/White Creature> | RepeatCards$ Creature.attacking+Red | RepeatSubAbility$ DBPump | SpellDescription$ For each attacking red creature, prevent all combat damage that would be dealt by that creature this turn unless its controller pays {2}{R}. -SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ HIDDEN Prevent all combat damage that would be dealt by CARDNAME. | UnlessCost$ 2 R | UnlessPayer$ RememberedController +SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ HIDDEN Prevent all combat damage that would be dealt by CARDNAME. | UnlessCost$ 2 R | UnlessPayer$ RememberedController | ShowCurrentCard$ Remembered SVar:RemRandomDeck:True SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/heroism.jpg diff --git a/forge-gui/res/cardsfolder/m/magnetic_mountain.txt b/forge-gui/res/cardsfolder/m/magnetic_mountain.txt index cd082c97ac5..874d7c77377 100644 --- a/forge-gui/res/cardsfolder/m/magnetic_mountain.txt +++ b/forge-gui/res/cardsfolder/m/magnetic_mountain.txt @@ -5,7 +5,7 @@ S:Mode$ Continuous | Affected$ Creature.Blue | AddHiddenKeyword$ CARDNAME doesn' T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of each player's upkeep, that player may choose any number of tapped blue creatures he or she controls and pay {4} for each creature chosen this way. If the player does, untap those creatures. SVar:TrigChoose:DB$ ChooseCard | Defined$ TriggeredPlayer | Amount$ X | References$ X | Choices$ Creature.tapped+Blue | TargetControls$ True | ChoiceTitle$ Choose any number of tapped blue creatures you control | ChoiceZone$ Battlefield | SubAbility$ DBUntap SVar:DBUntap:DB$ RepeatEach | DefinedCards$ ChosenCard | RepeatSubAbility$ UntapEach -SVar:UntapEach:DB$ Untap | Defined$ Remembered | UnlessCost$ 4 | UnlessPayer$ RememberedController | UnlessSwitched$ True +SVar:UntapEach:DB$ Untap | Defined$ Remembered | UnlessCost$ 4 | UnlessPayer$ RememberedController | UnlessSwitched$ True | ShowCurrentCard$ Remembered SVar:X:Count$Valid Creature.tapped+Blue+ActivePlayerCtrl SVar:RemRandomDeck:True SVar:NonStackingEffect:True diff --git a/forge-gui/res/cardsfolder/m/mana_charged_dragon.txt b/forge-gui/res/cardsfolder/m/mana_charged_dragon.txt new file mode 100644 index 00000000000..e0d7f7b97a6 --- /dev/null +++ b/forge-gui/res/cardsfolder/m/mana_charged_dragon.txt @@ -0,0 +1,17 @@ +Name:Mana-Charged Dragon +ManaCost:4 R R +Types:Creature Dragon +PT:5/5 +K:Flying +K:Trample +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigJoinForces | TriggerDescription$ Join forces - Whenever CARDNAME attacks or blocks, each player starting with you may pay any amount of mana. CARDNAME gets +X/+0 until end of turn, where X is the total amount of mana paid this way. +T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigJoinForces | Secondary$ True | TriggerDescription$ Join forces - Whenever CARDNAME attacks or blocks, each player starting with you may pay any amount of mana. CARDNAME gets +X/+0 until end of turn, where X is the total amount of mana paid this way. +SVar:TrigJoinForces:AB$ RepeatEach | Cost$ 0 | RepeatPlayers$ Player | StartingWithActivator$ True | RepeatSubAbility$ DBPay | SubAbility$ DBPump +SVar:DBPay:DB$ ChooseNumber | Defined$ Player.IsRemembered | ChooseAnyNumber$ True | ListTitle$ Pay Any Mana |SubAbility$ DBStore +SVar:DBStore:DB$ StoreSVar | SVar$ JoinForcesAmount | Type$ CountSVar | Expression$ JoinForcesAmount/Plus.X | UnlessCost$ X | UnlessPayer$ Player.IsRemembered | UnlessSwitched$ True | UnlessAI$ OnlyOwn | References$ X,JoinForcesAmount +SVar:DBPump:DB$ Pump | Defined$ Self | NumAtt$ JoinForcesAmount | SubAbility$ DBReset | References$ JoinForcesAmount +SVar:DBReset:DB$ StoreSVar | SVar$ JoinForcesAmount | Type$ Number | Expression$ 0 | References$ JoinForcesAmount +SVar:X:Count$ChosenNumber +SVar:JoinForcesAmount:Number$0 +SVar:Picture:http://www.wizards.com/global/images/magic/general/mana_charged_dragon.jpg +Oracle:Flying, trample\nJoin forces - Whenever Mana-Charged Dragon attacks or blocks, each player starting with you may pay any amount of mana. Mana-Charged Dragon gets +X/+0 until end of turn, where X is the total amount of mana paid this way. diff --git a/forge-gui/res/cardsfolder/m/mudslide.txt b/forge-gui/res/cardsfolder/m/mudslide.txt index dcec14ca62f..b7efe3026ca 100644 --- a/forge-gui/res/cardsfolder/m/mudslide.txt +++ b/forge-gui/res/cardsfolder/m/mudslide.txt @@ -5,7 +5,7 @@ S:Mode$ Continuous | Affected$ Creature.withoutFlying | AddHiddenKeyword$ CARDNA T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of each player's upkeep, that player may choose any number of tapped creatures without flying he or she controls and pay {2} for each creature chosen this way. If the player does, untap those creatures. SVar:TrigChoose:DB$ ChooseCard | Defined$ TriggeredPlayer | Amount$ X | References$ X | Choices$ Creature.tapped+withoutFlying | TargetControls$ True | ChoiceTitle$ Choose any number of tapped nongreen creatures you control | ChoiceZone$ Battlefield | SubAbility$ DBUntap SVar:DBUntap:DB$ RepeatEach | DefinedCards$ ChosenCard | RepeatSubAbility$ UntapEach -SVar:UntapEach:DB$ Untap | Defined$ Remembered | UnlessCost$ 2 | UnlessPayer$ RememberedController | UnlessSwitched$ True +SVar:UntapEach:DB$ Untap | Defined$ Remembered | UnlessCost$ 2 | UnlessPayer$ RememberedController | UnlessSwitched$ True | ShowCurrentCard$ Remembered SVar:X:Count$Valid Creature.tapped+withoutFlying+ActivePlayerCtrl SVar:RemRandomDeck:True SVar:NonStackingEffect:True diff --git a/forge-gui/res/cardsfolder/s/sirocco.txt b/forge-gui/res/cardsfolder/s/sirocco.txt index bc956a2df83..378358bc18b 100644 --- a/forge-gui/res/cardsfolder/s/sirocco.txt +++ b/forge-gui/res/cardsfolder/s/sirocco.txt @@ -3,7 +3,7 @@ ManaCost:1 R Types:Instant A:SP$ RevealHand | Cost$ 1 R | RememberRevealed$ True | ValidTgts$ Player | TgtPrompt$ Select target Player | SubAbility$ DBRepeatDiscard | SpellDescription$ Target player reveals his or her hand. For each blue instant card revealed this way, that player discards that card unless he or she pays 4 life. SVar:DBRepeatDiscard:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Card.IsRemembered+Instant+Blue | Zone$ Hand | RepeatSubAbility$ DBDiscard | SubAbility$ DBCleanup -SVar:DBDiscard:DB$ Discard | DefinedCards$ Imprinted | Mode$ Defined | UnlessCost$ PayLife<4> | UnlessPayer$ Targeted +SVar:DBDiscard:DB$ Discard | DefinedCards$ Imprinted | Mode$ Defined | UnlessCost$ PayLife<4> | UnlessPayer$ Targeted | StackDescription$ Discard {c:Imprinted} SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/sirocco.jpg diff --git a/forge-gui/res/cardsfolder/s/stench_of_evil.txt b/forge-gui/res/cardsfolder/s/stench_of_evil.txt index 535b292263a..2941fba2eb0 100644 --- a/forge-gui/res/cardsfolder/s/stench_of_evil.txt +++ b/forge-gui/res/cardsfolder/s/stench_of_evil.txt @@ -3,7 +3,7 @@ ManaCost:2 B B Types:Sorcery A:SP$ DestroyAll | Cost$ 2 B B | ValidCards$ Plains | RememberDestroyed$ True | SubAbility$ DBPay | SpellDescription$ Destroy all Plains. For each land destroyed this way, Stench of Evil deals 1 damage to that land's controller unless he or she pays {2}. SVar:DBPay:DB$ RepeatEach | DefinedCards$ Remembered | UseImprinted$ True| RepeatSubAbility$ DBDmg | SubAbility$ DBCleanup -SVar:DBDmg:DB$ DealDamage | NumDmg$ 1 | Defined$ ImprintedController | UnlessCost$ 2 | UnlessPayer$ ImprintedController +SVar:DBDmg:DB$ DealDamage | NumDmg$ 1 | Defined$ ImprintedController | UnlessCost$ 2 | UnlessPayer$ ImprintedController | ShowCurrentCard$ Imprinted SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:RemRandomDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/stench_of_evil.jpg diff --git a/forge-gui/res/cardsfolder/t/thelons_curse.txt b/forge-gui/res/cardsfolder/t/thelons_curse.txt index b63f2b7a8f3..01c4fe73f7f 100644 --- a/forge-gui/res/cardsfolder/t/thelons_curse.txt +++ b/forge-gui/res/cardsfolder/t/thelons_curse.txt @@ -5,7 +5,7 @@ S:Mode$ Continuous | Affected$ Creature.Blue | AddHiddenKeyword$ CARDNAME doesn' T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigChoose | TriggerDescription$ At the beginning of each player's upkeep, that player may choose any number of tapped blue creatures he or she controls and pay {U} for each creature chosen this way. If the player does, untap those creatures. SVar:TrigChoose:DB$ ChooseCard | Defined$ TriggeredPlayer | Amount$ X | References$ X | Choices$ Creature.tapped+Blue | TargetControls$ True | ChoiceTitle$ Choose any number of tapped nongreen creatures you control | ChoiceZone$ Battlefield | SubAbility$ DBUntap SVar:DBUntap:DB$ RepeatEach | DefinedCards$ ChosenCard | RepeatSubAbility$ UntapEach -SVar:UntapEach:DB$ Untap | Defined$ Remembered | UnlessCost$ U | UnlessPayer$ RememberedController | UnlessSwitched$ True +SVar:UntapEach:DB$ Untap | Defined$ Remembered | UnlessCost$ U | UnlessPayer$ RememberedController | UnlessSwitched$ True | ShowCurrentCard$ Remembered SVar:X:Count$Valid Creature.tapped+Blue+ActivePlayerCtrl SVar:RemRandomDeck:True SVar:NonStackingEffect:True diff --git a/forge-gui/res/cardsfolder/t/tidal_flats.txt b/forge-gui/res/cardsfolder/t/tidal_flats.txt index 4a1ce5575c6..d1e0ea53166 100644 --- a/forge-gui/res/cardsfolder/t/tidal_flats.txt +++ b/forge-gui/res/cardsfolder/t/tidal_flats.txt @@ -2,7 +2,7 @@ Name:Tidal Flats ManaCost:U Types:Enchantment A:AB$ RepeatEach | Cost$ U U | RepeatCards$ Creature.attacking+withoutFlying | RepeatSubAbility$ PumpOthers | SpellDescription$ For each attacking creature without flying, its controller may pay {1}. If he or she doesn't, creatures you control blocking that creature gain first strike until end of turn. -SVar:PumpOthers:DB$PumpAll | ValidCards$ Creature.blockingRemembered+YouCtrl | KW$ First Strike | UnlessCost$ 1 | UnlessPayer$ RememberedController +SVar:PumpOthers:DB$PumpAll | ValidCards$ Creature.blockingRemembered+YouCtrl | KW$ First Strike | UnlessCost$ 1 | UnlessPayer$ RememberedController | ShowCurrentCard$ Remembered SVar:RemAIDeck:True SVar:Picture:http://www.wizards.com/global/images/magic/general/tidal_flats.jpg Oracle:{U}{U}: For each attacking creature without flying, its controller may pay {1}. If he or she doesn't, creatures you control blocking that creature gain first strike until end of turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/w/winters_chill.txt b/forge-gui/res/cardsfolder/w/winters_chill.txt index 77439075881..33d612164d3 100644 --- a/forge-gui/res/cardsfolder/w/winters_chill.txt +++ b/forge-gui/res/cardsfolder/w/winters_chill.txt @@ -4,8 +4,8 @@ Types:Instant Text:Cast CARDNAME only during combat before blockers are declared.\r\nX can't be greater than the number of snow lands you control.\r\n A:SP$ RepeatEach | Cost$ X U | TargetMin$ 0 | TargetMax$ MaxTgts | References$ X,MaxTgts | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | ActivationPhases$ BeginCombat->Declare Attackers | IsCurse$ True | DefinedCards$ Targeted | RepeatSubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Choose X target attacking creatures. For each of those creatures, its controller may pay {1} or {2}. If that player doesn't, destroy that creature at end of combat. If that player pays only {1}, prevent all combat damage that would be dealt to and dealt by that creature this combat. SVar:DBChoose:DB$ GenericChoice | Defined$ RememberedController | Choices$ Pay2,Pay1 | AILogic$ PayUnlessCost | SubAbility$ DBEffect -SVar:Pay2:DB$ Cleanup | ClearRemembered$ True | UnlessCost$ 2 | UnlessPayer$ RememberedController | UnlessSwitched$ True | SpellDescription$ You may pay {2} to avoid negative effects -SVar:Pay1:DB$ Pump | Defined$ Remembered | KW$ HIDDEN Prevent all combat damage that would be dealt to and dealt by CARDNAME. | UntilEndOfCombat$ True | UnlessCost$ 1 | UnlessPayer$ RememberedController | UnlessSwitched$ True | UnlessResolveSubs$ WhenPaid | SubAbility$ DBCleanup | SpellDescription$ You may pay {1}, prevent all combat damage that would be dealt to and dealt by that creature this combat. +SVar:Pay2:DB$ Cleanup | ClearRemembered$ True | UnlessCost$ 2 | UnlessPayer$ RememberedController | UnlessSwitched$ True | SpellDescription$ You may pay {2} to avoid negative effects | ShowCurrentCard$ Remembered +SVar:Pay1:DB$ Pump | Defined$ Remembered | KW$ HIDDEN Prevent all combat damage that would be dealt to and dealt by CARDNAME. | UntilEndOfCombat$ True | UnlessCost$ 1 | UnlessPayer$ RememberedController | UnlessSwitched$ True | UnlessResolveSubs$ WhenPaid | SubAbility$ DBCleanup | ShowCurrentCard$ Remembered | SpellDescription$ You may pay {1}, prevent all combat damage that would be dealt to and dealt by that creature this combat. SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | Triggers$ TrigEOC,OutOfSight | SVars$ TrigDestroy,ExileSelf | References$ TrigDestroy,ExileSelf | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 SVar:TrigEOC:Mode$ Phase | TriggerZones$ Command | Phase$ EndCombat | Execute$ TrigDestroy | TriggerDescription$ Destroy that creature at end of combat. diff --git a/forge-gui/src/main/java/forge/gui/player/HumanPlay.java b/forge-gui/src/main/java/forge/gui/player/HumanPlay.java index 102bd8836ff..993d8d973cc 100644 --- a/forge-gui/src/main/java/forge/gui/player/HumanPlay.java +++ b/forge-gui/src/main/java/forge/gui/player/HumanPlay.java @@ -1,6 +1,7 @@ package forge.gui.player; import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; import forge.FThreads; import forge.card.MagicColor; @@ -238,13 +239,8 @@ public class HumanPlay { public static boolean payCostDuringAbilityResolve(final Player p, final Card source, final Cost cost, SpellAbility sourceAbility, String prompt) { // Only human player pays this way Card current = null; // Used in spells with RepeatEach effect to distinguish cards, Cut the Tethers - if (!source.getRemembered().isEmpty()) { - if (source.getRemembered().get(0) instanceof Card) { - current = (Card) source.getRemembered().get(0); - } - } - if (!source.getImprinted().isEmpty()) { - current = source.getImprinted().get(0); + if (sourceAbility.hasParam("ShowCurrentCard")) { + current = Iterables.getFirst(AbilityUtils.getDefinedCards(source, sourceAbility.getParam("ShowCurrentCard"), sourceAbility), null); } final List parts = cost.getCostParts();