- Attempting to fix Suspend by making it exempt from the canPlay() check in HumanPlay.

- Better place for IsCastFromPlayEffect SVar assignment + cleanup
- Adding some previously missed card fixes from Marek.
This commit is contained in:
Agetian
2017-06-30 07:11:56 +00:00
parent 4b4396bd09
commit 986f95b46b
13 changed files with 40 additions and 28 deletions

View File

@@ -238,6 +238,8 @@ public class PlayEffect extends SpellAbilityEffect {
addReplaceGraveyardEffect(tgtCard, sa, sa.getParam("ReplaceGraveyard")); addReplaceGraveyardEffect(tgtCard, sa, sa.getParam("ReplaceGraveyard"));
} }
tgtSA.setSVar("IsCastFromPlayEffect", "True");
if (controller.getController().playSaFromPlayEffect(tgtSA)) { if (controller.getController().playSaFromPlayEffect(tgtSA)) {
if (remember) { if (remember) {
source.addRemembered(tgtSA.getHostCard()); source.addRemembered(tgtSA.getHostCard());

View File

@@ -7110,6 +7110,7 @@ public class Card extends GameEntity implements Comparable<Card> {
// to be restored to their original value if a card changes zones // to be restored to their original value if a card changes zones
removeSVar("PayX"); // Temporary AI X announcement variable removeSVar("PayX"); // Temporary AI X announcement variable
removeSVar("IsCastFromPlayEffect"); // Temporary SVar indicating that the spell is cast indirectly via AF Play
setSunburstValue(0); // Sunburst setSunburstValue(0); // Sunburst
} }
} }

View File

@@ -108,6 +108,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
|| activator.hasKeyword("You may cast nonland cards as though they had flash.") || activator.hasKeyword("You may cast nonland cards as though they had flash.")
|| card.hasStartOfKeyword("You may cast CARDNAME as though it had flash.") || card.hasStartOfKeyword("You may cast CARDNAME as though it had flash.")
|| this.hasSVar("IsCastFromPlayEffect") || this.hasSVar("IsCastFromPlayEffect")
|| card.wasSuspendCast()
|| (card.isFaceDown() && !card.getZone().is(ZoneType.Battlefield) && card.getState(CardStateName.Original).getType().isInstant()))) { || (card.isFaceDown() && !card.getZone().is(ZoneType.Battlefield) && card.getState(CardStateName.Original).getType().isInstant()))) {
return false; return false;
} }

View File

@@ -3,7 +3,7 @@ ManaCost:3 G
Types:Creature Elf Artificer Types:Creature Elf Artificer
PT:3/3 PT:3/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card for each creature you control with a +1/+1 counter on it. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card for each creature you control with a +1/+1 counter on it.
SVar:TrigDraw:AB$Draw | Cost$ 0 | Defined$ You | NumCards$ X | References$ X SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ X | References$ X
SVar:X:Count$Valid Creature.YouCtrl+counters_GE1_P1P1 SVar:X:Count$Valid Creature.YouCtrl+counters_GE1_P1P1
DeckHints:Ability$Counters DeckHints:Ability$Counters
SVar:Picture:http://www.wizards.com/global/images/magic/general/armorcraft_judge.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/armorcraft_judge.jpg

View File

@@ -1,12 +1,12 @@
Name:Chrome Mox Name:Chrome Mox
ManaCost:0 ManaCost:0
Types:Artifact Types:Artifact
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ Imprint When CARDNAME enters the battlefield, you may exile a nonartifact, nonland card from your hand. T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ Imprint <EFBFBD> When CARDNAME enters the battlefield, you may exile a nonartifact, nonland card from your hand.
SVar:TrigExile:AB$ChangeZone | Cost$ 0 | Imprint$ True | Origin$ Hand | Destination$ Exile | ChangeType$ Card.nonArtifact+nonLand | ChangeNum$ 1 SVar:TrigExile:DB$ChangeZone | Imprint$ True | Origin$ Hand | Destination$ Exile | ChangeType$ Card.nonArtifact+nonLand | ChangeNum$ 1
A:AB$ ManaReflected | Cost$ T | Valid$ Defined.Imprinted | ColorOrType$ Color | ReflectProperty$ Is | SpellDescription$ Add one mana of any of the exiled card's colors to your mana pool. A:AB$ ManaReflected | Cost$ T | Valid$ Defined.Imprinted | ColorOrType$ Color | ReflectProperty$ Is | SpellDescription$ Add one mana of any of the exiled card's colors to your mana pool.
T:Mode$ ChangesZone | Origin$ Battlefield | ValidCard$ Card.Self | Destination$ Any | Execute$ DBCleanup | Static$ True T:Mode$ ChangesZone | Origin$ Battlefield | ValidCard$ Card.Self | Destination$ Any | Execute$ DBCleanup | Static$ True
T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ DBCleanup | Static$ True T:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ DBCleanup | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True
SVar:RemAIDeck:True SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/chrome_mox.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/chrome_mox.jpg
Oracle:Imprint When Chrome Mox enters the battlefield, you may exile a nonartifact, nonland card from your hand.\n{T}: Add one mana of any of the exiled card's colors to your mana pool. Oracle:Imprint <EFBFBD> When Chrome Mox enters the battlefield, you may exile a nonartifact, nonland card from your hand.\n{T}: Add one mana of any of the exiled card's colors to your mana pool.

View File

@@ -2,7 +2,7 @@ Name:Deepwater Hypnotist
ManaCost:1 U ManaCost:1 U
Types:Creature Merfolk Wizard Types:Creature Merfolk Wizard
PT:2/1 PT:2/1
T:Mode$ Untaps | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Inspired Whenever CARDNAME becomes untapped, target creature an opponent controls gets -3/-0 until end of turn. T:Mode$ Untaps | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Inspired <EFBFBD> Whenever CARDNAME becomes untapped, target creature an opponent controls gets -3/-0 until end of turn.
SVar:TrigPump:AB$ Pump | Cost$ 0 | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | NumAtt$ -3 | IsCurse$ True SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls | NumAtt$ -3 | IsCurse$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/deepwater_hypnotist.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/deepwater_hypnotist.jpg
Oracle:Inspired Whenever Deepwater Hypnotist becomes untapped, target creature an opponent controls gets -3/-0 until end of turn. Oracle:Inspired <EFBFBD> Whenever Deepwater Hypnotist becomes untapped, target creature an opponent controls gets -3/-0 until end of turn.

View File

@@ -3,6 +3,6 @@ ManaCost:5 B
Types:Creature Crocodile Types:Creature Crocodile
PT:4/6 PT:4/6
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may put target artifact or creature card from your graveyard on top of your library. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may put target artifact or creature card from your graveyard on top of your library.
SVar:TrigChange:AB$ ChangeZone | Cost$ 0 | TgtPrompt$ Choose target artifact or creature card in your graveyard | ValidTgts$ Artifact,Creature | TargetsWithDefinedController$ TriggeredCardController | Origin$ Graveyard | Destination$ Library SVar:TrigChange:DB$ ChangeZone | TgtPrompt$ Choose target artifact or creature card in your graveyard | ValidTgts$ Artifact,Creature | TargetsWithDefinedController$ TriggeredCardController | Origin$ Graveyard | Destination$ Library
SVar:Picture:http://www.wizards.com/global/images/magic/general/dukhara_scavenger.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/dukhara_scavenger.jpg
Oracle:When Dukhara Scavenger enters the battlefield, you may put target artifact or creature card from your graveyard on top of your library. Oracle:When Dukhara Scavenger enters the battlefield, you may put target artifact or creature card from your graveyard on top of your library.

View File

@@ -3,7 +3,7 @@ ManaCost:5 B R
Types:Legendary Creature Human Shaman Types:Legendary Creature Human Shaman
PT:5/4 PT:5/4
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDealDamage | TriggerDescription$ Whenever an opponent casts a spell, CARDNAME deals damage to target creature or player equal to that spell's converted mana cost. T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDealDamage | TriggerDescription$ Whenever an opponent casts a spell, CARDNAME deals damage to target creature or player equal to that spell's converted mana cost.
SVar:TrigDealDamage:AB$DealDamage | Cost$ 0 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ X | References$ X SVar:TrigDealDamage:DB$DealDamage | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ X | References$ X
SVar:X:TriggerCount$CastSACMC SVar:X:TriggerCount$CastSACMC
SVar:Picture:http://www.wizards.com/global/images/magic/general/kaervek_the_merciless.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/kaervek_the_merciless.jpg
Oracle:Whenever an opponent casts a spell, Kaervek the Merciless deals damage to target creature or player equal to that spell's converted mana cost. Oracle:Whenever an opponent casts a spell, Kaervek the Merciless deals damage to target creature or player equal to that spell's converted mana cost.

View File

@@ -3,6 +3,6 @@ ManaCost:3 G G
Types:Creature Kavu Types:Creature Kavu
PT:3/3 PT:3/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card. T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
SVar:TrigDraw:AB$Draw | Cost$ 0 | Defined$ You | NumCards$ 1 SVar:TrigDraw:DB$Draw | Defined$ You | NumCards$ 1
SVar:Picture:http://resources.wizards.com/magic/cards/9ed/en-us/card83175.jpg SVar:Picture:http://resources.wizards.com/magic/cards/9ed/en-us/card83175.jpg
Oracle:When Kavu Climber enters the battlefield, draw a card. Oracle:When Kavu Climber enters the battlefield, draw a card.

View File

@@ -3,7 +3,7 @@ ManaCost:3 W
Types:Legendary Creature Human Soldier Types:Legendary Creature Human Soldier
PT:3/3 PT:3/3
T:Mode$ Phase | Phase$ BeginCombat | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ At the beginning of each combat, creatures you control gain first strike until end of turn if a creature you control has first strike. The same is true for flying, deathtouch, double strike, haste, hexproof, indestructible, lifelink, menace, reach, skulk, trample, and vigilance. T:Mode$ Phase | Phase$ BeginCombat | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ At the beginning of each combat, creatures you control gain first strike until end of turn if a creature you control has first strike. The same is true for flying, deathtouch, double strike, haste, hexproof, indestructible, lifelink, menace, reach, skulk, trample, and vigilance.
SVar:TrigPump:AB$ PumpAll | Cost$ 0 | ValidCards$ Creature.YouCtrl | KW$ First Strike & Flying & Deathtouch & Double Strike & Haste & Hexproof & Indestructible & Lifelink & Menace & Reach & Skulk & Trample & Vigilance | SharedKeywordsZone$ Battlefield | SharedRestrictions$ Creature.YouCtrl SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ First Strike & Flying & Deathtouch & Double Strike & Haste & Hexproof & Indestructible & Lifelink & Menace & Reach & Skulk & Trample & Vigilance | SharedKeywordsZone$ Battlefield | SharedRestrictions$ Creature.YouCtrl
SVar:Picture:http://www.wizards.com/global/images/magic/general/odric_lunarch_marshal.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/odric_lunarch_marshal.jpg
Oracle:At the beginning of each combat, creatures you control gain first strike until end of turn if a creature you control has first strike. The same is true for flying, deathtouch, double strike, haste, hexproof, indestructible, lifelink, menace, reach, skulk, trample, and vigilance. Oracle:At the beginning of each combat, creatures you control gain first strike until end of turn if a creature you control has first strike. The same is true for flying, deathtouch, double strike, haste, hexproof, indestructible, lifelink, menace, reach, skulk, trample, and vigilance.

View File

@@ -1,13 +1,13 @@
Name:Witherscale Wurm Name:Witherscale Wurm
ManaCost:4 G G ManaCost:4 G G
Types:Creature Wurm Types:Creature Wurm
PT:9/9 PT:9/9
T:Mode$ AttackerBlockedByCreature | ValidCard$ Creature | ValidBlocker$ Card.Self | Execute$ TrigPumpAttacker | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME blocks or becomes blocked by a creature, that creature gains wither until end of turn. (It deals damage to creatures in the form of -1/-1 counters.) T:Mode$ AttackerBlockedByCreature | ValidCard$ Creature | ValidBlocker$ Card.Self | Execute$ TrigPumpAttacker | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME blocks or becomes blocked by a creature, that creature gains wither until end of turn. (It deals damage to creatures in the form of -1/-1 counters.)
T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature | Execute$ TrigPumpBlocker | Secondary$ True | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME blocks or becomes blocked by a creature, that creature gains wither until end of turn. (It deals damage to creatures in the form of -1/-1 counters.) T:Mode$ AttackerBlockedByCreature | ValidCard$ Card.Self | ValidBlocker$ Creature | Execute$ TrigPumpBlocker | Secondary$ True | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME blocks or becomes blocked by a creature, that creature gains wither until end of turn. (It deals damage to creatures in the form of -1/-1 counters.)
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | Execute$ TrigRemoveCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals damage to an opponent, remove all -1/-1 counters from it. T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | Execute$ TrigRemoveCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals damage to an opponent, remove all -1/-1 counters from it.
SVar:TrigPumpAttacker:AB$ Pump | Cost$ 0 | Defined$ TriggeredAttacker | KW$ Wither SVar:TrigPumpAttacker:DB$ Pump | Defined$ TriggeredAttacker | KW$ Wither
SVar:TrigPumpBlocker:AB$ Pump | Cost$ 0 | Defined$ TriggeredBlocker | KW$ Wither SVar:TrigPumpBlocker:DB$ Pump | Defined$ TriggeredBlocker | KW$ Wither
SVar:TrigRemoveCounter:AB$ RemoveCounter | Cost$ 0 | CounterType$ M1M1 | CounterNum$ All | References$ All SVar:TrigRemoveCounter:DB$ RemoveCounter | CounterType$ M1M1 | CounterNum$ All | References$ All
SVar:All:Count$CardCounters.M1M1 SVar:All:Count$CardCounters.M1M1
SVar:Picture:http://www.wizards.com/global/images/magic/general/witherscale_wurm.jpg SVar:Picture:http://www.wizards.com/global/images/magic/general/witherscale_wurm.jpg
Oracle:Whenever Witherscale Wurm blocks or becomes blocked by a creature, that creature gains wither until end of turn. (It deals damage to creatures in the form of -1/-1 counters.)\nWhenever Witherscale Wurm deals damage to an opponent, remove all -1/-1 counters from it. Oracle:Whenever Witherscale Wurm blocks or becomes blocked by a creature, that creature gains wither until end of turn. (It deals damage to creatures in the form of -1/-1 counters.)\nWhenever Witherscale Wurm deals damage to an opponent, remove all -1/-1 counters from it.

View File

@@ -84,7 +84,16 @@ public class HumanPlay {
// extra play check // extra play check
if (sa.isSpell() && !sa.canPlay()) { if (sa.isSpell() && !sa.canPlay()) {
return false; // Exceptional cases where canPlay should not run
boolean exemptFromCheck = false;
if (source.hasSuspend() && p.getGame().isCardExiled(source) && source.getCounters(CounterType.TIME) == 0) {
// A card is about to ETB from Suspend
exemptFromCheck = true;
}
if (!exemptFromCheck) {
return false;
}
} }
if (flippedToCast && !castFaceDown) { if (flippedToCast && !castFaceDown) {

View File

@@ -1506,7 +1506,6 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
@Override @Override
public boolean playSaFromPlayEffect(final SpellAbility tgtSA) { public boolean playSaFromPlayEffect(final SpellAbility tgtSA) {
tgtSA.setSVar("IsCastFromPlayEffect", "True");
return HumanPlay.playSpellAbility(this, player, tgtSA); return HumanPlay.playSpellAbility(this, player, tgtSA);
} }