diff --git a/.gitattributes b/.gitattributes index 9a273e6d801..68c426763a8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -640,6 +640,7 @@ res/cardsfolder/a/aven_liberator.txt -text res/cardsfolder/a/aven_mimeomancer.txt -text svneol=unset#text/plain res/cardsfolder/a/aven_redeemer.txt svneol=native#text/plain res/cardsfolder/a/aven_riftwatcher.txt svneol=native#text/plain +res/cardsfolder/a/aven_shrine.txt -text res/cardsfolder/a/aven_smokeweaver.txt svneol=native#text/plain res/cardsfolder/a/aven_squire.txt svneol=native#text/plain res/cardsfolder/a/aven_trailblazer.txt svneol=native#text/plain @@ -1085,6 +1086,7 @@ res/cardsfolder/b/bloodstone_cameo.txt svneol=native#text/plain res/cardsfolder/b/bloodthirsty_ogre.txt svneol=native#text/plain res/cardsfolder/b/bloodthorn_taunter.txt svneol=native#text/plain res/cardsfolder/b/bloodthrone_vampire.txt svneol=native#text/plain +res/cardsfolder/b/bloom_tender.txt -text res/cardsfolder/b/blossoming_wreath.txt svneol=native#text/plain res/cardsfolder/b/blowfly_infestation.txt -text res/cardsfolder/b/blue_elemental_blast.txt svneol=native#text/plain @@ -1140,6 +1142,7 @@ res/cardsfolder/b/bola_warrior.txt svneol=native#text/plain res/cardsfolder/b/bold_defense.txt -text res/cardsfolder/b/boldwyr_heavyweights.txt svneol=native#text/plain res/cardsfolder/b/boldwyr_intimidator.txt -text +res/cardsfolder/b/bomb_squad.txt -text res/cardsfolder/b/bomber_corps.txt -text res/cardsfolder/b/bond_beetle.txt -text res/cardsfolder/b/bond_of_agony.txt -text @@ -1377,6 +1380,7 @@ res/cardsfolder/c/cabal_interrogator.txt -text res/cardsfolder/c/cabal_patriarch.txt svneol=native#text/plain res/cardsfolder/c/cabal_pit.txt svneol=native#text/plain res/cardsfolder/c/cabal_ritual.txt svneol=native#text/plain +res/cardsfolder/c/cabal_shrine.txt -text res/cardsfolder/c/cabal_slaver.txt svneol=native#text/plain res/cardsfolder/c/cabal_surgeon.txt svneol=native#text/plain res/cardsfolder/c/cabal_therapy.txt -text @@ -1631,6 +1635,7 @@ res/cardsfolder/c/changeling_titan.txt svneol=native#text/plain res/cardsfolder/c/channel.txt svneol=native#text/plain res/cardsfolder/c/channel_the_suns.txt svneol=native#text/plain res/cardsfolder/c/chant_of_the_skifsang.txt -text +res/cardsfolder/c/chant_of_vitu_ghazi.txt -text res/cardsfolder/c/chaos_charm.txt svneol=native#text/plain res/cardsfolder/c/chaos_harlequin.txt -text res/cardsfolder/c/chaos_imps.txt -text @@ -2012,6 +2017,7 @@ res/cardsfolder/c/court_homunculus.txt svneol=native#text/plain res/cardsfolder/c/court_hussar.txt -text res/cardsfolder/c/court_street_denizen.txt -text res/cardsfolder/c/courtly_provocateur.txt -text +res/cardsfolder/c/covenant_of_minds.txt -text res/cardsfolder/c/cover_of_darkness.txt svneol=native#text/plain res/cardsfolder/c/covert_operative.txt svneol=native#text/plain res/cardsfolder/c/covetous_dragon.txt svneol=native#text/plain @@ -2036,6 +2042,7 @@ res/cardsfolder/c/cranial_plating.txt -text res/cardsfolder/c/crash.txt svneol=native#text/plain res/cardsfolder/c/crash_landing.txt svneol=native#text/plain res/cardsfolder/c/crash_of_rhinos.txt svneol=native#text/plain +res/cardsfolder/c/crashing_boars.txt -text res/cardsfolder/c/crashing_centaur.txt svneol=native#text/plain res/cardsfolder/c/crater_hellion.txt svneol=native#text/plain res/cardsfolder/c/craterhoof_behemoth.txt -text @@ -2127,6 +2134,7 @@ res/cardsfolder/c/crusader_of_odric.txt -text res/cardsfolder/c/crusading_knight.txt svneol=native#text/plain res/cardsfolder/c/crush.txt svneol=native#text/plain res/cardsfolder/c/crush_of_wurms.txt svneol=native#text/plain +res/cardsfolder/c/crush_underfoot.txt -text res/cardsfolder/c/crusher_zendikon.txt svneol=native#text/plain res/cardsfolder/c/crushing_pain.txt svneol=native#text/plain res/cardsfolder/c/crushing_vines.txt -text @@ -2510,6 +2518,7 @@ res/cardsfolder/d/descent_into_madness.txt -text res/cardsfolder/d/desecrated_earth.txt svneol=native#text/plain res/cardsfolder/d/desecration_demon.txt -text res/cardsfolder/d/desecration_elemental.txt svneol=native#text/plain +res/cardsfolder/d/desecrator_hag.txt -text res/cardsfolder/d/desert.txt svneol=native#text/plain res/cardsfolder/d/desert_drake.txt svneol=native#text/plain res/cardsfolder/d/desert_nomads.txt svneol=native#text/plain @@ -2923,6 +2932,7 @@ res/cardsfolder/d/dwarven_pony.txt svneol=native#text/plain res/cardsfolder/d/dwarven_recruiter.txt -text res/cardsfolder/d/dwarven_ruins.txt svneol=native#text/plain res/cardsfolder/d/dwarven_scorcher.txt -text +res/cardsfolder/d/dwarven_shrine.txt -text res/cardsfolder/d/dwarven_soldier.txt svneol=native#text/plain res/cardsfolder/d/dwarven_song.txt svneol=native#text/plain res/cardsfolder/d/dwarven_strike_force.txt svneol=native#text/plain @@ -3331,6 +3341,7 @@ res/cardsfolder/e/extraplanar_lens.txt -text svneol=unset#text/plain res/cardsfolder/e/extravagant_spirit.txt -text res/cardsfolder/e/extruder.txt svneol=native#text/plain res/cardsfolder/e/exuberant_firestoker.txt svneol=native#text/plain +res/cardsfolder/e/eye_for_an_eye.txt -text res/cardsfolder/e/eye_of_nowhere.txt svneol=native#text/plain res/cardsfolder/e/eye_of_ramos.txt svneol=native#text/plain res/cardsfolder/e/eye_of_the_storm.txt -text @@ -4817,6 +4828,7 @@ res/cardsfolder/h/hillcomber_giant.txt svneol=native#text/plain res/cardsfolder/h/hindering_light.txt svneol=native#text/plain res/cardsfolder/h/hindering_touch.txt svneol=native#text/plain res/cardsfolder/h/hindervines.txt -text +res/cardsfolder/h/hint_of_insanity.txt -text res/cardsfolder/h/hinterland_harbor.txt -text res/cardsfolder/h/hinterland_hermit_hinterland_scourge.txt -text res/cardsfolder/h/hired_giant.txt svneol=native#text/plain @@ -4838,6 +4850,7 @@ res/cardsfolder/h/hobgoblin_dragoon.txt svneol=native#text/plain res/cardsfolder/h/hokori_dust_drinker.txt svneol=native#text/plain res/cardsfolder/h/hold_the_gates.txt -text res/cardsfolder/h/hold_the_line.txt svneol=native#text/plain +res/cardsfolder/h/holistic_wisdom.txt -text res/cardsfolder/h/hollow_dogs.txt svneol=native#text/plain res/cardsfolder/h/hollow_specter.txt -text res/cardsfolder/h/hollow_trees.txt svneol=native#text/plain @@ -5118,6 +5131,7 @@ res/cardsfolder/i/infantry_veteran.txt svneol=native#text/plain res/cardsfolder/i/infected_vermin.txt svneol=native#text/plain res/cardsfolder/i/infectious_horror.txt svneol=native#text/plain res/cardsfolder/i/infectious_host.txt svneol=native#text/plain +res/cardsfolder/i/infectious_rage.txt -text res/cardsfolder/i/infernal_caretaker.txt svneol=native#text/plain res/cardsfolder/i/infernal_contract.txt svneol=native#text/plain res/cardsfolder/i/infernal_genesis.txt svneol=native#text/plain @@ -5641,6 +5655,7 @@ res/cardsfolder/k/knollspine_dragon.txt -text res/cardsfolder/k/knotvine_mystic.txt svneol=native#text/plain res/cardsfolder/k/knotvine_paladin.txt svneol=native#text/plain res/cardsfolder/k/know_naught_but_fire.txt -text +res/cardsfolder/k/knowledge_exploitation.txt -text res/cardsfolder/k/knowledge_pool.txt -text svneol=unset#text/plain res/cardsfolder/k/knowledge_vault.txt -text svneol=unset#text/plain res/cardsfolder/k/knucklebone_witch.txt svneol=native#text/plain @@ -5929,6 +5944,7 @@ res/cardsfolder/l/lightning_bolt.txt svneol=native#text/plain res/cardsfolder/l/lightning_cloud.txt svneol=native#text/plain res/cardsfolder/l/lightning_coils.txt svneol=native#text/plain res/cardsfolder/l/lightning_crafter.txt svneol=native#text/plain +res/cardsfolder/l/lightning_dart.txt -text res/cardsfolder/l/lightning_dragon.txt svneol=native#text/plain res/cardsfolder/l/lightning_elemental.txt svneol=native#text/plain res/cardsfolder/l/lightning_greaves.txt svneol=native#text/plain @@ -6380,6 +6396,7 @@ res/cardsfolder/m/melting.txt -text res/cardsfolder/m/memnarch.txt svneol=native#text/plain res/cardsfolder/m/memnite.txt svneol=native#text/plain res/cardsfolder/m/memoricide.txt -text +res/cardsfolder/m/memory_crystal.txt -text res/cardsfolder/m/memory_erosion.txt svneol=native#text/plain res/cardsfolder/m/memory_jar.txt -text res/cardsfolder/m/memory_lapse.txt svneol=native#text/plain @@ -6597,6 +6614,7 @@ res/cardsfolder/m/misshapen_fiend.txt svneol=native#text/plain res/cardsfolder/m/misstep.txt -text res/cardsfolder/m/mist_dragon.txt -text res/cardsfolder/m/mist_leopard.txt svneol=native#text/plain +res/cardsfolder/m/mist_of_stagnation.txt -text res/cardsfolder/m/mist_raven.txt -text res/cardsfolder/m/mistbind_clique.txt svneol=native#text/plain res/cardsfolder/m/mistblade_shinobi.txt svneol=native#text/plain @@ -6709,6 +6727,7 @@ res/cardsfolder/m/moonlit_strider.txt svneol=native#text/plain res/cardsfolder/m/moonlit_wake.txt svneol=native#text/plain res/cardsfolder/m/moonmist.txt -text res/cardsfolder/m/moonring_island.txt -text +res/cardsfolder/m/moonring_mirror.txt -text res/cardsfolder/m/moonsilver_spear.txt -text res/cardsfolder/m/moonveil_dragon.txt -text res/cardsfolder/m/moonwing_moth.txt svneol=native#text/plain @@ -6905,6 +6924,7 @@ res/cardsfolder/n/nantuko_mentor.txt -text svneol=unset#text/plain res/cardsfolder/n/nantuko_monastery.txt svneol=native#text/plain res/cardsfolder/n/nantuko_shade.txt svneol=native#text/plain res/cardsfolder/n/nantuko_shaman.txt svneol=native#text/plain +res/cardsfolder/n/nantuko_shrine.txt -text res/cardsfolder/n/nantuko_tracer.txt svneol=native#text/plain res/cardsfolder/n/nantuko_vigilante.txt svneol=native#text/plain res/cardsfolder/n/narcissism.txt svneol=native#text/plain @@ -7620,6 +7640,7 @@ res/cardsfolder/p/phyrexian_plaguelord.txt svneol=native#text/plain res/cardsfolder/p/phyrexian_portal.txt -text res/cardsfolder/p/phyrexian_processor.txt svneol=native#text/plain res/cardsfolder/p/phyrexian_prowler.txt svneol=native#text/plain +res/cardsfolder/p/phyrexian_purge.txt -text res/cardsfolder/p/phyrexian_rager.txt svneol=native#text/plain res/cardsfolder/p/phyrexian_reaper.txt -text res/cardsfolder/p/phyrexian_rebirth.txt svneol=native#text/plain @@ -7709,6 +7730,7 @@ res/cardsfolder/p/planar_void.txt svneol=native#text/plain res/cardsfolder/p/planeswalkers_favor.txt -text res/cardsfolder/p/planeswalkers_fury.txt -text svneol=unset#text/plain res/cardsfolder/p/planeswalkers_mirth.txt -text +res/cardsfolder/p/planeswalkers_mischief.txt -text res/cardsfolder/p/planeswalkers_scorn.txt -text res/cardsfolder/p/planewide_disaster.txt -text res/cardsfolder/p/plant_elemental.txt -text @@ -7878,6 +7900,7 @@ res/cardsfolder/p/prophecy.txt -text res/cardsfolder/p/prophetic_bolt.txt svneol=native#text/plain res/cardsfolder/p/prophetic_prism.txt svneol=native#text/plain res/cardsfolder/p/prosperity.txt svneol=native#text/plain +res/cardsfolder/p/protean_hulk.txt -text res/cardsfolder/p/protean_hydra.txt -text res/cardsfolder/p/protective_bubble.txt svneol=native#text/plain res/cardsfolder/p/proteus_machine.txt -text @@ -7941,6 +7964,7 @@ res/cardsfolder/p/pure_intentions.txt -text svneol=unset#text/plain res/cardsfolder/p/pure_reflection.txt -text res/cardsfolder/p/puresight_merrow.txt svneol=native#text/plain res/cardsfolder/p/puresteel_paladin.txt -text +res/cardsfolder/p/purgatory.txt -text res/cardsfolder/p/purge.txt svneol=native#text/plain res/cardsfolder/p/purge_the_profane.txt -text res/cardsfolder/p/purify.txt svneol=native#text/plain @@ -7995,6 +8019,7 @@ res/cardsfolder/q/quagmire_druid.txt svneol=native#text/plain res/cardsfolder/q/quagmire_lamprey.txt svneol=native#text/plain res/cardsfolder/q/quagnoth.txt svneol=native#text/plain res/cardsfolder/q/quash.txt svneol=native#text/plain +res/cardsfolder/q/quenchable_fire.txt -text res/cardsfolder/q/quest_for_ancient_secrets.txt svneol=native#text/plain res/cardsfolder/q/quest_for_pure_flame.txt -text res/cardsfolder/q/quest_for_renewal.txt svneol=native#text/plain @@ -8376,6 +8401,7 @@ res/cardsfolder/r/retether.txt -text res/cardsfolder/r/rethink.txt -text res/cardsfolder/r/retraced_image.txt -text svneol=unset#text/plain res/cardsfolder/r/retract.txt svneol=native#text/plain +res/cardsfolder/r/retribution.txt -text res/cardsfolder/r/retribution_of_the_meek.txt svneol=native#text/plain res/cardsfolder/r/retromancer.txt svneol=native#text/plain res/cardsfolder/r/return_of_the_nightstalkers.txt -text @@ -8400,9 +8426,11 @@ res/cardsfolder/r/reverse_polarity.txt -text res/cardsfolder/r/revive.txt svneol=native#text/plain res/cardsfolder/r/revive_the_fallen.txt svneol=native#text/plain res/cardsfolder/r/reviving_dose.txt svneol=native#text/plain +res/cardsfolder/r/reviving_vapors.txt -text res/cardsfolder/r/revoke_existence.txt svneol=native#text/plain res/cardsfolder/r/reward_the_faithful.txt svneol=native#text/plain res/cardsfolder/r/rewards_of_diversity.txt -text +res/cardsfolder/r/reweave.txt -text res/cardsfolder/r/rewind.txt svneol=native#text/plain res/cardsfolder/r/reya_dawnbringer.txt svneol=native#text/plain res/cardsfolder/r/rhox.txt -text @@ -8789,6 +8817,7 @@ res/cardsfolder/s/sanity_gnawers.txt svneol=native#text/plain res/cardsfolder/s/sanity_grinding.txt svneol=native#text/plain res/cardsfolder/s/sapling_of_colfenor.txt svneol=native#text/plain res/cardsfolder/s/sapphire_charm.txt -text +res/cardsfolder/s/sapphire_drake.txt -text res/cardsfolder/s/sapphire_leech.txt svneol=native#text/plain res/cardsfolder/s/sapphire_medallion.txt svneol=native#text/plain res/cardsfolder/s/saprazzan_bailiff.txt svneol=native#text/plain @@ -8981,6 +9010,7 @@ res/cardsfolder/s/searchlight_geist.txt -text res/cardsfolder/s/searing_blaze.txt -text res/cardsfolder/s/searing_flesh.txt svneol=native#text/plain res/cardsfolder/s/searing_meditation.txt svneol=native#text/plain +res/cardsfolder/s/searing_rays.txt -text res/cardsfolder/s/searing_spear.txt -text res/cardsfolder/s/searing_spear_askari.txt -text res/cardsfolder/s/searing_touch.txt svneol=native#text/plain @@ -9404,6 +9434,7 @@ res/cardsfolder/s/sisay.txt -text res/cardsfolder/s/sisays_ingenuity.txt -text svneol=unset#text/plain res/cardsfolder/s/sisays_ring.txt svneol=native#text/plain res/cardsfolder/s/sisters_of_stone_death.txt -text svneol=unset#text/plain +res/cardsfolder/s/sisters_of_stone_death_avatar.txt -text res/cardsfolder/s/sisters_of_the_flame.txt svneol=native#text/plain res/cardsfolder/s/sivitri_scarzam.txt svneol=native#text/plain res/cardsfolder/s/sivvi's_valor.txt -text @@ -9830,6 +9861,7 @@ res/cardsfolder/s/sphere_of_resistance.txt svneol=native#text/plain res/cardsfolder/s/sphere_of_safety.txt -text res/cardsfolder/s/sphere_of_the_suns.txt svneol=native#text/plain res/cardsfolder/s/sphere_of_truth.txt svneol=native#text/plain +res/cardsfolder/s/sphinx_ambassador.txt -text res/cardsfolder/s/sphinx_bone_wand.txt svneol=native#text/plain res/cardsfolder/s/sphinx_of_jwar_isle.txt svneol=native#text/plain res/cardsfolder/s/sphinx_of_lost_truths.txt svneol=native#text/plain @@ -10423,6 +10455,7 @@ res/cardsfolder/t/take_possession.txt svneol=native#text/plain res/cardsfolder/t/takenos_cavalry.txt svneol=native#text/plain res/cardsfolder/t/takenuma.txt -text res/cardsfolder/t/takenuma_bleeder.txt svneol=native#text/plain +res/cardsfolder/t/talaras_bane.txt -text res/cardsfolder/t/talaras_battalion.txt -text res/cardsfolder/t/talas_air_ship.txt svneol=native#text/plain res/cardsfolder/t/talas_explorer.txt svneol=native#text/plain @@ -10634,6 +10667,7 @@ res/cardsfolder/t/the_unspeakable.txt svneol=native#text/plain res/cardsfolder/t/the_very_soil_shall_shake.txt -text res/cardsfolder/t/the_wretched.txt -text svneol=unset#text/plain res/cardsfolder/t/theft_of_dreams.txt svneol=native#text/plain +res/cardsfolder/t/thelon_of_havenwood.txt -text res/cardsfolder/t/thelonite_druid.txt -text res/cardsfolder/t/thelonite_hermit.txt svneol=native#text/plain res/cardsfolder/t/thelonite_monk.txt svneol=native#text/plain @@ -11111,6 +11145,7 @@ res/cardsfolder/t/typhoon.txt svneol=native#text/plain res/cardsfolder/t/tyrannize.txt -text res/cardsfolder/t/tyrant_of_discord.txt -text res/cardsfolder/t/tyrranax.txt svneol=native#text/plain +res/cardsfolder/u/mist_of_stagnation.txt -text res/cardsfolder/u/uktabi_drake.txt svneol=native#text/plain res/cardsfolder/u/uktabi_efreet.txt svneol=native#text/plain res/cardsfolder/u/uktabi_faerie.txt svneol=native#text/plain @@ -11166,6 +11201,7 @@ res/cardsfolder/u/unearth.txt svneol=native#text/plain res/cardsfolder/u/unearthly_blizzard.txt svneol=native#text/plain res/cardsfolder/u/unerring_sling.txt -text res/cardsfolder/u/unexpected_results.txt -text +res/cardsfolder/u/unforge.txt -text res/cardsfolder/u/unfulfilled_desires.txt svneol=native#text/plain res/cardsfolder/u/unhallowed_pact.txt -text res/cardsfolder/u/unhinge.txt svneol=native#text/plain @@ -11489,6 +11525,7 @@ res/cardsfolder/v/viridian_revel.txt svneol=native#text/plain res/cardsfolder/v/viridian_scout.txt svneol=native#text/plain res/cardsfolder/v/viridian_shaman.txt svneol=native#text/plain res/cardsfolder/v/viridian_zealot.txt svneol=native#text/plain +res/cardsfolder/v/viridian_zealot_avatar.txt -text res/cardsfolder/v/virtues_ruin.txt svneol=native#text/plain res/cardsfolder/v/virtuous_charge.txt svneol=native#text/plain res/cardsfolder/v/virulent_sliver.txt svneol=native#text/plain @@ -11724,6 +11761,7 @@ res/cardsfolder/w/warped_researcher.txt svneol=native#text/plain res/cardsfolder/w/warren_instigator.txt svneol=native#text/plain res/cardsfolder/w/warren_pilferers.txt -text res/cardsfolder/w/warren_scourge_elf.txt svneol=native#text/plain +res/cardsfolder/w/warren_weirding.txt -text res/cardsfolder/w/warrior_angel.txt svneol=native#text/plain res/cardsfolder/w/warrior_en_kor.txt -text res/cardsfolder/w/warriors_charge.txt svneol=native#text/plain @@ -12026,6 +12064,7 @@ res/cardsfolder/w/worldfire.txt -text res/cardsfolder/w/worldgorger_dragon.txt svneol=native#text/plain res/cardsfolder/w/worldly_counsel.txt svneol=native#text/plain res/cardsfolder/w/worldly_tutor.txt svneol=native#text/plain +res/cardsfolder/w/worldpurge.txt -text res/cardsfolder/w/worldslayer.txt svneol=native#text/plain res/cardsfolder/w/worldspine_wurm.txt -text res/cardsfolder/w/worm_harvest.txt svneol=native#text/plain diff --git a/res/cardsfolder/a/aven_shrine.txt b/res/cardsfolder/a/aven_shrine.txt new file mode 100644 index 00000000000..95b47c0642c --- /dev/null +++ b/res/cardsfolder/a/aven_shrine.txt @@ -0,0 +1,13 @@ +Name:Aven Shrine +ManaCost:1 W W +Types:Enchantment +Text:no text +T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigGainLifeRem | TriggerDescription$ Whenever a player casts a spell, that player gains X life, where X is the number of cards in all graveyards with the same name as that spell. +SVar:TrigGainLifeRem:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | PumpZone$ Stack | RememberObjects$ TriggeredCard | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ TriggeredActivator | LifeAmount$ X | References$ X | SubAbility$ DBCleanup +SVar:X:Count$ValidGraveyard Card.sharesNameWith Remembered +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/aven_shrine.jpg +Oracle:Whenever a player casts a spell, that player gains X life, where X is the number of cards in all graveyards with the same name as that spell. +End \ No newline at end of file diff --git a/res/cardsfolder/b/bloom_tender.txt b/res/cardsfolder/b/bloom_tender.txt new file mode 100644 index 00000000000..9d6a49f6f98 --- /dev/null +++ b/res/cardsfolder/b/bloom_tender.txt @@ -0,0 +1,18 @@ +Name:Bloom Tender +ManaCost:1 G +Types:Creature Elf Druid +Text:no text +PT:1/1 +A:AB$ Mana | Cost$ T | Produced$ W | ConditionCheckSVar$ CheckW | ConditionSVarCompare$ GE1 | SubAbility$ DBManaU | SpellDescription$ For each color among permanents you control, add one mana of that color to your mana pool. +SVar:DBManaU:DB$ Mana | Produced$ U | ConditionCheckSVar$ CheckU | ConditionSVarCompare$ GE1 | SubAbility$ DBManaB +SVar:DBManaB:DB$ Mana | Produced$ B | ConditionCheckSVar$ CheckB | ConditionSVarCompare$ GE1 | SubAbility$ DBManaR +SVar:DBManaR:DB$ Mana | Produced$ R | ConditionCheckSVar$ CheckR | ConditionSVarCompare$ GE1 | SubAbility$ DBManaG +SVar:DBManaG:DB$ Mana | Produced$ G | ConditionCheckSVar$ CheckG | ConditionSVarCompare$ GE1 +SVar:CheckW:Count$Valid Permanent.YouCtrl+White +SVar:CheckU:Count$Valid Permanent.YouCtrl+Blue +SVar:CheckB:Count$Valid Permanent.YouCtrl+Black +SVar:CheckR:Count$Valid Permanent.YouCtrl+Red +SVar:CheckG:Count$Valid Permanent.YouCtrl+Green +SVar:Picture:http://www.wizards.com/global/images/magic/general/bloom_tender.jpg +Oracle:{T}: For each color among permanents you control, add one mana of that color to your mana pool. +End \ No newline at end of file diff --git a/res/cardsfolder/b/bomb_squad.txt b/res/cardsfolder/b/bomb_squad.txt new file mode 100644 index 00000000000..e3eaa9c5895 --- /dev/null +++ b/res/cardsfolder/b/bomb_squad.txt @@ -0,0 +1,17 @@ +Name:Bomb Squad +ManaCost:3 R +Types:Creature Dwarf +Text:no text +PT:1/1 +A:AB$ PutCounter | Cost$ T | ValidTgts$ Creature | TgtPrompt$ Select target creature | CounterType$ FUSE | CounterNum$ 1 | IsCurse$ True | SpellDescription$ Put a fuse counter on target creature. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigCounters | TriggerDescription$ At the beginning of your upkeep, put a fuse counter on each creature with a fuse counter on it. +SVar:TrigCounters:AB$ PutCounterAll | Cost$ 0 | ValidCards$ Creature.counters_GE1_FUSE | CounterType$ FUSE | CounterNum$ 1 +T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Creature.counters_GE4_FUSE | PresentCompare$ GE1 | Execute$ TrigRepeatEach | TriggerDescription$ Whenever a creature has four or more fuse counters on it, remove all fuse counters from it and destroy it. That creature deals 4 damage to its controller. +SVar:TrigRepeatEach:AB$ RepeatEach | Cost$ 0 | RepeatCards$ Creature.counters_GE4_FUSE | RepeatSubAbility$ DBRemove +SVar:DBRemove:DB$ RemoveCounter | Defined$ Remembered | CounterType$ FUSE | CounterNum$ All | SubAbility$ DBDestroy +SVar:DBDestroy:DB$ Destroy | Defined$ Remembered | SubAbility$ DBDmg +SVar:DBDmg:DB$ DealDamage | Defined$ RememberedController | NumDmg$ 4 | DamageSource$ Remembered +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/bomb_squad.jpg +Oracle:{T}: Put a fuse counter on target creature.\nAt the beginning of your upkeep, put a fuse counter on each creature with a fuse counter on it.\nWhenever a creature has four or more fuse counters on it, remove all fuse counters from it and destroy it. That creature deals 4 damage to its controller. +End \ No newline at end of file diff --git a/res/cardsfolder/c/cabal_shrine.txt b/res/cardsfolder/c/cabal_shrine.txt new file mode 100644 index 00000000000..40dceb43c8d --- /dev/null +++ b/res/cardsfolder/c/cabal_shrine.txt @@ -0,0 +1,13 @@ +Name:Cabal Shrine +ManaCost:1 B B +Types:Enchantment +Text:no text +T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigDiscardRem | TriggerDescription$ Whenever a player casts a spell, that player discards X cards, where X is the number of cards in all graveyards with the same name as that spell. +SVar:TrigDiscardRem:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | PumpZone$ Stack | RememberObjects$ TriggeredCard | SubAbility$ DBDiscard +SVar:DBDiscard:DB$ Discard | Defined$ TriggeredActivator | NumCards$ X | References$ X | Mode$ TgtChoose | SubAbility$ DBCleanup +SVar:X:Count$ValidGraveyard Card.sharesNameWith Remembered +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/cabal_shrine.jpg +Oracle:Whenever a player casts a spell, that player discards X cards, where X is the number of cards in all graveyards with the same name as that spell. +End \ No newline at end of file diff --git a/res/cardsfolder/c/chant_of_vitu_ghazi.txt b/res/cardsfolder/c/chant_of_vitu_ghazi.txt new file mode 100644 index 00000000000..675e538130a --- /dev/null +++ b/res/cardsfolder/c/chant_of_vitu_ghazi.txt @@ -0,0 +1,13 @@ +Name:Chant of Vitu-Ghazi +ManaCost:6 W W +Types:Instant +Text:no text +K:Convoke +A:SP$ Effect | Cost$ 6 W W | ReplacementEffects$ RepCombatDmg,RepNonCombatDmg | SVars$ GainLifeYou,X | RememberObjects$ You | SpellDescription$ Prevent all damage that would be dealt by creatures this turn. You gain life equal to the damage prevented this way. +SVar:RepCombatDmg:Event$ DamageDone | ValidSource$ Creature | ReplaceWith$ GainLifeYou | PreventionEffect$ True | IsCombat$ True | Description$ Prevent all combat damage that would be dealt by creatures this turn. You gain life equal to the damage prevented this way. +SVar:RepNonCombatDmg:Event$ DamageDone | ValidSource$ Creature | ReplaceWith$ GainLifeYou | PreventionEffect$ True | IsCombat$ False | Description$ Prevent all noncombat damage that would be dealt by creatures this turn. You gain life equal to the damage prevented this way. +SVar:GainLifeYou:AB$ GainLife | Cost$ 0 | Defined$ Remembered | LifeAmount$ X | References$ X +SVar:X:ReplaceCount$DamageAmount +SVar:Picture:http://www.wizards.com/global/images/magic/general/chant_of_vitu_ghazi.jpg +Oracle:Convoke (Each creature you tap while casting this spell reduces its cost by {1} or by one mana of that creature's color.)\nPrevent all damage that would be dealt by creatures this turn. You gain life equal to the damage prevented this way. +End \ No newline at end of file diff --git a/res/cardsfolder/c/covenant_of_minds.txt b/res/cardsfolder/c/covenant_of_minds.txt new file mode 100644 index 00000000000..da6ea8e85c7 --- /dev/null +++ b/res/cardsfolder/c/covenant_of_minds.txt @@ -0,0 +1,13 @@ +Name:Covenant of Minds +ManaCost:4 U +Types:Sorcery +Text:no text +A:SP$ Dig | Cost$ 2 B | DigNum$ 3 | NoMove$ True | Reveal$ True | DestinationZone$ Library | LibraryPosition$ 0 | LibraryPosition2$ 0 | SubAbility$ DBChoice | RememberRevealed$ True | SpellDescription$ Reveal the top three cards of your library. Target opponent may choose to put those cards into your hand. If he or she doesn't, put those cards into your graveyard and draw five cards. +SVar:DBChoice:DB$ GenericChoice | ValidTgts$ Opponent | Choices$ CovenantDraw,CovenantMillDraw +SVar:CovenantDraw:DB$ Draw | Defined$ SourceController | NumCards$ X | References$ X | ChoiceDescription$ You may choose to put those cards into that player's hand. +SVar:CovenantMillDraw:DB$ Mill | Defined$ SourceController | NumCards$ X | References$ X | SubAbility$ DBDraw | ChoiceDescription$ If you don't, put those cards into that player's graveyard and that player draws five cards. +SVar:DBDraw:DB$ Draw | Defined$ SourceController | NumCards$ 5 +SVar:X:Count$RememberedSize +SVar:Picture:http://www.wizards.com/global/images/magic/general/covenant_of_minds.jpg +Oracle:Reveal the top three cards of your library. Target opponent may choose to put those cards into your hand. If he or she doesn't, put those cards into your graveyard and draw five cards. +End \ No newline at end of file diff --git a/res/cardsfolder/c/crashing_boars.txt b/res/cardsfolder/c/crashing_boars.txt new file mode 100644 index 00000000000..cbb8da5b99e --- /dev/null +++ b/res/cardsfolder/c/crashing_boars.txt @@ -0,0 +1,13 @@ +Name:Crashing Boars +ManaCost:2 G +Types:Creature Snake Warrior +Text:no text +PT:1/3 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigChoose | TriggerDescription$ Whenever CARDNAME attacks, defending player chooses an untapped creature he or she controls. That creature blocks CARDNAME this turn if able. +SVar:TrigChoose:AB$ ChooseCard | Cost$ 0 | Defined$ DefendingPlayer | Amount$ 1 | Choices$ Creature.untapped+DefenderCtrl | SubAbility$ DBMustBlock +SVar:DBMustBlock:DB$ MustBlock | Defined$ ChosenCard | SpellDescription$ Target creature blocks CARDNAME this turn if able. +SVar:RemAIDeck:True +SVar:Rarity:Uncommon +SVar:Picture:http://www.wizards.com/global/images/magic/general/crashing_boars.jpg +Oracle:Whenever Crashing Boars attacks, defending player chooses an untapped creature he or she controls. That creature blocks Crashing Boars this turn if able. +End \ No newline at end of file diff --git a/res/cardsfolder/c/crush_underfoot.txt b/res/cardsfolder/c/crush_underfoot.txt new file mode 100644 index 00000000000..547341af66d --- /dev/null +++ b/res/cardsfolder/c/crush_underfoot.txt @@ -0,0 +1,13 @@ +Name:Crush Underfoot +ManaCost:1 R +Types:Tribal Instant Giant +Text:no text +A:SP$ ChooseCard | Cost$ 1 R | Defined$ You | Amount$ 1 | Choices$ Creature.Giant+YouCtrl | ChoiceTitle$ Choose a Giant creature you control | RememberChosen$ True | SubAbility$ DBDmg | SpellDescription$ Choose a Giant creature you control. It deals damage equal to its power to target creature. +SVar:DBDmg:DB$ DealDamage | NumDmg$ X | References$ X | DamageSource$ Remembered | ValidTgts$ Creature | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Remembered$CardPower +SVar:BuffedBy:Giant +SVar:Rarity:Uncommon +SVar:Picture:http://www.wizards.com/global/images/magic/general/crush_underfoot.jpg +Oracle:Choose a Giant creature you control. It deals damage equal to its power to target creature. +End \ No newline at end of file diff --git a/res/cardsfolder/d/desecrator_hag.txt b/res/cardsfolder/d/desecrator_hag.txt new file mode 100644 index 00000000000..d37b18ee4aa --- /dev/null +++ b/res/cardsfolder/d/desecrator_hag.txt @@ -0,0 +1,12 @@ +Name:Desecrator Hag +ManaCost:2 BG BG +Types:Creature Hag +Text:no text +PT:2/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME enters the battlefield, return to your hand the creature card in your graveyard with the greatest power. If two or more cards are tied for greatest power, you choose one of them. +SVar:TrigReturn:AB$ ChooseCard | Cost$ 0 | Choices$ Creature.yardGreatestPower+YouOwn | Amount$ 1 | ChoiceZone$ Graveyard | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ChosenCard +SVar:Rarity:Common +SVar:Picture:http://www.wizards.com/global/images/magic/general/desecrator_hag.jpg +Oracle:When Desecrator Hag enters the battlefield, return to your hand the creature card in your graveyard with the greatest power. If two or more cards are tied for greatest power, you choose one of them. +End \ No newline at end of file diff --git a/res/cardsfolder/d/dwarven_shrine.txt b/res/cardsfolder/d/dwarven_shrine.txt new file mode 100644 index 00000000000..9204665039e --- /dev/null +++ b/res/cardsfolder/d/dwarven_shrine.txt @@ -0,0 +1,13 @@ +Name:Dwarven Shrine +ManaCost:1 R R +Types:Enchantment +Text:no text +T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigDmgRem | TriggerDescription$ Whenever a player casts a spell, CARDNAME deals X damage to that player, where X is twice the number of cards in all graveyards with the same name as that spell. +SVar:TrigDmgRem:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | PumpZone$ Stack | RememberObjects$ TriggeredCard | SubAbility$ DBDmg +SVar:DBDmg:DB$ DealDamage | Defined$ TriggeredActivator | NumDmg$ X | References$ X | SubAbility$ DBCleanup +SVar:X:Count$ValidGraveyard Card.sharesNameWith Remembered/Twice +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/dwarven_shrine.jpg +Oracle:Whenever a player casts a spell, Dwarven Shrine deals X damage to that player, where X is twice the number of cards in all graveyards with the same name as that spell. +End \ No newline at end of file diff --git a/res/cardsfolder/e/eye_for_an_eye.txt b/res/cardsfolder/e/eye_for_an_eye.txt new file mode 100644 index 00000000000..e65e549317e --- /dev/null +++ b/res/cardsfolder/e/eye_for_an_eye.txt @@ -0,0 +1,19 @@ +Name:Eye for an Eye +ManaCost:W W +Types:Instant +Text:no text +A:SP$ ChooseSource | Cost$ W W | Choices$ Card | RememberChosen$ True | AILogic$ NeedsPrevention | SubAbility$ DBEffect | SpellDescription$ The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and CARDNAME deals that much damage to that source's controller. +SVar:DBEffect:DB$ Effect | ReplacementEffects$ SelflessCombat,SelflessNonCombat | SVars$ CombatDmg,NonCombatDmg,ExileEffect,X,EyeforEyeCombat,EyeforEyenonCombat | RememberObjects$ Remembered | ImprintCards$ Self | SubAbility$ DBCleanup | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 +SVar:SelflessCombat:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.IsRemembered | IsCombat$ True | ReplaceWith$ CombatDmg | Description$ The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and this card deals that much damage to that source's controller. +SVar:SelflessNonCombat:Event$ DamageDone | ValidTarget$ You | ValidSource$ Card.IsRemembered | IsCombat$ False | ReplaceWith$ NonCombatDmg | Secondary$ True | Description$ The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and this card deals that much damage to that source's controller. +SVar:CombatDmg:AB$ DealDamage | Cost$ 0 | Defined$ You | DamageSource$ ReplacedSource | CombatDamage$ True | NumDmg$ X | SubAbility$ EyeforEyeCombat +SVar:EyeforEyeCombat:DB$ DealDamage | Defined$ RememberedController | DamageSource$ Imprinted | CombatDamage$ True | NumDmg$ X | SubAbility$ ExileEffect +SVar:NonCombatDmg:AB$ DealDamage | Cost$ 0 | Defined$ You | DamageSource$ ReplacedSource | NumDmg$ X | SubAbility$ EyeforEyenonCombat +SVar:EyeforEyenonCombat:DB$ DealDamage | Defined$ RememberedController | DamageSource$ Imprinted | CombatDamage$ False | NumDmg$ X | SubAbility$ ExileEffect +SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:ReplaceCount$DamageAmount +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/eye_for_an_eye.jpg +Oracle:The next time a source of your choice would deal damage to you this turn, instead that source deals that much damage to you and Eye for an Eye deals that much damage to that source's controller. +End \ No newline at end of file diff --git a/res/cardsfolder/h/hint_of_insanity.txt b/res/cardsfolder/h/hint_of_insanity.txt new file mode 100644 index 00000000000..c91bbdd55b4 --- /dev/null +++ b/res/cardsfolder/h/hint_of_insanity.txt @@ -0,0 +1,12 @@ +Name:Hint of Insanity +ManaCost:2 B +Types:Sorcery +Text:no text +A:SP$ RevealHand | Cost$ 2 B | ValidTgts$ Player | IsCurse$ True | RememberRevealed$ True | RememberTargets$ True | SubAbility$ DBRepeat | StackDescription$ SpellDescription | SpellDescription$ Target player reveals his or her hand. That player discards all nonland cards with the same name as another card in his or her hand. +SVar:DBRepeat:DB$ RepeatEach | RepeatCards$ Card.IsRemembered+nonLand | Zone$ Hand | RepeatSubAbility$ DBDiscard | UseImprinted$ True | SubAbility$ DBCleanup +SVar:DBDiscard:DB$ Discard | Mode$ Defined | Defined$ Remembered | DefinedCards$ ValidHand Card.sharesNameWith Imprinted+RememberedPlayerCtrl+IsNotImprinted +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/hint_of_insanity.jpg +Oracle:Target player reveals his or her hand. That player discards all nonland cards with the same name as another card in his or her hand. +End \ No newline at end of file diff --git a/res/cardsfolder/h/holistic_wisdom.txt b/res/cardsfolder/h/holistic_wisdom.txt new file mode 100644 index 00000000000..b1452e33e27 --- /dev/null +++ b/res/cardsfolder/h/holistic_wisdom.txt @@ -0,0 +1,11 @@ +Name:Holistic Wisdom +ManaCost:1 G G +Types:Enchantment +Text:no text +A:AB$ Pump | Cost$ 2 ExileFromHand<1/Card> | RememberCostCards$ True | SubAbility$ DBChangeZone | ValidTgts$ Card.YouOwn | TgtZone$ Graveyard | StackDescription$ None | SpellDescription$ Return target card from your graveyard to your hand if it shares a card type with the card exiled this way. (Artifact, creature, enchantment, instant, land, planeswalker, sorcery, and tribal are card types.) +SVar:DBChangeZone:DB$ ChangeZone | Defined$ ParentTarget | Origin$ Graveyard | Destination$ Hand | ConditionDefined$ ParentTarget | ConditionPresent$ Card.sharesCardTypeWith Remembered | ConditionCompare$ GE1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/holistic_wisdom.jpg +Oracle:{2}, Exile a card from your hand: Return target card from your graveyard to your hand if it shares a card type with the card exiled this way. (Artifact, creature, enchantment, instant, land, planeswalker, sorcery, and tribal are card types.) +End \ No newline at end of file diff --git a/res/cardsfolder/i/infectious_rage.txt b/res/cardsfolder/i/infectious_rage.txt new file mode 100644 index 00000000000..0d6bc843419 --- /dev/null +++ b/res/cardsfolder/i/infectious_rage.txt @@ -0,0 +1,13 @@ +Name:Infectious Rage +ManaCost:1 R +Types:Enchantment Aura +Text:no text +K:Enchant creature +A:SP$ Attach | Cost$ 1 R | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 2 | AddToughness$ -1 | Description$ Enchanted creature gets +2/-1. +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.AttachedBy | Execute$ TrigChangeZone | TriggerDescription$ When enchanted creature dies, choose a creature at random CARDNAME can enchant. Return CARDNAME to the battlefield attached to that creature. +SVar:TrigChangeZone:AB$ ChooseCard | Cost$ 0 | AtRandom$ True | Choices$ Creature.CanBeEnchantedBy | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | Defined$ Self | AttachedTo$ ChosenCard +SVar:Picture:http://www.wizards.com/global/images/magic/general/infectious_rage.jpg +Oracle:Enchant creature\nEnchanted creature gets +2/-1.\nWhen enchanted creature dies, choose a creature at random Infectious Rage can enchant. Return Infectious Rage to the battlefield attached to that creature. +End \ No newline at end of file diff --git a/res/cardsfolder/k/kembas_legion.txt b/res/cardsfolder/k/kembas_legion.txt index 6f6d6cc18b5..c882e2abb1f 100644 --- a/res/cardsfolder/k/kembas_legion.txt +++ b/res/cardsfolder/k/kembas_legion.txt @@ -4,7 +4,7 @@ Types:Creature Cat Soldier Text:no text PT:4/6 K:Vigilance -S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can block an additional creature. | KeywordMultiplier$ X | Description$ Kemba's Legion can block an additional creature for each Equipment attached to Kemba's Legion. +S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can block an additional creature. | KeywordMultiplier$ X | Description$ CARDNAME can block an additional creature for each Equipment attached to CARDNAME. SVar:X:Count$Valid Equipment.Attached SVar:Rarity:Uncommon SVar:Picture:http://www.wizards.com/global/images/magic/general/kembas_legion.jpg diff --git a/res/cardsfolder/k/knowledge_exploitation.txt b/res/cardsfolder/k/knowledge_exploitation.txt new file mode 100644 index 00000000000..8f41961d476 --- /dev/null +++ b/res/cardsfolder/k/knowledge_exploitation.txt @@ -0,0 +1,15 @@ +Name:Knowledge Exploitation +ManaCost:5 U U +Types:Tribal Instant Rogue +Text:no text +A:SP$ ChangeZone | Cost$ 5 U U | Origin$ Library | Destination$ Library | ChangeType$ Instant,Sorcery | ChangeNum$ 1 | RememberChanged$ True | Reveal$ True | Shuffle$ False | DefinedPlayer$ Targeted | Chooser$ You | Mandatory$ True | SubAbility$ DBPlay | SpellDescription$ Search target opponent's library for an instant or sorcery card. You may cast that card without paying its mana cost. Then that player shuffles his or her library. +A:SP$ ChangeZone | Cost$ 3 U | Activation$ Prowl | ValidTgts$ Opponent | Origin$ Library | Destination$ Library | ChangeType$ Instant,Sorcery | ChangeNum$ 1 | RememberChanged$ True | Reveal$ True | Shuffle$ False | PrecostDesc$ Prowl 3 U | DefinedPlayer$ Targeted | Chooser$ You | Mandatory$ True | SubAbility$ DBPlay | SpellDescription$ (You may cast this for its prowl cost if you dealt combat damage to a player this turn with a Rogue.) +SVar:DBPlay:DB$ Play | Defined$ Remembered | Controller$ You | WithoutManaCost$ True | Optional$ True | SubAbility$ DBShuffle +SVar:DBShuffle:DB$ Shuffle | Defined$ RememberedController | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemAIDeck:Rare +SVar:Rarity:Uncommon +SVar:Picture:http://www.wizards.com/global/images/magic/general/knowledge_exploitation.jpg +SetInfo:MOR|Rare|http://magiccards.info/scans/en/mt/38.jpg +Oracle:Prowl {3}{U} (You may cast this for its prowl cost if you dealt combat damage to a player this turn with a Rogue.)\nSearch target opponent's library for an instant or sorcery card. You may cast that card without paying its mana cost. Then that player shuffles his or her library. +End \ No newline at end of file diff --git a/res/cardsfolder/l/lightning_dart.txt b/res/cardsfolder/l/lightning_dart.txt new file mode 100644 index 00000000000..c8fca026fe9 --- /dev/null +++ b/res/cardsfolder/l/lightning_dart.txt @@ -0,0 +1,14 @@ +Name:Lightning Dart +ManaCost:1 R +Types:Instant +Text:no text +A:SP$ Pump | Cost$ 1 R | ValidTgts$ Creature | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBDmg | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals 1 damage to target creature. If that creature is white or blue, CARDNAME deals 4 damage to it instead. +SVar:DBDmg:DB$ DealDamage | Defined$ Remembered | NumDmg$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBDmgWU | StackDescription$ None +SVar:DBDmgWU:DB$ DealDamage | Defined$ Remembered | NumDmg$ 4 | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | StackDescription$ None | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Count$Valid Creature.IsRemembered+White,Creature.IsRemembered+Blue +SVar:RemAIDeck:True +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/lightning_dart.jpg +Oracle:Lightning Dart deals 1 damage to target creature. If that creature is white or blue, Lightning Dart deals 4 damage to it instead. +End \ No newline at end of file diff --git a/res/cardsfolder/m/memory_crystal.txt b/res/cardsfolder/m/memory_crystal.txt new file mode 100644 index 00000000000..f16df16266b --- /dev/null +++ b/res/cardsfolder/m/memory_crystal.txt @@ -0,0 +1,8 @@ +Name:Memory Crystal +ManaCost:3 +Types:Artifact +Text:no text +S:Mode$ ReduceCost | ValidCard$ Card | Type$ Buyback | Activator$ Player | Amount$ 2 | Description$ Buyback costs cost 2 less. +SVar:Picture:http://www.wizards.com/global/images/magic/general/memory_crystal.jpg +Oracle:Buyback costs cost {2} less. +End \ No newline at end of file diff --git a/res/cardsfolder/m/mist_of_stagnation.txt b/res/cardsfolder/m/mist_of_stagnation.txt new file mode 100644 index 00000000000..003136a4a07 --- /dev/null +++ b/res/cardsfolder/m/mist_of_stagnation.txt @@ -0,0 +1,14 @@ +Name:Mist of Stagnation +ManaCost:3 U U +Types:Enchantment +Text:Permanents don't untap during their controllers' untap steps. +K:Permanents don't untap during their controllers' untap steps:Permanent +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player chooses a permanent for each card in his or her graveyard, then untaps those permanents. +SVar:TrigChoose:AB$ ChooseCard | Cost$ 0 | Defined$ TriggeredPlayer | Amount$ X | References$ X | Choices$ Permanent.ActivePlayerCtrl | ChoiceTitle$ Choose a permanent to untap | RememberChosen$ True | SubAbility$ DBUntap +SVar:DBUntap:DB$ UntapAll | ValidCards$ Permanent.IsRemembered | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Count$ValidGraveyard Card.ActivePlayerCtrl +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/mist_of_stagnation.jpg +Oracle:Permanents don't untap during their controllers' untap steps.\nAt the beginning of each player's upkeep, that player chooses a permanent for each card in his or her graveyard, then untaps those permanents. +End \ No newline at end of file diff --git a/res/cardsfolder/m/moonring_mirror.txt b/res/cardsfolder/m/moonring_mirror.txt new file mode 100644 index 00000000000..fb818b3d772 --- /dev/null +++ b/res/cardsfolder/m/moonring_mirror.txt @@ -0,0 +1,17 @@ +Name:Moonring Mirror +ManaCost:5 +Types:Artifact +Text:no text +T:Mode$ Drawn | ValidCard$ Card.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigMill | TriggerDescription$ Whenever you draw a card, exile the top card of your library face down. +SVar:TrigMill:AB$ Mill | Cost$ 0 | NumCards$ 1 | Defined$ You | Destination$ Exile | ExileFaceDown$ True | RememberMilled$ True +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigChangeHandExile | TriggerDescription$ At the beginning of your upkeep, you may exile all cards from your hand face down. If you do, put all other cards you own exiled with CARDNAME into your hand. +SVar:TrigChangeHandExile:AB$ ChangeZoneAll | Cost$ 0 | Origin$ Hand | Destination$ Exile | ExileFaceDown$ True | ChangeType$ Card.YouCtrl | RememberChanged$ True | Imprint$ True | SubAbility$ ChangeBack +SVar:ChangeBack:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered+IsNotImprinted | Origin$ Exile | Destination$ Hand | ForgetChanged$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup2 +SVar:DBCleanup2:DB$ Cleanup | ClearRemembered$ True +SVar:RemAIDeck:True +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/moonring_mirror.jpg +Oracle:Whenever you draw a card, exile the top card of your library face down.\nAt the beginning of your upkeep, you may exile all cards from your hand face down. If you do, put all other cards you own exiled with Moonring Mirror into your hand. +End \ No newline at end of file diff --git a/res/cardsfolder/n/nantuko_shrine.txt b/res/cardsfolder/n/nantuko_shrine.txt new file mode 100644 index 00000000000..22520e6e710 --- /dev/null +++ b/res/cardsfolder/n/nantuko_shrine.txt @@ -0,0 +1,13 @@ +Name:Nantuko Shrine +ManaCost:1 G G +Types:Enchantment +Text:no text +T:Mode$ SpellCast | ValidCard$ Card | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigTokenRem | TriggerDescription$ Whenever a player casts a spell, that player puts X 1/1 green Squirrel creature tokens onto the battlefield, where X is the number of cards in all graveyards with the same name as that spell. +SVar:TrigTokenRem:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | PumpZone$ Stack | RememberObjects$ TriggeredCard | SubAbility$ DBToken +SVar:DBToken:DB$ Token | TokenAmount$ X | TokenName$ Squirrel | TokenTypes$ Creature,Squirrel | TokenOwner$ TriggeredActivator | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 1 | References$ X | SubAbility$ DBCleanup +SVar:X:Count$ValidGraveyard Card.sharesNameWith Remembered +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/nantuko_shrine.jpg +Oracle:Whenever a player casts a spell, that player puts X 1/1 green Squirrel creature tokens onto the battlefield, where X is the number of cards in all graveyards with the same name as that spell. +End \ No newline at end of file diff --git a/res/cardsfolder/p/phyrexian_purge.txt b/res/cardsfolder/p/phyrexian_purge.txt new file mode 100644 index 00000000000..9e2a4dc3370 --- /dev/null +++ b/res/cardsfolder/p/phyrexian_purge.txt @@ -0,0 +1,12 @@ +Name:Phyrexian Purge +ManaCost:2 B R +Types:Sorcery +Text:no text +A:SP$ Destroy | Cost$ 2 B R PayLife | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ MaxPayLifeLimit | References$ X,Y,MaxPayLifeLimit | SpellDescription$ Destroy any number of target creatures. CARDNAME costs 3 life more to cast for each target. +SVar:MaxPayLifeLimit:Count$YourLifeTotal/DivideEvenlyDown.3 +SVar:X:SVar$Y/Times.3 +SVar:Y:Targeted$Amount +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/phyrexian_purge.jpg +Oracle:Destroy any number of target creatures.\nPhyrexian Purge costs 3 life more to cast for each target. +End \ No newline at end of file diff --git a/res/cardsfolder/p/planeswalkers_mischief.txt b/res/cardsfolder/p/planeswalkers_mischief.txt new file mode 100644 index 00000000000..5698c102485 --- /dev/null +++ b/res/cardsfolder/p/planeswalkers_mischief.txt @@ -0,0 +1,18 @@ +Name:Planeswalker's Mischief +ManaCost:2 U +Types:Enchantment +Text:no text +A:AB$ Reveal | Cost$ 3 U | Random$ True | RememberRevealed$ True | ValidTgts$ Opponent | TgtPrompt$ Select target opponent to reveal a card | SorcerySpeed$ True | SubAbility$ DBChangeZone | SpellDescription$ Target opponent reveals a card at random from his or her hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand. Activate this ability only any time you could cast a sorcery. (If it has X in its mana cost, X is 0.) +SVar:DBChangeZone:DB$ ChangeZoneAll | ChangeType$ Instant.IsRemembered,Sorcery.IsRemembered | Origin$ Hand | Destination$ Exile | SubAbility$ DBForgetOther +SVar:DBForgetOther:DB$ Cleanup | ClearRemembered$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | StaticAbilities$ MischiefPlay | Triggers$ TrigEOT,TrigChangesZone | SVars$ MischiefCleanup,MischiefReturn | RememberObjects$ Remembered | Permanent$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:MischiefPlay:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered+OppOwn | AffectedZone$ Exile | AddHiddenKeyword$ May be played by your opponent without paying its mana cost | Description$ You may play that exiled card. +SVar:TrigEOT:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Execute$ MischiefReturn | TriggerDescription$ At the beginning of the next end step, if you haven't cast it, return it to its owner's hand. +SVar:MischiefReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Hand | +SVar:TrigChangesZone:Mode$ ChangesZone | Origin$ Exile | Destination$ Any | Static$ True | ValidCard$ Card.IsRemembered | Execute$ MischiefCleanup +SVar:MischiefCleanup:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:X:Count$ValidExile Instant.IsRemembered,Sorcery.IsRemembered +SVar:Picture:http://www.wizards.com/global/images/magic/general/planeswalkers_mischief.jpg +Oracle:{3}{U}: Target opponent reveals a card at random from his or her hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand. Activate this ability only any time you could cast a sorcery. (If it has X in its mana cost, X is 0.) +End \ No newline at end of file diff --git a/res/cardsfolder/p/protean_hulk.txt b/res/cardsfolder/p/protean_hulk.txt new file mode 100644 index 00000000000..2f4b84562c9 --- /dev/null +++ b/res/cardsfolder/p/protean_hulk.txt @@ -0,0 +1,12 @@ +Name:Protean Hulk +ManaCost:5 G G +Types:Creature Beast +Text:no text +PT:6/6 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigChangeZone | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, search your library for any number of creature cards with total converted mana cost 6 or less and put them onto the battlefield. Then shuffle your library. +SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 0 | Origin$ Library | Destination$ Battlefield | ChangeNum$ X | WithTotalCMC$ 6 | ChangeType$ Creature.YouCtrl | Optional$ True | References$ X +SVar:X:Count$ValidLibrary Creature.YouCtrl +SVar:SacMe:4 +SVar:Picture:http://www.wizards.com/global/images/magic/general/protean_hulk.jpg +Oracle:When Protean Hulk dies, search your library for any number of creature cards with total converted mana cost 6 or less and put them onto the battlefield. Then shuffle your library. +End \ No newline at end of file diff --git a/res/cardsfolder/p/purgatory.txt b/res/cardsfolder/p/purgatory.txt new file mode 100644 index 00000000000..90161f6ef44 --- /dev/null +++ b/res/cardsfolder/p/purgatory.txt @@ -0,0 +1,14 @@ +Name:Purgatory +ManaCost:2 W B +Types:Enchantment +Text:no text +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.nonToken+YouOwn | Execute$ TrigChangeZone | TriggerZones$ Battlefield | TriggerDescription$ Whenever a nontoken creature is put into your graveyard from the battlefield, exile that card. +SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 0 | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Exile | RememberChanged$ True +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigReturn | TriggerDescription$ At the beginning of your upkeep, you may pay 4 and 2 life. If you do, return a card exiled with CARDNAME to the battlefield. +SVar:TrigReturn:AB$ ChooseCard | Cost$ 4 PayLife<2> | Defined$ You | Amount$ 1 | Choices$ Card.IsRemembered | ChoiceZone$ Exile | SubAbility$ DBChange +SVar:DBChange:DB$ ChangeZone | Defined$ ChosenCard | Origin$ Exile | Destination$ Battlefield | ForgetChanged$ True | Hidden$ True +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | Static$ True | ValidCard$ Card.Self | Execute$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Picture:http://www.wizards.com/global/images/magic/general/purgatory.jpg +Oracle:Whenever a nontoken creature is put into your graveyard from the battlefield, exile that card.\nAt the beginning of your upkeep, you may pay {4} and 2 life. If you do, return a card exiled with Purgatory to the battlefield. +End \ No newline at end of file diff --git a/res/cardsfolder/q/quenchable_fire.txt b/res/cardsfolder/q/quenchable_fire.txt new file mode 100644 index 00000000000..5c94d3f307b --- /dev/null +++ b/res/cardsfolder/q/quenchable_fire.txt @@ -0,0 +1,13 @@ +Name:Quenchable Fire +ManaCost:3 R +Types:Sorcery +Text:no text +A:SP$ DealDamage | Cost$ 3 R | ValidTgts$ Player | TgtPrompt$ Select target player | NumDmg$ 3 | SubAbility$ DBEffect | SpellDescription$ CARDNAME deals 3 damage to target player. It deals an additional 3 damage to that player at the beginning of your next upkeep step unless he or she pays U before that step. +SVar:DBEffect:DB$ Effect | Name$ Quenchable Fire Effect | EffectOwner$ Targeted | Duration$ Permanent | Triggers$ UpkeepTrig | Abilities$ PayUp | SVars$ Bleed,ExileEffect | RememberObjects$ SourceController | ImprintCards$ Self +SVar:UpkeepTrig:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player.IsRemembered | TriggerZones$ Command | Execute$ Bleed | TriggerDescription$ It deals an additional 3 damage to you at the beginning of that player's next upkeep step unless you pay U before that step. +SVar:Bleed:AB$ DealDamage | Cost$ 0 | Defined$ You | NumDmg$ 3 | DamageSource$ Imprinted | SubAbility$ ExileEffect +SVar:ExileEffect:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile +SVar:PayUp:AB$ ChangeZone | Cost$ U | Defined$ Self | Origin$ Command | Destination$ Exile | Static$ True | ActivationZone$ Command | AILogic$ Always | SpellDescription$ Pay U to remove this effect. +SVar:Picture:http://www.wizards.com/global/images/magic/general/quenchable_fire.jpg +Oracle:Quenchable Fire deals 3 damage to target player. It deals an additional 3 damage to that player at the beginning of your next upkeep step unless he or she pays {U} before that step. +End \ No newline at end of file diff --git a/res/cardsfolder/r/retribution.txt b/res/cardsfolder/r/retribution.txt new file mode 100644 index 00000000000..c4d946a06c6 --- /dev/null +++ b/res/cardsfolder/r/retribution.txt @@ -0,0 +1,12 @@ +Name:Retribution +ManaCost:2 R R +Types:Sorcery +Text:no text +A:SP$ Pump | Cost$ 2 R R | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select two target creature an opponent controls | TargetMin$ 2 | TargetMax$ 2 | TargetsFromSingleZone$ True | IsCurse$ True | RememberTargets$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Choose two target creatures an opponent controls. That player chooses and sacrifices one of those creatures. Put a -1/-1 counter on the other. +SVar:DBChoose:DB$ ChooseCard | Defined$ TargetedController | Amount$ 1 | Choices$ Creature.IsRemembered | ChoiceTitle$ Choose one to sacrifice | ForgetChosen$ True | AILogic$ WorstCard | SubAbility$ DBSac | StackDescription$ None +SVar:DBSac:DB$ Destroy | Defined$ ChosenCard | Sacrifice$ True | SubAbility$ DBPutCounter | StackDescription$ None +SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ M1M1 | CounterNum$ 1 | StackDescription$ None | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Picture:http://www.wizards.com/global/images/magic/general/retribution.jpg +Oracle:Choose two target creatures an opponent controls. That player chooses and sacrifices one of those creatures. Put a -1/-1 counter on the other. +End \ No newline at end of file diff --git a/res/cardsfolder/r/reviving_vapors.txt b/res/cardsfolder/r/reviving_vapors.txt new file mode 100644 index 00000000000..89a5dcb3b89 --- /dev/null +++ b/res/cardsfolder/r/reviving_vapors.txt @@ -0,0 +1,15 @@ +Name:Reviving Vapors +ManaCost:2 W U +Types:Instant +Text:no text +A:SP$ Dig | Cost$ 2 W U | DigNum$ 3 | Reveal$ True | ChangeNum$ 1 | LibraryPosition2$ 0 | RememberRevealed$ True | SubAbility$ DBimprint | StackDescription$ SpellDescription | SpellDescription$ Reveal the top three cards of your library and put one of them into your hand. You gain life equal to that card's converted mana cost. Put all other cards revealed this way into your graveyard. +SVar:DBimprint:DB$ Pump | ImprintCards$ ValidHand Card.IsRemembered | StackDescription$ None | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | LifeAmount$ X | References$ X | SubAbility$ DBMill | StackDescription$ None +SVar:X:Imprinted$CardManaCost +SVar:DBMill:DB$ Mill | NumCards$ Y | References$ Y | SubAbility$ DBCleanup | StackDescription$ None +SVar:Y:Count$RememberedSize/Minus.1 +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True +SVar:Rarity:Uncommon +SVar:Picture:http://www.wizards.com/global/images/magic/general/reviving_vapors.jpg +Oracle:Reveal the top three cards of your library and put one of them into your hand. You gain life equal to that card's converted mana cost. Put all other cards revealed this way into your graveyard. +End \ No newline at end of file diff --git a/res/cardsfolder/r/reweave.txt b/res/cardsfolder/r/reweave.txt new file mode 100644 index 00000000000..acc43fdaa1b --- /dev/null +++ b/res/cardsfolder/r/reweave.txt @@ -0,0 +1,13 @@ +Name:Reweave +ManaCost:5 U +Types:Instant Arcane +Text:no text +K:Splice onto Arcane 2 U U +A:SP$ Destroy | Cost$ 5 U | ValidTgts$ Permanent | Sacrifice$ True | SubAbility$ DBDigUntil | RememberDestroyed$ True | SpellDescription$ Target permanent's controller sacrifices it. If he or she does, that player reveals cards from the top of his or her library until he or she reveals a permanent card that shares a card type with the sacrificed permanent, puts that card onto the battlefield, then shuffles his or her library. +SVar:DBDigUntil:DB$ DigUntil | Defined$ TargetedController | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ1 | Valid$ Permanent.sharesCardTypeWith Remembered | ValidDescription$ permanent card that shares a card type with the sacrificed permanent | FoundDestination$ Battlefield | RevealedDestination$ Library | Shuffle$ True | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemAIDeck:True +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/reweave.jpg +Oracle:Target permanent's controller sacrifices it. If he or she does, that player reveals cards from the top of his or her library until he or she reveals a permanent card that shares a card type with the sacrificed permanent, puts that card onto the battlefield, then shuffles his or her library.\nSplice onto Arcane {2}{U}{U} (As you cast an Arcane spell, you may reveal this card from your hand and pay its splice cost. If you do, add this card's effects to that spell.) +End \ No newline at end of file diff --git a/res/cardsfolder/s/sapphire_drake.txt b/res/cardsfolder/s/sapphire_drake.txt new file mode 100644 index 00000000000..8c39f71424e --- /dev/null +++ b/res/cardsfolder/s/sapphire_drake.txt @@ -0,0 +1,11 @@ +Name:Sapphire Drake +ManaCost:5 U +Types:Creature Drake +Text:no text +PT:4/4 +K:Flying +S:Mode$ Continuous | Affected$ Creature.YouCtrl+counters_GE1_P1P1 | AddKeyword$ Flying | Description$ Each creature you control with a +1/+1 counter on it has flying. +SVar:Picture:http://www.wizards.com/global/images/magic/general/sapphire_drake.jpg +SetInfo:GTC|Uncommon|http://magiccards.info/scans/en/gtc/47.jpg +Oracle:Flying\nEach creature you control with a +1/+1 counter on it has flying. +End \ No newline at end of file diff --git a/res/cardsfolder/s/searing_rays.txt b/res/cardsfolder/s/searing_rays.txt new file mode 100644 index 00000000000..613b2b250c8 --- /dev/null +++ b/res/cardsfolder/s/searing_rays.txt @@ -0,0 +1,11 @@ +Name:Searing Rays +ManaCost:2 R +Types:Sorcery +Text:no text +A:SP$ ChooseColor | Cost$ 2 R | Defined$ You | SubAbility$ DBDmgEach | AILogic$ MostProminentHumanCreatures | SpellDescription$ Choose a color. CARDNAME deals damage to each player equal to the number of creatures of that color that player controls. +SVar:DBDmgEach:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBDmg +SVar:DBDmg:DB$ DealDamage | Defined$ Remembered | NumDmg$ X | References$ X +SVar:X:Count$Valid Creature.RememberedPlayerCtrl+ChosenColor +SVar:Picture:http://www.wizards.com/global/images/magic/general/searing_rays.jpg +Oracle:Choose a color. Searing Rays deals damage to each player equal to the number of creatures of that color that player controls. +End \ No newline at end of file diff --git a/res/cardsfolder/s/sisters_of_stone_death_avatar.txt b/res/cardsfolder/s/sisters_of_stone_death_avatar.txt new file mode 100644 index 00000000000..e293852345a --- /dev/null +++ b/res/cardsfolder/s/sisters_of_stone_death_avatar.txt @@ -0,0 +1,11 @@ +Name:Sisters of Stone Death Avatar +ManaCost:no cost +Types:Vanguard +Text:no text +HandLifeModifier:+1/-5 +S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AddHiddenKeyword$ CARDNAME must be blocked if able. | Description$ Each creature you control must be blocked if able. +A:AB$ ChangeZone | ActivationZone$ Command | Cost$ 4 | ValidTgts$ Creature.blockingCreatureYouCtrl | TgtPrompt$ Select target creature that's blocking a creature you control | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature that's blocking a creature you control. +SVar:Rarity:Special +SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/sisters_of_stone_death_avatar.jpg +Oracle:Hand +1, life -5\nEach creature you control must be blocked if able.\n{4}: Exile target creature that's blocking a creature you control. +End \ No newline at end of file diff --git a/res/cardsfolder/s/sphinx_ambassador.txt b/res/cardsfolder/s/sphinx_ambassador.txt new file mode 100644 index 00000000000..1499240d247 --- /dev/null +++ b/res/cardsfolder/s/sphinx_ambassador.txt @@ -0,0 +1,17 @@ +Name:Sphinx Ambassador +ManaCost:5 U U +Types:Creature Sphinx +Text:no text +PT:5/5 +K:Flying +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigSearch | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, search that player's library for a card, then that player names a card. If you searched for a creature card that isn't the named card, you may put it onto the battlefield under your control. Then that player shuffles his or her library. +SVar:TrigSearch:AB$ ChangeZone | Cost$ 0 | ChangeType$ Card | Origin$ Library | Destination$ Library | DefinedPlayer$ DefendingPlayer | Chooser$ You | Shuffle$ False | RememberChanged$ True | SubAbility$ DBName +SVar:DBName:DB$ NameCard | Defined$ DefendingPlayer | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Defined$ Remembered | Origin$ Library | Destination$ Battlefield | GainControl$ True | ConditionDefined$ Remembered | Shuffle$ False | ConditionPresent$ Card.NamedCard | ConditionCompare$ EQ0 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ1 | SubAbility$ DBShuffle +SVar:DBShuffle:DB$ Shuffle | Defined$ DefendingPlayer | SubAbility$ DBCleanup +SVar:X:Count$ValidLibrary Creature.IsRemembered +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/sphinx_ambassador.jpg +Oracle:Flying\nWhenever Sphinx Ambassador deals combat damage to a player, search that player's library for a card, then that player names a card. If you searched for a creature card that isn't the named card, you may put it onto the battlefield under your control. Then that player shuffles his or her library. +End \ No newline at end of file diff --git a/res/cardsfolder/t/talaras_bane.txt b/res/cardsfolder/t/talaras_bane.txt new file mode 100644 index 00000000000..0e6fd061bda --- /dev/null +++ b/res/cardsfolder/t/talaras_bane.txt @@ -0,0 +1,16 @@ +Name:Talara's Bane +ManaCost:1 B +Types:Sorcery +Text:no text +A:SP$ RevealHand | Cost$ 1 B | ValidTgts$ Opponent | RememberRevealed$ True | SubAbility$ DBChoose | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals his or her hand. You choose a green or white creature card from it. You gain life equal that creature card's toughness, then that player discards that card. +SVar:DBChoose:DB$ ChooseCard | ChoiceZone$ Hand | Amount$ 1 | Choices$ Creature.Green+IsRemembered,Creature.White+IsRemembered | SubAbility$ DBImprint | StackDescription$ None +SVar:DBImprint:DB$ Pump | Defined$ ChosenCard | PumpZone$ Hand | ImprintCards$ ChosenCard | SubAbility$ DBGainLife | StackDescription$ None +SVar:DBGainLife:DB$ GainLife | LifeAmount$ X | References$ X | SubAbility$ DBDiscard | StackDescription$ None | ConditionDefined$ Imprinted | ConditionPresent$ Card | ConditionCompare$ GE1 +SVar:DBDiscard:DB$ Discard | DefinedCards$ Imprinted | Defined$ Targeted | Mode$ Defined | SubAbility$ DBCleanup | StackDescription$ None | ConditionDefined$ Imprinted | ConditionPresent$ Card | ConditionCompare$ GE1 +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True +SVar:X:Imprinted$CardToughness +SVar:RemRandomDeck:True +SVar:Rarity:Common +SVar:Picture:http://www.wizards.com/global/images/magic/general/talaras_bane.jpg +Oracle:Target opponent reveals his or her hand. You choose a green or white creature card from it. You gain life equal that creature card's toughness, then that player discards that card. +End \ No newline at end of file diff --git a/res/cardsfolder/t/thelon_of_havenwood.txt b/res/cardsfolder/t/thelon_of_havenwood.txt new file mode 100644 index 00000000000..10094e78cc6 --- /dev/null +++ b/res/cardsfolder/t/thelon_of_havenwood.txt @@ -0,0 +1,13 @@ +Name:Thelon of Havenwood +ManaCost:G G +Types:Legendary Creature Elf Druid +Text:no text +PT:2/2 +S:Mode$ Continuous | Affected$ Creature.Fungus | AffectedZone$ Battlefield | AddPower$ AffectedX | AddToughness$ AffectedX | Description$ Each Fungus creature gets +1/+1 for each spore counter on it. +A:AB$ PutCounterAll | Cost$ B G ExileFromGrave<1/Fungus> | ValidCards$ Fungus | CounterType$ SPORE | CounterNum$ 1 | SpellDescription$ Put a spore counter on each Fungus on the battlefield. +SVar:AffectedX:Count$CardCounters.SPORE +SVar:BuffedBy:Fungus +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/thelon_of_havenwood +Oracle:Each Fungus creature gets +1/+1 for each spore counter on it.\n{B}{G}, Exile a Fungus card from a graveyard: Put a spore counter on each Fungus on the battlefield. +End \ No newline at end of file diff --git a/res/cardsfolder/u/mist_of_stagnation.txt b/res/cardsfolder/u/mist_of_stagnation.txt new file mode 100644 index 00000000000..bd54992bedc --- /dev/null +++ b/res/cardsfolder/u/mist_of_stagnation.txt @@ -0,0 +1,14 @@ +Name:Mist of Stagnation +ManaCost:3 U U +Types:Enchantment +Text:Permanents don't untap during their controllers' untap steps. +K:Permanents don't untap during their controllers' untap steps:Permanent +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | Execute$ TrigChoose | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of each player's upkeep, that player chooses a permanent for each card in his or her graveyard, then untaps those permanents. +SVar:TrigChoose:AB$ ChooseCard | Cost$ 0 | Defined$ TriggeredPlayer | Amount$ X | References$ X | Choices$ Permanent.ActivePlayerCtrl | ChoiceTitle$ Choose a permanent to untap | RememberChosen$ True | AILogic$ Untap | SubAbility$ DBUntap +SVar:DBUntap:DB$ UntapAll | ValidCards$ Permanent.IsRemembered | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Count$ValidGraveyard Card.ActivePlayerCtrl +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/mist_of_stagnation.jpg +Oracle:Permanents don't untap during their controllers' untap steps.\nAt the beginning of each player's upkeep, that player chooses a permanent for each card in his or her graveyard, then untaps those permanents. +End \ No newline at end of file diff --git a/res/cardsfolder/u/unforge.txt b/res/cardsfolder/u/unforge.txt new file mode 100644 index 00000000000..723dd351d17 --- /dev/null +++ b/res/cardsfolder/u/unforge.txt @@ -0,0 +1,12 @@ +Name:Unforge +ManaCost:2 R +Types:Instant +Text:no text +A:SP$ Pump | Cost$ 2 R | ValidTgts$ Equipment | IsCurse$ True | SubAbility$ DBRem | StackDescription$ SpellDescription | SpellDescription$ Destroy target Equipment. If that Equipment was attached to a creature, CARDNAME deals 2 damage to that creature. +SVar:DBRem:DB$ PumpAll | ValidCards$ Creature.EquippedByTargeted | RememberAllPumped$ True | StackDescription$ None | SubAbility$ DBDestroy +SVar:DBDestroy:DB$ Destroy | Defined$ Targeted | SubAbility$ DBDmg | StackDescription$ None +SVar:DBDmg:DB$ DealDamage | Defined$ Remembered | NumDmg$ 2 | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ EQ1 | StackDescription$ None | SubAbility$ DBCleanup +SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True +SVar:Picture:http://www.wizards.com/global/images/magic/general/unforge.jpg +Oracle:Destroy target Equipment. If that Equipment was attached to a creature, Unforge deals 2 damage to that creature. +End \ No newline at end of file diff --git a/res/cardsfolder/v/viridian_zealot_avatar.txt b/res/cardsfolder/v/viridian_zealot_avatar.txt new file mode 100644 index 00000000000..859eefc23fc --- /dev/null +++ b/res/cardsfolder/v/viridian_zealot_avatar.txt @@ -0,0 +1,12 @@ +Name:Viridian Zealot Avatar +ManaCost:no cost +Types:Vanguard +Text:no text +HandLifeModifier:+0/+2 +A:AB$ Destroy | ActivationZone$ Command | Cost$ 2 Sac<1/Creature> | RememberCostCards$ True | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | SubAbility$ DBChangeZone | SpellDescription$ Destroy target artifact or enchantment. Search your library for a card with the same name as the sacrificed creature, reveal that card, and put it into your hand. Then shuffle your library. +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Hand | ChangeType$ Creature.sharesNameWith Remembered | ChangeNum$ 1 | StackDescription$ Search your library for a card with the same name as the sacrificed creature, reveal that card, and put it into your hand. Then shuffle your library. | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:Rarity:Special +SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/viridian_zealot_avatar.jpg +Oracle:Hand +0, life +2\n{2}, Sacrifice a creature: Destroy target artifact or enchantment. Search your library for a card with the same name as the sacrificed creature, reveal that card, and put it into your hand. Then shuffle your library. +End \ No newline at end of file diff --git a/res/cardsfolder/w/warren_weirding.txt b/res/cardsfolder/w/warren_weirding.txt new file mode 100644 index 00000000000..7eaacc5904b --- /dev/null +++ b/res/cardsfolder/w/warren_weirding.txt @@ -0,0 +1,13 @@ +Name:Warren Weirding +ManaCost:1 B +Types:Tribal Sorcery Goblin +Text:no text +A:SP$ Sacrifice | Cost$ 1 B | ValidTgts$ Player | SacValid$ Creature | SacMessage$ Creature | RememberSacrificed$ True | SubAbility$ DBToken | SpellDescription$ Target player sacrifices a creature. If a Goblin is sacrificed this way, that player puts two 1/1 black Goblin Rogue creature tokens onto the battlefield, and those tokens gain haste until end of turn. +SVar:DBToken:DB$ Token | ConditionDefined$ Remembered | ConditionPresent$ Card.Goblin | ConditionCompare$ GE1 | TokenAmount$ 2 | TokenName$ Goblin Rogue | TokenTypes$ Creature,Goblin,Rogue | TokenOwner$ Targeted | TokenColors$ Black | TokenPower$ 1 | TokenToughness$ 1 | RememberTokens$ True | ForgetOtherRemembered$ True | SubAbility$ AdditionalPump +SVar:AdditionalPump:DB$ PumpAll | ValidCards$ Creature.IsRemembered | KW$ Haste | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemAIDeck:True +SVar:Rarity:Uncommon +SVar:Picture:http://www.wizards.com/global/images/magic/general/warren_weirding.jpg +Oracle:Target player sacrifices a creature. If a Goblin is sacrificed this way, that player puts two 1/1 black Goblin Rogue creature tokens onto the battlefield, and those tokens gain haste until end of turn. +End \ No newline at end of file diff --git a/res/cardsfolder/w/worldpurge.txt b/res/cardsfolder/w/worldpurge.txt new file mode 100644 index 00000000000..64e55aa121e --- /dev/null +++ b/res/cardsfolder/w/worldpurge.txt @@ -0,0 +1,15 @@ +Name:Worldpurge +ManaCost:4 WU WU WU WU +Types:Sorcery +Text:no text +A:SP$ ChangeZoneAll | Cost$ 4 WU WU WU WU | ChangeType$ Permanent | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBRepeat | SpellDescription$ Return all permanents to their owners' hands. Each player chooses up to seven cards in his or her hand, then shuffles the rest into his or her library. Empty all mana pools. +SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose +SVar:DBChoose:DB$ ChooseCard | Amount$ 7 | Defined$ Remembered | Choices$ Card.RememberedPlayerCtrl | ChoiceZone$ Hand | SubAbility$ DBReturn | RememberChosen$ True +SVar:DBReturn:DB$ ChangeZone | Defined$ ValidHand Card.IsNotRemembered+RememberedPlayerCtrl | Origin$ Hand | Destination$ Library | Shuffle$ True | SubAbility$ DBEmpty +SVar:DBEmpty:DB$ DrainMana | Defined$ Remembered | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:RemAIDeck:True +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/worldpurge.jpg +Oracle:Return all permanents to their owners' hands. Each player chooses up to seven cards in his or her hand, then shuffles the rest into his or her library. Empty all mana pools. +End \ No newline at end of file diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 3f24e9a302c..d53ea918357 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -6547,8 +6547,21 @@ public class Card extends GameEntity implements Comparable { } } } else if (property.startsWith("EquippedBy")) { - if (!this.equippedBy.contains(source)) { - return false; + if (property.substring(10).equals("Targeted")) { + for (final SpellAbility sa : source.getCharacteristics().getSpellAbility()) { + final SpellAbility saTargeting = sa.getSATargetingCard(); + if (saTargeting != null) { + for (final Card c : saTargeting.getTarget().getTargetCards()) { + if (!this.equippedBy.contains(c)) { + return false; + } + } + } + } + } else { + if (!this.equippedBy.contains(source)) { + return false; + } } } else if (property.startsWith("Equipped")) { if (!this.equipping.contains(source)) { @@ -6778,6 +6791,24 @@ public class Card extends GameEntity implements Comparable { return false; } } + } else if (property.startsWith("shareControllerWith")) { + if (property.equals("sharesControllerWith")) { + if (!this.sharesControllerWith(source)) { + return false; + } + } else { + final String restriction = property.split("sharesControllerWith ")[1]; + if (restriction.equals("Remembered")) { + for (final Object rem : source.getRemembered()) { + if (rem instanceof Card) { + final Card card = (Card) rem; + if (!this.sharesControllerWith(card)) { + return false; + } + } + } + } + } } else if (property.startsWith("SecondSpellCastThisTurn")) { final List list = CardUtil.getThisTurnCast("Card", source); if (list.size() < 2) { @@ -6916,6 +6947,13 @@ public class Card extends GameEntity implements Comparable { return false; } } + } else if (property.startsWith("yardGreatestPower")) { + final List list = CardLists.filter(sourceController.getCardsIn(ZoneType.Graveyard), Presets.CREATURES); + for (final Card crd : list) { + if (crd.getNetAttack() > this.getNetAttack()) { + return false; + } + } } else if (property.startsWith("leastPower")) { final List list = CardLists.filter(Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield), Presets.CREATURES); for (final Card crd : list) { @@ -7076,6 +7114,14 @@ public class Card extends GameEntity implements Comparable { if (!this.isBlocking(source)) { return false; } + } else if (property.startsWith("blockingCreatureYouCtrl")) { + final List list = CardLists.filter(sourceController.getCardsIn(ZoneType.Battlefield), Presets.CREATURES); + for (final Card c : list) { + if (this.isBlocking(c)) { + return true; + } + return false; + } } else if (property.startsWith("blockingRemembered")) { for (final Object o : source.getRemembered()) { if (o instanceof Card) { @@ -7444,6 +7490,24 @@ public class Card extends GameEntity implements Comparable { } return false; } + + /** + *

+ * sharesControllerWith. + *

+ * + * @param c1 + * a {@link forge.Card} object. + * @return a boolean. + */ + public final boolean sharesControllerWith(final Card c1) { + + if (c1 == null) { + return false; + } + + return this.getController().equals(c1.getController()); + } /** *

diff --git a/src/main/java/forge/card/ability/AbilityFactory.java b/src/main/java/forge/card/ability/AbilityFactory.java index 088cab419a2..74973bdbf42 100644 --- a/src/main/java/forge/card/ability/AbilityFactory.java +++ b/src/main/java/forge/card/ability/AbilityFactory.java @@ -246,6 +246,9 @@ public final class AbilityFactory { if (mapParams.containsKey("TargetsWithDefinedController")) { abTgt.setDefinedController(mapParams.get("TargetsWithDefinedController")); } + if (mapParams.containsKey("TargetsWithSameController")) { + abTgt.setSameController(true); + } if (mapParams.containsKey("TargetsWithDifferentControllers")) { abTgt.setDifferentControllers(true); } diff --git a/src/main/java/forge/card/ability/AbilityUtils.java b/src/main/java/forge/card/ability/AbilityUtils.java index d15db750477..57f83f74dc9 100644 --- a/src/main/java/forge/card/ability/AbilityUtils.java +++ b/src/main/java/forge/card/ability/AbilityUtils.java @@ -226,6 +226,20 @@ public class AbilityUtils { list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), validDefined.split(","), hostCard.getController(), hostCard); } + else if (defined.startsWith("ValidHand ")) { + String validDefined = defined.substring("ValidHand ".length()); + GameState game = Singletons.getModel().getGame(); + + list = CardLists.getValidCards(game.getCardsIn(ZoneType.Hand), validDefined.split(","), hostCard.getController(), hostCard); + } + + else if (defined.startsWith("ValidAll ")) { + String validDefined = defined.substring("ValidAll ".length()); + GameState game = Singletons.getModel().getGame(); + + list = CardLists.getValidCards(game.getCardsInGame(), validDefined.split(","), hostCard.getController(), hostCard); + } + else { return cards; } @@ -1113,6 +1127,11 @@ public class AbilityUtils { for (final Card exiledAsCost : paidListExiled) { host.addRemembered(exiledAsCost); } + } else if (sa.getParam("Cost").contains("Sac")) { + final List paidListSacrificed = sa.getPaidList("Sacrificed"); + for (final Card SacrificedAsCost : paidListSacrificed) { + host.addRemembered(SacrificedAsCost); + } } } } diff --git a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java index 40643e61318..43a8e3c0410 100644 --- a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java +++ b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java @@ -1111,6 +1111,8 @@ public class ChangeZoneAi extends SpellAiLogic { final String remember = sa.getParam("RememberChanged"); final String forget = sa.getParam("ForgetChanged"); final String imprint = sa.getParam("Imprint"); + final String totalcmc = sa.getParam("WithTotalCMC"); + int totcmc = AbilityUtils.calculateAmount(card, totalcmc, sa); if (sa.hasParam("Unimprint")) { card.clearImprinted(); @@ -1122,6 +1124,11 @@ public class ChangeZoneAi extends SpellAiLogic { fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.nameEquals(c.getName()))); } } + if (totalcmc != null) { + if (totcmc >= 0) { + fetchList = CardLists.getValidCards(fetchList, "Card.cmcLE" + Integer.toString(totcmc), ai, card); + } + } if ((fetchList.size() == 0) || (destination == null)) { break; } @@ -1228,6 +1235,9 @@ public class ChangeZoneAi extends SpellAiLogic { fetched.add(c); fetchList.remove(c); + if (totalcmc != null) { + totcmc -= c.getCMC(); + } } if (origin.contains(ZoneType.Library) && !defined && !"False".equals(sa.getParam("Shuffle"))) { diff --git a/src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java b/src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java index 3f352f031fc..b5436a1765c 100644 --- a/src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java +++ b/src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java @@ -56,6 +56,8 @@ public class ChangeZoneAllEffect extends SpellEffect { } final String remember = sa.getParam("RememberChanged"); + final String forget = sa.getParam("ForgetChanged"); + final String imprint = sa.getParam("Imprint"); final int libraryPos = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : 0; @@ -94,6 +96,12 @@ public class ChangeZoneAllEffect extends SpellEffect { if (remember != null) { Singletons.getModel().getGame().getCardState(sa.getSourceCard()).addRemembered(c); } + if (forget != null) { + Singletons.getModel().getGame().getCardState(sa.getSourceCard()).removeRemembered(c); + } + if (imprint != null) { + Singletons.getModel().getGame().getCardState(sa.getSourceCard()).addImprinted(c); + } } // if Shuffle parameter exists, and any amount of cards were owned by diff --git a/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java b/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java index 334c132cf7b..976ec3f8728 100644 --- a/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java +++ b/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java @@ -621,7 +621,9 @@ public class ChangeZoneEffect extends SpellEffect { final String forget = sa.getParam("ForgetChanged"); final String imprint = sa.getParam("Imprint"); final String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : "Select a card"; - + final String totalcmc = sa.getParam("WithTotalCMC"); + int totcmc = AbilityUtils.calculateAmount(card, totalcmc, sa); + if (sa.hasParam("Unimprint")) { card.clearImprinted(); } @@ -632,6 +634,11 @@ public class ChangeZoneEffect extends SpellEffect { fetchList = CardLists.filter(fetchList, Predicates.not(CardPredicates.nameEquals(c.getName()))); } } + if (totalcmc != null) { + if (totcmc >= 0) { + fetchList = CardLists.getValidCards(fetchList, "Card.cmcLE" + Integer.toString(totcmc), card.getController(), card); + } + } if ((fetchList.size() == 0) || (destination == null)) { break; } @@ -764,7 +771,9 @@ public class ChangeZoneEffect extends SpellEffect { if (imprint != null) { card.addImprinted(movedCard); } - + if (totalcmc != null) { + totcmc -= movedCard.getCMC(); + } } else { final StringBuilder sb = new StringBuilder(); final int num = Math.min(fetchList.size(), changeNum - i); diff --git a/src/main/java/forge/card/ability/effects/ChooseCardEffect.java b/src/main/java/forge/card/ability/effects/ChooseCardEffect.java index 1813129c378..bcf057bb096 100644 --- a/src/main/java/forge/card/ability/effects/ChooseCardEffect.java +++ b/src/main/java/forge/card/ability/effects/ChooseCardEffect.java @@ -108,6 +108,11 @@ public class ChooseCardEffect extends SpellEffect { choices = CardLists.getValidCards(choices, "Permanent.YouDontCtrl,Permanent.nonLegendary", host.getController(), host); } choice = CardFactoryUtil.getBestAI(choices); + } else if (logic.equals("Untap")) { + if (!CardLists.getValidCards(choices, "Permanent.YouCtrl,Permanent.tapped", host.getController(), host).isEmpty()) { + choices = CardLists.getValidCards(choices, "Permanent.YouCtrl,Permanent.tapped", host.getController(), host); + } + choice = CardFactoryUtil.getBestAI(choices); } if (choice != null) { chosen.add(choice); diff --git a/src/main/java/forge/card/ability/effects/DamageDealEffect.java b/src/main/java/forge/card/ability/effects/DamageDealEffect.java index ff289e066a0..73fe882d771 100644 --- a/src/main/java/forge/card/ability/effects/DamageDealEffect.java +++ b/src/main/java/forge/card/ability/effects/DamageDealEffect.java @@ -28,7 +28,9 @@ public class DamageDealEffect extends SpellEffect { if (tgts.size() > 0) { final List definedSources = AbilityUtils.getDefinedCards(sa.getSourceCard(), sa.getParam("DamageSource"), sa); - final Card source = definedSources.get(0); + if (!definedSources.isEmpty()) { + source = definedSources.get(0); + } if (source != sa.getSourceCard()) { sb.append(source.toString()).append(" deals"); diff --git a/src/main/java/forge/card/ability/effects/MillEffect.java b/src/main/java/forge/card/ability/effects/MillEffect.java index 95dd2b6ce8f..a6deeb3b1f3 100644 --- a/src/main/java/forge/card/ability/effects/MillEffect.java +++ b/src/main/java/forge/card/ability/effects/MillEffect.java @@ -3,6 +3,8 @@ package forge.card.ability.effects; import java.util.List; import forge.Card; +import forge.CardCharacteristicName; +import forge.Singletons; import forge.card.ability.AbilityUtils; import forge.card.ability.SpellEffect; import forge.card.spellability.SpellAbility; @@ -32,6 +34,11 @@ public class MillEffect extends SpellEffect { for (final Player p : getTargetPlayers(sa)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { final List milled = p.mill(numCards, destination, bottom); + if (destination.equals(ZoneType.Exile) && sa.hasParam("ExileFaceDown")) { + for (final Card c : milled) { + c.setState(CardCharacteristicName.FaceDown); + } + } if (sa.hasParam("RememberMilled")) { for (final Card c : milled) { source.addRemembered(c); diff --git a/src/main/java/forge/card/ability/effects/PumpEffect.java b/src/main/java/forge/card/ability/effects/PumpEffect.java index 09adbeb3498..846cb58ba84 100644 --- a/src/main/java/forge/card/ability/effects/PumpEffect.java +++ b/src/main/java/forge/card/ability/effects/PumpEffect.java @@ -176,6 +176,7 @@ public class PumpEffect extends SpellEffect { List tgtPlayers = new ArrayList(); String pumpRemembered = null; String pumpForget = null; + String pumpImprint = null; final List keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList(); final int a = AbilityUtils.calculateAmount(sa.getSourceCard(), sa.getParam("NumAtt"), sa); @@ -237,6 +238,17 @@ public class PumpEffect extends SpellEffect { } } } + if (sa.hasParam("ImprintCards")) { + pumpImprint = sa.getParam("ImprintCards"); + } + + if (pumpImprint != null) { + for (final Card c : AbilityFactory.getDefinedCards(sa.getSourceCard(), pumpImprint, sa)) { + if (!sa.getSourceCard().getImprinted().contains(c)) { + sa.getSourceCard().addImprinted(c); + } + } + } if (sa.hasParam("Radiance")) { for (final Card c : CardUtil.getRadiance(sa.getSourceCard(), tgtCards.get(0), sa.getParam("ValidTgts") diff --git a/src/main/java/forge/card/spellability/Target.java b/src/main/java/forge/card/spellability/Target.java index f2d8f914ef0..97b275a1350 100644 --- a/src/main/java/forge/card/spellability/Target.java +++ b/src/main/java/forge/card/spellability/Target.java @@ -46,6 +46,7 @@ public class Target { private boolean singleZone = false; private boolean differentZone = false; private boolean differentControllers = false; + private boolean sameController = false; private boolean withoutSameCreatureType = false; private String definedController = null; private TargetChoices choice = null; @@ -813,6 +814,24 @@ public class Target { public void setDifferentControllers(boolean different) { this.differentControllers = different; } + /** + * Checks if is same controller. + * + * @return true, if it targets same controller + */ + public final boolean isSameController() { + return this.sameController; + } + + /** + * Sets the same controller. + * + * @param same + * the new unique targets + */ + public final void setSameController(final boolean same) { + this.sameController = same; + } /** * @return the definedController diff --git a/src/main/java/forge/card/spellability/TargetSelection.java b/src/main/java/forge/card/spellability/TargetSelection.java index 570febdca30..4b6a6678931 100644 --- a/src/main/java/forge/card/spellability/TargetSelection.java +++ b/src/main/java/forge/card/spellability/TargetSelection.java @@ -269,9 +269,9 @@ public class TargetSelection { List choices = CardLists.getTargetableCards(CardLists.getValidCards(Singletons.getModel().getGame().getCardsIn(zone), this.target.getValidTgts(), this.ability.getActivatingPlayer(), this.ability.getSourceCard()), this.ability); - ArrayList objects = new ArrayList(); + ArrayList objects = getUniqueTargets(this.ability); + if (tgt.isUniqueTargets()) { - objects = getUniqueTargets(this.ability); for (final Object o : objects) { if ((o instanceof Card) && objects.contains(o)) { choices.remove(o); @@ -286,6 +286,24 @@ public class TargetSelection { choices.remove(c); } } + + // If all cards (including subability targets) must have the same controller + if (tgt.isSameController() && !objects.isEmpty()) { + final List list = new ArrayList(); + for (final Object o : objects) + if (o instanceof Card) { + list.add((Card) o); + } + if (!list.isEmpty()){ + final Card card = list.get(0); + choices = CardLists.filter(choices, new Predicate() { + @Override + public boolean apply(final Card c) { + return c.sharesControllerWith(card); + } + }); + } + } // If all cards must be from the same zone if (tgt.isSingleZone() && !targeted.isEmpty()) { diff --git a/src/main/java/forge/card/staticability/StaticAbilityCostChange.java b/src/main/java/forge/card/staticability/StaticAbilityCostChange.java index f50c070309a..c989725b489 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityCostChange.java +++ b/src/main/java/forge/card/staticability/StaticAbilityCostChange.java @@ -199,6 +199,10 @@ public class StaticAbilityCostChange { if (!(sa instanceof AbilityActivated)) { return originalCost; } + } else if (params.get("Type").equals("Buyback")) { + if (!sa.isBuyBackAbility()) { + return originalCost; + } } else if (params.get("Type").equals("Cycling")) { if (!sa.isCycling()) { return originalCost;