mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Random cleanup + fixes
This commit is contained in:
@@ -768,7 +768,7 @@ public class AiController {
|
|||||||
// Account for possible Ward after the spell is fully targeted
|
// 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
|
// 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.
|
// 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()) {
|
for (Card tgt : sa.getTargets().getTargetCards()) {
|
||||||
// TODO some older cards don't use the keyword, so check for trigger instead
|
// 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())) {
|
if (tgt.hasKeyword(Keyword.WARD) && tgt.isInPlay() && tgt.getController().isOpponentOf(host.getController())) {
|
||||||
|
|||||||
@@ -797,7 +797,7 @@ public class ComputerUtilCost {
|
|||||||
if (ApiType.Counter.equals(sa.getApi())) {
|
if (ApiType.Counter.equals(sa.getApi())) {
|
||||||
List<SpellAbility> spells = AbilityUtils.getDefinedSpellAbilities(source, sa.getParamOrDefault("Defined", "Targeted"), sa);
|
List<SpellAbility> spells = AbilityUtils.getDefinedSpellAbilities(source, sa.getParamOrDefault("Defined", "Targeted"), sa);
|
||||||
for (SpellAbility toBeCountered : spells) {
|
for (SpellAbility toBeCountered : spells) {
|
||||||
if (!CardFactoryUtil.isCounterable(toBeCountered.getHostCard())) {
|
if (sa.isSpell() && !CardFactoryUtil.isCounterable(toBeCountered.getHostCard())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// TODO check hasFizzled
|
// TODO check hasFizzled
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public class CounterAi extends SpellAbilityAi {
|
|||||||
|
|
||||||
if (sa.usesTargeting()) {
|
if (sa.usesTargeting()) {
|
||||||
final SpellAbility topSA = ComputerUtilAbility.getTopSpellAbilityOnStack(game, sa);
|
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())) {
|
|| ai.getAllies().contains(topSA.getActivatingPlayer())) {
|
||||||
// might as well check for player's friendliness
|
// might as well check for player's friendliness
|
||||||
return false;
|
return false;
|
||||||
@@ -326,7 +326,7 @@ public class CounterAi extends SpellAbilityAi {
|
|||||||
leastBadOption = tgtSA;
|
leastBadOption = tgtSA;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CardFactoryUtil.isCounterableBy(tgtSA.getHostCard(), sa) ||
|
if ((tgtSA.isSpell() && !CardFactoryUtil.isCounterableBy(tgtSA.getHostCard(), sa)) ||
|
||||||
tgtSA.getActivatingPlayer() == ai ||
|
tgtSA.getActivatingPlayer() == ai ||
|
||||||
!tgtSA.getActivatingPlayer().isOpponentOf(ai)) {
|
!tgtSA.getActivatingPlayer().isOpponentOf(ai)) {
|
||||||
// Is this a "better" least bad option
|
// Is this a "better" least bad option
|
||||||
|
|||||||
@@ -673,7 +673,7 @@ public class DamageDealAi extends DamageAiBase {
|
|||||||
c = dealDamageChooseTgtC(ai, sa, dmg, noPrevention, enemy, false);
|
c = dealDamageChooseTgtC(ai, sa, dmg, noPrevention, enemy, false);
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
//option to hold removal instead only applies for single targeted removal
|
//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)) {
|
if (!ComputerUtilCard.useRemovalNow(sa, c, dmg, ZoneType.Graveyard)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -724,7 +724,7 @@ public class DamageDealAi extends DamageAiBase {
|
|||||||
final Card c = dealDamageChooseTgtC(ai, sa, dmg, noPrevention, enemy, mandatory);
|
final Card c = dealDamageChooseTgtC(ai, sa, dmg, noPrevention, enemy, mandatory);
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
//option to hold removal instead only applies for single targeted removal
|
//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)) {
|
if (!ComputerUtilCard.useRemovalNow(sa, c, dmg, ZoneType.Graveyard)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public class CloneEffect extends SpellAbilityEffect {
|
|||||||
// if a Clone enters the field as other cards it could clone,
|
// if a Clone enters the field as other cards it could clone,
|
||||||
// the clone should not be able to clone them
|
// the clone should not be able to clone them
|
||||||
// but do that only for Replacement Effects
|
// but do that only for Replacement Effects
|
||||||
if (sa.getRootAbility().isReplacementAbility()) {
|
if (sa.isReplacementAbility()) {
|
||||||
if (choiceZone.equals(ZoneType.Battlefield)) {
|
if (choiceZone.equals(ZoneType.Battlefield)) {
|
||||||
choices.retainAll(sa.getLastStateBattlefield());
|
choices.retainAll(sa.getLastStateBattlefield());
|
||||||
} else if (choiceZone.equals(ZoneType.Graveyard)) {
|
} else if (choiceZone.equals(ZoneType.Graveyard)) {
|
||||||
|
|||||||
@@ -29,25 +29,12 @@ public class CounterEffect extends SpellAbilityEffect {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
final List<SpellAbility> sas;
|
final List<SpellAbility> sas;
|
||||||
|
|
||||||
if (sa.hasParam("AllType")) {
|
if (sa.hasParam("AllValid")) {
|
||||||
boolean countersSpells = sa.getParam("AllType").contains("Spell");
|
|
||||||
boolean countersActivated = sa.getParam("AllType").contains("Activated");
|
|
||||||
boolean countersTriggers = sa.getParam("AllType").contains("Triggered");
|
|
||||||
|
|
||||||
sas = Lists.newArrayList();
|
sas = Lists.newArrayList();
|
||||||
for (SpellAbilityStackInstance si : game.getStack()) {
|
for (SpellAbilityStackInstance si : game.getStack()) {
|
||||||
SpellAbility spell = si.getSpellAbility(true);
|
SpellAbility spell = si.getSpellAbility(true);
|
||||||
if (spell.isSpell() && !countersSpells) {
|
if (!spell.isValid(sa.getParam("AllValid").split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa)) {
|
||||||
continue;
|
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);
|
sas.add(spell);
|
||||||
}
|
}
|
||||||
@@ -86,25 +73,12 @@ public class CounterEffect extends SpellAbilityEffect {
|
|||||||
// still on the stack
|
// still on the stack
|
||||||
final List<SpellAbility> sas;
|
final List<SpellAbility> sas;
|
||||||
|
|
||||||
if (sa.hasParam("AllType")) {
|
if (sa.hasParam("AllValid")) {
|
||||||
boolean countersSpells = sa.getParam("AllType").contains("Spell");
|
|
||||||
boolean countersActivated = sa.getParam("AllType").contains("Activated");
|
|
||||||
boolean countersTriggers = sa.getParam("AllType").contains("Triggered");
|
|
||||||
|
|
||||||
sas = Lists.newArrayList();
|
sas = Lists.newArrayList();
|
||||||
for (SpellAbilityStackInstance si : game.getStack()) {
|
for (SpellAbilityStackInstance si : game.getStack()) {
|
||||||
SpellAbility spell = si.getSpellAbility(true);
|
SpellAbility spell = si.getSpellAbility(true);
|
||||||
if (spell.isSpell() && !countersSpells) {
|
if (!spell.isValid(sa.getParam("AllValid").split(","), sa.getActivatingPlayer(), sa.getHostCard(), sa)) {
|
||||||
continue;
|
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);
|
sas.add(spell);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:2 B R
|
|||||||
Types:Legendary Creature Imp
|
Types:Legendary Creature Imp
|
||||||
PT:4/3
|
PT:4/3
|
||||||
K:Flying
|
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: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:DBRepeatEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBLoseLife
|
||||||
SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X | SubAbility$ DBDiscard
|
SVar:DBLoseLife:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ X | SubAbility$ DBDiscard
|
||||||
|
|||||||
@@ -3,5 +3,5 @@ ManaCost:U U R
|
|||||||
Types:Instant
|
Types:Instant
|
||||||
K:This spell can't be countered.
|
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$ 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.")
|
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.")
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:1 W U
|
|||||||
Types:Enchantment
|
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.
|
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: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.
|
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:TrigReturn:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Exile | Destination$ Battlefield
|
||||||
SVar:OblivionRing:TRUE
|
SVar:OblivionRing:TRUE
|
||||||
|
|||||||
@@ -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
|
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.
|
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.
|
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
|
T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered+ExiledWithSource | Execute$ DBForget
|
||||||
SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard
|
SVar:DBForget:DB$ Pump | ForgetObjects$ TriggeredCard
|
||||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Hapatra, Vizier of Poisons
|
|||||||
ManaCost:B G
|
ManaCost:B G
|
||||||
Types:Legendary Creature Human Cleric
|
Types:Legendary Creature Human Cleric
|
||||||
PT:2/2
|
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
|
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.
|
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
|
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_1_1_snake_deathtouch | TokenOwner$ You
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ ManaCost:G
|
|||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ Effect | Triggers$ SpellCastTrig | SubAbility$ DBDraw | SpellDescription$ The next creature spell you cast this turn can't be countered.
|
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: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: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 | SubAbility$ DBCleanup
|
SVar:Insistence:DB$ Pump | Defined$ TriggeredCard | KW$ HIDDEN CARDNAME can't be countered. | PumpZone$ Stack
|
||||||
SVar:DBCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:The next creature spell you cast this turn can't be countered.\nDraw a card.
|
Oracle:The next creature spell you cast this turn can't be countered.\nDraw a card.
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ ManaCost:1 U
|
|||||||
Types:Creature Naga Wizard
|
Types:Creature Naga Wizard
|
||||||
PT:2/1
|
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.
|
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
|
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.)
|
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.)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ Name:Marsh Viper
|
|||||||
ManaCost:3 G
|
ManaCost:3 G
|
||||||
Types:Creature Snake
|
Types:Creature Snake
|
||||||
PT:1/2
|
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
|
SVar:TrigPoison:DB$ Poison | Defined$ TriggeredTarget | Num$ 2
|
||||||
DeckHas:Ability$Counters
|
DeckHas:Ability$Counters
|
||||||
DeckHints:Keyword$Infect
|
DeckHints:Keyword$Infect
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ ManaCost:R
|
|||||||
Types:Sorcery
|
Types:Sorcery
|
||||||
A:SP$ Effect | Triggers$ SpellCastTrig | SubAbility$ DBDraw | SpellDescription$ The next instant or sorcery spell you cast this turn can't be countered.
|
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: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: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 | SubAbility$ DBCleanup
|
SVar:Mastery:DB$ Pump | Defined$ TriggeredCard | KW$ HIDDEN CARDNAME can't be countered. | PumpZone$ Stack
|
||||||
SVar:DBCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
Oracle:The next instant or sorcery spell you cast this turn can't be countered.\nDraw a card.
|
Oracle:The next instant or sorcery spell you cast this turn can't be countered.\nDraw a card.
|
||||||
|
|||||||
@@ -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.
|
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: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: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.
|
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.
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ SVar:SpellCastTrig:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Yo
|
|||||||
SVar:RemoveQuicken:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile
|
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: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: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
|
DeckHas:Ability$Counters
|
||||||
AI:RemoveDeck:All
|
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.
|
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.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:5 U
|
|||||||
Types:Enchantment
|
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.
|
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: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
|
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.
|
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
|
SVar:TrigToken2:DB$ Token | TokenAmount$ 1 | TokenScript$ u_x_x_shark_flying | TokenOwner$ You | TokenPower$ X | TokenToughness$ X | TokenAmount$ 1
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ Name:Summary Dismissal
|
|||||||
ManaCost:2 U U
|
ManaCost:2 U U
|
||||||
Types:Instant
|
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.
|
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
|
AI:RemoveDeck:All
|
||||||
Oracle:Exile all other spells and counter all abilities.
|
Oracle:Exile all other spells and counter all abilities.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Name:Swift Silence
|
Name:Swift Silence
|
||||||
ManaCost:2 W U U
|
ManaCost:2 W U U
|
||||||
Types:Instant
|
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:DBDraw:DB$ Draw | NumCards$ X | SubAbility$ DBCleanup
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
SVar:X:Remembered$Amount
|
SVar:X:Remembered$Amount
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ ManaCost:1 U
|
|||||||
Types:Instant
|
Types:Instant
|
||||||
K:Split second
|
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.)
|
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:STCantBeActivated:Mode$ CantBeActivated | EffectZone$ Command | ValidCard$ Permanent.IsRemembered
|
||||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||||
AI:RemoveDeck:All
|
AI:RemoveDeck:All
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ Colors:blue
|
|||||||
Types:Creature Bird Pet
|
Types:Creature Bird Pet
|
||||||
PT:1/3
|
PT:1/3
|
||||||
K:Flying
|
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
|
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.
|
Oracle:Flying\nWhenever Bird Pet deals combat damage to a player, you may pay {1}. If you do, scry 1.
|
||||||
Reference in New Issue
Block a user