reintegrating CloneFix branch into Trunk

This commit is contained in:
ArsenalNut
2012-07-05 06:59:28 +00:00
100 changed files with 1335 additions and 771 deletions

7
.gitattributes vendored
View File

@@ -1403,6 +1403,7 @@ res/cardsfolder/c/celestial_purge.txt svneol=native#text/plain
res/cardsfolder/c/celestial_sword.txt svneol=native#text/plain
res/cardsfolder/c/cellar_door.txt -text
res/cardsfolder/c/cemetery_gate.txt svneol=native#text/plain
res/cardsfolder/c/cemetery_puca.txt -text
res/cardsfolder/c/cemetery_reaper.txt svneol=native#text/plain
res/cardsfolder/c/cenns_enlistment.txt svneol=native#text/plain
res/cardsfolder/c/cenns_heir.txt svneol=native#text/plain
@@ -2302,6 +2303,7 @@ res/cardsfolder/d/diminish.txt svneol=native#text/plain
res/cardsfolder/d/diminishing_returns.txt svneol=native#text/plain
res/cardsfolder/d/dimir_aqueduct.txt svneol=native#text/plain
res/cardsfolder/d/dimir_cutpurse.txt svneol=native#text/plain
res/cardsfolder/d/dimir_doppelganger.txt -text
res/cardsfolder/d/dimir_guildmage.txt svneol=native#text/plain
res/cardsfolder/d/dimir_house_guard.txt svneol=native#text/plain
res/cardsfolder/d/dimir_infiltrator.txt svneol=native#text/plain
@@ -7774,6 +7776,7 @@ res/cardsfolder/s/sages_of_the_anima.txt -text
res/cardsfolder/s/sai_of_the_shinobi.txt -text
res/cardsfolder/s/sailmonger.txt svneol=native#text/plain
res/cardsfolder/s/sakashima_the_impostor.txt -text
res/cardsfolder/s/sakashimas_student.txt -text
res/cardsfolder/s/sakura_tribe_elder.txt svneol=native#text/plain
res/cardsfolder/s/sakura_tribe_scout.txt svneol=native#text/plain
res/cardsfolder/s/salt_flats.txt svneol=native#text/plain
@@ -8160,6 +8163,7 @@ res/cardsfolder/s/shape_stealer.txt -text svneol=unset#text/plain
res/cardsfolder/s/shaper_guildmage.txt svneol=native#text/plain
res/cardsfolder/s/shaper_parasite.txt -text
res/cardsfolder/s/shapeshifter.txt svneol=native#text/plain
res/cardsfolder/s/shapeshifters_marrow.txt -text
res/cardsfolder/s/shard_convergence.txt svneol=native#text/plain
res/cardsfolder/s/shard_phoenix.txt svneol=native#text/plain
res/cardsfolder/s/shard_volley.txt svneol=native#text/plain
@@ -9992,6 +9996,7 @@ res/cardsfolder/u/unspeakable_symbol.txt svneol=native#text/plain
res/cardsfolder/u/unstable_frontier.txt -text
res/cardsfolder/u/unstable_hulk.txt svneol=native#text/plain
res/cardsfolder/u/unstable_mutation.txt svneol=native#text/plain
res/cardsfolder/u/unstable_shapeshifter.txt -text
res/cardsfolder/u/unstoppable_ash.txt svneol=native#text/plain
res/cardsfolder/u/unsummon.txt svneol=native#text/plain
res/cardsfolder/u/untaidake_the_cloud_keeper.txt -text
@@ -10171,6 +10176,7 @@ res/cardsfolder/v/vertigo.txt svneol=native#text/plain
res/cardsfolder/v/vertigo_spawn.txt svneol=native#text/plain
res/cardsfolder/v/vesper_ghoul.txt svneol=native#text/plain
res/cardsfolder/v/vessel_of_endless_rest.txt -text
res/cardsfolder/v/vesuva.txt -text
res/cardsfolder/v/vesuvan_doppelganger.txt svneol=native#text/plain
res/cardsfolder/v/veteran_armorer.txt svneol=native#text/plain
res/cardsfolder/v/veteran_armorsmith.txt svneol=native#text/plain
@@ -11734,6 +11740,7 @@ src/main/java/forge/card/abilityfactory/AbilityFactoryCharm.java svneol=native#t
src/main/java/forge/card/abilityfactory/AbilityFactoryChoose.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryCleanup.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryClone.java -text
src/main/java/forge/card/abilityfactory/AbilityFactoryCombat.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryCopy.java svneol=native#text/plain
src/main/java/forge/card/abilityfactory/AbilityFactoryCounterMagic.java svneol=native#text/plain

1
.gitignore vendored
View File

@@ -358,6 +358,7 @@ res/pics/WWK
res/pics/ZEN
res/pics/booster
res/pics/icons
res/pics/tokens
res/pics_product/*.jpg
res/preferences
res/preferences/forge.preferences

View File

@@ -216,8 +216,6 @@ while line:
# store Card object in hash table
mtgDataCards[cardName] = card
print 'WARNING: Card template contains bogus SetInfo for testing only!!!'
print ' Please remove the SetInfo before committing to repository\n'
inputName = raw_input("Enter Card Name: ")
inputName = inputName.rstrip()
while inputName != 'quit' :
@@ -257,7 +255,6 @@ while inputName != 'quit' :
setInfo.append(setInfoStr)
print 'SVar:Rarity:'+rarity
print 'SVar:Picture:http://www.wizards.com/global/images/magic/general/'+cleanName+'.jpg'
for edition in setInfo : print edition
print 'End\n'
else :
print inputName+' not found\n'

View File

@@ -5,13 +5,11 @@ Text:no text
PT:3/2
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:Picture:http://www.wizards.com/global/images/magic/general/afflicted_deserter.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SetInfo:DKA|Uncommon|http://magiccards.info/scans/en/dka/81a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Afflicted Deserter.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Werewolf Ransacker
@@ -26,7 +24,8 @@ SVar:DBDamage:DB$DealDamage | Cost$ 0 | Defined$ TargetedController | NumDmg$ 3
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
SVar:IsDestroyed:Count$ThisTurnEntered_Graveyard_from_Battlefield_Artifact.IsRemembered
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/werewolf_ransacker.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/werewolf_ransacker.jpg
SetInfo:DKA|Uncommon|http://magiccards.info/scans/en/dka/81b.jpg
Oracle:Whenever this creature transforms into Werewolf Ransacker, you may destroy target artifact. If that artifact is put into a graveyard this way, Werewolf Ransacker deals 3 damage to that artifact's controller.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Werewolf Ransacker.
End

View File

@@ -23,9 +23,9 @@ K:Protection from red
R:Event$ DamageDone | ValidSource$ Card.Red | ValidTarget$ Player | ReplaceWith$ DmgPlus1 | IsCombat$ False | Description$ If a red source would deal damage to a player, it deals that much damage plus 1 to that player instead.
R:Event$ DamageDone | ValidSource$ Card.Red | ValidTarget$ Player | ReplaceWith$ DmgPlus1Combat | IsCombat$ True | Secondary$ True | Description$ If a red source would deal damage to a player, it deals that much damage plus 1 to that player instead.
SVar:DmgPlus1:AB$DealDamage | Cost$ 0 | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X
SVar:DmgPlus1:AB$DealDamage | Cost$ 0 | CombatDamage$ True | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X
SVar:DmgPlus1Combat:AB$DealDamage | Cost$ 0 | CombatDamage$ True | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X
SVar:X:ReplaceCount$DamageAmount/Plus.1
SVar:Picture1:http://www.wizards.com/global/images/magic/general/tok_tok_volcano_born.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/tok_tok_volcano_born.jpg
SetInfo:CHK|Rare|http://magiccards.info/scans/en/chk/313.jpg
Oracle:Protection from red\nIf a red source would deal damage to a player, it deals that much damage plus 1 to that player instead.
End

View File

@@ -23,7 +23,7 @@ PT:5/5
K:Flying
S:Mode$ Continuous | Affected$ Creature.Vampire+Other+YouCtrl | AddPower$ 2 | AddToughness$ 2 | Description$ Other Vampire creatures you control get +2/+2.
A:AB$Token | Cost$ T | TokenAmount$ 1 | TokenOwner$ You | TokenName$ Vampire | TokenColors$ Black | TokenImage$ B 2 2 Vampire | TokenTypes$ Creature,Vampire | TokenPower$ 2 | TokenToughness$ 2 | TokenKeywords$ Flying | SpellDescription$ Put a 2/2 black Vampire creature token with flying onto the battlefield.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/lord_of_lineage.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/lord_of_lineage.jpg
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/90b.jpg
Oracle:Other Vampire creatures you control get +2/+2.\n{T}: Put a 2/2 black Vampire creature token with flying onto the battlefield.

View File

@@ -1,8 +1,11 @@
Name:Body Double
ManaCost:4 U
Types:Creature Shapeshifter
Text:You may have CARDNAME enter the battlefield as a copy of any creature card in a graveyard.
Text:no text
PT:0/0
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any creature card in a graveyard.
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other | ChoiceZone$ Graveyard | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/body_double.jpg

View File

@@ -5,14 +5,13 @@ Text:no text
PT:2/1
A:AB$ChangeZone | Cost$ T | Origin$ Hand | Destination$ Battlefield | ChangeType$ Land | ChangeNum$ 1 | OptionalDecider$ You | SubAbility$ DBFlip | SpellDescription$ You may put a land card from your hand onto the battlefield. If you control ten or more lands, flip CARDNAME.
SVar:DBFlip:DB$SetState | Defined$ Self | ConditionCheckSVar$ X | ConditionSVarCompare$ GE10 | Mode$ Flip
SVar:X:Count$Valid Land.YouCtrl
AlternateMode:Flip
SVar:Picture:http://www.wizards.com/global/images/magic/general/budoka_gardener.jpg
SetInfo:CHK|Rare|http://magiccards.info/scans/en/chk/202.jpg
Oracle:{T}: You may put a land card from your hand onto the battlefield. If you control ten or more lands, flip Budoka Gardener.
# Shared
SVar:X:Count$Valid Land.YouCtrl
ALTERNATE
Name:Dokai, Weaver of Life
@@ -22,7 +21,8 @@ Types:Legendary Creature Human Monk
Text:no text
PT:3/3
A:AB$Token | Cost$ 4 G G T | TokenAmount$ 1 | TokenName$ Elemental | TokenColors$ Green | TokenTypes$ Creature,Elemental | TokenPower$ X | TokenToughness$ X | TokenOwner$ You | SpellDescription$ Put an X/X green Elemental creature token onto the battlefield, where X is the number of lands you control.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/dokai_weaver_of_life.jpg
SVar:X:Count$Valid Land.YouCtrl
SVar:Picture:http://www.wizards.com/global/images/magic/general/dokai_weaver_of_life.jpg
SetInfo:CHK|Rare|http://magiccards.info/scans/en/chk/315.jpg
Oracle:{4}{G}{G}, {T}: Put an X/X green Elemental creature token onto the battlefield, where X is the number of lands you control.
End

View File

@@ -22,7 +22,7 @@ Text:no text
PT:4/3
K:Trample
A:AB$ Pump | Cost$ SubCounter<1/KI> | Tgt$ TgtC | NumAtt$ 2 | NumDef$ 2 | SpellDescription$ Target creature gets +2/+2 until end of turn.
SVar:Picture1:http://www.marc-fowler-design.com/cardforge/flippedcards/BOK/ichiga_who_topples_oaks.jpg
SVar:Picture:http://www.marc-fowler-design.com/cardforge/flippedcards/BOK/ichiga_who_topples_oaks.jpg
# This link may be a temporary solution and could change in the near future.
Oracle:Trample\nRemove a ki counter from Ichiga, Who Topples Oaks: Target creature gets +2/+2 until end of turn.
SetInfo:BOK|Uncommon|http://magiccards.info/scans/en/bok/170.jpg

View File

@@ -20,7 +20,7 @@ Text:no text
PT:3/4
K:Double Strike
K:Bushido 2
SVar:Picture1:http://www.wizards.com/global/images/magic/general/kenzo_the_hardhearted.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/kenzo_the_hardhearted.jpg
SetInfo:CHK|Uncommon|http://magiccards.info/scans/en/chk/307.jpg
Oracle:Double strike; bushido 2 (When this blocks or becomes blocked, it gets +2/+2 until end of turn.)

View File

@@ -21,7 +21,7 @@ Types:Legendary Creature Spirit
Text:no text
PT:3/4
A:AB$ Counter | Cost$ SubCounter<1/KI> | TargetType$ Spell | ValidTgts$ Card | TgtPrompt$ Select target spell. | Destination$ Graveyard | UnlessCost$ 2 | UnlessPayer$ TargetedController | SpellDescription$ Counter target spell unless its controller pays 2.
SVar:Picture1:http://www.marc-fowler-design.com/cardforge/flippedcards/BOK/jaraku_the_interloper.jpg
SVar:Picture:http://www.marc-fowler-design.com/cardforge/flippedcards/BOK/jaraku_the_interloper.jpg
# This link may be a temporary solution and could change in the near future.
SetInfo:BOK|Uncommon|http://magiccards.info/scans/en/bok/167.jpg
Oracle:Remove a ki counter from Jaraku the Interloper: Counter target spell unless its controller pays {2}.

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ W T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/calming_licid.jpg
@@ -26,5 +24,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ HIDDEN CARDNAME can't attack. | Description$ Enchanted creature can't attack.
A:AB$ SetState | Cost$ W | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/calming_licid.jpg
SetInfo:STH|Uncommon|http://magiccards.info/scans/en/sh/102.jpg
Oracle:{W}, {T}: Calming Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect.\nEnchanted creature can't attack.
End

View File

@@ -0,0 +1,15 @@
Name:Cemetery Puca
ManaCost:1 UB UB
Types:Creature Shapeshifter
Text:no text
PT:1/2
# Make Svars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ CemeteryPucaCopy | TriggerDescription$ Whenever a creature dies, you may pay 1. If you do, CARDNAME becomes a copy of that creature and gains this ability.
SVar:CemeteryPucaCopy:AB$ Clone | Cost$ 1 | Defined$ TriggeredCardLKICopy | AddTriggers$ CemeteryPucaDiesTrig | AddSVars$ CemeteryPucaCopy,CemeteryPucaDiesTrig
SVar:CemeteryPucaDiesTrig:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ CemeteryPucaCopy | TriggerDescription$ Whenever a creature dies, you may pay 1. If you do, CARDNAME becomes a copy of that creature and gains this ability.
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/cemetery_puca.jpg
Oracle:Whenever a creature dies, you may pay {1}. If you do, Cemetery Puca becomes a copy of that creature and gains this ability.
SetInfo:SHM|Rare|http://magiccards.info/scans/en/shm/158.jpg
End

View File

@@ -18,7 +18,7 @@ ManaCost:no cost
Types:Artifact
Text:no text
A:AB$ LoseLife | Cost$ T | ValidTgts$ Player | TgtPrompt$Target a player to lose 5 life | LifeAmount$ 5 | SpellDescription$ Target player loses 5 life.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/chalice_of_death.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/chalice_of_death.jpg
SetInfo:DKA|Uncommon|http://magiccards.info/scans/en/dka/146b.jpg
Oracle:{T}: Target player loses 5 life.
End

View File

@@ -17,7 +17,7 @@ Colors:black
Types:Creature Vampire
Text:no text
PT:4/4
SVar:Picture1:http://www.wizards.com/global/images/magic/general/markovs_servant.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/markovs_servant.jpg
SetInfo:DKA|Common|http://magiccards.info/scans/en/dka/55b.jpg
Oracle:
End

View File

@@ -25,7 +25,7 @@ PT:5/1
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTap | IsPresent$ Card.notAttackedThisTurn+Self | TriggerDescription$ At the beginning of your end step, if CARDNAME didn't attack this turn, tap CARDNAME, then transform it.
SVar:TrigTap:AB$ Tap | Cost$ 0 | Defined$ Self | SubAbility$ DBTransform2
SVar:DBTransform2:DB$ SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture1:http://www.wizards.com/global/images/magic/general/homicidal_brute.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/homicidal_brute.jpg
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/47b.jpg
Oracle:At the beginning of your end step, if Homicidal Brute didn't attack this turn, tap Homicidal Brute, then transform it.
End

View File

@@ -20,7 +20,7 @@ Text:no text
PT:3/3
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ At the beginning of your end step, you lose 1 life.
SVar:TrigLoseLife:AB$LoseLife | Cost$ 0 | Defined$ You | LifeAmount$ 1
SVar:Picture1:http://www.wizards.com/global/images/magic/general/unholy_fiend.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/unholy_fiend.jpg
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/8b.jpg
Oracle:Creature - Horror\n3/3\nAt the beginning of your end step, you lose 1 life.

View File

@@ -1,10 +1,11 @@
Name:Clone
ManaCost:3 U
Types:Creature Shapeshifter
Text:You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield.
Text:no text
PT:0/0
SVar:NeedsToPlayVar:Y GE1
SVar:Y:Count$Valid Creature
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield.
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/clone.jpg
SetInfo:LEA|Uncommon|http://magiccards.info/scans/en/al/52.jpg

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ R T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/convulsing_licid.jpg
@@ -26,5 +24,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ HIDDEN CARDNAME can't block. | Description$ Enchanted creature can't block.
A:AB$ SetState | Cost$ R | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/convulsing_licid.jpg
SetInfo:STH|Uncommon|http://magiccards.info/scans/en/sh/77.jpg
Oracle:{R}, {T}: Convulsing Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect.\nEnchanted creature can't attack.
End

View File

@@ -1,7 +1,10 @@
Name:Copy Artifact
ManaCost:1 U
Types:Enchantment
Text:You may have CARDNAME enter the battlefield as a copy of any artifact on the battlefield, except it's an enchantment in addition to its other types.
Text:no text
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseArtifact | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any artifact on the battlefield, except it's an enchantment in addition to its other types.
SVar:ChooseArtifact:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Artifact.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | AddTypes$ Enchantment
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/copy_artifact.jpg
SetInfo:LEA|Rare|http://magiccards.info/scans/en/al/54.jpg

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ B T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/corrupting_licid.jpg
@@ -26,5 +24,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Fear | Description$ Enchanted creature has fear. (It can't be blocked except by artifact creatures and/or black creatures.)
A:AB$ SetState | Cost$ B | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/corrupting_licid.jpg
SetInfo:STH|Uncommon|http://magiccards.info/scans/en/sh/4.jpg
Oracle:{B}, {T}: Corrupting Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect.\nEnchanted creature has fear. (It can't be blocked except by artifact creatures and/or black creatures.)
End

View File

@@ -3,7 +3,10 @@ ManaCost:1 U U
Types:Creature Shapeshifter
Text:no text
PT:2/2
K:At the beginning of your upkeep, you may have this creature become a copy of another target creature. If you do, this creature gains this ability.
# Make Svars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ CryptoplasmCopy | TriggerDescription$ At the beginning of your upkeep, you may have CARDNAME become a copy of another target creature. If you do, CARDNAME gains this ability.
SVar:CryptoplasmCopy:AB$ Clone | Cost$ 0 | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature to copy. | Optional$ True | AddTriggers$ CryptoplasmUpkeepTrig | AddSVars$ CryptoplasmCopy,CryptoplasmUpkeepTrig
SVar:CryptoplasmUpkeepTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ CryptoplasmCopy | TriggerDescription$ At the beginning of your upkeep, you may have CARDNAME become a copy of another target creature. If you do, CARDNAME gains this ability.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/cryptoplasm.jpg
SetInfo:MBS|Rare|http://magiccards.info/scans/en/mbs/23.jpg

View File

@@ -21,7 +21,7 @@ Types:Legendary Creature Spirit
Text:no text
PT:5/2
A:AB$ GainControl | Cost$ SubCounter<1/KI> | Tgt$ TgtC | SpellDescription$ Gain control of target creature until end of turn.
SVar:Picture1:www.marc-fowler-design.com/cardforge/flippedcards/BOK/azamuki_treachery_incarnate.jpg
SVar:Picture:www.marc-fowler-design.com/cardforge/flippedcards/BOK/azamuki_treachery_incarnate.jpg
# This link may be a temporary solution and could change in the near future.
SetInfo:BOK|Uncommon|http://magiccards.info/scans/en/bok/169.jpg
Oracle:Remove a ki counter from Azamuki, Treachery Incarnate: Gain control of target creature until end of turn.

View File

@@ -5,14 +5,12 @@ Text:no text
PT:2/2
A:AB$DealDamage | Cost$ T | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with flying. | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature with flying.
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/daybreak_ranger.jpg
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/176a.jpg
Oracle:{T}: Daybreak Ranger deals 2 damage to target creature with flying.\nAt the beginning of each upkeep, if no spells were cast last turn, transform Daybreak Ranger.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Nightfall Predator
@@ -23,7 +21,8 @@ Text:no text
PT:4/4
A:AB$ Fight | Cost$ R T | Defined$ Self | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ CARDNAME fights target creature. (Each deals damage equal to its power to the other.)
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/nightfall_predator.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/nightfall_predator.jpg
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/176b.jpg
Oracle:{R}, {T}: Nightfall Predator fights target creature. (Each deals damage equal to its power to the other.)\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Nightfall Predator.
End

View File

@@ -21,7 +21,7 @@ Types:Creature Human Insect
Text:no text
PT:3/2
K:Flying
SVar:Picture1:http://www.wizards.com/global/images/magic/general/insectile_aberration.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/insectile_aberration.jpg
Oracle:Flying
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/51b.jpg
End

View File

@@ -0,0 +1,15 @@
Name:Dimir Doppelganger
ManaCost:1 U B
Types:Creature Shapeshifter
Text:no text
PT:0/2
# Make Svars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone
A:AB$ ChangeZone | Cost$ 1 U B | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Creature | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ DDCopy | SpellDescription$ Exile target creature card from a graveyard. CARDNAME becomes a copy of that card and gains this ability.
SVar:DDCopy:DB$ Clone | Cost$ 0 | Defined$ Remembered | AddAbilities$ DDAbility | AddSVars$ DDAbility,DDCopy
SVar:DDAbility:AB$ ChangeZone | Cost$ 1 U B | Origin$ Graveyard | Destination$ Exile | ValidTgts$ Creature | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ DDCopy | SpellDescription$ Exile target creature card from a graveyard. CARDNAME becomes a copy of that card and gains this ability.
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/dimir_doppelganger.jpg
Oracle:{1}{U}{B}: Exile target creature card from a graveyard. Dimir Doppelganger becomes a copy of that card and gains this ability.
SetInfo:RAV|Rare|http://magiccards.info/scans/en/rav/202.jpg
End

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ 1 U U T | Defined$ Self | NewState$ Alternate | SubAbilit
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ GainControl
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/dominating_licid.jpg
@@ -25,5 +23,9 @@ Text:You control enchanted creature.
K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ GainControl
A:AB$ SetState | Cost$ U | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/dominating_licid.jpg
SetInfo:EXO|Rare|http://magiccards.info/scans/en/ex/30.jpg
Oracle:{1}{U}{U}, {T}: Dominating Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay to end this effect.\nYou control enchanted creature.
End

View File

@@ -22,7 +22,7 @@ K:Flying
K:Trample
K:Intimidate
# Whenever a player loses the game, put thirteen +1/+1 counters on Withengar Unbound. (not implemented)
SVar:Picture1:http://www.wizards.com/global/images/magic/general/withengar_unbound.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/withengar_unbound.jpg
SetInfo:DKA|Mythic|http://magiccards.info/scans/en/dka/147b.jpg
Oracle:Flying, intimidate, trample\nWhenever a player loses the game, put thirteen +1/+1 counters on Withengar Unbound.
End

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ R T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/enraging_licid.jpg
@@ -26,5 +24,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Haste | Description$ Enchanted creature has haste.
A:AB$ SetState | Cost$ R | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/enraging_licid.jpg
SetInfo:TMP|Uncommon|http://magiccards.info/scans/en/tp/171.jpg
Oracle:{R}, {T}: Enraging Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {R} to end this effect.\nEnchanted creature has haste.
End

View File

@@ -22,7 +22,7 @@ Text:no text
T:Mode$ SpellCast | ValidActivatingPlayer$ Opponent | CheckSVar$ NumOppCast | SVarCompare$ EQ1 | Execute$ TrigCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever an opponent casts a spell for the first time in a turn, counter that spell.
SVar:TrigCounter:AB$Counter | Cost$ 0 | Defined$ TriggeredSpellAbility | Destination$ Graveyard
SVar:NumOppCast:Count$ThisTurnCast_Card.YouDontCtrl
SVar:Picture1:http://www.marc-fowler-design.com/cardforge/flippedcards/SOK/erayos_essence.jpg
SVar:Picture:http://www.marc-fowler-design.com/cardforge/flippedcards/SOK/erayos_essence.jpg
# This link may be a temporary solution and could change in the near future.
SetInfo:SOK|Rare|http://magiccards.info/scans/en/sok/167.jpg
Oracle:Whenever an opponent casts a spell for the first time in a turn, counter that spell.

View File

@@ -1,8 +1,13 @@
Name:Evil Twin
ManaCost:2 U B
Types:Creature Shapeshifter
Text:You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield except it gains "U B, T: Destroy target creature with the same name as this creature."
Text:no text
PT:0/0
# Make Svars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield except it gains "U B, T: Destroy target creature with the same name as this creature."
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | AddAbilities$ EvilTwin
SVar:EvilTwin:AB$Destroy | Cost$ U B T | ValidTgts$ Creature.sameName | TgtPrompt$ Select target creature with the same name. | SpellDescription$ Destroy target creature with the same name as this creature.
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/evil_twin.jpg
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/212.jpg

View File

@@ -21,7 +21,7 @@ Types:Legendary Creature Spirit
Text:no text
PT:3/4
A:AB$ Pump | Cost$ SubCounter<1/KI> | KW$ HIDDEN Prevent all damage that would be dealt to CARDNAME. | Tgt$ TgtC | SpellDescription$ Prevent all damage that would be dealt to target creature this turn.
SVar:Picture1:http://www.marc-fowler-design.com/cardforge/flippedcards/BOK/kaiso_memory_of_loyalty.jpg
SVar:Picture:http://www.marc-fowler-design.com/cardforge/flippedcards/BOK/kaiso_memory_of_loyalty.jpg
# This link may be a temporary solution and could change in the near future.
SetInfo:BOK|Uncommon|http://magiccards.info/scans/en/bok/166.jpg
Oracle:Remove a ki counter from Kaiso, Memory of Loyalty: Prevent all damage that would be dealt to target creature this turn.

View File

@@ -27,7 +27,7 @@ A:AB$ Sacrifice | Cost$ SubCounter<1/LOYALTY> | Defined$ You | SacValid$ Creatur
A:AB$ PumpAll | Cost$ SubCounter<3/LOYALTY> | ValidCards$ Creature.YouCtrl | KW$ Trample | NumAtt$ X | NumDef$ X | Planeswalker$ True | Ultimate$ True | References$ X | SpellDescription$ Creatures you control gain trample and get +X/+X until end of turn, where X is the number of creature cards in your graveyard.
SVar:X:Count$TypeInYourYard.Creature
SVar:DBSearch:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Creature | ChangeNum$ 1
SVar:Picture1:http://www.wizards.com/global/images/magic/general/garruk_the_veil_cursed.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/garruk_the_veil_cursed.jpg
SetInfo:ISD|Mythic|http://magiccards.info/scans/en/isd/181b.jpg
Oracle:[+1] Put a 1/1 black Wolf creature token with deathtouch onto the battlefield.\n[-1] Sacrifice a creature. If you do, search your library for a creature card, reveal it, put it into your hand, then shuffle your library.\n[-3] Creatures you control gain trample and get +X/+X until end of turn, where X is the number of creature cards in your graveyard.
End

View File

@@ -4,14 +4,12 @@ Types:Creature Human Werewolf
Text:no text
PT:2/2
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/gatstaf_shepherd.jpg
AlternateMode:DoubleFaced
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/182a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Gatstaf Shepherd.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Gatstaf Howler
@@ -22,7 +20,8 @@ Text:no text
PT:3/3
K:Intimidate
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/gatstaf_howler.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/gatstaf_howler.jpg
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/182b.jpg
Oracle:Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.)\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Gatstaf Howler.
End

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ U T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/gliding_licid.jpg
@@ -26,5 +24,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Flying | Description$ Enchanted creature has flying.
A:AB$ SetState | Cost$ U | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/gliding_licid.jpg
SetInfo:STH|Uncommon|http://magiccards.info/scans/en/sh/31.jpg
Oracle:{U}, {T}: Glidinging Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect.\nEnchanted creature has flying.
End

View File

@@ -4,15 +4,13 @@ Types:Creature Human Werewolf
Text:no text
PT:4/4
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Rarity:Common
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/grizzled_outcasts.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/185a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Grizzled Outcasts.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Krallenhorde Wantons
@@ -22,8 +20,9 @@ Types:Creature Werewolf
Text:no text
PT:7/7
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Rarity:Common
SVar:Picture1:http://www.wizards.com/global/images/magic/general/krallenhorde_wantons.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/krallenhorde_wantons.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/185b.jpg
Oracle:At the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Wantons.
End

View File

@@ -5,14 +5,12 @@ Text:no text
PT:1/5
K:Defender
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/hanweir_watchkeep.jpg
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/145a.jpg
Oracle:Defender\nAt the beginning of each upkeep, if no spells were cast last turn, transform Hanweir Watchkeep.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Bane of Hanweir
@@ -23,7 +21,8 @@ Text:no text
PT:5/5
K:CARDNAME attacks each turn if able.
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/bane_of_hanweir.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/bane_of_hanweir.jpg
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/145b.jpg
Oracle:Bane of Hanweir attacks each turn if able.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Bane of Hanweir.
End

View File

@@ -4,14 +4,12 @@ Types:Creature Human Werewolf
Text:no text
PT:2/1
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/hinterland_hermit.jpg
AlternateMode:DoubleFaced
SetInfo:DKA|Common|http://magiccards.info/scans/en/dka/94a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Hinterland Hermit.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Hinterland Scourge
@@ -22,7 +20,8 @@ Text:no text
PT:3/2
K:CARDNAME must be blocked if able.
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/hinterland_scourge.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/hinterland_scourge.jpg
SetInfo:DKA|Common|http://magiccards.info/scans/en/dka/94b.jpg
Oracle:Hinterland Scourge must be blocked if able.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Hinterland Scourge.
End

View File

@@ -21,7 +21,7 @@ Types:Legendary Creature Spirit
Text:no text
PT:4/4
A:AB$ Pump | Cost$ SubCounter<1/KI> | KW$ Fear | Tgt$ TgtC | SpellDescription$ Target creature gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
SVar:Picture1:http://www.marc-fowler-design.com/cardforge/flippedcards/BOK/scarmaker.jpg
SVar:Picture:http://www.marc-fowler-design.com/cardforge/flippedcards/BOK/scarmaker.jpg
# This link may be a temporary solution and could change in the near future.
SetInfo:BOK|Uncommon|http://magiccards.info/scans/en/bok/168.jpg
Oracle:Remove a ki counter from Scarmaker: Target creature gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)

View File

@@ -21,7 +21,7 @@ Types:Legendary Enchantment
Text:no text
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Flying | AddAbility$ ABPump | Description$ Creatures you control get +2/+2 and have flying and "R: This creature gets +1/+0 until end of turn."
SVar:ABPump:AB$Pump | Cost$ R | Defined$ Self | NumAtt$ 1 | SpellDescription$ This creature gets +1/+0 until end of turn.
SVar:Picture1:http://www.marc-fowler-design.com/cardforge/flippedcards/SOK/homuras_essence.jpg
SVar:Picture:http://www.marc-fowler-design.com/cardforge/flippedcards/SOK/homuras_essence.jpg
# This link may be a temporary solution and could change in the near future.
SetInfo:SOK|Rare|http://magiccards.info/scans/en/sok/169.jpg
Oracle:Creatures you control get +2/+2 and have flying and "{R}: This creature gets +1/+0 until end of turn."

View File

@@ -8,14 +8,12 @@ T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TokenAndLife | Secondary$
SVar:TokenAndLife:AB$ Token | Cost$ 0 | TokenOwner$ You | TokenName$ Wolf | TokenColors$ Green | TokenTypes$ Creature,Wolf | TokenPower$ 2 | TokenToughness$ 2 | TokenAmount$ 1 | SubAbility$ Life
SVar:Life:DB$ GainLife | Defined$ You | LifeAmount$ 2
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/huntmaster_of_the_fells.jpg
SetInfo:DKA|Mythic|http://magiccards.info/scans/en/dka/140a.jpg
Oracle:Whenever this creature enters the battlefield or transforms into Huntmaster of the Fells, put a 2/2 green Wolf creature token onto the battlefield and you gain 2 life.\nAt the beginning of each upkeep, if no spells were cast last turn, transform Huntmaster of the Fells.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Ravager of the Fells
@@ -29,7 +27,8 @@ T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ DamageAndMoreDamage | Trig
SVar:DamageAndMoreDamage:AB$ DealDamage | Cost$ 0 | ValidTgts$ Opponent | NumDmg$ 2 | SubAbility$ MoreDamage
SVar:MoreDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | NumDmg$ 2 | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target creature opponent controls
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/ravager_of_the_fells.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/ravager_of_the_fells.jpg
SetInfo:DKA|Mythic|http://magiccards.info/scans/en/dka/140b.jpg
Oracle:Trample\nWhenever this creature transforms into Ravager of the Fells, it deals 2 damage to target opponent and 2 damage to up to one target creature that player controls.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Ravager of the Fells.
End

View File

@@ -22,7 +22,7 @@ Types:Legendary Creature Ogre Shaman
Text:no text
PT:4/4
A:AB$DealDamage | Cost$ T | ValidTgts$ Creature.wasDealtDamageThisTurn | TgtPrompt$ Select target creature that was dealt damage this turn. | NumDmg$ 4 | SpellDescription$ CARDNAME deals 4 damage to target creature that was dealt damage this turn.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/goka_the_unjust.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/goka_the_unjust.jpg
SetInfo:CHK|Uncommon|http://magiccards.info/scans/en/chk/314.jpg
Oracle:{T}: Goka the Unjust deals 4 damage to target creature that was dealt damage this turn.

View File

@@ -5,14 +5,12 @@ Text:no text
PT:2/3
S:Mode$ Continuous | Affected$ Creature.attacking+YouCtrl | AddPower$ 1 | Description$ Attacking creatures you control get +1/+0.
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/instigator_gang.jpg
AlternateMode:DoubleFaced
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/149a.jpg
Oracle:Attacking creatures you control get +1/+0.\nAt the beginning of each upkeep, if no spells were cast last turn, transform Instigator Gang.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Wildblood Pack
@@ -24,7 +22,8 @@ PT:5/5
K:Trample
S:Mode$ Continuous | Affected$ Creature.attacking+YouCtrl | AddPower$ 3 | Description$ Attacking creatures you control get +3/+0.
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/wildblood_pack.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/wildblood_pack.jpg
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/149b.jpg
Oracle:Attacking creatures you control get +3/+0.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Wildblood Pack.
End

View File

@@ -21,7 +21,7 @@ Text:no text
PT:2/3
A:AB$Draw | Cost$ 3 U U T | ValidTgts$ Player | NumCards$ X | References$ X | SpellDescription$ Target player draws X cards, where X is the number of cards in your hand.
SVar:X:Count$InYourHand
SVar:Picture1:http://www.wizards.com/global/images/magic/general/tomoya_the_revealer.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/tomoya_the_revealer.jpg
SetInfo:CHK|Rare|http://magiccards.info/scans/en/chk/309.jpg
Oracle:{3}{U}{U}, {T}: Target player draws X cards, where X is the number of cards in your hand.
End

View File

@@ -1,8 +1,11 @@
Name:Jwari Shapeshifter
ManaCost:1 U
Types:Creature Shapeshifter Ally
Text:You may have CARDNAME enter the battlefield as a copy of any Ally creature on the battlefield.
Text:no text
PT:0/0
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any Ally creature on the battlefield.
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Ally+Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered
SVar:RemRandomDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/jwari_shapeshifter.jpg

View File

@@ -5,14 +5,12 @@ Text:no text
PT:2/2
K:First Strike
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/kruin_outlaw.jpg
AlternateMode:DoubleFaced
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/152a.jpg
Oracle:First Strike\nAt the beginning of each upkeep, if no spells were cast last turn, transform Kruin Outlaw.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Terror of Kruin Pass
@@ -24,7 +22,8 @@ PT:3/3
K:Double Strike
S:Mode$ Continuous | Affected$ Werewolf.YouCtrl | AddHiddenKeyword$ HIDDEN CARDNAME can't be blocked except by two or more creatures. | Description$ Each Werewolf you control can't be blocked except by two or more creatures.
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/terror_of_kruin_pass.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/terror_of_kruin_pass.jpg
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/152b.jpg
Oracle:Double Strike\nEach Werewolf you control can't be blocked except by two or more creatures.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Terror of Kruin Pass.
End

View File

@@ -22,7 +22,7 @@ Text:no text
T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player sacrifices a creature.
SVar:TrigSac:AB$Sacrifice | Cost$ 0 | Defined$ TriggeredPlayer | SacValid$ Creature
SVar:Rarity:Rare
SVar:Picture1:http://www.marc-fowler-design.com/cardforge/flippedcards/SOK/kuons_essence.jpg
SVar:Picture:http://www.marc-fowler-design.com/cardforge/flippedcards/SOK/kuons_essence.jpg
# This link may be a temporary solution and could change in the near future.
SetInfo:SOK|Rare|http://magiccards.info/scans/en/sok/168.jpg
Oracle:At the beginning of each player's upkeep, that player sacrifices a creature.

View File

@@ -4,14 +4,12 @@ Types:Creature Human Werewolf
Text:no text
PT:1/2
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/lambholt_elder.jpg
SetInfo:DKA|Uncommon|http://magiccards.info/scans/en/dka/122a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Lambholt Elder.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Silverpelt Werewolf
@@ -23,7 +21,8 @@ PT:4/5
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, draw a card.
SVar:TrigDraw:AB$Draw | Cost$ 0 | Defined$ You | NumCards$ 1
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/silverpelt_werewolf.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/silverpelt_werewolf.jpg
SetInfo:DKA|Uncommon|http://magiccards.info/scans/en/dka/122b.jpg
Oracle:Whenever Silverpelt Werewolf deals combat damage to a player, draw a card.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Silverpelt Werewolf.
End

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ B T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/leeching_licid.jpg
@@ -27,5 +25,9 @@ A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ EnchantedController | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of the upkeep of enchanted creature's controller, CARDNAME deals 1 damage to that player.
SVar:TrigDamage:AB$DealDamage | Cost$ 0 | Defined$ EnchantedController | NumDmg$ 1
A:AB$ SetState | Cost$ B | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/leeching_licid.jpg
SetInfo:TMP|Uncommon|http://magiccards.info/scans/en/tp/35.jpg
Oracle:{B}, {T}: Leeching Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {B} to end this effect.\nAt the beginning of the upkeep of enchanted creature's controller, Leeching Licid deals 1 damage to that player.
End

View File

@@ -22,7 +22,7 @@ Types:Creature Zombie Soldier
Text:no text
PT:2/1
K:CARDNAME can't block.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/unhallowed_cathar.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/unhallowed_cathar.jpg
SetInfo:DKA|Common|http://magiccards.info/scans/en/dka/13b.jpg
Oracle:Unhallowed Cathar can't block.
End

View File

@@ -5,14 +5,12 @@ Text:no text
PT:1/1
S:Mode$ Continuous | Affected$ Creature.Human+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Human creatures you control get +1/+1.
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/mayor_of_avabruck.jpg
AlternateMode:DoubleFaced
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/193a.jpg
Oracle:Other Human creatures you control get +1/+1.\nAt the beginning of each upkeep, if no spells were cast last turn, transform Mayor of Avabruck.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Howlpack Alpha
@@ -24,8 +22,9 @@ PT:3/3
S:Mode$ Continuous | Affected$ Creature.Werewolf+Other+YouCtrl,Creature.Wolf+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Werewolf and Wolf creatures you control get +1/+1.
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, put a 2/2 green Wolf creature token onto the battlefield.
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:TrigToken:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Wolf | TokenColors$ Green | TokenTypes$ Creature,Wolf | TokenOwner$ You | TokenPower$ 2 | TokenToughness$ 2
SVar:Picture1:http://www.wizards.com/global/images/magic/general/howlpack_alpha.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/howlpack_alpha.jpg
SetInfo:ISD|Rare|http://magiccards.info/scans/en/isd/193b.jpg
Oracle:Other Werewolf and Wolf creatures you control get +1/+1.\nAt the beginning of your end step, put a 2/2 green Wolf creature token onto the battlefield.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Howlpack Alpha.
End

View File

@@ -4,14 +4,12 @@ Types:Creature Human Werewolf Shaman
Text:no text
PT:3/2
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/mondronen_shaman.jpg
SetInfo:DKA|Rare|http://magiccards.info/scans/en/dka/98a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Mondronen Shaman.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Tovolar's Magehunter
@@ -23,7 +21,8 @@ PT:5/5
T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Opponent | TriggerZones$ Battlefield | Execute$ TrigDealDamage | TriggerDescription$ Whenever an opponent casts a spell, CARDNAME deals 2 damage to that player.
SVar:TrigDealDamage:AB$DealDamage | Cost$ 0 | Defined$ TriggeredPlayer | NumDmg$ 2
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/tovolars_magehunter.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/tovolars_magehunter.jpg
SetInfo:DKA|Rare|http://magiccards.info/scans/en/dka/98b.jpg
Oracle:Whenever an opponent casts a spell, Tovolar's Magehunter deals 2 damage to that player.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Tovolar's Magehunter.
End

View File

@@ -22,7 +22,7 @@ Types:Legendary Creature Rat Wizard
Text:no text
PT:4/2
A:AB$ ChangeZone | Cost$ 4 B | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature. | SpellDescription$ Put target creature card from a graveyard onto the battlefield under your control.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/nighteyes_the_desecrator.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/nighteyes_the_desecrator.jpg
SetInfo:CHK|Uncommon|http://magiccards.info/scans/en/chk/129b.jpg
#SetInfo:COM|Uncommon|http://magiccards.info/scans/en/cmd/92b.jpg
Oracle:{4}{B}: Put target creature card from a graveyard onto the battlefield under your control.

View File

@@ -24,7 +24,7 @@ SVar:TrigLoseLife:AB$LoseLife | Cost$ 0 | Defined$ TriggeredPlayer | LifeAmount$
SVar:X:SVar$Z/Minus.Y
SVar:Y:Count$InOppHand
SVar:Z:Number$3
SVar:Picture1:http://www.wizards.com/global/images/magic/general/stabwhisker_the_odious.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/stabwhisker_the_odious.jpg
SetInfo:CHK|Rare|http://magiccards.info/scans/en/chk/131b.jpg
Oracle:At the beginning of each opponent's upkeep, that player loses 1 life for each card fewer than three in his or her hand.
End

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ G T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/nurturing_licid.jpg
@@ -26,5 +24,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
A:AB$ Regenerate | Cost$ G | Defined$ Enchanted | SpellDescription$ Regenerate enchanted creature.
A:AB$ SetState | Cost$ G | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/nurturing_licid.jpg
SetInfo:TMP|Uncommon|http://magiccards.info/scans/en/tp/136.jpg
Oracle:{G}, {T}: Nurturing Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {G} to end this effect./n{G}: Regenerate enchanted creature.
End

View File

@@ -21,7 +21,7 @@ Text:no text
PT:3/3
A:AB$Pump | Cost$ G Sac<1/Creature> | Tgt$ TgtC | NumAtt$ 3 | NumDef$ 3 | SpellDescription$ Target creature gets +3/+3 until end of turn.
SVar:Rarity:Rare
SVar:Picture1:http://www.wizards.com/global/images/magic/general/shidako_broodmistress.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/shidako_broodmistress.jpg
SetInfo:CHK|Uncommon|http://magiccards.info/scans/en/chk/233b.jpg
Oracle:{G}, Sacrifice a creature: Target creature gets +3/+3 until end of turn.
End

View File

@@ -1,12 +1,16 @@
Name:Phantasmal Image
ManaCost:1 U
Types:Creature Illusion
Text:You may have Phantasmal Image enter the battlefield as a copy of any creature on the battlefield, except it's an Illusion in addition to its other types and it gains "When this creature becomes the target of a spell or ability, sacrifice it."
Text:no text
PT:0/0
SVar:NeedsToPlayVar:Y GE1
SVar:Y:Count$Valid Creature
# Make Svars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except it's an Illusion in addition to its other types and it gains "When this creature becomes the target of a spell or ability, sacrifice it."
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | AddTypes$ Illusion | AddTriggers$ PhantasmalImageTgtTrig | AddSVars$ PhantasmalImageSac
SVar:PhantasmalImageTgtTrig:Mode$ BecomesTarget | ValidTarget$ Card.Self | Execute$ PhantasmalImageSac | TriggerDescription$ When this creature becomes the target of a spell or ability, sacrifice it.
SVar:PhantasmalImageSac:AB$Sacrifice | Cost$ 0 | Defined$ Self
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/phantasmal_image.jpg
SetInfo:M12|Rare|http://magiccards.info/scans/en/m12/72.jpg
Oracle:You may have Phantasmal Image enter the battlefield as a copy of any creature on the battlefield, except it's an Illusion in addition to its other types and it gains "When this creature becomes the target of a spell or ability, sacrifice it."
End
End

View File

@@ -1,8 +1,11 @@
Name:Phyrexian Metamorph
ManaCost:3 PU
Types:Artifact Creature Shapeshifter
Text:You may have CARDNAME enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types.
Text:no text
PT:0/0
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types.
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other,Artifact.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | AddTypes$ Artifact
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_metamorph.jpg
SetInfo:NPH|Rare|http://magiccards.info/scans/en/nph/42.jpg

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ 1 W T | Defined$ Self | NewState$ Alternate | SubAbility$
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/quickening_licid.jpg
@@ -26,5 +24,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ First Strike | Description$ Enchanted creature has first strike.
A:AB$ SetState | Cost$ W | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/quickening_licid.jpg
SetInfo:TMP|Uncommon|http://magiccards.info/scans/en/tp/248.jpg
Oracle:{1}{W}, {T}: Quickening Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {W} to end this effect.\nEnchanted creature has first strike.
End

View File

@@ -1,8 +1,11 @@
Name:Quicksilver Gargantuan
ManaCost:5 U U
Types:Creature Shapeshifter
Text:You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield. It's still 7/7.
Text:no text
PT:7/7
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield. It's still 7/7.
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | SetPower$ 7 | SetToughness$ 7
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/quicksilver_gargantuan.jpg
SetInfo:SOM|Mythic|http://magiccards.info/scans/en/som/39.jpg

View File

@@ -25,7 +25,7 @@ SVar:DBTap:DB$ Tap | Cost$ 0 | Defined$ Self | ConditionCheckSVar$ X | Condition
SVar:DBDamage:DB$ DealDamage | Cost$ 0 | Defined$ You | NumDmg$ 9 | ConditionCheckSVar$ X | ConditionSVarCompare$ LT1 | SubAbility$ DBCleanup | References$ X
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
SVar:Picture1:http://www.wizards.com/global/images/magic/general/archdemon_of_greed.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/archdemon_of_greed.jpg
SetInfo:DKA|Rare|http://magiccards.info/scans/en/dka/71b.jpg
Oracle:At the beginning of your upkeep, sacrifice a Human. If you can't, tap Archdemon of Greed and it deals 9 damage to you.
End

View File

@@ -4,14 +4,12 @@ Types:Creature Human Rogue Werewolf
Text:no text
PT:1/1
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/reckless_waif.jpg
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/159a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Reckless Waif.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Merciless Predator
@@ -21,7 +19,8 @@ Types:Creature Werewolf
Text:no text
PT:3/2
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/merciless_predator.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/merciless_predator.jpg
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/159b.jpg
Oracle:At the beginning of each upkeep, if a player cast two or more spells last turn, transform Merciless Predator.
End

View File

@@ -18,7 +18,7 @@ Colors:white
Types:Legendary Enchantment
Text:no text
S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddHiddenKeyword$ HIDDEN Prevent all damage that would be dealt to CARDNAME. | Description$ Prevent all damage that would be dealt to creatures you control.
SVar:Picture1:http://www.marc-fowler-design.com/cardforge/flippedcards/SOK/rune_tails_essence.jpg
SVar:Picture:http://www.marc-fowler-design.com/cardforge/flippedcards/SOK/rune_tails_essence.jpg
# This link may be a temporary solution and could change in the near future.
SetInfo:SOK|Rare|http://magiccards.info/scans/en/sok/166.jpg
Oracle:Prevent all damage that would be dealt to creatures you control.

View File

@@ -1,8 +1,14 @@
Name:Sakashima the Impostor
ManaCost:2 U U
Types:Legendary Creature Human Rogue
Text:You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except its name is still CARDNAME, it's legendary in addition to its other types, and it gains "2 U U: Return CARDNAME to its owner's hand at the beginning of the next end step."
Text:no text
PT:3/1
# Make Svars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except its name is still CARDNAME, it's legendary in addition to its other types, and it gains "2 U U: Return CARDNAME to its owner's hand at the beginning of the next end step."
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | KeepName$ True | AddTypes$ Legendary | AddAbilities$ ReturnSakashima | AddSVars$ TrigReturnSak
SVar:ReturnSakashima:AB$ DelayedTrigger | Cost$ 2 U U | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturnSak | SpellDescription$ Return CARDNAME to it's owners hand at the beginning of the next end step.
SVar:TrigReturnSak:AB$ChangeZone | Cost$ 0 | Defined$ Self | Origin$ Battlefield | Destination$ Hand
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/sakashima_the_impostor.jpg
Oracle:You may have Sakashima the Impostor enter the battlefield as a copy of any creature on the battlefield, except its name is still Sakashima the Impostor, it's legendary in addition to its other types, and it gains "{2}{U}{U}: Return Sakashima the Impostor to its owner's hand at the beginning of the next end step."

View File

@@ -0,0 +1,14 @@
Name:Sakashima's Student
ManaCost:2 U U
Types:Creature Human Ninja
Text:no text
PT:0/0
A:AB$ ChangeZone | Cost$ 1 U Return<1/Creature.attacking+unblocked> | CostDesc$ Ninjutsu 1 U | ActivationZone$ Hand | Origin$ Hand | Ninjutsu$ True | Destination$ Battlefield | Defined$ Self | SpellDescription$ (1 U, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield, except it's still a Ninja in addition to its other creature types.
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | AddTypes$ Ninja
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/sakashimas_student.jpg
SetInfo:PC2|Rare|http://magiccards.info/scans/en/pc2/24.jpg
Oracle:Ninjutsu {1}{U} ({1}{U}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)\nYou may have Sakashima's Student enter the battlefield as a copy of any creature on the battlefield, except it's still a Ninja in addition to its other creature types.
End

View File

@@ -5,14 +5,12 @@ Text:no text
PT:1/1
A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add G to your mana pool.
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/scorned_villager.jpg
SetInfo:DKA|Common|http://magiccards.info/scans/en/dka/125a.jpg
Oracle:{T}: Add {G} to your mana pool.\nAt the beginning of each upkeep, if no spells were cast last turn, transform Scorned Villager.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Moonscarred Werewolf
@@ -24,7 +22,8 @@ PT:2/2
K:Vigilance
A:AB$ Mana | Cost$ T | Produced$ G | Amount$ 2 | SpellDescription$ Add G G to your mana pool.
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/moonscarred_werewolf.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/moonscarred_werewolf.jpg
SetInfo:DKA|Common|http://magiccards.info/scans/en/dka/125b.jpg
Oracle:Vigilance\n{T}: Add {G}{G} to your mana pool.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Moonscarred Werewolf.
End

View File

@@ -5,14 +5,12 @@ Text:no text
PT:2/2
K:Flying
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may pay 2 B B. If you do, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 2 B B | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/screeching_bat.jpg
Oracle:Flying\nAt the beginning of your upkeep, you may pay {2}{B}{B}. If you do, transform Screeching Bat.\n----\nStalking Vampire\n(Black)\nCreature - Vampire\n5/5\nAt the beginning of your upkeep, you may pay {2}{B}{B}. If you do, transform Stalking Vampire.
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/114a.jpg
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 2 B B | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Stalking Vampire
@@ -22,7 +20,8 @@ Types:Creature Vampire
Text:no text
PT:5/5
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTransform | OptionalDecider$ You | TriggerDescription$ At the beginning of your upkeep, you may pay 2 B B. If you do, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/stalking_vampire.jpg
SVar:TrigTransform:AB$SetState | Cost$ 2 B B | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/stalking_vampire.jpg
Oracle:Creature - Vampire\n5/5\nAt the beginning of your upkeep, you may pay {2}{B}{B}. If you do, transform Stalking Vampire.
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/114b.jpg
End

View File

@@ -1,7 +1,10 @@
Name:Sculpting Steel
ManaCost:3
Types:Artifact
Text:You may have CARDNAME enter the battlefield as a copy of any artifact on the battlefield.
Text:no text
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseArtifact | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any artifact on the battlefield.
SVar:ChooseArtifact:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Artifact.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/sculpting_steel.jpg
SetInfo:MRD|Rare|http://magiccards.info/scans/en/mi/238.jpg

View File

@@ -0,0 +1,13 @@
Name:Shapeshifter's Marrow
ManaCost:2 U U
Types:Enchantment
Text:no text
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Opponent | Execute$ TrigDig | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each opponent's upkeep, that player reveals the top card of his or her library. If it's a creature card, the player puts the card into his or her graveyard and CARDNAME becomes a copy of that card. (If it does, it loses this ability.)
SVar:TrigDig:AB$ Dig | Cost$ 0 | Defined$ TriggeredPlayer | DigNum$ 1 | Reveal$ True | ChangeNum$ All | ChangeValid$ Creature | RememberChanged$ True | DestinationZone$ Graveyard | DestinationZone2$ Library | LibraryPosition2$ 0 | SubAbility$ DBCopy
SVar:DBCopy:DB$ Clone | Defined$ Remembered | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ EQ1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/shapeshifters_marrow.jpg
SetInfo:FUT|Rare|http://magiccards.info/scans/en/fut/58.jpg
Oracle:At the beginning of each opponent's upkeep, that player reveals the top card of his or her library. If it's a creature card, the player puts the card into his or her graveyard and Shapeshifter's Marrow becomes a copy of that card. (If it does, it loses this ability.)
End

View File

@@ -22,7 +22,7 @@ Text:You control enchanted creature.
K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ GainControl
SVar:RemAIDeck:True
SVar:Picture1:http://www.wizards.com/global/images/magic/general/ghastly_haunting.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/ghastly_haunting.jpg
SetInfo:DKA|Uncommon|http://magiccards.info/scans/en/dka/50b.jpg
Oracle:Enchant creature\nYou control enchanted creature.
End

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ 1 U T | Defined$ Self | NewState$ Alternate | SubAbility$
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/stinging_licid.jpg
@@ -27,5 +25,9 @@ A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Curse
T:Mode$ Taps | ValidCard$ Card.AttachedBy | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ Whenever enchanted creature becomes tapped, CARDNAME deals 2 damage to that creature's controller.
SVar:TrigDamage:AB$DealDamage | Cost$ 0 | Defined$ TriggeredCardController | NumDmg$ 2
A:AB$ SetState | Cost$ U | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/stinging_licid.jpg
SetInfo:TMP|Uncommon|http://magiccards.info/scans/en/tp/91.jpg
Oracle:{1}{U}, {T}: Stinging Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {U} to end this effect.\nWhenever enchanted creature becomes tapped, Stinging Licid deals 2 damage to that creature's controller.
End

View File

@@ -19,7 +19,7 @@ Types:Legendary Creature Human Wizard
Text:no text
PT:3/3
S:Mode$Continuous | Affected$ Creature.YouCtrl | AddKeyword$ Flying | Description$ Creatures you control have flying.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/tobita_master_of_winds.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/tobita_master_of_winds.jpg
SetInfo:CHK|Uncommon|http://magiccards.info/scans/en/chk/310.jpg
Oracle:Creatures you control have flying.

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ G T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/tempting_licid.jpg
@@ -26,5 +24,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ HIDDEN All creatures able to block CARDNAME do so. | Description$ All creatures able to block enchanted creature do so.
A:AB$ SetState | Cost$ G | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/tempting_licid.jpg
SetInfo:STH|Uncommon|http://magiccards.info/scans/en/sh/72.jpg
Oracle:{G}, {T}: CARDNAME loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {G} to end this effect.\nAll creatures able to block enchanted creature do so.
End

View File

@@ -20,7 +20,7 @@ Types:Creature Human Soldier
Text:no text
PT:5/4
K:Trample
SVar:Picture1:http://www.wizards.com/global/images/magic/general/thraben_militia.jpg
SVar:Picture:http://www.wizards.com/global/images/magic/general/thraben_militia.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/38b.jpg
Oracle:Trample
End

View File

@@ -4,14 +4,12 @@ Types:Creature Human Warrior Werewolf
Text:no text
PT:3/2
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/tormented_pariah.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/165a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Tormented Pariah.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Rampaging Werewolf
@@ -21,7 +19,8 @@ Types:Creature Werewolf
Text:no text
PT:6/4
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/rampaging_werewolf.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/rampaging_werewolf.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/165b.jpg
Oracle:At the beginning of each upkeep, if a player cast two or more spells last turn, transform Rampaging Werewolf.
End

View File

@@ -7,8 +7,6 @@ A:AB$ SetState | Cost$ 1 T | Defined$ Self | NewState$ Alternate | SubAbility$ D
SVar:DBAttach:DB$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
#If the value of AlternateMode isn't Flip or DoubleFaced, it will be the name of the state defined below, so you can switch to it with SetState+NewState$.The name of the first state defined is always "Original".
AlternateMode:Alternate
#Shared
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/transmogrifying_licid.jpg
@@ -25,5 +23,9 @@ K:Enchant creature
A:SP$ Attach | Cost$ 0 | ValidTgts$ Creature | AILogic$ Pump
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 1 | AddToughness$ 1 | AddType$ Artifact | Description$ Enchanted creature gets +1/+1 and is an artifact in addition to its other types.
A:AB$ SetState | Cost$ 1 | Defined$ Self | NewState$ Original | SpellDescription$ End this effect.
SVar:RemAIDeck:True
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/transmogrifying_licid.jpg
SetInfo:EXO|Uncommon|http://magiccards.info/scans/en/ex/141.jpg
Oracle:{1}, {T}: Transmogrifying Licid loses this ability and becomes an Aura enchantment with enchant creature. Attach it to target creature. You may pay {1} to end this effect.\nEnchanted creature gets +1/+1 and is an artifact in addition to its other types.
End

View File

@@ -4,14 +4,12 @@ Types:Creature Human Shaman Werewolf
Text:no text
PT:3/3
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/ulvenwald_mystics.jpg
AlternateMode:DoubleFaced
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/208a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Ulvenwald Mystics.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Ulvenwald Primordials
@@ -22,7 +20,8 @@ Text:no text
PT:5/5
A:AB$ Regenerate | Cost$ G | SpellDescription$ Regenerate CARDNAME.
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/ulvenwald_primordials.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/ulvenwald_primordials.jpg
SetInfo:ISD|Uncommon|http://magiccards.info/scans/en/isd/208b.jpg
Oracle:{G}: Regenerate Ulvenwald Primordials.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Ulvenwald Primordials.
End

View File

@@ -0,0 +1,14 @@
Name:Unstable Shapeshifter
ManaCost:3 U
Types:Creature Shapeshifter
Text:no text
PT:0/1
# Make SVars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ USCopy | TriggerDescription$ Whenever another creature enters the battlefield, CARDNAME becomes a copy of that creature and gains this ability.
SVar:USCopy:AB$ Clone | Cost$ 0 | Defined$ TriggeredCard | AddTriggers$ USTrig | AddSVars$ USCopy,USTrig
SVar:USTrig:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ USCopy | TriggerDescription$ Whenever another creature enters the battlefield, CARDNAME becomes a copy of that creature and gains this ability.
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/unstable_shapeshifter.jpg
SetInfo:TMP|Rare|http://magiccards.info/scans/en/tp/100.jpg
Oracle:Whenever another creature enters the battlefield, Unstable Shapeshifter becomes a copy of that creature and gains this ability.
End

View File

@@ -0,0 +1,12 @@
Name:Vesuva
ManaCost:no cost
Types:Land
Text:no text
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseLand | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield tapped as a copy of any land on the battlefield.
SVar:ChooseLand:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Land.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | IntoPlayTapped$ True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/vesuva.jpg
SetInfo:TSP|Rare|http://magiccards.info/scans/en/ts/281.jpg
Oracle:You may have Vesuva enter the battlefield tapped as a copy of any land on the battlefield.
End

View File

@@ -1,8 +1,14 @@
Name:Vesuvan Doppelganger
ManaCost:3 U U
Types:Creature Shapeshifter
Text:You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield except it doesn't copy that creature's color and it gains "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability."
Text:no text
PT:0/0
# Make Svars for granting abilities and triggers on clones distinct to avoid SVars getting overwritten when cloning a clone
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ ChooseCreature | Static$ True | TriggerDescription$ You may have CARDNAME enter the battlefield as a copy of any creature on the battlefield except it doesn't copy that creature's color and it gains "At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability."
SVar:ChooseCreature:AB$ ChooseCard | Cost$ 0 | Defined$ You | Amount$ 1 | Choices$ Creature.Other | SubAbility$ DBCopy | RememberChosen$ True
SVar:DBCopy:DB$ Clone | Defined$ Remembered | Colors$ Blue | OverwriteColors$ True | AddTriggers$ VesDopUpkeepTrig | AddSVars$ VesDopCopy,VesDopUpkeepTrig
SVar:VesDopUpkeepTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ VesDopCopy | TriggerDescription$ At the beginning of your upkeep, you may have this creature become a copy of target creature except it doesn't copy that creature's color. If you do, this creature gains this ability.
SVar:VesDopCopy:AB$ Clone | Cost$ 0 | ValidTgts$ Creature | TgtPrompt$ Select target creature to copy. | Optional$ True | Colors$ Blue | OverwriteColors$ True | AddTriggers$ VesDopUpkeepTrig | AddSVars$ VesDopCopy,VesDopUpkeepTrig | SubAbility$ DBCleanup
SVar:RemAIDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/vesuvan_doppelganger.jpg

View File

@@ -5,14 +5,12 @@ Text:no text
PT:1/1
K:First Strike
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/village_ironsmith.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/168a.jpg
Oracle:First Strike\nAt the beginning of each upkeep, if no spells were cast last turn, transform Village Ironsmith.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Ironfang
@@ -23,7 +21,8 @@ Text:no text
PT:3/1
K:First Strike
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/ironfang.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/ironfang.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/168b.jpg
Oracle:First Strike\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Ironfang.
End

View File

@@ -4,14 +4,12 @@ Types:Creature Human Werewolf
Text:no text
PT:2/3
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/villagers_of_estwald.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/209a.jpg
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Villagers of Estwald.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Howlpack of Estwald
@@ -21,7 +19,8 @@ Types:Creature Werewolf
Text:no text
PT:4/6
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/howlpack_of_estwald.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/howlpack_of_estwald.jpg
SetInfo:ISD|Common|http://magiccards.info/scans/en/isd/209b.jpg
Oracle:At the beginning of each upkeep, if a player cast two or more spells last turn, transform Howlpack of Estwald.
End

View File

@@ -5,14 +5,12 @@ Text:no text
PT:1/1
A:AB$ Pump | Cost$ 1 G | NumAtt$ +2 | NumDef$ +2 | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +2/+2 until end of turn. Activate this ability only once each turn.
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
AlternateMode:DoubleFaced
SVar:Picture:http://www.wizards.com/global/images/magic/general/wolfbitten_captive.jpg
SetInfo:DKA|Rare|http://magiccards.info/scans/en/dka/133a.jpg
Oracle:{1}{G}: Wolfbitten Captive gets +2/+2 until end of turn. Activate this ability only once each turn.\nAt the beginning of each upkeep, if no spells were cast last turn, transform Wolfbitten Captive.
#Shared
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
ALTERNATE
Name:Krallenhorde Killer
@@ -23,7 +21,8 @@ Text:no text
PT:2/2
A:AB$ Pump | Cost$ 3 G | NumAtt$ +4 | NumDef$ +4 | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +4/+4 until end of turn. Activate this ability only once each turn.
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
SVar:Picture1:http://www.wizards.com/global/images/magic/general/krallenhorde_killer.jpg
SVar:TrigTransform:AB$SetState | Cost$ 0 | Defined$ Self | Mode$ Transform
SVar:Picture:http://www.wizards.com/global/images/magic/general/krallenhorde_killer.jpg
SetInfo:DKA|Rare|http://magiccards.info/scans/en/dka/133b.jpg
Oracle:{3}{G}: Krallenhorde Killer gets +4/+4 until end of turn. Activate this ability only once each turn.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Krallenhorde Killer.
End

View File

@@ -58,10 +58,10 @@ draft--properties=../draft/draft.properties
lang--transparent-properties=../lang/lang.properties
image/base--file=../pics
image/token--file=../pics/tokens
image/icon--file=../pics/icons
image/product--file=../pics_product
image/base--file=C:/forge/pics
image/token--file=C:/forge/pics/tokens
image/icon--file=../../../pics/icons
image/product--file=../../../pics_product
pics/booster/images--file=../quest/booster-images.txt
quest/opponent/icons--file=../quest/quest-opponent-icons.txt

View File

@@ -80,7 +80,8 @@ public class Card extends GameEntity implements Comparable<Card> {
private CardCharactersticName preTFDCharacteristic = CardCharactersticName.Original;
private boolean isDoubleFaced = false;
private boolean isFlip = false;
private boolean isFlipCard = false;
private boolean isFlipped = false;
private CardCharactersticName otherTransformable = null;
private ZoneType castFrom = null;
@@ -222,7 +223,7 @@ public class Card extends GameEntity implements Comparable<Card> {
private Card haunting = null;
private Card effectSource = null;
private Map<String, String> sVars = new TreeMap<String, String>();
//private Map<String, String> sVars = new TreeMap<String, String>();
// hacky code below, used to limit the number of times an ability
// can be used per turn like Vampire Bats
@@ -455,22 +456,42 @@ public class Card extends GameEntity implements Comparable<Card> {
}
/**
* Checks if is flip.
* Checks if is flip card.
*
* @return the isFlip
* @return the isFlipCard
*/
public final boolean isFlip() {
return this.isFlip;
public final boolean isFlipCard() {
return this.isFlipCard;
}
/**
* Sets the flip.
* Sets the flip card.
*
* @param isFlip0
* the isFlip to set
*/
public final void setFlip(final boolean isFlip0) {
this.isFlip = isFlip0;
public final void setFlipCard(final boolean isFlip0) {
this.isFlipCard = isFlip0;
}
/**
*
* Checks if card status is flipped.
*
* @return the flipped
*/
public final boolean isFlipped() {
return this.isFlipped;
}
/**
* Sets a cards flipped status.
*
* @param newStatus
* boolean with new flipped status
*/
public final void setFlipStaus(final boolean newStatus) {
this.isFlipped = newStatus;
}
/**
@@ -665,6 +686,27 @@ public class Card extends GameEntity implements Comparable<Card> {
return newtrig;
}
/**
* <p>
* addTrigger.
* </p>
*
* @param t
* a {@link forge.card.trigger.Trigger} object.
*
* @param state
* a {@link forge.CardCharactersticName} object.
*
* @return a {@link forge.card.trigger.Trigger} object.
*/
public final Trigger addTrigger(final Trigger t, final CardCharactersticName state) {
final Trigger newtrig = t.getCopy();
newtrig.setHostCard(this);
CardCharacteristics stateCharacteristics = this.getState(state);
stateCharacteristics.getTriggers().add(newtrig);
return newtrig;
}
/**
*
* moveTrigger.
@@ -691,6 +733,22 @@ public class Card extends GameEntity implements Comparable<Card> {
this.getCharacteristics().getTriggers().remove(t);
}
/**
* <p>
* removeTrigger.
* </p>
*
* @param t
* a {@link forge.card.trigger.Trigger} object.
*
* @param state
* a {@link forge.CardCharactersticName} object.
*/
public final void removeTrigger(final Trigger t, final CardCharactersticName state) {
CardCharacteristics stateCharacteristics = this.getState(state);
stateCharacteristics.getTriggers().remove(t);
}
/**
* <p>
* Getter for the field <code>triggers</code>.
@@ -1459,11 +1517,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* @return a {@link java.lang.String} object.
*/
public final String getSVar(final String var) {
if (this.sVars.containsKey(var)) {
return this.sVars.get(var);
} else {
return "";
}
return this.getCharacteristics().getSVar(var);
}
/**
@@ -1477,11 +1531,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* a {@link java.lang.String} object.
*/
public final void setSVar(final String var, final String str) {
if (this.sVars.containsKey(var)) {
this.sVars.remove(var);
}
this.sVars.put(var, str);
this.getCharacteristics().setSVar(var, str);
}
/**
@@ -1492,7 +1542,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* @return a Map object.
*/
public final Map<String, String> getSVars() {
return this.sVars;
return this.getCharacteristics().getSVars();
}
/**
@@ -1504,7 +1554,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* a Map object.
*/
public final void setSVars(final Map<String, String> newSVars) {
this.sVars = newSVars;
this.getCharacteristics().setSVars(newSVars);
}
/**
@@ -2766,6 +2816,27 @@ public class Card extends GameEntity implements Comparable<Card> {
}
}
/**
* <p>
* addSpellAbility.
* </p>
*
* @param a
* a {@link forge.card.spellability.SpellAbility} object.
*
* @param state
* a {@link forge.CardCharactersticName} object.
*/
public final void addSpellAbility(final SpellAbility a, final CardCharactersticName state) {
a.setSourceCard(this);
CardCharacteristics stateCharacteristics = this.getState(state);
if (a instanceof AbilityMana) {
stateCharacteristics.getManaAbility().add((AbilityMana) a);
} else {
stateCharacteristics.getSpellAbility().add(a);
}
}
/**
* <p>
* removeSpellAbility.
@@ -2784,6 +2855,28 @@ public class Card extends GameEntity implements Comparable<Card> {
}
}
/**
* <p>
* removeSpellAbility.
* </p>
*
* @param a
* a {@link forge.card.spellability.SpellAbility} object.
*
* @param state
* a {@link forge.CardCharactersticName} object.
*/
public final void removeSpellAbility(final SpellAbility a, final CardCharactersticName state) {
CardCharacteristics stateCharacteristics = this.getState(state);
if (a instanceof AbilityMana) {
// if (a.isExtrinsic()) //never remove intrinsic mana abilities, is
// this the way to go??
stateCharacteristics.getManaAbility().remove(a);
} else {
stateCharacteristics.getSpellAbility().remove(a);
}
}
/**
* <p>
* removeAllExtrinsicManaAbilities.
@@ -5516,6 +5609,30 @@ public class Card extends GameEntity implements Comparable<Card> {
}
}
/**
* Adds the static ability.
*
* @param s
* the s
*
* @param state
* a {@link forge.CardCharactersticName} object.
*
* @return a {@link forge.card.staticability.StaticAbility} object.
*/
public final StaticAbility addStaticAbility(final String s, final CardCharactersticName state) {
if (s.trim().length() != 0) {
final StaticAbility stAb = new StaticAbility(s, this);
CardCharacteristics stateCharacteristics = this.getState(state);
stateCharacteristics.getStaticAbilities().add(stAb);
return stAb;
}
else {
return null;
}
}
/**
* <p>
* isPermanent.
@@ -6435,7 +6552,7 @@ public class Card extends GameEntity implements Comparable<Card> {
return false;
}
} else if (property.equals("Flip")) {
if (!this.isFlip) {
if (!this.isFlipCard) {
return false;
}
} else if (property.startsWith("YouCtrl")) {
@@ -8415,8 +8532,9 @@ public class Card extends GameEntity implements Comparable<Card> {
* @return an int
*/
public final int getFoil() {
if (this.sVars.containsKey("Foil")) {
return Integer.parseInt(this.sVars.get("Foil"));
final String foil = this.getCharacteristics().getSVar("Foil");
if (!foil.isEmpty()) {
return Integer.parseInt(foil);
}
return 0;
}
@@ -8429,7 +8547,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* an int
*/
public final void setFoil(final int f) {
this.sVars.put("Foil", Integer.toString(f));
this.getCharacteristics().setSVar("Foil", Integer.toString(f));
}
/**

View File

@@ -481,7 +481,7 @@ public class CardReader implements Runnable {
// 8/18/11 11:08 PM
} else if (line.equals("ALTERNATE")) {
CardCharactersticName mode;
if (card.isFlip()) {
if (card.isFlipCard()) {
mode = CardCharactersticName.Flipped;
} else if (card.isDoubleFaced()) {
mode = CardCharactersticName.Transformed;
@@ -494,7 +494,7 @@ public class CardReader implements Runnable {
//System.out.println(card.getName());
final CardCharactersticName value = CardCharactersticName.smartValueOf(line.substring("AlternateMode:".length()));
if (value == CardCharactersticName.Flipped) {
card.setFlip(true);
card.setFlipCard(true);
} else if (value == CardCharactersticName.Transformed) {
card.setDoubleFaced(true);
} else {

View File

@@ -157,6 +157,13 @@ public class GameAction {
c.switchStates(CardCharactersticName.Cloner, CardCharactersticName.Original);
c.setState(CardCharactersticName.Original);
c.clearStates(CardCharactersticName.Cloner);
if (c.isFlipCard()) {
c.clearStates(CardCharactersticName.Flipped);
}
}
// reset flip status when card leaves battlefield
if (zoneFrom.is(ZoneType.Battlefield)) {
c.setFlipStaus(false);
}
AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed);
copied = AllZone.getCardFactory().copyCard(c);

View File

@@ -19,6 +19,8 @@ package forge.card;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import forge.CardColor;
import forge.card.replacement.ReplacementEffect;
@@ -50,6 +52,7 @@ public class CardCharacteristics {
private String imageFilename = "";
private String imageName = "";
private ArrayList<EditionInfo> sets = new ArrayList<EditionInfo>();
private Map<String, String> sVars = new TreeMap<String, String>();
/**
* Gets the name.
@@ -388,4 +391,104 @@ public class CardCharacteristics {
public void setReplacementEffects(ArrayList<ReplacementEffect> replacementEffects0) {
this.replacementEffects = replacementEffects0;
}
/**
* <p>
* getSVar.
* </p>
*
* @param var
* a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public final String getSVar(final String var) {
if (this.sVars.containsKey(var)) {
return this.sVars.get(var);
} else {
return "";
}
}
/**
* <p>
* setSVar.
* </p>
*
* @param var
* a {@link java.lang.String} object.
* @param str
* a {@link java.lang.String} object.
*/
public final void setSVar(final String var, final String str) {
if (this.sVars.containsKey(var)) {
this.sVars.remove(var);
}
this.sVars.put(var, str);
}
/**
* <p>
* getSVars.
* </p>
*
* @return a Map object.
*/
public final Map<String, String> getSVars() {
return this.sVars;
}
/**
* <p>
* setSVars.
* </p>
*
* @param newSVars
* a Map object.
*/
public final void setSVars(final Map<String, String> newSVars) {
this.sVars = newSVars;
}
/**
* <p>
* copy.
* </p>
*
* @param source
* a Map object.
*/
public final void copy(final CardCharacteristics source) {
// Makes a "deeper" copy of a CardCharacteristics object
// String name : just copy reference
this.name = source.getName();
// ArrayList<String> type : list of String objects so use copy constructor
this.type = new ArrayList<String>(source.getType());
// CardManaCost manaCost : not sure if a deep copy is needed
this.manaCost = source.getManaCost();
// ArrayList<CardColor> cardColor : not sure if a deep copy is needed
this.cardColor = new ArrayList<CardColor>(source.getCardColor());
// boolean cardColorsOverridden : set value
this.cardColorsOverridden = source.isCardColorsOverridden();
// int baseAttack : set value
this.baseAttack = source.getBaseAttack();
// int baseDefense : set value
this.baseDefense = source.getBaseDefense();
// ArrayList<String> intrinsicKeyword : list of String objects so use copy constructor
this.intrinsicKeyword = new ArrayList<String>(source.getIntrinsicKeyword());
// ArrayList<String> intrinsicAbility : list of String objects so use copy constructor
this.intrinsicAbility = new ArrayList<String>(source.getIntrinsicAbility());
// ArrayList<String> staticAbilityStrings : list of String objects so use copy constructor
this.staticAbilityStrings = new ArrayList<String>(source.getStaticAbilityStrings());
// String imageFilename = copy reference
this.imageFilename = source.getImageFilename();
// String imageName = "";
this.imageName = source.getImageName();
// ArrayList<EditionInfo> sets : deep copy not needed, just copy reference
this.sets = source.getSets();
// Map<String, String> sVars
this.sVars = new TreeMap<String, String>(source.getSVars());
}
}

View File

@@ -563,6 +563,14 @@ public class AbilityFactory {
}
}
else if (this.api.equals("Clone")) {
if (this.isAb) {
spellAbility = AbilityFactoryClone.createAbilityClone(this);
} else if (this.isDb) {
spellAbility = AbilityFactoryClone.createDrawbackClone(this);
}
}
else if (this.api.equals("CopyPermanent")) {
if (this.isAb) {
spellAbility = AbilityFactoryCopy.createAbilityCopyPermanent(this);
@@ -1832,12 +1840,21 @@ public class AbilityFactory {
}
} else if (defined.startsWith("Triggered") && (sa != null)) {
final SpellAbility root = sa.getRootSpellAbility();
final Object crd = root.getTriggeringObject(defined.substring(9));
if (crd instanceof Card) {
c = AllZoneUtil.getCardState((Card) crd);
} else if (crd instanceof CardList) {
for (final Card cardItem : (CardList) crd) {
cards.add(cardItem);
if (defined.contains("LKICopy")) { //TriggeredCardLKICopy
final Object crd = root.getTriggeringObject(defined.substring(9, 13));
if (crd instanceof Card) {
c = (Card) crd;
}
}
else {
final Object crd = root.getTriggeringObject(defined.substring(9));
if (crd instanceof Card) {
c = AllZoneUtil.getCardState((Card) crd);
c = (Card) crd;
} else if (crd instanceof CardList) {
for (final Card cardItem : (CardList) crd) {
cards.add(cardItem);
}
}
}
} else if (defined.startsWith("Replaced") && (sa != null)) {

View File

@@ -1893,8 +1893,11 @@ public final class AbilityFactoryChoose {
} else {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
}
CardList choices = AllZoneUtil.getCardsIn(ZoneType.Battlefield);
ZoneType choiceZone = ZoneType.Battlefield;
if (params.containsKey("ChoiceZone")) {
choiceZone = ZoneType.smartValueOf(params.get("ChoiceZone"));
}
CardList choices = AllZoneUtil.getCardsIn(choiceZone);
if (params.containsKey("Choices")) {
choices = choices.getValidCards(params.get("Choices"), host.getController(), host);
}

View File

@@ -0,0 +1,674 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.card.abilityfactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardCharactersticName;
import forge.CardColor;
import forge.CardList;
import forge.CardUtil;
import forge.GameActionUtil;
import forge.Singletons;
import forge.card.CardCharacteristics;
import forge.card.cardfactory.AbstractCardFactory;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.spellability.AbilityActivated;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
import forge.card.trigger.TriggerType;
import forge.game.phase.PhaseType;
import forge.game.player.ComputerUtil;
import forge.game.zone.ZoneType;
/**
* <p>
* AbilityFactoryClone class.
* </p>
*
* @author Forge
* @version $Id: AbilityFactoryClone.java 15541 2012-05-14 11:47:16Z Sloth $
*/
public final class AbilityFactoryClone {
private AbilityFactoryClone() {
throw new AssertionError();
}
// **************************************************************
// *************************** Clone ****************************
// **************************************************************
/**
* <p>
* createAbilityClone.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createAbilityClone(final AbilityFactory af) {
class AbilityClone extends AbilityActivated {
public AbilityClone(final Card ca, final Cost co, final Target t) {
super(ca, co, t);
}
@Override
public AbilityActivated getCopy() {
AbilityActivated res = new AbilityClone(getSourceCard(),
getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
CardFactoryUtil.copySpellAbility(this, res);
return res;
}
private static final long serialVersionUID = 1938171749867734123L;
@Override
public boolean canPlayAI() {
return AbilityFactoryClone.cloneCanPlayAI(af, this);
}
@Override
public void resolve() {
AbilityFactoryClone.cloneResolve(af, this);
}
@Override
public String getStackDescription() {
return AbilityFactoryClone.cloneStackDescription(af, this);
}
@Override
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryClone.cloneTriggerAI(af, this, mandatory);
}
}
final SpellAbility abClone = new AbilityClone(af.getHostCard(), af.getAbCost(), af.getAbTgt());
return abClone;
}
/**
* <p>
* createSpellClone.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createSpellClone(final AbilityFactory af) {
final SpellAbility spClone = new Spell(af.getHostCard(), af.getAbCost(), af.getAbTgt()) {
private static final long serialVersionUID = -4047747186919390520L;
@Override
public boolean canPlayAI() {
return AbilityFactoryClone.cloneCanPlayAI(af, this);
}
@Override
public void resolve() {
AbilityFactoryClone.cloneResolve(af, this);
}
@Override
public String getStackDescription() {
return AbilityFactoryClone.cloneStackDescription(af, this);
}
};
return spClone;
}
/**
* <p>
* createDrawbackClone.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @return a {@link forge.card.spellability.SpellAbility} object.
*/
public static SpellAbility createDrawbackClone(final AbilityFactory af) {
class DrawbackClone extends AbilitySub {
public DrawbackClone(final Card ca, final Target t) {
super(ca, t);
}
@Override
public AbilitySub getCopy() {
AbilitySub res = new DrawbackClone(getSourceCard(),
getTarget() == null ? null : new Target(getTarget()));
CardFactoryUtil.copySpellAbility(this, res);
return res;
}
private static final long serialVersionUID = -8659938411435528741L;
@Override
public void resolve() {
AbilityFactoryClone.cloneResolve(af, this);
}
@Override
public boolean chkAIDrawback() {
return AbilityFactoryClone.clonePlayDrawbackAI(af, this);
}
@Override
public String getStackDescription() {
return AbilityFactoryClone.cloneStackDescription(af, this);
}
@Override
public boolean doTrigger(final boolean mandatory) {
return AbilityFactoryClone.cloneTriggerAI(af, this, mandatory);
}
}
final SpellAbility dbClone = new DrawbackClone(af.getHostCard(), af.getAbTgt());
return dbClone;
}
/**
* <p>
* cloneStackDescription.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
* @return a {@link java.lang.String} object.
*/
// TODO update this method
private static String cloneStackDescription(final AbilityFactory af, final SpellAbility sa) {
final HashMap<String, String> params = af.getMapParams();
final StringBuilder sb = new StringBuilder();
if (sa instanceof AbilitySub) {
sb.append(" ");
} else {
sb.append(sa.getSourceCard().getName()).append(" - ");
}
final Target tgt = sa.getTarget();
ArrayList<Card> tgts;
if (tgt != null) {
tgts = tgt.getTargetCards();
} else {
tgts = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa);
}
sb.append(sa.getSourceCard());
sb.append(" becomes a copy of ");
if (!tgts.isEmpty()) {
sb.append(tgts.get(0)).append(".");
}
else {
sb.append("target creature.");
}
final AbilitySub abSub = sa.getSubAbility();
if (abSub != null) {
sb.append(abSub.getStackDescription());
}
return sb.toString();
} // end cloneStackDescription()
/**
* <p>
* cloneCanPlayAI.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean.
*/
private static boolean cloneCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
final HashMap<String, String> params = af.getMapParams();
final Target tgt = sa.getTarget();
final Card source = sa.getSourceCard();
boolean useAbility = true;
// if (card.getController().isComputer()) {
// final CardList creatures = AllZoneUtil.getCreaturesInPlay();
// if (!creatures.isEmpty()) {
// cardToCopy = CardFactoryUtil.getBestCreatureAI(creatures);
// }
// }
// TODO - add some kind of check to answer
// "Am I going to attack with this?"
// TODO - add some kind of check for during human turn to answer
// "Can I use this to block something?"
// don't use instant speed clone abilities outside computers
// Combat_Begin step
if (!Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_BEGIN)
&& Singletons.getModel().getGameState().getPhaseHandler().isPlayerTurn(AllZone.getComputerPlayer()) && !AbilityFactory.isSorcerySpeed(sa)
&& !params.containsKey("ActivationPhases") && !params.containsKey("Permanent")) {
return false;
}
// don't use instant speed clone abilities outside humans
// Combat_Declare_Attackers_InstantAbility step
if ((!Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY) || (AllZone.getCombat()
.getAttackers().isEmpty())) && Singletons.getModel().getGameState().getPhaseHandler().isPlayerTurn(AllZone.getHumanPlayer())) {
return false;
}
// don't activate during main2 unless this effect is permanent
if (Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.MAIN2) && !params.containsKey("Permanent")) {
return false;
}
if (null == tgt) {
final ArrayList<Card> defined = AbilityFactory.getDefinedCards(source, params.get("Defined"), sa);
boolean bFlag = false;
for (final Card c : defined) {
bFlag |= (!c.isCreature() && !c.isTapped() && !(c.getTurnInZone() == Singletons.getModel().getGameState().getPhaseHandler().getTurn()));
// for creatures that could be improved (like Figure of Destiny)
if (c.isCreature() && (params.containsKey("Permanent") || (!c.isTapped() && !c.isSick()))) {
int power = -5;
if (params.containsKey("Power")) {
power = AbilityFactory.calculateAmount(source, params.get("Power"), sa);
}
int toughness = -5;
if (params.containsKey("Toughness")) {
toughness = AbilityFactory.calculateAmount(source, params.get("Toughness"), sa);
}
if ((power + toughness) > (c.getCurrentPower() + c.getCurrentToughness())) {
bFlag = true;
}
}
}
if (!bFlag) { // All of the defined stuff is cloned, not very
// useful
return false;
}
} else {
tgt.resetTargets();
useAbility &= AbilityFactoryClone.cloneTgtAI(af, sa);
}
final AbilitySub subAb = sa.getSubAbility();
if (subAb != null) {
useAbility &= subAb.chkAIDrawback();
}
return useAbility;
} // end cloneCanPlayAI()
/**
* <p>
* clonePlayDrawbackAI.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean.
*/
private static boolean clonePlayDrawbackAI(final AbilityFactory af, final SpellAbility sa) {
// AI should only activate this during Human's turn
boolean chance = true;
if (sa.getTarget() != null) {
chance = AbilityFactoryClone.cloneTgtAI(af, sa);
}
final AbilitySub subAb = sa.getSubAbility();
if (subAb != null) {
chance &= subAb.chkAIDrawback();
}
return chance;
}
/**
* <p>
* cloneTriggerAI.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
* @param mandatory
* a boolean.
* @return a boolean.
*/
private static boolean cloneTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
if (!ComputerUtil.canPayCost(sa)) { // If there is a cost payment
return false;
}
boolean chance = true;
if (sa.getTarget() != null) {
chance = AbilityFactoryClone.cloneTgtAI(af, sa);
}
// Improve AI for triggers. If source is a creature with:
// When ETB, sacrifice a creature. Check to see if the AI has something
// to sacrifice
// Eventually, we can call the trigger of ETB abilities with
// not mandatory as part of the checks to cast something
final AbilitySub subAb = sa.getSubAbility();
if (subAb != null) {
chance &= subAb.chkAIDrawback();
}
return chance || mandatory;
}
/**
* <p>
* cloneTgtAI.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean.
*/
private static boolean cloneTgtAI(final AbilityFactory af, final SpellAbility sa) {
// This is reasonable for now. Kamahl, Fist of Krosa and a sorcery or
// two are the only things
// that clone a target. Those can just use SVar:RemAIDeck:True until
// this can do a reasonably
// good job of picking a good target
return false;
}
/**
* <p>
* cloneResolve.
* </p>
*
* @param af
* a {@link forge.card.abilityfactory.AbilityFactory} object.
* @param sa
* a {@link forge.card.spellability.SpellAbility} object.
*/
private static void cloneResolve(final AbilityFactory af, final SpellAbility sa) {
final HashMap<String, String> params = af.getMapParams();
Card tgtCard;
final Card host = sa.getSourceCard();
Map<String, String> origSVars = host.getSVars();
// find cloning source i.e. thing to be copied
Card cardToCopy = null;
final Target tgt = sa.getTarget();
if (tgt != null) {
cardToCopy = tgt.getTargetCards().get(0);
}
else if (params.containsKey("Defined")) {
ArrayList<Card> cloneSources = AbilityFactory.getDefinedCards(host, params.get("Defined"), sa);
if (!cloneSources.isEmpty()) {
cardToCopy = cloneSources.get(0);
}
}
if (cardToCopy == null) {
return;
}
final StringBuilder sb = new StringBuilder();
sb.append("Do you want to copy " + cardToCopy + "?");
boolean optional = params.containsKey("Optional");
if (host.getController().isHuman() && optional
&& !GameActionUtil.showYesNoDialog(host, sb.toString())) {
return;
}
// find target of cloning i.e. card becoming a clone
ArrayList<Card> cloneTargets = AbilityFactory.getDefinedCards(host, params.get("CloneTarget"), sa);
if (!cloneTargets.isEmpty()) {
tgtCard = cloneTargets.get(0);
}
else {
tgtCard = host;
}
String imageFileName = host.getImageFilename();
boolean keepName = params.containsKey("KeepName");
String originalName = tgtCard.getName();
boolean copyingSelf = (tgtCard == cardToCopy);
AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed);
if (!copyingSelf) {
if (tgtCard.isCloned()) { // cloning again
tgtCard.switchStates(CardCharactersticName.Cloner, CardCharactersticName.Original);
tgtCard.setState(CardCharactersticName.Original);
tgtCard.clearStates(CardCharactersticName.Cloner);
}
// add "Cloner" state to clone
tgtCard.addAlternateState(CardCharactersticName.Cloner);
tgtCard.switchStates(CardCharactersticName.Original, CardCharactersticName.Cloner);
tgtCard.setState(CardCharactersticName.Original);
}
else {
//copy Original state to Cloned
tgtCard.addAlternateState(CardCharactersticName.Cloned);
tgtCard.switchStates(CardCharactersticName.Original, CardCharactersticName.Cloned);
if (tgtCard.isFlipCard()) {
tgtCard.setState(CardCharactersticName.Original);
}
}
CardCharactersticName stateToCopy = null;
if (copyingSelf) {
stateToCopy = CardCharactersticName.Cloned;
}
else if (cardToCopy.isFlipCard()) {
stateToCopy = CardCharactersticName.Original;
}
else {
stateToCopy = cardToCopy.getCurState();
}
CardFactoryUtil.copyState(cardToCopy, stateToCopy, tgtCard);
// must call this before addAbilityFactoryAbilities so cloned added abilities are handled correctly
addExtraCharacteristics(tgtCard, params, origSVars);
CardFactoryUtil.addAbilityFactoryAbilities(tgtCard);
for (int i = 0; i < tgtCard.getStaticAbilityStrings().size(); i++) {
tgtCard.addStaticAbility(tgtCard.getStaticAbilityStrings().get(i));
}
if (keepName) {
tgtCard.setName(originalName);
}
// If target is a flipped card, also copy the flipped
// state.
if (cardToCopy.isFlipCard()) {
if (!copyingSelf) {
tgtCard.addAlternateState(CardCharactersticName.Flipped);
tgtCard.setState(CardCharactersticName.Flipped);
}
CardFactoryUtil.copyState(cardToCopy, CardCharactersticName.Flipped, tgtCard);
addExtraCharacteristics(tgtCard, params, origSVars);
CardFactoryUtil.addAbilityFactoryAbilities(tgtCard);
for (int i = 0; i < tgtCard.getStaticAbilityStrings().size(); i++) {
tgtCard.addStaticAbility(tgtCard.getStaticAbilityStrings().get(i));
}
if (keepName) {
tgtCard.setName(originalName);
}
tgtCard.setFlipCard(true);
//keep the Clone card image for the cloned card
tgtCard.setImageFilename(imageFileName);
if (!tgtCard.isFlipped()) {
tgtCard.setState(CardCharactersticName.Original);
}
} else {
tgtCard.setFlipCard(false);
}
//Clean up copy of cloned state
if (copyingSelf) {
tgtCard.clearStates(CardCharactersticName.Cloned);
}
AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed);
//Clear Remembered and Imprint lists
tgtCard.clearRemembered();
tgtCard.clearImprinted();
//keep the Clone card image for the cloned card
tgtCard.setImageFilename(imageFileName);
} // cloneResolve
private static void addExtraCharacteristics(final Card tgtCard, final HashMap<String, String> params, final Map<String, String> origSVars) {
// additional types to clone
if (params.containsKey("AddTypes")) {
for (final String type : Arrays.asList(params.get("AddTypes").split(","))) {
tgtCard.addType(type);
}
}
// triggers to add to clone
final ArrayList<String> triggers = new ArrayList<String>();
if (params.containsKey("AddTriggers")) {
triggers.addAll(Arrays.asList(params.get("AddTriggers").split(",")));
for (final String s : triggers) {
if (origSVars.containsKey(s)) {
final String actualTrigger = origSVars.get(s);
final Trigger parsedTrigger = TriggerHandler.parseTrigger(actualTrigger, tgtCard, true);
tgtCard.addTrigger(parsedTrigger);
}
}
}
// SVars to add to clone
if (params.containsKey("AddSVars")) {
for (final String s : Arrays.asList(params.get("AddSVars").split(","))) {
if (origSVars.containsKey(s)) {
final String actualsVar = origSVars.get(s);
tgtCard.setSVar(s, actualsVar);
}
}
}
// abilities to add to clone
if (params.containsKey("AddAbilities")) {
for (final String s : Arrays.asList(params.get("AddAbilities").split(","))) {
if (origSVars.containsKey(s)) {
//final AbilityFactory newAF = new AbilityFactory();
final String actualAbility = origSVars.get(s);
// final SpellAbility grantedAbility = newAF.getAbility(actualAbility, tgtCard);
// tgtCard.addSpellAbility(grantedAbility);
tgtCard.getIntrinsicAbilities().add(actualAbility);
}
}
}
// keywords to add to clone
final ArrayList<String> keywords = new ArrayList<String>();
if (params.containsKey("AddKeywords")) {
keywords.addAll(Arrays.asList(params.get("AddKeywords").split(" & ")));
// allow SVar substitution for keywords
for (int i = 0; i < keywords.size(); i++) {
final String k = keywords.get(i);
if (origSVars.containsKey(k)) {
keywords.add("\"" + k + "\"");
keywords.remove(k);
}
if (keywords.get(i).startsWith("HIDDEN")) {
tgtCard.addExtrinsicKeyword(keywords.get(i));
}
else {
tgtCard.addIntrinsicKeyword(keywords.get(i));
}
}
}
// set power of clone
if (params.containsKey("IntoPlayTapped")) {
tgtCard.setTapped(true);
}
// set power of clone
if (params.containsKey("SetPower")) {
String rhs = params.get("SetPower");
int power = -1;
try {
power = Integer.parseInt(rhs);
} catch (final NumberFormatException e) {
power = CardFactoryUtil.xCount(tgtCard, tgtCard.getSVar(rhs));
}
tgtCard.setBaseAttack(power);
}
// set toughness of clone
if (params.containsKey("SetToughness")) {
String rhs = params.get("SetToughness");
int toughness = -1;
try {
toughness = Integer.parseInt(rhs);
} catch (final NumberFormatException e) {
toughness = CardFactoryUtil.xCount(tgtCard, tgtCard.getSVar(rhs));
}
tgtCard.setBaseDefense(toughness);
}
// colors to be added or changed to
String shortColors = "";
if (params.containsKey("Colors")) {
final String colors = params.get("Colors");
if (colors.equals("ChosenColor")) {
shortColors = CardUtil.getShortColorsString(tgtCard.getChosenColor());
} else {
shortColors = CardUtil.getShortColorsString(new ArrayList<String>(Arrays.asList(colors.split(","))));
}
}
tgtCard.addColor(shortColors, tgtCard, !params.containsKey("OverwriteColors"), true);
}
} // end class AbilityFactoryClone

View File

@@ -447,7 +447,7 @@ public final class AbilityFactoryCopy {
copy.setState(CardCharactersticName.Transformed);
}
}
if (c.isFlip()) { // Cloned Flips CAN flip.
if (c.isFlipCard()) { // Cloned Flips CAN flip.
copy.setState(CardCharactersticName.Original);
c.setState(CardCharactersticName.Original);
copy.setImageFilename(c.getImageFilename());

View File

@@ -284,14 +284,21 @@ public class AbilityFactorySetState {
}
}
} else if (mode.equals("Flip")) {
if (tgt.isFlip()) {
if (tgt.isFlipCard()) {
if (tgt.getCurState() == CardCharactersticName.Original) {
if (tgt.setState(CardCharactersticName.Flipped) && remChanged) {
abilityFactory.getHostCard().addRemembered(tgt);
if (tgt.setState(CardCharactersticName.Flipped)) {
abilityFactory.getHostCard().setFlipStaus(true);
if (remChanged) {
abilityFactory.getHostCard().addRemembered(tgt);
}
}
} else if (tgt.getCurState() == CardCharactersticName.Flipped) {
if (tgt.setState(CardCharactersticName.Original) && remChanged) {
abilityFactory.getHostCard().addRemembered(tgt);
if (tgt.setState(CardCharactersticName.Original)) {
abilityFactory.getHostCard().setFlipStaus(false);
if (remChanged) {
abilityFactory.getHostCard().addRemembered(tgt);
}
}
}
}
@@ -500,14 +507,20 @@ public class AbilityFactorySetState {
}
}
} else if (mode.equals("Flip")) {
if (list.get(i).isFlip()) {
if (list.get(i).isFlipCard()) {
if (list.get(i).getCurState() == CardCharactersticName.Original) {
if (list.get(i).setState(CardCharactersticName.Flipped) && remChanged) {
abilityFactory.getHostCard().addRemembered(tgt);
if (list.get(i).setState(CardCharactersticName.Flipped)) {
list.get(i).setFlipStaus(true);
if (remChanged) {
abilityFactory.getHostCard().addRemembered(tgt);
}
}
} else if (list.get(i).getCurState() == CardCharactersticName.Flipped) {
if (list.get(i).setState(CardCharactersticName.Original) && remChanged) {
abilityFactory.getHostCard().addRemembered(tgt);
if (list.get(i).setState(CardCharactersticName.Original)) {
list.get(i).setFlipStaus(false);
if (remChanged) {
abilityFactory.getHostCard().addRemembered(tgt);
}
}
}
}

View File

@@ -757,109 +757,7 @@ class CardFactoryArtifacts {
card.addSpellAbility(ability);
} // *************** END ************ END **************************
// *************** START *********** START **************************
else if (cardName.equals("Sculpting Steel")) {
final Card[] copyTarget = new Card[1];
final SpellAbility copy = new Spell(card) {
private static final long serialVersionUID = 4496978456522751302L;
@Override
public void resolve() {
if (card.getController().isComputer()) {
final CardList cards = AllZoneUtil.getCardsIn(ZoneType.Battlefield).getType("Artifact");
if (!cards.isEmpty()) {
copyTarget[0] = CardFactoryUtil.getBestAI(cards);
}
}
if (copyTarget[0] != null) {
Card cloned;
AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed);
// TODO: transform back and forth
cloned = AbstractCardFactory.getCard2(copyTarget[0], card.getOwner());
// TODO: untransform
card.addAlternateState(CardCharactersticName.Cloner);
card.switchStates(CardCharactersticName.Original, CardCharactersticName.Cloner);
card.setState(CardCharactersticName.Original);
if (copyTarget[0].getCurState() == CardCharactersticName.Transformed && copyTarget[0].isDoubleFaced()) {
cloned.setState(CardCharactersticName.Transformed);
}
CardFactoryUtil.copyCharacteristics(cloned, card);
this.grantExtras();
// If target is a flipped card, also copy the flipped
// state.
if (copyTarget[0].isFlip()) {
cloned.setState(CardCharactersticName.Flipped);
cloned.setImageFilename(CardUtil.buildFilename(cloned));
card.addAlternateState(CardCharactersticName.Flipped);
card.setState(CardCharactersticName.Flipped);
CardFactoryUtil.copyCharacteristics(cloned, card);
this.grantExtras();
card.setFlip(true);
card.setState(CardCharactersticName.Original);
} else {
card.setFlip(false);
}
AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed);
}
Singletons.getModel().getGameAction().moveToPlay(card);
}
private void grantExtras() {
// Grant stuff from specific cloners
if (cardName.equals("Copy Artifact")) {
card.addType("Enchantment");
}
}
}; // SpellAbility
final Input runtime = new Input() {
private static final long serialVersionUID = 8117808324791871452L;
@Override
public void showMessage() {
final StringBuilder sb = new StringBuilder();
sb.append(cardName).append(" - Select an artifact on the battlefield");
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
ButtonUtil.enableOnlyCancel();
}
@Override
public void selectButtonCancel() {
this.stop();
}
@Override
public void selectCard(final Card c, final PlayerZone z) {
if (z.is(ZoneType.Battlefield) && c.isArtifact()) {
copyTarget[0] = c;
this.stopSetNext(new InputPayManaCost(copy));
}
}
};
// Do not remove SpellAbilities created by AbilityFactory or
// Keywords.
card.clearFirstSpell();
card.addSpellAbility(copy);
final StringBuilder sb = new StringBuilder();
sb.append(cardName).append(" - enters the battlefield as a copy of selected card.");
copy.setStackDescription(sb.toString());
copy.setBeforePayMana(runtime);
} // *************** END ************ END **************************
return card;
return card;
}
}

View File

@@ -1485,214 +1485,7 @@ public class CardFactoryCreatures {
card.addComesIntoPlayCommand(comesIntoPlay);
}
private static void getCard_ClonesSeries(final Card card, final String cardName) {
final Card[] copyTarget = new Card[1];
final SpellAbility copy = new Spell(card) {
private static final long serialVersionUID = 4496978456522751302L;
@Override
public void resolve() {
String imageFileName = card.getImageFilename();
if (card.getController().isComputer()) {
final CardList creatures = AllZoneUtil.getCreaturesInPlay();
if (!creatures.isEmpty()) {
copyTarget[0] = CardFactoryUtil.getBestCreatureAI(creatures);
}
}
if (copyTarget[0] != null) {
Card cloned;
AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed);
if (copyTarget[0].isToken()) {
cloned = CardFactoryUtil.copyStats(copyTarget[0]);
cloned.setName(copyTarget[0].getName());
cloned.setImageName(copyTarget[0].getImageName());
cloned.setOwner(this.getActivatingPlayer());
cloned.addController(this.getActivatingPlayer());
cloned.setManaCost(copyTarget[0].getManaCost());
cloned.setColor(copyTarget[0].getColor());
cloned.setToken(true);
cloned.setType(copyTarget[0].getType());
cloned.setBaseAttack(copyTarget[0].getBaseAttack());
cloned.setBaseDefense(copyTarget[0].getBaseDefense());
}
else {
Card origin = copyTarget[0];
// TODO: transform back before copying
cloned = AbstractCardFactory.getCard2(origin, card.getOwner());
// TODO: transform origin back to how it was (if needed)
}
card.addAlternateState(CardCharactersticName.Cloner);
card.switchStates(CardCharactersticName.Original, CardCharactersticName.Cloner);
card.setState(CardCharactersticName.Original);
if (copyTarget[0].getCurState() == CardCharactersticName.Transformed && copyTarget[0].isDoubleFaced()) {
cloned.setState(CardCharactersticName.Transformed);
}
CardFactoryUtil.copyCharacteristics(cloned, card);
CardFactoryUtil.addAbilityFactoryAbilities(card);
for (int i = 0; i < card.getStaticAbilityStrings().size(); i++) {
card.addStaticAbility(card.getStaticAbilityStrings().get(i));
}
this.grantExtras();
// If target is a flipped card, also copy the flipped
// state.
if (copyTarget[0].isFlip()) {
cloned.setState(CardCharactersticName.Flipped);
cloned.setImageFilename(CardUtil.buildFilename(cloned));
card.addAlternateState(CardCharactersticName.Flipped);
card.setState(CardCharactersticName.Flipped);
CardFactoryUtil.copyCharacteristics(cloned, card);
CardFactoryUtil.addAbilityFactoryAbilities(card);
for (int i = 0; i < card.getStaticAbilityStrings().size(); i++) {
card.addStaticAbility(card.getStaticAbilityStrings().get(i));
}
this.grantExtras();
card.setFlip(true);
card.setState(CardCharactersticName.Original);
} else {
card.setFlip(false);
}
AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed);
}
//keep the Clone card image for the cloned card
card.setImageFilename(imageFileName);
Singletons.getModel().getGameAction().moveToPlay(card);
}
private void grantExtras() {
// Grant stuff from specific cloners
if (cardName.equals("Vesuvan Doppelganger")) {
final String keyword = "At the beginning of your upkeep, you may have this "
+ "creature become a copy of target creature except it doesn't copy that "
+ "creature's color. If you do, this creature gains this ability.";
card.addIntrinsicKeyword(keyword);
card.addColor("U");
} else if (cardName.equals("Quicksilver Gargantuan")) {
card.setBaseAttack(7);
card.setBaseDefense(7);
} else if (cardName.equals("Phyrexian Metamorph")) {
card.addType("Artifact");
} else if (cardName.equals("Phantasmal Image")) {
final Trigger t = forge.card.trigger.TriggerHandler
.parseTrigger(
"Mode$ BecomesTarget | ValidTarget$ Card.Self | Execute$ TrigSac | TriggerDescription$ When this creature becomes the target of a spell or ability, sacrifice it.",
card, true);
card.addTrigger(t);
card.setSVar("TrigSac", "AB$Sacrifice | Cost$ 0 | Defined$ Self");
card.setSVar("Targeting", "Dies");
card.addType("Illusion");
} else if (cardName.equals("Evil Twin")) {
final AbilityFactory af = new AbilityFactory();
final SpellAbility ab = af
.getAbility(
"AB$Destroy | Cost$ U B T | ValidTgts$ Creature.sameName | TgtPrompt$ Select target creature with the same name. | SpellDescription$ Destroy target creature with the same name as this creature.",
card);
card.addSpellAbility(ab);
} else if (cardName.equals("Sakashima the Impostor")) {
final AbilityFactory af = new AbilityFactory();
final SpellAbility ab = af
.getAbility(
"AB$DelayedTrigger | Cost$ 2 U U | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturnSak | TriggerDescription$ Return CARDNAME to it's owners hand at the beginning of the next end step.",
card);
card.addSpellAbility(ab);
card.setSVar("TrigReturnSak",
"AB$ChangeZone | Cost$ 0 | Defined$ Self | Origin$ Battlefield | Destination$ Hand");
card.setName("Sakashima the Impostor");
card.addType("Legendary");
}
}
}; // SpellAbility
final Input runtime = new Input() {
private static final long serialVersionUID = 7615038074569687330L;
@Override
public void showMessage() {
String message = "Select a creature ";
if (cardName.equals("Phyrexian Metamorph")) {
message += "or artifact ";
}
message += "on the battlefield";
CMatchUI.SINGLETON_INSTANCE.showMessage(cardName + " - " + message);
ButtonUtil.enableOnlyCancel();
}
@Override
public void selectButtonCancel() {
// player chooses not to copy anything - that's legal
AllZone.getStack().add(copy);
AllZone.getInputControl().resetInput();
}
@Override
public void selectCard(final Card c, final PlayerZone z) {
if (!z.is(ZoneType.Battlefield)) {
return;
}
if (cardName.equals("Jwari Shapeshifter") && !c.isType("Ally")) {
return;
}
if (c.isCreature() || (cardName.equals("Phyrexian Metamorph") && c.isArtifact())) {
copyTarget[0] = c;
AllZone.getStack().add(copy);
AllZone.getInputControl().resetInput();
}
}
};
final Input graveyardRuntime = new Input() {
private static final long serialVersionUID = 6950318443268022876L;
@Override
public void showMessage() {
final String message = "Select a creature in a graveyard";
final CardList choices = AllZoneUtil.getCardsIn(ZoneType.Graveyard);
final Object o = GuiUtils.chooseOneOrNone(message, choices.toArray());
if (null == o) {
this.stop();
} else {
final Card c = (Card) o;
copyTarget[0] = c;
this.stopSetNext(new InputPayManaCost(copy));
}
}
};
// Do not remove SpellAbilities created by AbilityFactory or
// Keywords.
card.clearFirstSpell();
card.addSpellAbility(copy);
final StringBuilder sb = new StringBuilder();
sb.append(cardName).append(" - enters the battlefield as a copy of selected card.");
copy.setStackDescription(sb.toString());
if (cardName.equals("Body Double")) {
copy.setBeforePayMana(graveyardRuntime);
} else {
copy.setAfterPayMana(runtime);
}
}
private static void getCard_Nebuchadnezzar(final Card card, final String cardName) {
/*
* X, T: Name a card. Target opponent reveals X cards at random from
@@ -1883,12 +1676,6 @@ public class CardFactoryCreatures {
getCard_YoseiTheMorningStar(card, cardName);
} else if (cardName.equals("Phyrexian Dreadnought")) {
getCard_PhyrexianDreadnought(card, cardName);
} else if (cardName.equals("Clone") || cardName.equals("Vesuvan Doppelganger")
|| cardName.equals("Quicksilver Gargantuan") || cardName.equals("Jwari Shapeshifter")
|| cardName.equals("Phyrexian Metamorph") || cardName.equals("Phantasmal Image")
|| cardName.equals("Body Double") || cardName.equals("Evil Twin")
|| cardName.equals("Sakashima the Impostor")) {
getCard_ClonesSeries(card, cardName);
} else if (cardName.equals("Nebuchadnezzar")) {
getCard_Nebuchadnezzar(card, cardName);
} else if (cardName.equals("Duct Crawler") || cardName.equals("Shrewd Hatchling")

View File

@@ -224,109 +224,7 @@ class CardFactoryEnchantments {
card.addDestroyCommand(toGrave);
} // *************** END ************ END **************************
// *************** START *********** START **************************
else if (cardName.equals("Copy Artifact")) {
final Card[] copyTarget = new Card[1];
final SpellAbility copy = new Spell(card) {
private static final long serialVersionUID = 4496978456522751302L;
@Override
public void resolve() {
if (card.getController().isComputer()) {
final CardList cards = AllZoneUtil.getCardsIn(ZoneType.Battlefield).getType("Artifact");
if (!cards.isEmpty()) {
copyTarget[0] = CardFactoryUtil.getBestAI(cards);
}
}
if (copyTarget[0] != null) {
Card cloned;
AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed);
// TODO: transform back and forth
cloned = AbstractCardFactory.getCard2(copyTarget[0], card.getOwner());
// TODO: untransform
card.addAlternateState(CardCharactersticName.Cloner);
card.switchStates(CardCharactersticName.Original, CardCharactersticName.Cloner);
card.setState(CardCharactersticName.Original);
if (copyTarget[0].getCurState() == CardCharactersticName.Transformed && copyTarget[0].isDoubleFaced()) {
cloned.setState(CardCharactersticName.Transformed);
}
CardFactoryUtil.copyCharacteristics(cloned, card);
this.grantExtras();
// If target is a flipped card, also copy the flipped
// state.
if (copyTarget[0].isFlip()) {
cloned.setState(CardCharactersticName.Flipped);
cloned.setImageFilename(CardUtil.buildFilename(cloned));
card.addAlternateState(CardCharactersticName.Flipped);
card.setState(CardCharactersticName.Flipped);
CardFactoryUtil.copyCharacteristics(cloned, card);
this.grantExtras();
card.setFlip(true);
card.setState(CardCharactersticName.Original);
} else {
card.setFlip(false);
}
AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed);
}
Singletons.getModel().getGameAction().moveToPlay(card);
}
private void grantExtras() {
// Grant stuff from specific cloners
if (cardName.equals("Copy Artifact")) {
card.addType("Enchantment");
}
}
}; // SpellAbility
final Input runtime = new Input() {
private static final long serialVersionUID = 8117808324791871452L;
@Override
public void showMessage() {
final StringBuilder sb = new StringBuilder();
sb.append(cardName).append(" - Select an artifact on the battlefield");
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
ButtonUtil.enableOnlyCancel();
}
@Override
public void selectButtonCancel() {
this.stop();
}
@Override
public void selectCard(final Card c, final PlayerZone z) {
if (z.is(ZoneType.Battlefield) && c.isArtifact()) {
copyTarget[0] = c;
this.stopSetNext(new InputPayManaCost(copy));
}
}
};
// Do not remove SpellAbilities created by AbilityFactory or
// Keywords.
card.clearFirstSpell();
card.addSpellAbility(copy);
final StringBuilder sb = new StringBuilder();
sb.append(cardName).append(" - enters the battlefield as a copy of selected card.");
copy.setStackDescription(sb.toString());
copy.setBeforePayMana(runtime);
} // *************** END ************ END **************************
// *************** START *********** START **************************
// *************** START *********** START **************************
else if (cardName.equals("Sylvan Library")) {
final Ability ability = new Ability(card, "") {

View File

@@ -40,6 +40,7 @@ import forge.CommandArgs;
import forge.Counters;
import forge.GameActionUtil;
import forge.Singletons;
import forge.card.CardCharacteristics;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.cost.Cost;
import forge.card.mana.ManaCost;
@@ -3880,7 +3881,7 @@ public class CardFactoryUtil {
public static Card copyStats(final Card sim) {
final Card c = new Card();
c.setFlip(sim.isFlip());
c.setFlipCard(sim.isFlipCard());
c.setDoubleFaced(sim.isDoubleFaced());
c.setCurSetCode(sim.getCurSetCode());
@@ -3933,6 +3934,31 @@ public class CardFactoryUtil {
}
/**
* Copy characteristics.
*
* @param from
* the from
* @param to
* the to
*/
public static void copyState(final Card from, final CardCharactersticName stateToCopy, final Card to) {
// copy characteristics not associated with a state
to.setCurSetCode(from.getCurSetCode());
to.setBaseLoyalty(from.getBaseLoyalty());
to.setBaseAttackString(from.getBaseAttackString());
to.setBaseDefenseString(from.getBaseDefenseString());
to.setText(from.getSpellText());
// get CardCharacteristics for desired state
CardCharacteristics characteristics = from.getState(stateToCopy);
to.getCharacteristics().copy(characteristics);
// handle triggers and replacement effect through Card class interface
to.setTriggers(characteristics.getTriggers());
to.setReplacementEffects(characteristics.getReplacementEffects());
}
public static void copySpellAbility(SpellAbility from, SpellAbility to) {
to.setDescription(from.getDescription());
to.setStackDescription(from.getDescription());

View File

@@ -22,7 +22,6 @@ import java.util.ArrayList;
import forge.AllZone;
import forge.AllZoneUtil;
import forge.Card;
import forge.CardCharactersticName;
import forge.CardList;
import forge.CardListFilter;
import forge.CardListUtil;
@@ -36,7 +35,6 @@ import forge.card.spellability.Ability;
import forge.card.spellability.AbilityMana;
import forge.card.spellability.AbilityStatic;
import forge.card.spellability.SpellAbility;
import forge.card.trigger.TriggerType;
import forge.control.input.Input;
import forge.game.player.ComputerUtil;
import forge.game.player.Player;
@@ -85,8 +83,6 @@ public class Upkeep extends Phase implements java.io.Serializable {
Upkeep.upkeepDemonicHordes();
Upkeep.upkeepTangleWire();
Upkeep.upkeepVesuvanDoppelgangerKeyword();
// Kinship cards
Upkeep.upkeepInkDissolver();
Upkeep.upkeepKithkinZephyrnaut();
@@ -2206,117 +2202,7 @@ public class Upkeep extends Phase implements java.io.Serializable {
}
} // for
} // upkeepPowerSurge()
/**
* <p>
* upkeepVesuvanDoppelgangerKeyword.
* </p>
*/
private static void upkeepVesuvanDoppelgangerKeyword() {
final Player player = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn();
final String keyword1 = "At the beginning of your upkeep, you may have this "
+ "creature become a copy of target creature except it doesn't copy that "
+ "creature's color. If you do, this creature gains this ability.";
final String keyword2 = "At the beginning of your upkeep, you may have this "
+ "creature become a copy of another target creature. If you do, "
+ "this creature gains this ability.";
CardList list = player.getCardsIn(ZoneType.Battlefield);
list = list.filter(new CardListFilter() {
public boolean addCard(Card c) {
return c.hasAnyKeyword(new String[] {keyword1, keyword2});
}
});
for (final Card c : list) {
final String keyword = c.hasKeyword(keyword1) ? keyword1 : keyword2;
final SpellAbility ability = new Ability(c, "0") {
@Override
public void resolve() {
final StringBuilder question = new StringBuilder();
question.append("Use triggered ability of ").append(c).append("?");
question.append("\r\n").append("(").append(keyword).append(")").append("\r\n");
if (GameActionUtil.showYesNoDialog(c, question.toString(), true)) {
final Card[] newTarget = new Card[1];
newTarget[0] = null;
final Ability switchTargets = new Ability(c, "0") {
@Override
public void resolve() {
if (newTarget[0] != null) {
/*
* 1. need to select new card - DONE 1a.
* need to create the newly copied card with
* pic and setinfo 2. need to add the leaves
* play command 3. need to transfer the
* keyword 4. need to update the clone
* origin of new card and old card 5. remove
* clone leaves play commands from old 5a.
* remove old from play 6. add new to play
*/
final Card newCopy = AllZone.getCardFactory().getCard(
newTarget[0].getState(CardCharactersticName.Original).getName(), player);
newCopy.setCurSetCode(newTarget[0].getCurSetCode());
// preserve the image of the Vesuvan
// Doppelganger/whatever the source is
newCopy.setImageFilename(c.getImageFilename());
AllZone.getTriggerHandler().suppressMode(TriggerType.Transformed);
newCopy.setState(newTarget[0].getCurState());
AllZone.getTriggerHandler().clearSuppression(TriggerType.Transformed);
CardFactoryUtil.copyCharacteristics(newCopy, c);
c.addExtrinsicKeyword(keyword);
if (c.hasKeyword(keyword1)) {
c.addColor("U");
}
}
}
};
AllZone.getInputControl().setInput(new Input() {
private static final long serialVersionUID = 5662272658873063221L;
@Override
public void showMessage() {
CMatchUI.SINGLETON_INSTANCE
.showMessage(c.getName() + " - Select target creature.");
ButtonUtil.enableOnlyCancel();
}
@Override
public void selectButtonCancel() {
this.stop();
}
@Override
public void selectCard(final Card selectedCard, final PlayerZone z) {
if (z.is(ZoneType.Battlefield) && selectedCard.isCreature()
&& selectedCard.canBeTargetedBy(switchTargets)) {
newTarget[0] = selectedCard;
final StringBuilder sb = new StringBuilder();
sb.append(c).append(" - switching to copy ");
sb.append(selectedCard.getName()).append(".");
switchTargets.setStackDescription(sb.toString());
AllZone.getStack().add(switchTargets);
this.stop();
}
}
});
}
}
};
ability.setDescription(keyword);
ability.setStackDescription("(OPTIONAL) " + keyword);
AllZone.getStack().addSimultaneousStackEntry(ability);
} // foreach(Card)
} // upkeepVesuvanDoppelgangerKeyword
/**
* <p>
* upkeepTangleWire.

View File

@@ -25,6 +25,8 @@ import javax.swing.JFrame;
import forge.AllZone;
import forge.Card;
import forge.CardCharactersticName;
import forge.card.CardCharacteristics;
import forge.gui.GuiDisplayUtil;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
@@ -93,22 +95,19 @@ public class GuiDownloadPicturesLQ extends GuiDownloader {
private List<DownloadObject> createDLObjects(final Card c, final String base) {
final ArrayList<DownloadObject> ret = new ArrayList<DownloadObject>();
for (final String sVar : c.getSVars().keySet()) {
for (final CardCharactersticName state : c.getStates()) {
CardCharacteristics stateCharacteristics = c.getState(state);
final String url = stateCharacteristics.getSVar("Picture");
if (!url.isEmpty()) {
final String[] urls = url.split("\\\\");
if (!sVar.startsWith("Picture")) {
continue;
final String iName = GuiDisplayUtil.cleanString(stateCharacteristics.getImageName());
ret.add(new DownloadObject(urls[0], new File(base, iName + ".jpg")));
for (int j = 1; j < urls.length; j++) {
ret.add(new DownloadObject(urls[j], new File(base, iName + j + ".jpg")));
}
}
final String url = c.getSVar(sVar);
final String[] urls = url.split("\\\\");
final String iName = GuiDisplayUtil.cleanString(c.getImageName());
ret.add(new DownloadObject(urls[0], new File(base, iName + ".jpg")));
for (int j = 1; j < urls.length; j++) {
ret.add(new DownloadObject(urls[j], new File(base, iName + j + ".jpg")));
}
}
return ret;

View File

@@ -298,7 +298,7 @@ public final class CardPrinted implements Comparable<CardPrinted>, InventoryItem
c.setImageFilename(this.getImageFilename());
if (c.hasAlternateState()) {
if (c.isFlip()) {
if (c.isFlipCard()) {
c.setState(CardCharactersticName.Flipped);
}
if (c.isDoubleFaced()) {