mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
- 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:
@@ -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());
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user