diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index ad80719175d..a8fa6b77591 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -768,7 +768,7 @@ public class AiController { // Account for possible Ward after the spell is fully targeted // TODO: ideally, this should be done while targeting, so that a different target can be preferred if the best // one is warded and can't be paid for. - if (sa.usesTargeting() && CardFactoryUtil.isCounterable(host)) { + if (sa.usesTargeting() && (!sa.isSpell() || CardFactoryUtil.isCounterable(host))) { for (Card tgt : sa.getTargets().getTargetCards()) { // TODO some older cards don't use the keyword, so check for trigger instead if (tgt.hasKeyword(Keyword.WARD) && tgt.isInPlay() && tgt.getController().isOpponentOf(host.getController())) { diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index e2c2998c1a7..b39898f6727 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -797,7 +797,7 @@ public class ComputerUtilCost { if (ApiType.Counter.equals(sa.getApi())) { List spells = AbilityUtils.getDefinedSpellAbilities(source, sa.getParamOrDefault("Defined", "Targeted"), sa); for (SpellAbility toBeCountered : spells) { - if (!CardFactoryUtil.isCounterable(toBeCountered.getHostCard())) { + if (sa.isSpell() && !CardFactoryUtil.isCounterable(toBeCountered.getHostCard())) { return false; } // TODO check hasFizzled diff --git a/forge-ai/src/main/java/forge/ai/ability/CounterAi.java b/forge-ai/src/main/java/forge/ai/ability/CounterAi.java index 7cdc3b685f7..a13b1dbfe96 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CounterAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CounterAi.java @@ -64,7 +64,7 @@ public class CounterAi extends SpellAbilityAi { if (sa.usesTargeting()) { final SpellAbility topSA = ComputerUtilAbility.getTopSpellAbilityOnStack(game, sa); - if (!CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa) || topSA.getActivatingPlayer() == ai + if ((topSA.isSpell() && !CardFactoryUtil.isCounterableBy(topSA.getHostCard(), sa)) || topSA.getActivatingPlayer() == ai || ai.getAllies().contains(topSA.getActivatingPlayer())) { // might as well check for player's friendliness return false; @@ -326,7 +326,7 @@ public class CounterAi extends SpellAbilityAi { leastBadOption = tgtSA; } - if (!CardFactoryUtil.isCounterableBy(tgtSA.getHostCard(), sa) || + if ((tgtSA.isSpell() && !CardFactoryUtil.isCounterableBy(tgtSA.getHostCard(), sa)) || tgtSA.getActivatingPlayer() == ai || !tgtSA.getActivatingPlayer().isOpponentOf(ai)) { // Is this a "better" least bad option diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index 9d53f7713d9..4e17ebad454 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -673,7 +673,7 @@ public class DamageDealAi extends DamageAiBase { c = dealDamageChooseTgtC(ai, sa, dmg, noPrevention, enemy, false); if (c != null) { //option to hold removal instead only applies for single targeted removal - if (sa.isSpell() && !divided && !immediately && tgt.getMaxTargets(sa.getHostCard(), sa) == 1) { + if (sa.isSpell() && !divided && !immediately && tgt.getMaxTargets(source, sa) == 1) { if (!ComputerUtilCard.useRemovalNow(sa, c, dmg, ZoneType.Graveyard)) { return false; } @@ -724,7 +724,7 @@ public class DamageDealAi extends DamageAiBase { final Card c = dealDamageChooseTgtC(ai, sa, dmg, noPrevention, enemy, mandatory); if (c != null) { //option to hold removal instead only applies for single targeted removal - if (!immediately && tgt.getMaxTargets(sa.getHostCard(), sa) == 1 && !divided) { + if (!immediately && tgt.getMaxTargets(source, sa) == 1 && !divided) { if (!ComputerUtilCard.useRemovalNow(sa, c, dmg, ZoneType.Graveyard)) { return false; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java index 4312f9c15f7..3284935c648 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java @@ -80,7 +80,7 @@ public class CloneEffect extends SpellAbilityEffect { // if a Clone enters the field as other cards it could clone, // the clone should not be able to clone them // but do that only for Replacement Effects - if (sa.getRootAbility().isReplacementAbility()) { + if (sa.isReplacementAbility()) { if (choiceZone.equals(ZoneType.Battlefield)) { choices.retainAll(sa.getLastStateBattlefield()); } else if (choiceZone.equals(ZoneType.Graveyard)) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java index 0c1f4a9bef5..cd591e1b207 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java @@ -29,25 +29,12 @@ public class CounterEffect extends SpellAbilityEffect { final StringBuilder sb = new StringBuilder(); final List sas; - if (sa.hasParam("AllType")) { - boolean countersSpells = sa.getParam("AllType").contains("Spell"); - boolean countersActivated = sa.getParam("AllType").contains("Activated"); - boolean countersTriggers = sa.getParam("AllType").contains("Triggered"); - + if (sa.hasParam("AllValid")) { sas = Lists.newArrayList(); for (SpellAbilityStackInstance si : game.getStack()) { SpellAbility spell = si.getSpellAbility(true); - if (spell.isSpell() && !countersSpells) { + if (!spell.isValid(sa.getParam("AllValid").split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa)) { continue; - } else if (spell.isActivatedAbility() && !countersActivated) { - continue; - } else if (spell.isTrigger() && !countersTriggers) { - continue; - } - if (sa.hasParam("AllValid")) { - if (!spell.getHostCard().isValid(sa.getParam("AllValid"), sa.getActivatingPlayer(), sa.getHostCard(), sa)) { - continue; - } } sas.add(spell); } @@ -86,25 +73,12 @@ public class CounterEffect extends SpellAbilityEffect { // still on the stack final List sas; - if (sa.hasParam("AllType")) { - boolean countersSpells = sa.getParam("AllType").contains("Spell"); - boolean countersActivated = sa.getParam("AllType").contains("Activated"); - boolean countersTriggers = sa.getParam("AllType").contains("Triggered"); - + if (sa.hasParam("AllValid")) { sas = Lists.newArrayList(); for (SpellAbilityStackInstance si : game.getStack()) { SpellAbility spell = si.getSpellAbility(true); - if (spell.isSpell() && !countersSpells) { + if (!spell.isValid(sa.getParam("AllValid").split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa)) { continue; - } else if (spell.isActivatedAbility() && !countersActivated) { - continue; - } else if (spell.isTrigger() && !countersTriggers) { - continue; - } - if (sa.hasParam("AllValid")) { - if (!spell.getHostCard().isValid(sa.getParam("AllValid"), sa.getActivatingPlayer(), sa.getHostCard(), sa)) { - continue; - } } sas.add(spell); } diff --git a/forge-gui/res/cardsfolder/b/blim_comedic_genius.txt b/forge-gui/res/cardsfolder/b/blim_comedic_genius.txt index e6a03cfefb3..b79bcefbc48 100644 --- a/forge-gui/res/cardsfolder/b/blim_comedic_genius.txt +++ b/forge-gui/res/cardsfolder/b/blim_comedic_genius.txt @@ -3,7 +3,7 @@ ManaCost:2 B R Types:Legendary Creature Imp PT:4/3 K:Flying -T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigControl | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player gains control of target permanent you control. Then each player loses life and discards cards equal to the number of permanents they control but don't own. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigControl | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player gains control of target permanent you control. Then each player loses life and discards cards equal to the number of permanents they control but don't own. SVar:TrigControl:DB$ GainControl | ValidTgts$ Permanent.YouCtrl | TargetMin$ 1 | TgtPrompt$ Choose a permanent you control for damaged player to gain control of | NewController$ TriggeredTarget | SubAbility$ DBRepeatEach SVar:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBLoseLife SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X | SubAbility$ DBDiscard diff --git a/forge-gui/res/cardsfolder/c/counterflux.txt b/forge-gui/res/cardsfolder/c/counterflux.txt index ce5b4a8529b..4a1d92ce60b 100644 --- a/forge-gui/res/cardsfolder/c/counterflux.txt +++ b/forge-gui/res/cardsfolder/c/counterflux.txt @@ -3,5 +3,5 @@ ManaCost:U U R Types:Instant K:This spell can't be countered. A:SP$ Counter | Cost$ U U R | TargetType$ Spell | TgtPrompt$ Select target spell you don't control. | ValidTgts$ Card.YouDontCtrl | SpellDescription$ Counter target spell you don't control. -A:SP$ Counter | Cost$ 1 U U R | AllType$ Spell | AllValid$ Card.YouDontCtrl | PrecostDesc$ Overload | CostDesc$ {1}{U}{U}{R} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") | StackDescription$ Counter each spell you don't control. +A:SP$ Counter | Cost$ 1 U U R | AllValid$ Spell.YouDontCtrl | PrecostDesc$ Overload | CostDesc$ {1}{U}{U}{R} | NonBasicSpell$ True | SpellDescription$ (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") | StackDescription$ Counter each spell you don't control. Oracle:This spell can't be countered.\nCounter target spell you don't control.\nOverload {1}{U}{U}{R} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") diff --git a/forge-gui/res/cardsfolder/d/detention_sphere.txt b/forge-gui/res/cardsfolder/d/detention_sphere.txt index 8a3f4042e29..cbdc89294d3 100644 --- a/forge-gui/res/cardsfolder/d/detention_sphere.txt +++ b/forge-gui/res/cardsfolder/d/detention_sphere.txt @@ -3,7 +3,7 @@ ManaCost:1 W U Types:Enchantment T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, you may exile target nonland permanent not named Detention Sphere and all other permanents with the same name as that permanent. SVar:TrigExile:DB$ Pump | ValidTgts$ Permanent.nonLand+notnamedDetention Sphere | TgtPrompt$ Choose target nonland permanent not named Detention Sphere | SubAbility$ DBChangeZoneAll -SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ Targeted.sameName | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True +SVar:DBChangeZoneAll:DB$ ChangeZoneAll | ChangeType$ Targeted.Self,Targeted.sameName | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | ForgetOtherRemembered$ True T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME leaves the battlefield, return the exiled cards to the battlefield under their owner's control. SVar:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Battlefield SVar:OblivionRing:TRUE diff --git a/forge-gui/res/cardsfolder/g/grimoire_thief.txt b/forge-gui/res/cardsfolder/g/grimoire_thief.txt index c3b63f50e85..9c6bd6263ce 100644 --- a/forge-gui/res/cardsfolder/g/grimoire_thief.txt +++ b/forge-gui/res/cardsfolder/g/grimoire_thief.txt @@ -6,7 +6,7 @@ T:Mode$ Taps | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ W SVar:TrigExile:DB$ Dig | ValidTgts$ Opponent | DigNum$ 3 | ChangeNum$ All | DestinationZone$ Exile | ExileFaceDown$ True | RememberChanged$ True S:Mode$ Continuous | Affected$ Card.IsRemembered+ExiledWithSource | AffectedZone$ Exile | MayLookAt$ You | Description$ You may look at cards exiled with CARDNAME. A:AB$ SetState | Cost$ U Sac<1/CARDNAME> | Defined$ Remembered | Mode$ TurnFace | SubAbility$ DBCounter | SpellDescription$ Turn all cards exiled with CARDNAME face up. Counter all spells with those names. -SVar:DBCounter:DB$ Counter | AllType$ Spell | AllValid$ Card.sharesNameWith Remembered.ExiledWithSource | SubAbility$ DBCleanup +SVar:DBCounter:DB$ Counter | AllValid$ Spell.sharesNameWith Remembered.ExiledWithSource | SubAbility$ DBCleanup T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered+ExiledWithSource | Execute$ DBForget SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup diff --git a/forge-gui/res/cardsfolder/h/hapatra_vizier_of_poisons.txt b/forge-gui/res/cardsfolder/h/hapatra_vizier_of_poisons.txt index fcbf942aea8..f4e90f63928 100644 --- a/forge-gui/res/cardsfolder/h/hapatra_vizier_of_poisons.txt +++ b/forge-gui/res/cardsfolder/h/hapatra_vizier_of_poisons.txt @@ -2,7 +2,7 @@ Name:Hapatra, Vizier of Poisons ManaCost:B G Types:Legendary Creature Human Cleric PT:2/2 -T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | CombatDamage$ True | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may put a -1/-1 counter on target creature. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPutCounter | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may put a -1/-1 counter on target creature. SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ M1M1 | CounterNum$ 1 | IsCurse$ True T:Mode$ CounterAddedOnce | ValidCard$ Creature | ValidSource$ You | CounterType$ M1M1 | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever you put one or more -1/-1 counters on a creature, create a 1/1 green Snake creature token with deathtouch. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_1_1_snake_deathtouch | TokenOwner$ You diff --git a/forge-gui/res/cardsfolder/i/insist.txt b/forge-gui/res/cardsfolder/i/insist.txt index 52bcaeb54c7..60e59538949 100644 --- a/forge-gui/res/cardsfolder/i/insist.txt +++ b/forge-gui/res/cardsfolder/i/insist.txt @@ -3,8 +3,7 @@ ManaCost:G Types:Sorcery A:SP$ Effect | Triggers$ SpellCastTrig | SubAbility$ DBDraw | SpellDescription$ The next creature spell you cast this turn can't be countered. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. -SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | Execute$ Insistence | TriggerDescription$ The next creature spell you cast this turn can't be countered. -SVar:Insistence:DB$ Pump | Defined$ TriggeredCard | KW$ HIDDEN CARDNAME can't be countered. | PumpZone$ Stack | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | Execute$ Insistence | OneOff$ True | Static$ True | TriggerDescription$ The next creature spell you cast this turn can't be countered. +SVar:Insistence:DB$ Pump | Defined$ TriggeredCard | KW$ HIDDEN CARDNAME can't be countered. | PumpZone$ Stack AI:RemoveDeck:All Oracle:The next creature spell you cast this turn can't be countered.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/k/kadenas_silencer.txt b/forge-gui/res/cardsfolder/k/kadenas_silencer.txt index d74d2c43f37..01a894087cd 100644 --- a/forge-gui/res/cardsfolder/k/kadenas_silencer.txt +++ b/forge-gui/res/cardsfolder/k/kadenas_silencer.txt @@ -3,6 +3,6 @@ ManaCost:1 U Types:Creature Naga Wizard PT:2/1 T:Mode$ TurnFaceUp | ValidCard$ Card.Self | Execute$ TrigCounter | TriggerZones$ Battlefield | TriggerDescription$ When CARDNAME is turned face up, counter all abilities your opponents control. -SVar:TrigCounter:DB$ Counter | AllType$ Activated,Triggered | AllValid$ Card.OppCtrl,Emblem.OppCtrl +SVar:TrigCounter:DB$ Counter | AllValid$ Activated.OppCtrl,Triggered.OppCtrl K:Megamorph:1 U Oracle:When Kadena's Silencer is turned face up, counter all abilities your opponents control.\nMegamorph {1}{U} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its megamorph cost and put a +1/+1 counter on it.) diff --git a/forge-gui/res/cardsfolder/m/marsh_viper.txt b/forge-gui/res/cardsfolder/m/marsh_viper.txt index 52c96f9c784..9d41531e486 100644 --- a/forge-gui/res/cardsfolder/m/marsh_viper.txt +++ b/forge-gui/res/cardsfolder/m/marsh_viper.txt @@ -2,7 +2,7 @@ Name:Marsh Viper ManaCost:3 G Types:Creature Snake PT:1/2 -T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | TriggerZones$ Battlefield | Execute$ TrigPoison | TriggerDescription$ Whenever CARDNAME deals damage to a player, that player gets two poison counters. (A player with ten or more poison counters loses the game.) +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | TriggerZones$ Battlefield | Execute$ TrigPoison | TriggerDescription$ Whenever CARDNAME deals damage to a player, that player gets two poison counters. (A player with ten or more poison counters loses the game.) SVar:TrigPoison:DB$ Poison | Defined$ TriggeredTarget | Num$ 2 DeckHas:Ability$Counters DeckHints:Keyword$Infect diff --git a/forge-gui/res/cardsfolder/o/overmaster.txt b/forge-gui/res/cardsfolder/o/overmaster.txt index 74233c4b6e2..24e479a8458 100644 --- a/forge-gui/res/cardsfolder/o/overmaster.txt +++ b/forge-gui/res/cardsfolder/o/overmaster.txt @@ -3,8 +3,7 @@ ManaCost:R Types:Sorcery A:SP$ Effect | Triggers$ SpellCastTrig | SubAbility$ DBDraw | SpellDescription$ The next instant or sorcery spell you cast this turn can't be countered. SVar:DBDraw:DB$ Draw | NumCards$ 1 | SpellDescription$ Draw a card. -SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | Execute$ Mastery | TriggerDescription$ The next instant or sorcery spell you cast this turn can't be countered. -SVar:Mastery:DB$ Pump | Defined$ TriggeredCard | KW$ HIDDEN CARDNAME can't be countered. | PumpZone$ Stack | SubAbility$ DBCleanup -SVar:DBCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | Execute$ Mastery | OneOff$ True | Static$ True | TriggerDescription$ The next instant or sorcery spell you cast this turn can't be countered. +SVar:Mastery:DB$ Pump | Defined$ TriggeredCard | KW$ HIDDEN CARDNAME can't be countered. | PumpZone$ Stack AI:RemoveDeck:All Oracle:The next instant or sorcery spell you cast this turn can't be countered.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/p/pure_reflection.txt b/forge-gui/res/cardsfolder/p/pure_reflection.txt index 6da449b142f..4abf93cfa22 100644 --- a/forge-gui/res/cardsfolder/p/pure_reflection.txt +++ b/forge-gui/res/cardsfolder/p/pure_reflection.txt @@ -4,5 +4,5 @@ Types:Enchantment T:Mode$ SpellCast | ValidCard$ Creature | Execute$ TrigDestroy | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | TriggerDescription$ Whenever a player casts a creature spell, destroy all Reflections. Then that player creates an X/X white Reflection creature token, where X is the mana value of that spell. SVar:TrigDestroy:DB$ DestroyAll | ValidCards$ Reflection | SubAbility$ DBToken | SpellDescription$ Destroy all Reflections SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenPower$ X | TokenToughness$ X | TokenScript$ w_x_x_reflection | TokenOwner$ TriggeredActivator -SVar:X:TriggeredCard$CardManaCost +SVar:X:TriggeredStackInstance$CardManaCostLKI Oracle:Whenever a player casts a creature spell, destroy all Reflections. Then that player creates an X/X white Reflection creature token, where X is the mana value of that spell. diff --git a/forge-gui/res/cardsfolder/r/ride_the_avalanche.txt b/forge-gui/res/cardsfolder/r/ride_the_avalanche.txt index 53dfc23f9ea..a734734c2e2 100644 --- a/forge-gui/res/cardsfolder/r/ride_the_avalanche.txt +++ b/forge-gui/res/cardsfolder/r/ride_the_avalanche.txt @@ -7,7 +7,7 @@ SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Yo SVar:RemoveQuicken:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:TrigCounters:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ You | Execute$ PutCounter | TriggerDescription$ When you cast your next spell this turn, put X +1/+1 counters on up to one target creature, where X is the mana value of that spell SVar:PutCounter:DB$ PutCounter | CounterType$ P1P1 | CounterNum$ X | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target creature | ValidTgts$ Creature -SVar:X:TriggeredCard$CardManaCost +SVar:X:TriggeredStackInstance$CardManaCostLKI DeckHas:Ability$Counters AI:RemoveDeck:All Oracle:The next spell you cast this turn can be cast as though it had flash. When you cast your next spell this turn, put X +1/+1 counters on up to one target creature, where X is the mana value of that spell. diff --git a/forge-gui/res/cardsfolder/s/shark_typhoon.txt b/forge-gui/res/cardsfolder/s/shark_typhoon.txt index 01cb67c8f08..891102c9f36 100644 --- a/forge-gui/res/cardsfolder/s/shark_typhoon.txt +++ b/forge-gui/res/cardsfolder/s/shark_typhoon.txt @@ -3,7 +3,7 @@ ManaCost:5 U Types:Enchantment T:Mode$ SpellCast | ValidCard$ Card.nonCreature | ValidActivatingPlayer$ You | Execute$ TrigToken | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a noncreature spell, create an X/X blue Shark creature token with flying, where X is that spell's mana value. SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_shark_flying | TokenOwner$ You | TokenPower$ Y | TokenToughness$ Y | TokenAmount$ 1 -SVar:Y:TriggeredCard$CardManaCost +SVar:Y:TriggeredStackInstance$CardManaCostLKI K:Cycling:X 1 U T:Mode$ Cycled | ValidCard$ Card.Self | Execute$ TrigToken2 | TriggerDescription$ When you cycle CARDNAME, create an X/X blue Shark creature token with flying. SVar:TrigToken2:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_shark_flying | TokenOwner$ You | TokenPower$ X | TokenToughness$ X | TokenAmount$ 1 diff --git a/forge-gui/res/cardsfolder/s/summary_dismissal.txt b/forge-gui/res/cardsfolder/s/summary_dismissal.txt index 3c61f4db46c..452b404f9bb 100644 --- a/forge-gui/res/cardsfolder/s/summary_dismissal.txt +++ b/forge-gui/res/cardsfolder/s/summary_dismissal.txt @@ -2,6 +2,6 @@ Name:Summary Dismissal ManaCost:2 U U Types:Instant A:SP$ ChangeZoneAll | Cost$ 2 U U | ChangeType$ Card.Other | Origin$ Stack | Destination$ Exile | Fizzle$ True | SubAbility$ DBCounter | SpellDescription$ Exile all other spells and counter all abilities. -SVar:DBCounter:DB$ Counter | AllType$ Activated,Triggered | AllValid$ Card,Emblem +SVar:DBCounter:DB$ Counter | AllValid$ Activated,Triggered AI:RemoveDeck:All Oracle:Exile all other spells and counter all abilities. diff --git a/forge-gui/res/cardsfolder/s/swift_silence.txt b/forge-gui/res/cardsfolder/s/swift_silence.txt index 6013e0e2b41..53235c62c04 100644 --- a/forge-gui/res/cardsfolder/s/swift_silence.txt +++ b/forge-gui/res/cardsfolder/s/swift_silence.txt @@ -1,7 +1,7 @@ Name:Swift Silence ManaCost:2 W U U Types:Instant -A:SP$ Counter | Cost$ 2 W U U | AllType$ Spell | AllValid$ Card.Other | RememberCountered$ True | SubAbility$ DBDraw | SpellDescription$ Counter all other spells. Draw a card for each spell countered this way. +A:SP$ Counter | Cost$ 2 W U U | AllValid$ Spell.Other | RememberCountered$ True | SubAbility$ DBDraw | SpellDescription$ Counter all other spells. Draw a card for each spell countered this way. SVar:DBDraw:DB$ Draw | NumCards$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:Remembered$Amount diff --git a/forge-gui/res/cardsfolder/t/trickbind.txt b/forge-gui/res/cardsfolder/t/trickbind.txt index edc3a439209..24169779b40 100644 --- a/forge-gui/res/cardsfolder/t/trickbind.txt +++ b/forge-gui/res/cardsfolder/t/trickbind.txt @@ -3,7 +3,7 @@ ManaCost:1 U Types:Instant K:Split second A:SP$ Counter | Cost$ 1 U | TargetType$ Activated,Triggered | TgtPrompt$ Choose target ability | RememberCountered$ True | ValidTgts$ Card,Emblem | SubAbility$ DBEffect | SpellDescription$ Counter target activated or triggered ability. If a permanent's ability is countered this way, activated abilities of that permanent can't be activated this turn. (Mana abilities can't be targeted.) -SVar:DBEffect:DB$ Effect | StaticAbilities$ STCantBeActivated | RememberObjects$ Remembered | SubAbility$ DBCleanup | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ1 +SVar:DBEffect:DB$ Effect | StaticAbilities$ STCantBeActivated | RememberObjects$ Remembered | SubAbility$ DBCleanup | ConditionDefined$ Remembered | ConditionPresent$ Card.inZoneBattlefield | ConditionCompare$ EQ1 | ExileOnMoved$ Battlefield SVar:STCantBeActivated:Mode$ CantBeActivated | EffectZone$ Command | ValidCard$ Permanent.IsRemembered SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All diff --git a/forge-gui/res/quest/bazaar/bird_pet_l4.txt b/forge-gui/res/quest/bazaar/bird_pet_l4.txt index a7307814945..92449cef4fc 100644 --- a/forge-gui/res/quest/bazaar/bird_pet_l4.txt +++ b/forge-gui/res/quest/bazaar/bird_pet_l4.txt @@ -4,6 +4,6 @@ Colors:blue Types:Creature Bird Pet PT:1/3 K:Flying -T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | CombatDamage$ True | Execute$ DBScry | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may pay {1}. If you do, scry 1. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ DBScry | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may pay {1}. If you do, scry 1. SVar:DBScry:AB$ Scry | Cost$ 1 | ScryNum$ 1 Oracle:Flying\nWhenever Bird Pet deals combat damage to a player, you may pay {1}. If you do, scry 1. \ No newline at end of file