mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
reintegrating CloneFix branch into Trunk
This commit is contained in:
7
.gitattributes
vendored
7
.gitattributes
vendored
@@ -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
1
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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.)
|
||||
|
||||
|
||||
@@ -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}.
|
||||
|
||||
@@ -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
|
||||
15
res/cardsfolder/c/cemetery_puca.txt
Normal file
15
res/cardsfolder/c/cemetery_puca.txt
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
15
res/cardsfolder/d/dimir_doppelganger.txt
Normal file
15
res/cardsfolder/d/dimir_doppelganger.txt
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.)
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
@@ -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."
|
||||
|
||||
14
res/cardsfolder/s/sakashimas_student.txt
Normal file
14
res/cardsfolder/s/sakashimas_student.txt
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
13
res/cardsfolder/s/shapeshifters_marrow.txt
Normal file
13
res/cardsfolder/s/shapeshifters_marrow.txt
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
14
res/cardsfolder/u/unstable_shapeshifter.txt
Normal file
14
res/cardsfolder/u/unstable_shapeshifter.txt
Normal 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
|
||||
12
res/cardsfolder/v/vesuva.txt
Normal file
12
res/cardsfolder/v/vesuva.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
674
src/main/java/forge/card/abilityfactory/AbilityFactoryClone.java
Normal file
674
src/main/java/forge/card/abilityfactory/AbilityFactoryClone.java
Normal 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
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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, "") {
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user