merge latest trunk

This commit is contained in:
myk
2013-04-04 18:35:08 +00:00
231 changed files with 4255 additions and 3282 deletions

54
.gitattributes vendored
View File

@@ -175,6 +175,7 @@ res/cardsfolder/a/akoum_refuge.txt svneol=native#text/plain
res/cardsfolder/a/akrasan_squire.txt svneol=native#text/plain
res/cardsfolder/a/akroma_angel_of_fury.txt svneol=native#text/plain
res/cardsfolder/a/akroma_angel_of_wrath.txt svneol=native#text/plain
res/cardsfolder/a/akroma_angel_of_wrath_avatar.txt -text
res/cardsfolder/a/akromas_blessing.txt -text
res/cardsfolder/a/akromas_devoted.txt svneol=native#text/plain
res/cardsfolder/a/akromas_memorial.txt svneol=native#text/plain
@@ -557,6 +558,7 @@ res/cardsfolder/a/assemble_the_legion.txt -text
res/cardsfolder/a/assembly_hall.txt -text
res/cardsfolder/a/assembly_worker.txt svneol=native#text/plain
res/cardsfolder/a/assert_authority.txt svneol=native#text/plain
res/cardsfolder/a/astral_arena.txt -text
res/cardsfolder/a/astral_slide.txt svneol=native#text/plain
res/cardsfolder/a/astral_steel.txt svneol=native#text/plain
res/cardsfolder/a/astrolabe.txt svneol=native#text/plain
@@ -901,6 +903,7 @@ res/cardsfolder/b/benevolent_bodyguard.txt svneol=native#text/plain
res/cardsfolder/b/benevolent_unicorn.txt svneol=native#text/plain
res/cardsfolder/b/benthic_behemoth.txt svneol=native#text/plain
res/cardsfolder/b/benthic_djinn.txt svneol=native#text/plain
res/cardsfolder/b/benthic_explorers.txt -text
res/cardsfolder/b/benthicore.txt svneol=native#text/plain
res/cardsfolder/b/bequeathal.txt svneol=native#text/plain
res/cardsfolder/b/bereavement.txt svneol=native#text/plain
@@ -976,6 +979,7 @@ res/cardsfolder/b/blaze.txt svneol=native#text/plain
res/cardsfolder/b/blazethorn_scarecrow.txt svneol=native#text/plain
res/cardsfolder/b/blazing_archon.txt svneol=native#text/plain
res/cardsfolder/b/blazing_blade_askari.txt svneol=native#text/plain
res/cardsfolder/b/blazing_effigy.txt -text
res/cardsfolder/b/blazing_salvo.txt -text
res/cardsfolder/b/blazing_shoal.txt svneol=native#text/plain
res/cardsfolder/b/blazing_specter.txt svneol=native#text/plain
@@ -1074,6 +1078,7 @@ res/cardsfolder/b/bloodfray_giant.txt -text
res/cardsfolder/b/bloodghast.txt svneol=native#text/plain
res/cardsfolder/b/bloodgift_demon.txt -text
res/cardsfolder/b/bloodhall_ooze.txt svneol=native#text/plain
res/cardsfolder/b/bloodhill_bastion.txt -text
res/cardsfolder/b/bloodhunter_bat.txt -text
res/cardsfolder/b/bloodhusk_ritualist.txt svneol=native#text/plain
res/cardsfolder/b/bloodied_ghost.txt svneol=native#text/plain
@@ -1903,6 +1908,7 @@ res/cardsfolder/c/colossus_of_sardia.txt svneol=native#text/plain
res/cardsfolder/c/coma_veil.txt svneol=native#text/plain
res/cardsfolder/c/combat_medic.txt svneol=native#text/plain
res/cardsfolder/c/combust.txt svneol=native#text/plain
res/cardsfolder/c/comet_storm.txt -text
res/cardsfolder/c/command_of_unsummoning.txt svneol=native#text/plain
res/cardsfolder/c/commander_eesha.txt svneol=native#text/plain
res/cardsfolder/c/commander_greven_il_vec.txt svneol=native#text/plain
@@ -2238,9 +2244,11 @@ res/cardsfolder/c/cursed_rack.txt svneol=native#text/plain
res/cardsfolder/c/cursed_ronin.txt svneol=native#text/plain
res/cardsfolder/c/cursed_scroll.txt svneol=native#text/plain
res/cardsfolder/c/cursed_totem.txt svneol=native#text/plain
res/cardsfolder/c/curtain_of_light.txt -text
res/cardsfolder/c/custody_battle.txt -text svneol=unset#text/plain
res/cardsfolder/c/customs_depot.txt svneol=native#text/plain
res/cardsfolder/c/cut_the_earthly_bond.txt svneol=native#text/plain
res/cardsfolder/c/cut_the_tethers.txt -text
res/cardsfolder/c/cutthroat_il_dal.txt svneol=native#text/plain
res/cardsfolder/c/cyclical_evolution.txt svneol=native#text/plain
res/cardsfolder/c/cyclonic_rift.txt -text
@@ -2378,6 +2386,7 @@ res/cardsfolder/d/day_of_the_dragons.txt svneol=native#text/plain
res/cardsfolder/d/daybreak_coronet.txt -text
res/cardsfolder/d/daybreak_ranger_nightfall_predator.txt -text
res/cardsfolder/d/daze.txt svneol=native#text/plain
res/cardsfolder/d/dazzling_beauty.txt -text
res/cardsfolder/d/dead_gone.txt -text
res/cardsfolder/d/dead_iron_sledge.txt svneol=native#text/plain
res/cardsfolder/d/dead_reckoning.txt -text svneol=unset#text/plain
@@ -2502,6 +2511,7 @@ res/cardsfolder/d/deglamer.txt svneol=native#text/plain
res/cardsfolder/d/dehydration.txt svneol=native#text/plain
res/cardsfolder/d/deity_of_scars.txt svneol=native#text/plain
res/cardsfolder/d/deja_vu.txt svneol=native#text/plain
res/cardsfolder/d/delay.txt -text
res/cardsfolder/d/delaying_shield.txt -text
res/cardsfolder/d/delifs_cone.txt -text
res/cardsfolder/d/delifs_cube.txt -text
@@ -3036,6 +3046,7 @@ res/cardsfolder/e/ego_erasure.txt -text
res/cardsfolder/e/eiganjo_castle.txt svneol=native#text/plain
res/cardsfolder/e/eiganjo_free_riders.txt svneol=native#text/plain
res/cardsfolder/e/eight_and_a_half_tails.txt -text
res/cardsfolder/e/eight_and_a_half_tails_avatar.txt -text
res/cardsfolder/e/eightfold_maze.txt svneol=native#text/plain
res/cardsfolder/e/ekundu_griffin.txt svneol=native#text/plain
res/cardsfolder/e/el_hajjaj.txt svneol=native#text/plain
@@ -3788,6 +3799,7 @@ res/cardsfolder/f/fog_bank.txt svneol=native#text/plain
res/cardsfolder/f/fog_elemental.txt svneol=native#text/plain
res/cardsfolder/f/fog_of_gnats.txt svneol=native#text/plain
res/cardsfolder/f/foil.txt -text
res/cardsfolder/f/fold_into_aether.txt -text
res/cardsfolder/f/folk_medicine.txt svneol=native#text/plain
res/cardsfolder/f/folk_of_an_havva.txt svneol=native#text/plain
res/cardsfolder/f/folk_of_the_pines.txt svneol=native#text/plain
@@ -4015,6 +4027,7 @@ res/cardsfolder/g/gather_the_townsfolk.txt -text
res/cardsfolder/g/gatherer_of_graces.txt svneol=native#text/plain
res/cardsfolder/g/gatstaf_shepherd_gatstaf_howler.txt -text
res/cardsfolder/g/gauntlet_of_might.txt svneol=native#text/plain
res/cardsfolder/g/gavony.txt -text
res/cardsfolder/g/gavony_ironwright.txt -text
res/cardsfolder/g/gavony_township.txt -text
res/cardsfolder/g/gaze_of_adamaro.txt svneol=native#text/plain
@@ -4716,6 +4729,7 @@ res/cardsfolder/h/harrow.txt svneol=native#text/plain
res/cardsfolder/h/harrowing_journey.txt -text
res/cardsfolder/h/harsh_deceiver.txt -text
res/cardsfolder/h/harsh_justice.txt -text
res/cardsfolder/h/harsh_mercy.txt -text
res/cardsfolder/h/haru_onna.txt svneol=native#text/plain
res/cardsfolder/h/harvest_gwyllion.txt svneol=native#text/plain
res/cardsfolder/h/harvest_pyre.txt -text
@@ -4804,6 +4818,7 @@ res/cardsfolder/h/heckling_fiends.txt -text
res/cardsfolder/h/hedge_troll.txt svneol=native#text/plain
res/cardsfolder/h/hedron_crab.txt svneol=native#text/plain
res/cardsfolder/h/hedron_field_purists.txt -text
res/cardsfolder/h/hedron_fields_of_agadeem.txt -text
res/cardsfolder/h/hedron_matrix.txt svneol=native#text/plain
res/cardsfolder/h/hedron_rover.txt svneol=native#text/plain
res/cardsfolder/h/hedron_scrabbler.txt svneol=native#text/plain
@@ -4862,6 +4877,7 @@ res/cardsfolder/h/hero_of_oxid_ridge.txt svneol=native#text/plain
res/cardsfolder/h/heroes_remembered.txt svneol=native#text/plain
res/cardsfolder/h/heroes_reunion.txt svneol=native#text/plain
res/cardsfolder/h/heroic_defiance.txt -text
res/cardsfolder/h/heroism.txt -text
res/cardsfolder/h/heros_demise.txt svneol=native#text/plain
res/cardsfolder/h/heros_resolve.txt svneol=native#text/plain
res/cardsfolder/h/hesitation.txt -text svneol=unset#text/plain
@@ -4900,6 +4916,7 @@ res/cardsfolder/h/higure_the_still_wind_avatar.txt -text
res/cardsfolder/h/hikari_twilight_guardian.txt -text
res/cardsfolder/h/hill_giant.txt svneol=native#text/plain
res/cardsfolder/h/hillcomber_giant.txt svneol=native#text/plain
res/cardsfolder/h/hinder.txt -text
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
@@ -5434,6 +5451,7 @@ res/cardsfolder/j/jhessian_infiltrator.txt svneol=native#text/plain
res/cardsfolder/j/jhessian_lookout.txt svneol=native#text/plain
res/cardsfolder/j/jhessian_zombies.txt svneol=native#text/plain
res/cardsfolder/j/jhoira_of_the_ghitu.txt svneol=native#text/plain
res/cardsfolder/j/jhoira_of_the_ghitu_avatar.txt -text
res/cardsfolder/j/jhoiras_timebug.txt -text
res/cardsfolder/j/jhoiras_toolbox.txt svneol=native#text/plain
res/cardsfolder/j/jhovall_queen.txt svneol=native#text/plain
@@ -5511,6 +5529,7 @@ res/cardsfolder/k/kaalia_of_the_vast.txt -text
res/cardsfolder/k/kabira_crossroads.txt svneol=native#text/plain
res/cardsfolder/k/kabira_evangel.txt -text
res/cardsfolder/k/kabira_vindicator.txt svneol=native#text/plain
res/cardsfolder/k/kaboom!.txt -text
res/cardsfolder/k/kabuto_moth.txt svneol=native#text/plain
res/cardsfolder/k/kaervek_the_merciless.txt svneol=native#text/plain
res/cardsfolder/k/kaerveks_hex.txt svneol=native#text/plain
@@ -5529,6 +5548,7 @@ res/cardsfolder/k/kamahl_fist_of_krosa.txt svneol=native#text/plain
res/cardsfolder/k/kamahl_pit_fighter.txt svneol=native#text/plain
res/cardsfolder/k/kamahls_desire.txt svneol=native#text/plain
res/cardsfolder/k/kamahls_sledge.txt -text
res/cardsfolder/k/kamahls_summons.txt -text
res/cardsfolder/k/kami_of_ancient_law.txt svneol=native#text/plain
res/cardsfolder/k/kami_of_empty_graves.txt svneol=native#text/plain
res/cardsfolder/k/kami_of_false_hope.txt svneol=native#text/plain
@@ -5549,11 +5569,13 @@ res/cardsfolder/k/karakas.txt svneol=native#text/plain
res/cardsfolder/k/kargan_dragonlord.txt svneol=native#text/plain
res/cardsfolder/k/karma.txt svneol=native#text/plain
res/cardsfolder/k/karmic_guide.txt svneol=native#text/plain
res/cardsfolder/k/karmic_justice.txt -text
res/cardsfolder/k/karn.txt -text
res/cardsfolder/k/karn_liberated.txt -text
res/cardsfolder/k/karn_silver_golem.txt svneol=native#text/plain
res/cardsfolder/k/karns_touch.txt svneol=native#text/plain
res/cardsfolder/k/karona_false_god.txt -text
res/cardsfolder/k/karona_false_god_avatar.txt -text
res/cardsfolder/k/karonas_zealot.txt -text
res/cardsfolder/k/karoo.txt svneol=native#text/plain
res/cardsfolder/k/karoo_meerkat.txt svneol=native#text/plain
@@ -5633,6 +5655,7 @@ res/cardsfolder/k/kemba_kha_regent.txt svneol=native#text/plain
res/cardsfolder/k/kembas_legion.txt -text
res/cardsfolder/k/kembas_skyguard.txt svneol=native#text/plain
res/cardsfolder/k/kemuri_onna.txt svneol=native#text/plain
res/cardsfolder/k/kessig.txt -text
res/cardsfolder/k/kessig_cagebreakers.txt -text
res/cardsfolder/k/kessig_malcontents.txt -text
res/cardsfolder/k/kessig_recluse.txt -text
@@ -5778,6 +5801,7 @@ res/cardsfolder/k/korlash_heir_to_blackblade.txt svneol=native#text/plain
res/cardsfolder/k/kormus_bell.txt svneol=native#text/plain
res/cardsfolder/k/korozda_guildmage.txt -text
res/cardsfolder/k/korozda_monitor.txt -text
res/cardsfolder/k/koskun_falls.txt -text
res/cardsfolder/k/koskun_keep.txt svneol=native#text/plain
res/cardsfolder/k/koth_of_the_hammer.txt svneol=native#text/plain
res/cardsfolder/k/koths_courier.txt svneol=native#text/plain
@@ -5796,6 +5820,7 @@ res/cardsfolder/k/krark_clan_stoker.txt svneol=native#text/plain
res/cardsfolder/k/krenko_mob_boss.txt -text
res/cardsfolder/k/krenkos_command.txt -text
res/cardsfolder/k/kresh_the_bloodbraided.txt svneol=native#text/plain
res/cardsfolder/k/kresh_the_bloodbraided_avatar.txt -text
res/cardsfolder/k/kris_mage.txt svneol=native#text/plain
res/cardsfolder/k/krond_the_dawn_clad.txt -text
res/cardsfolder/k/krosa.txt -text
@@ -5950,6 +5975,7 @@ res/cardsfolder/l/leap_of_flame.txt svneol=native#text/plain
res/cardsfolder/l/leaping_lizard.txt svneol=native#text/plain
res/cardsfolder/l/leatherback_baloth.txt svneol=native#text/plain
res/cardsfolder/l/leave_no_trace.txt svneol=native#text/plain
res/cardsfolder/l/leech_bonder.txt -text
res/cardsfolder/l/leeches.txt svneol=native#text/plain
res/cardsfolder/l/leeching_bite.txt -text
res/cardsfolder/l/leeching_licid.txt -text
@@ -6202,6 +6228,7 @@ res/cardsfolder/l/lu_xun_scholar_general.txt svneol=native#text/plain
res/cardsfolder/l/lucent_liminid.txt svneol=native#text/plain
res/cardsfolder/l/ludevics_test_subject_ludevics_abomination.txt -text
res/cardsfolder/l/lull.txt svneol=native#text/plain
res/cardsfolder/l/lullmage_mentor.txt -text
res/cardsfolder/l/lumbering_satyr.txt svneol=native#text/plain
res/cardsfolder/l/lumberknot.txt -text
res/cardsfolder/l/lumengrid_augur.txt -text
@@ -6936,6 +6963,7 @@ res/cardsfolder/m/multani_maro_sorcerer.txt svneol=native#text/plain
res/cardsfolder/m/multanis_acolyte.txt svneol=native#text/plain
res/cardsfolder/m/multanis_decree.txt svneol=native#text/plain
res/cardsfolder/m/multanis_harmony.txt -text svneol=unset#text/plain
res/cardsfolder/m/multanis_presence.txt -text
res/cardsfolder/m/mundungu.txt -text
res/cardsfolder/m/mungha_wurm.txt svneol=native#text/plain
res/cardsfolder/m/muraganda_petroglyphs.txt svneol=native#text/plain
@@ -7128,6 +7156,7 @@ res/cardsfolder/n/nemata_grove_guardian.txt svneol=native#text/plain
res/cardsfolder/n/nemesis_mask.txt svneol=native#text/plain
res/cardsfolder/n/nemesis_of_reason.txt svneol=native#text/plain
res/cardsfolder/n/nemesis_trap.txt -text
res/cardsfolder/n/nephalia.txt -text
res/cardsfolder/n/nephalia_drownyard.txt -text
res/cardsfolder/n/nephalia_seakite.txt -text
res/cardsfolder/n/nephalia_smuggler.txt -text
@@ -7641,6 +7670,7 @@ res/cardsfolder/p/peace_and_quiet.txt svneol=native#text/plain
res/cardsfolder/p/peace_of_mind.txt svneol=native#text/plain
res/cardsfolder/p/peace_strider.txt svneol=native#text/plain
res/cardsfolder/p/peacekeeper.txt svneol=native#text/plain
res/cardsfolder/p/peacekeeper_avatar.txt -text
res/cardsfolder/p/peach_garden_oath.txt svneol=native#text/plain
res/cardsfolder/p/pearl_dragon.txt svneol=native#text/plain
res/cardsfolder/p/pearl_medallion.txt svneol=native#text/plain
@@ -8846,6 +8876,7 @@ res/cardsfolder/r/runeboggle.txt svneol=native#text/plain
res/cardsfolder/r/runechanters_pike.txt -text
res/cardsfolder/r/runeclaw_bear.txt svneol=native#text/plain
res/cardsfolder/r/runed_arch.txt svneol=native#text/plain
res/cardsfolder/r/runed_halo.txt -text
res/cardsfolder/r/runed_servitor.txt svneol=native#text/plain
res/cardsfolder/r/runed_stalactite.txt svneol=native#text/plain
res/cardsfolder/r/runeflare_trap.txt -text
@@ -9779,6 +9810,7 @@ res/cardsfolder/s/slithery_stalker.txt svneol=native#text/plain
res/cardsfolder/s/sliver_legion.txt svneol=native#text/plain
res/cardsfolder/s/sliver_overlord.txt svneol=native#text/plain
res/cardsfolder/s/sliver_queen.txt svneol=native#text/plain
res/cardsfolder/s/sliver_queen_avatar.txt -text
res/cardsfolder/s/sliver_queen_brood_mother.txt -text
res/cardsfolder/s/sliversmith.txt svneol=native#text/plain
res/cardsfolder/s/slobad_goblin_tinkerer.txt svneol=native#text/plain
@@ -9945,6 +9977,7 @@ res/cardsfolder/s/soul_tithe.txt -text
res/cardsfolder/s/soul_warden.txt svneol=native#text/plain
res/cardsfolder/s/soulblast.txt -text
res/cardsfolder/s/soulbound_guardians.txt svneol=native#text/plain
res/cardsfolder/s/soulbright_flamekin.txt -text
res/cardsfolder/s/soulcage_fiend.txt -text
res/cardsfolder/s/soulcatcher.txt svneol=native#text/plain
res/cardsfolder/s/soulcatchers_aerie.txt svneol=native#text/plain
@@ -10330,6 +10363,7 @@ res/cardsfolder/s/stonefare_crocodile.txt -text
res/cardsfolder/s/stoneforge_mystic.txt svneol=native#text/plain
res/cardsfolder/s/stonehands.txt svneol=native#text/plain
res/cardsfolder/s/stonehewer_giant.txt -text
res/cardsfolder/s/stonehewer_giant_avatar.txt -text
res/cardsfolder/s/stonehorn_dignitary.txt -text
res/cardsfolder/s/stonewood_invocation.txt svneol=native#text/plain
res/cardsfolder/s/stonewood_invoker.txt svneol=native#text/plain
@@ -10560,6 +10594,7 @@ res/cardsfolder/s/swell_of_courage.txt svneol=native#text/plain
res/cardsfolder/s/swelter.txt svneol=native#text/plain
res/cardsfolder/s/swift_justice.txt -text
res/cardsfolder/s/swift_maneuver.txt svneol=native#text/plain
res/cardsfolder/s/swift_silence.txt -text
res/cardsfolder/s/swiftfoot_boots.txt svneol=native#text/plain
res/cardsfolder/s/swirling_sandstorm.txt svneol=native#text/plain
res/cardsfolder/s/swirling_spriggan.txt -text
@@ -10858,6 +10893,7 @@ res/cardsfolder/t/the_tabernacle_at_pendrell_vale.txt svneol=native#text/plain
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/the_zephyr_maze.txt -text
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
@@ -11644,6 +11680,7 @@ res/cardsfolder/v/vex.txt svneol=native#text/plain
res/cardsfolder/v/vexing_arcanix.txt -text
res/cardsfolder/v/vexing_beetle.txt svneol=native#text/plain
res/cardsfolder/v/vexing_devil.txt -text
res/cardsfolder/v/vexing_shusher.txt -text
res/cardsfolder/v/vexing_sphinx.txt -text
res/cardsfolder/v/vhati_il_dal.txt -text
res/cardsfolder/v/viashino_bladescout.txt svneol=native#text/plain
@@ -11960,6 +11997,7 @@ res/cardsfolder/w/warmongers_chariot.txt svneol=native#text/plain
res/cardsfolder/w/warmth.txt svneol=native#text/plain
res/cardsfolder/w/warning.txt svneol=native#text/plain
res/cardsfolder/w/warp_artifact.txt svneol=native#text/plain
res/cardsfolder/w/warp_world.txt -text
res/cardsfolder/w/warpath.txt svneol=native#text/plain
res/cardsfolder/w/warpath_ghoul.txt svneol=native#text/plain
res/cardsfolder/w/warped_devotion.txt svneol=native#text/plain
@@ -12031,6 +12069,7 @@ res/cardsfolder/w/wei_infantry.txt svneol=native#text/plain
res/cardsfolder/w/wei_night_raiders.txt svneol=native#text/plain
res/cardsfolder/w/wei_scout.txt svneol=native#text/plain
res/cardsfolder/w/wei_strike_force.txt svneol=native#text/plain
res/cardsfolder/w/weight_of_conscience.txt -text
res/cardsfolder/w/weight_of_spires.txt -text
res/cardsfolder/w/weird_harvest.txt -text
res/cardsfolder/w/weirding_shaman.txt svneol=native#text/plain
@@ -12452,6 +12491,7 @@ res/cardsfolder/z/zur_the_enchanter.txt svneol=native#text/plain
res/cardsfolder/z/zuran_enchanter.txt svneol=native#text/plain
res/cardsfolder/z/zuran_orb.txt svneol=native#text/plain
res/cardsfolder/z/zuran_spellcaster.txt svneol=native#text/plain
res/cardsfolder/z/zurs_weirding.txt -text
res/defaults/editor.preferences svneol=native#text/xml
res/defaults/editor.xml svneol=native#text/xml
res/defaults/gauntlet/LOCKED_DotP[!!-~]Preconstructed.dat -text
@@ -12794,6 +12834,7 @@ res/quest/duels/Picard[!!-~]3.dck -text
res/quest/duels/Pinky[!!-~]and[!!-~]the[!!-~]Brain[!!-~]2.dck -text
res/quest/duels/Piper[!!-~]2.dck -text
res/quest/duels/Pointy[!!-~]Haired[!!-~]Boss[!!-~]3.dck -text
res/quest/duels/Preacher[!!-~]3.dck -text
res/quest/duels/Princess[!!-~]Selenia[!!-~]1.dck -text
res/quest/duels/Professor[!!-~]X[!!-~]2.dck -text
res/quest/duels/Professor[!!-~]X[!!-~]3.dck -text
@@ -13485,6 +13526,7 @@ src/main/java/forge/card/ability/ai/AlwaysPlayAi.java -text
src/main/java/forge/card/ability/ai/AnimateAi.java -text
src/main/java/forge/card/ability/ai/AnimateAllAi.java -text
src/main/java/forge/card/ability/ai/AttachAi.java -text
src/main/java/forge/card/ability/ai/BecomesBlockedAi.java -text
src/main/java/forge/card/ability/ai/BondAi.java -text
src/main/java/forge/card/ability/ai/CanPlayAsDrawbackAi.java -text
src/main/java/forge/card/ability/ai/CannotPlayAi.java -text
@@ -13584,6 +13626,7 @@ src/main/java/forge/card/ability/effects/AnimateAllEffect.java -text
src/main/java/forge/card/ability/effects/AnimateEffect.java -text
src/main/java/forge/card/ability/effects/AnimateEffectBase.java svneol=native#text/plain
src/main/java/forge/card/ability/effects/AttachEffect.java -text
src/main/java/forge/card/ability/effects/BecomesBlockedEffect.java -text
src/main/java/forge/card/ability/effects/BondEffect.java -text
src/main/java/forge/card/ability/effects/ChangeZoneAllEffect.java -text
src/main/java/forge/card/ability/effects/ChangeZoneEffect.java -text
@@ -13744,11 +13787,11 @@ src/main/java/forge/card/spellability/AbilityManaPart.java svneol=native#text/pl
src/main/java/forge/card/spellability/AbilityStatic.java svneol=native#text/plain
src/main/java/forge/card/spellability/AbilitySub.java svneol=native#text/plain
src/main/java/forge/card/spellability/AbilityTriggered.java svneol=native#text/plain
src/main/java/forge/card/spellability/HumanPlaySpellAbility.java svneol=native#text/plain
src/main/java/forge/card/spellability/ISpellAbility.java -text
src/main/java/forge/card/spellability/Spell.java svneol=native#text/plain
src/main/java/forge/card/spellability/SpellAbility.java svneol=native#text/plain
src/main/java/forge/card/spellability/SpellAbilityCondition.java svneol=native#text/plain
src/main/java/forge/card/spellability/SpellAbilityRequirements.java svneol=native#text/plain
src/main/java/forge/card/spellability/SpellAbilityRestriction.java svneol=native#text/plain
src/main/java/forge/card/spellability/SpellAbilityStackInstance.java svneol=native#text/plain
src/main/java/forge/card/spellability/SpellAbilityVariables.java svneol=native#text/plain
@@ -13780,8 +13823,11 @@ src/main/java/forge/card/trigger/TriggerChangesZone.java svneol=native#text/plai
src/main/java/forge/card/trigger/TriggerClashed.java svneol=native#text/plain
src/main/java/forge/card/trigger/TriggerCounterAdded.java svneol=native#text/plain
src/main/java/forge/card/trigger/TriggerCounterRemoved.java -text
src/main/java/forge/card/trigger/TriggerCountered.java -text
src/main/java/forge/card/trigger/TriggerCycled.java svneol=native#text/plain
src/main/java/forge/card/trigger/TriggerDamageDone.java svneol=native#text/plain
src/main/java/forge/card/trigger/TriggerDestroyed.java -text
src/main/java/forge/card/trigger/TriggerDevoured.java -text
src/main/java/forge/card/trigger/TriggerDiscarded.java svneol=native#text/plain
src/main/java/forge/card/trigger/TriggerDrawn.java svneol=native#text/plain
src/main/java/forge/card/trigger/TriggerHandler.java svneol=native#text/plain
@@ -13817,12 +13863,14 @@ src/main/java/forge/control/bazaar/ControlStall.java -text
src/main/java/forge/control/bazaar/package-info.java svneol=native#text/plain
src/main/java/forge/control/input/Input.java -text
src/main/java/forge/control/input/InputAttack.java svneol=native#text/plain
src/main/java/forge/control/input/InputAutoPassPriority.java -text
src/main/java/forge/control/input/InputBase.java svneol=native#text/plain
src/main/java/forge/control/input/InputBlock.java svneol=native#text/plain
src/main/java/forge/control/input/InputCleanup.java svneol=native#text/plain
src/main/java/forge/control/input/InputControl.java svneol=native#text/plain
src/main/java/forge/control/input/InputLockUI.java -text
src/main/java/forge/control/input/InputMulligan.java svneol=native#text/plain
src/main/java/forge/control/input/InputPartialParisMulligan.java -text
src/main/java/forge/control/input/InputPassPriority.java svneol=native#text/plain
src/main/java/forge/control/input/InputPayManaBase.java -text
src/main/java/forge/control/input/InputPayManaExecuteCommands.java svneol=native#text/plain
@@ -13834,6 +13882,7 @@ src/main/java/forge/control/input/InputSelectCards.java -text
src/main/java/forge/control/input/InputSelectCardsFromList.java -text
src/main/java/forge/control/input/InputSelectMany.java -text
src/main/java/forge/control/input/InputSelectManyBase.java -text
src/main/java/forge/control/input/InputSelectTargets.java -text
src/main/java/forge/control/input/InputSynchronized.java -text
src/main/java/forge/control/input/InputSyncronizedBase.java -text
src/main/java/forge/control/input/package-info.java svneol=native#text/plain
@@ -13865,8 +13914,8 @@ src/main/java/forge/deck/package-info.java svneol=native#text/plain
src/main/java/forge/error/ExceptionHandler.java svneol=native#text/plain
src/main/java/forge/error/package-info.java svneol=native#text/plain
src/main/java/forge/game/GameAction.java svneol=native#text/plain
src/main/java/forge/game/GameActionPlay.java -text
src/main/java/forge/game/GameActionUtil.java svneol=native#text/plain
src/main/java/forge/game/GameAge.java -text
src/main/java/forge/game/GameEndReason.java -text
src/main/java/forge/game/GameFormat.java -text
src/main/java/forge/game/GameLossReason.java -text
@@ -14255,6 +14304,7 @@ src/main/java/forge/util/HttpUtil.java svneol=native#text/plain
src/main/java/forge/util/IItemReader.java -text
src/main/java/forge/util/IItemSerializer.java -text
src/main/java/forge/util/IgnoringXStream.java -text
src/main/java/forge/util/Lang.java -text
src/main/java/forge/util/LineReader.java -text
src/main/java/forge/util/MultiplexOutputStream.java svneol=native#text/plain
src/main/java/forge/util/MyObservable.java svneol=native#text/plain

View File

@@ -47,6 +47,14 @@ The Import Pictures dialog, accessed via the Content Downloaders submenu, has re
An importer option was added for including pictures in set-specific card directories that don't map to any currently known card. This handles the case where people have collected complete sets of pics in anticipation of when Forge supports them.
- Flip, Transform and Morph cards -
When you mouse over a flip, transform or Morph (controlled by you) card in battlefield, you may hold SHIFT to see other state of that card at the side panel that displays card picture and details.
- Milestone reached -
There is now under 700 unsupported cards, and we should be at or near 85% for all the sets.
---------
New Cards
---------
@@ -58,6 +66,30 @@ Breathstealer's Crypt
Moonlight Bargain
Auriok Siege Sled
Burning-Tree Bloodscale
Soulbright Flamekin
Koskun Falls
Warp World
Zur's Weirding
Vexing Shusher
Benthic Explorers
Leech Bonder
Weight of Conscience
Multani's Presence
Lullmage Mentor
Fold into AEther
Hinder
Swift Silence
Cut the Tethers
Delay
Runed Halo
Heroism
Blazing Effigy
Karmic Justice
Harsh Mercy
Kamahl's Summons
Kaboom!
Curtain of Light
Dazzling Beauty
----------
@@ -65,6 +97,27 @@ New Planes
----------
Sea of Sand
Astral Arena
Bloodhill Bastion
Gavony
Hedron Fields of Agadeem
Kessig
Nephalia
The Zephyr Maze
--------------------
New Vanguard Avatars
--------------------
Akroma, Angel of Wrath Avatar
Eight-and-a-Half-Tails Avatar
Peacekeeper Avatar
Stonehewer Giant Avatar
Sliver Queen Avatar
Jhoira of the Ghitu Avatar
Kresh the Bloodbraided Avatar
Karona, False God Avatar
------------

View File

@@ -1,7 +1,7 @@
Name:Acquire
ManaCost:3 U U
Types:Sorcery
A:SP$ ChangeZone | Cost$ 3 U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Artifact | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | SpellDescription$ Search target opponent's library for an artifact card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
A:SP$ ChangeZone | Cost$ 3 U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Artifact | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | StackDescription$ SpellDescription | SpellDescription$ Search target opponent's library for an artifact card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
SVar:Picture:http://www.wizards.com/global/images/magic/general/acquire.jpg
Oracle:Search target opponent's library for an artifact card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
SetInfo:5DN Rare

View File

@@ -0,0 +1,9 @@
Name:Akroma, Angel of Wrath Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:+1/+7
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Command | ValidCard$ Creature.YouCtrl | Execute$ PumpRandom | TriggerDescription$ Whenever a creature enters the battlefield under your control, it gains two abilities chosen at random from flying, first strike, trample, haste, protection from black, protection from red, and vigilance.
SVar:PumpRandom:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | Permanent$ True | KW$ Flying & First Strike & Trample & Haste & Protection from black & Protection from red & Vigilance | RandomKeyword$ True | RandomKWNum$ 2
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/akroma_angel_of_wrath_avatar.jpg
Oracle:Hand +1, life +7\nWhenever a creature enters the battlefield under your control, it gains two abilities chosen at random from flying, first strike, trample, haste, protection from black, protection from red, and vigilance.
SetInfo:VAN Special

View File

@@ -1,7 +1,7 @@
Name:Appetite for Brains
ManaCost:B
Types:Sorcery
A:SP$ ChangeZone | Cost$ B | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | ChangeType$ Card.cmcGE4 | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | SpellDescription$ Target opponent reveals his or her hand. You choose a card from it with converted mana cost 4 or greater and exile that card.
A:SP$ ChangeZone | Cost$ B | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | DefinedPlayer$ Targeted | Chooser$ You | ChangeType$ Card.cmcGE4 | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals his or her hand. You choose a card from it with converted mana cost 4 or greater and exile that card.
SVar:Picture:http://www.wizards.com/global/images/magic/general/appetite_for_brains.jpg
Oracle:Target opponent reveals his or her hand. You choose a card from it with converted mana cost 4 or greater and exile that card.
SetInfo:AVR Uncommon

View File

@@ -0,0 +1,10 @@
Name:Astral Arena
ManaCost:no cost
Types:Plane Kolbahan
S:Mode$ Continuous | EffectZone$ Command | GlobalRule$ No more than one creature can attack each combat. | Description$ No more than one creature can attack each combat.
S:Mode$ Continuous | EffectZone$ Command | GlobalRule$ No more than one creature can block each combat. | Description$ No more than one creature can block each combat.
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll Chaos, CARDNAME deals 2 damage to each creature.
SVar:RolledChaos:AB$ DamageAll | Cost$ 0 | NumDmg$ 2 | ValidCards$ Creature | ValidDescription$ each creature.
SVar:Picture:http://www.wizards.com/global/images/magic/general/astral_arena.jpg
Oracle:No more than one creature can attack each combat.\nNo more than one creature can block each combat.\nWhenever you roll {C}, Astral Arena deals 2 damage to each creature.
SetInfo:PC2 Common

View File

@@ -2,9 +2,8 @@ Name:Auriok Siege Sled
ManaCost:6
Types:Artifact Creature Juggernaut
PT:3/5
A:AB$ Pump | Cost$ 1 | ValidTgts$ Creature.Artifact | TgtPrompt$ Select target artifact creature that can't block this creature this turn | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBCantblock | StackDescription$ None | SpellDescription$ Target artifact creature can't block CARDNAME this turn.
SVar:DBCantblock:DB$ Effect | Name$ Auriok Siege Sled Effect | RememberObjects$ Targeted | StaticAbilities$ STCantBlock | ImprintCards$ Self
SVar:STCantBlock:Mode$ Continuous | Affected$ Card.IsImprinted | EffectZone$ Command | AddHiddenKeyword$ CantBeBlockedBy Creature.IsRemembered | Description$ Auriok Siege Sled can't be blocked by target artifact creature.
A:AB$ Pump | Cost$ 1 | ValidTgts$ Creature.Artifact | TgtPrompt$ Select target artifact creature that can't block this creature this turn | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBPump | StackDescription$ {c:Targeted} can't block CARDNAME this turn. | SpellDescription$ Target artifact creature can't block CARDNAME this turn.
SVar:DBPump:DB$ Pump | KW$ HIDDEN CantBeBlockedBy Creature.IsRemembered | StackDescription$ None
T:Mode$ Phase | Phase$ Cleanup | TriggerZones$ Battlefield | Execute$ DBCleanup | Static$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True

View File

@@ -0,0 +1,8 @@
Name:Benthic Explorers
ManaCost:3 U
Types:Creature Merfolk Scout
PT:2/4
A:AB$ ManaReflected | Cost$ T untapYType<1/Land.OppCtrl/land> | ColorOrType$ Type | Valid$ Defined.Untapped | ReflectProperty$ Produce | SpellDescription$ Add one mana of any type that land could produce to your mana pool.
SVar:Picture:http://www.wizards.com/global/images/magic/general/benthic_explorers.jpg
Oracle:{T}, Untap a tapped land an opponent controls: Add one mana of any type that land could produce to your mana pool.
SetInfo:ALL Common x2

View File

@@ -0,0 +1,17 @@
Name:Blazing Effigy
ManaCost:1 R
Types:Creature Elemental
PT:0/3
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ BlazeDmg | TriggerDescription$ When CARDNAME dies, it deals X damage to target creature, where X is 3 plus the amount of damage dealt to CARDNAME this turn by other sources named Blazing Effigy.
SVar:BlazeDmg:DB$ DealDamage | ValidTgts$ Creature | TgtPrompt$ Select target creature to deal damage to | NumDmg$ BlazeSize | References$ BlazeSize,Contributions | SubAbility$ TrigReset
T:Mode$ DamageDone | ValidSource$ Card.Other+namedBlazing Effigy | ValidTarget$ Card.Self | Execute$ StoreContribution | Static$ True
SVar:StoreContribution:DB$ StoreSVar | SVar$ Contributions | Type$ CountSVar | Expression$ Contributions/Plus.Blazed
T:Mode$ Phase | Phase$ Cleanup | Execute$ TrigReset | Static$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Ante,Library,Hand,Exile | ValidCard$ Card.Self | Execute$ TrigReset | Static$ True
SVar:TrigReset:DB$ StoreSVar | SVar$ Contributions | Type$ Number | Expression$ 0
SVar:BlazeSize:SVar$Contributions/Plus.3
SVar:Contributions:Number$0
SVar:Blazed:TriggerCount$DamageAmount
SVar:Picture:http://www.wizards.com/global/images/magic/general/blazing_effigy.jpg
Oracle:When Blazing Effigy dies, it deals X damage to target creature, where X is 3 plus the amount of damage dealt to Blazing Effigy this turn by other sources named Blazing Effigy.
SetInfo:LEG Common

View File

@@ -0,0 +1,11 @@
Name:Bloodhill Bastion
ManaCost:no cost
Types:Plane Equilor
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | TriggerZones$ Command | ValidCard$ Creature | Execute$ TrigPump | TriggerDescription$ Whenever a creature enters the battlefield, it gains double strike and haste until end of turn.
SVar:TrigPump:AB$ Pump | Cost$ 0 | Defined$ TriggeredCard | KW$ Double Strike & Haste
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll Chaos, exile target nontoken creature you control, then return it to the battlefield under your control.
SVar:RolledChaos:AB$ ChangeZone | Cost$ 0 | ValidTgts$ Creature.nonToken+YouCtrl | TgtPrompt$ Select target non-Token creature you control | Origin$ Battlefield | Destination$ Exile | RememberTargets$ True | ForgetOtherTargets$ True | SubAbility$ RestorationReturn
SVar:RestorationReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Battlefield | GainControl$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/bloodhill_bastion.jpg
Oracle:Whenever a creature enters the battlefield, it gains double strike and haste until end of turn.\nWhenever you roll {C}, exile target nontoken creature you control, then return it to the battlefield under your control.
SetInfo:PC2 Common

View File

@@ -1,7 +1,7 @@
Name:Bribery
ManaCost:3 U U
Types:Sorcery
A:SP$ ChangeZone | Cost$ 3 U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Creature | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | SpellDescription$ Search target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
A:SP$ ChangeZone | Cost$ 3 U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Creature | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | StackDescription$ SpellDescription | SpellDescription$ Search target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
SVar:Picture:http://resources.wizards.com/magic/cards/mm/en-us/card21300.jpg
Oracle:Search target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
SetInfo:MMQ Rare

View File

@@ -1,7 +1,13 @@
Name:Brilliant Ultimatum
ManaCost:W W U U U B B
Types:Sorcery
Text:Exile the top five cards of your library. An opponent separates those cards into two piles. You may play any number of cards from one of those piles without paying their mana costs.
A:SP$ Mill | Cost$ W W U U U B B | Defined$ You | NumCards$ 5 | Destination$ Exile | RememberMilled$ True | SubAbility$ DBTwoPiles | SpellDescription$ Exile the top five cards of your library. An opponent separates those cards into two piles. You may play any number of cards from one of those piles without paying their mana costs.
SVar:DBTwoPiles:DB$ TwoPiles | Defined$ You | DefinedCards$ Remembered | Separator$ Opponent | ChosenPile$ DBPlay | SubAbility$ DBCleanup
SVar:DBPlay:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Card.IsRemembered | ChooseOrder$ True | Zone$ Exile | RepeatSubAbility$ DBPlayCard
SVar:DBPlayCard:DB$ Play | Defined$ Imprinted | Controller$ You | WithoutManaCost$ True | Optional$ True
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Y:Count$InYourLibrary
SVar:NeedsToPlayVar:Y GE8
SVar:Picture:http://www.wizards.com/global/images/magic/general/brilliant_ultimatum.jpg
Oracle:Exile the top five cards of your library. An opponent separates those cards into two piles. You may play any number of cards from one of those piles without paying their mana costs.
SetInfo:ALA Rare

View File

@@ -3,13 +3,13 @@ ManaCost:2 R G
Types:Creature Viashino Berserker
PT:2/2
K:Bloodthirst 1
A:AB$ Pump | Cost$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature that can't block this creature this turn | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBCantblock | StackDescription$ None | SpellDescription$ Target creature can't block CARDNAME this turn.
SVar:DBCantblock:DB$ Effect | Name$ Burning-Tree Bloodscale Effect | RememberObjects$ Targeted | StaticAbilities$ STCantBlock | ImprintCards$ Self
SVar:STCantBlock:Mode$ Continuous | Affected$ Card.IsImprinted | EffectZone$ Command | AddHiddenKeyword$ CantBeBlockedBy Creature.IsRemembered | Description$ Burning-Tree Bloodscale can't be blocked by target creature.
A:AB$ Pump | Cost$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature that can't block this creature this turn | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBPump | StackDescription$ {c:Targeted} can't block CARDNAME this turn. | SpellDescription$ Target creature can't block CARDNAME this turn.
SVar:DBPump:DB$ Pump | KW$ HIDDEN CantBeBlockedBy Creature.IsRemembered | StackDescription$ None
T:Mode$ Phase | Phase$ Cleanup | TriggerZones$ Battlefield | Execute$ DBCleanup | Static$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
A:AB$ MustBlock | Cost$ 2 G | ValidTgts$ Creature | TgtPrompt$ Select target creature that must block this creature this turn | SpellDescription$ Target creature blocks CARDNAME this turn if able.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/burning_tree_bloodscale.jpg
Oracle:Bloodthirst 1 (If an opponent was dealt damage this turn, this creature enters the battlefield with a +1/+1 counter on it.)\n{2}{R}: Target creature can't block Burning-Tree Bloodscale this turn.\n{2}{G}: Target creature blocks Burning-Tree Bloodscale this turn if able.
SetInfo:GPT Common

View File

@@ -1,7 +1,7 @@
Name:Castigate
ManaCost:W B
Types:Sorcery
A:SP$ ChangeZone | Cost$ W B | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | SpellDescription$ Target opponent reveals his or her hand. You choose a nonland card from it and exile that card.
A:SP$ ChangeZone | Cost$ W B | Origin$ Hand | Destination$ Exile | DefinedPlayer$ Targeted | ValidTgts$ Opponent | Chooser$ You | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals his or her hand. You choose a nonland card from it and exile that card.
SVar:Picture:http://www.wizards.com/global/images/magic/general/castigate.jpg
Oracle:Target opponent reveals his or her hand. You choose a nonland card from it and exile that card.
SetInfo:GPT Common

View File

@@ -2,7 +2,7 @@ Name:Cleansing
ManaCost:W W W
Types:Sorcery
A:SP$ RepeatEach | Cost$ W W W | RepeatSubAbility$ DBSac | RepeatCards$ Land | SpellDescription$ For each land, destroy that land unless any player pays 1 life.
SVar:DBSac:DB$ Destroy | UnlessCost$ PayLife<1> | UnlessPayer$ Player | Defined$ Remembered
SVar:DBSac:DB$ Destroy | UnlessCost$ PayLife<1> | UnlessPayer$ Player | UnlessAI$ DefinedRememberedController | Defined$ Remembered
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/cleansing.jpg
Oracle:For each land, destroy that land unless any player pays 1 life.

View File

@@ -0,0 +1,11 @@
Name:Comet Storm
ManaCost:X R R
Types:Instant
A:SP$ DealDamage | Cost$ X R R | Announce$ Multikicker,X | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ X | TargetMin$ TargetsNum | TargetMax$ TargetsNum | References$ X,TargetsNum | SpellDescription$ CARDNAME deals X damage to each target creature and/or player.
K:Multikicker 1
SVar:TargetsNum:Count$TimesKicked/Plus.1
SVar:Picture:http://www.wizards.com/global/images/magic/general/comet_storm.jpg
SVar:X:Count$xPaid
Oracle:Multikicker {1} (You may pay an additional {1} any number of times as you cast this spell.)\nChoose target creature or player, then choose another target creature or player for each time Comet Storm was kicked. Comet Storm deals X damage to each of them.
SetInfo:COM Mythic
SetInfo:WWK Mythic

View File

@@ -1,7 +1,7 @@
Name:Consume Spirit
ManaCost:X 1 B
Types:Sorcery
A:SP$DealDamage | Cost$ X 1 B | XColor$ B | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ X | SubAbility$ DBGainLife | References$ X | SpellDescription$ Spend only black mana on X. Consume Spirit deals X damage to target creature or player and you gain X life.
A:SP$DealDamage | Cost$ X 1 B | XColor$ B | Announce$ X | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ X | SubAbility$ DBGainLife | References$ X | SpellDescription$ Spend only black mana on X. Consume Spirit deals X damage to target creature or player and you gain X life.
SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ X | References$ X
SVar:X:Count$xPaid
SVar:RemAIDeck:True

View File

@@ -3,6 +3,7 @@ ManaCost:UR UR UR
Types:Creature Shapeshifter
PT:2/4
A:AB$ Pump | Cost$ UR | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch CARDNAME's power and toughness until end of turn.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/crag_puca.jpg
Oracle:{U/R}: Switch Crag Puca's power and toughness until end of turn.
SetInfo:EVE Uncommon

View File

@@ -0,0 +1,9 @@
Name:Curtain of Light
ManaCost:1 W
Types:Instant
Text:Cast CARDNAME only during combat after blockers are declared.
A:SP$ BecomesBlocked | Cost$ 1 W | ValidTgts$ Creature.attacking+unblocked | TgtPrompt$ Select target unblocked attacking creature | SubAbility$ Draw | ActivationPhases$ Declare Blockers - Play Instants and Abilities->EndCombat | SpellDescription$ Target unblocked attacking creature becomes blocked. (This spell works on unblockable creatures.) Draw a card.
SVar:Draw:DB$ Draw | NumCards$ 1
SVar:Picture:http://www.wizards.com/global/images/magic/general/curtain_of_light.jpg
Oracle:Cast Curtain of Light only during combat after blockers are declared.\nTarget unblocked attacking creature becomes blocked. (This spell works on unblockable creatures.)\nDraw a card.
SetInfo:SOK Common

View File

@@ -0,0 +1,8 @@
Name:Cut the Tethers
ManaCost:2 U U
Types:Sorcery
A:SP$ RepeatEach | Cost$ 2 U U | RepeatSubAbility$ DBReturn | RepeatCards$ Creature.Spirit | SpellDescription$ For each Spirit, return it to its owner's hand unless that player pays 3.
SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Battlefield | Destination$ Hand | UnlessCost$ 3 | UnlessPayer$ RememberedController
SVar:Picture:http://www.wizards.com.sixxs.org/global/images/magic/general/cut_the_tethers.jpg
Oracle:For each Spirit, return it to its owner's hand unless that player pays {3}.
SetInfo:CHK Uncommon

View File

@@ -0,0 +1,9 @@
Name:Dazzling Beauty
ManaCost:2 W
Types:Instant
Text:Cast CARDNAME only during combat after blockers are declared.
A:SP$ BecomesBlocked | Cost$ 2 W | ValidTgts$ Creature.attacking+unblocked | TgtPrompt$ Select target unblocked attacking creature | SubAbility$ Draw | ActivationPhases$ Declare Blockers - Play Instants and Abilities->EndCombat | SpellDescription$ Target unblocked attacking creature becomes blocked. (This spell works on unblockable creatures.) Draw a card at the beginning of the next turn's upkeep.
SVar:Draw:DB$ Draw | NumCards$ 1 | NextUpkeep$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/dazzling_beauty.jpg
Oracle:Cast Dazzling Beauty only during the declare blockers step.\nTarget unblocked attacking creature becomes blocked. (This spell works on unblockable creatures.)\nDraw a card at the beginning of the next turn's upkeep.
SetInfo:MIR Common

View File

@@ -0,0 +1,10 @@
Name:Delay
ManaCost:1 U
Types:Instant
A:SP$ Counter | Cost$ 1 U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | RememberCountered$ True | Destination$ Exile | SubAbility$ DBPutCounter | SpellDescription$ Counter target spell. If the spell is countered this way, exile it with three time counters on it instead of putting it into its owner's graveyard. If it doesn't have suspend, it gains suspend. (At the beginning of its owner's upkeep, remove a counter from that card. When the last is removed, the player plays it without paying its mana cost. If it's a creature, it has haste.)
SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterNum$ 3 | CounterType$ TIME | SubAbility$ DBPump
SVar:DBPump:DB$ PumpAll | ValidCards$ Card.IsRemembered+withoutSuspend | PumpZone$ Exile | KW$ Suspend | Permanent$ True | SubAbility$ DBCleanup | StackDescription$ If it doesn't have suspend, it gains suspend.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/delay.jpg
Oracle:Counter target spell. If the spell is countered this way, exile it with three time counters on it instead of putting it into its owner's graveyard. If it doesn't have suspend, it gains suspend. (At the beginning of its owner's upkeep, remove a counter from that card. When the last is removed, the player plays it without paying its mana cost. If it's a creature, it has haste.)
SetInfo:FUT Uncommon

View File

@@ -2,6 +2,11 @@ Name:Duct Crawler
ManaCost:R
Types:Creature Insect
PT:1/1
A:AB$ Pump | Cost$ 1 R | ValidTgts$ Creature | TgtPrompt$ Select target creature that can't block this creature this turn | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBPump | StackDescription$ {c:Targeted} can't block CARDNAME this turn. | SpellDescription$ Target creature can't block CARDNAME this turn.
SVar:DBPump:DB$ Pump | KW$ HIDDEN CantBeBlockedBy Creature.IsRemembered | StackDescription$ None
T:Mode$ Phase | Phase$ Cleanup | TriggerZones$ Battlefield | Execute$ DBCleanup | Static$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/duct_crawler.jpg
Oracle:{1}{R}: Target creature can't block Duct Crawler this turn.

View File

@@ -0,0 +1,8 @@
Name:Eight-and-a-Half-Tails Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:+2/-3
A:AB$ Pump | Cost$ 1 | ActivationZone$ Command | ValidTgts$ Permanent.YouCtrl | TgtPrompt$ Select target permanent you control | KW$ Protection from red & Protection from blue & Protection from black & Protection from white & Protection from green | RandomKeyword$ True | NoRepetition$ True | StackDescription$ SpellDescription | SpellDescription$ Until end of turn, target permanent you control gains protection from a color chosen at random from colors it doesn't have protection from.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/eight_and_a_half_tails_avatar.jpg
Oracle:Hand +2, life -3\n{1}: Until end of turn, target permanent you control gains protection from a color chosen at random from colors it doesn't have protection from.
SetInfo:VAN Special

View File

@@ -3,7 +3,7 @@ ManaCost:3
Types:Artifact Equipment
K:Equip 2
A:AB$ Animate | Cost$ 3 | Defined$ Self | Power$ 1 | Toughness$ 5 | Types$ Creature,Artifact,Spirit | Keywords$ Flying | OverwriteTypes$ True | SpellDescription$ CARDNAME becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.)
S:Mode$ Continuous | Affected$ Card.EquippedBy | IsPresent$ Card.Self+nonCreature | AddPower$ 1 | AddToughness$ 5 | Description$ Equipped creature gets +1/+5.
S:Mode$ Continuous | Affected$ Card.EquippedBy | AddPower$ 1 | AddToughness$ 5 | Description$ Equipped creature gets +1/+5.
SVar:Picture:http://www.wizards.com/global/images/magic/general/ensouled_scimitar.jpg
Oracle:{3}: Ensouled Scimitar becomes a 1/5 Spirit artifact creature with flying until end of turn. (Equipment that's a creature can't equip a creature.)\nEquipped creature gets +1/+5.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.)
SetInfo:5DN Uncommon

View File

@@ -1,7 +1,7 @@
Name:Entreat the Angels
ManaCost:X X W W W
Types:Sorcery
A:SP$ Token | Cost$ X X W W W | TokenAmount$ X | TokenName$ Angel | TokenTypes$ Creature,Angel | TokenOwner$ You | TokenColors$ White | TokenPower$ 4 | TokenToughness$ 4 | TokenKeywords$ Flying | TokenImage$ w 4 4 angel avr | References$ X | SpellDescription$ Put X 4/4 white Angel creature tokens with flying onto the battlefield.
A:SP$ Token | Cost$ X X W W W | Announce$ X | TokenAmount$ X | TokenName$ Angel | TokenTypes$ Creature,Angel | TokenOwner$ You | TokenColors$ White | TokenPower$ 4 | TokenToughness$ 4 | TokenKeywords$ Flying | TokenImage$ w 4 4 angel avr | References$ X | SpellDescription$ Put X 4/4 white Angel creature tokens with flying onto the battlefield.
K:Miracle:X W W
SVar:X:Count$xPaid
SVar:Picture:http://www.wizards.com/global/images/magic/general/entreat_the_angels.jpg

View File

@@ -2,7 +2,7 @@ Name:Eternal Dominion
ManaCost:7 U U U
Types:Sorcery
K:Epic
A:SP$ ChangeZone | Cost$ 7 U U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Artifact,Creature,Enchantment,Land | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | SpellDescription$ Search target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
A:SP$ ChangeZone | Cost$ 7 U U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Artifact,Creature,Enchantment,Land | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | StackDescription$ SpellDescription | SpellDescription$ Search target opponent's library for a creature card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/eternal_dominion.jpg
Oracle:Search target opponent's library for an artifact, creature, enchantment, or land card. Put that card onto the battlefield under your control. Then that player shuffles his or her library.\nEpic (For the rest of the game, you can't cast spells. At the beginning of each of your upkeeps, copy this spell except for its epic ability. You may choose a new target for the copy.)

View File

@@ -2,11 +2,8 @@ Name:Fallow Wurm
ManaCost:2 G
Types:Creature Wurm
PT:4/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a land card.
SVar:TrigDiscard:AB$ Discard | Cost$ 0 | NumCards$ 1 | DiscardValid$ Land | Mode$ TgtChoose | Optional$ True | RememberDiscarded$ True | SubAbility$ DBSacSelf
SVar:DBSacSelf:DB$ Sacrifice | Cost$ 0 | Defined$ Self | SubAbility$ DBCleanup | ConditionCheckSVar$ X | ConditionSVarCompare$ LT1 | References$ X
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacSelf | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a land card.
SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<1/Land> | UnlessPayer$ You
SVar:NeedsToPlayVar:Y GE1
SVar:Y:Count$TypeInYourHand.Land
SVar:Picture:http://www.wizards.com/global/images/magic/general/fallow_wurm.jpg

View File

@@ -0,0 +1,9 @@
Name:Fold into AEther
ManaCost:2 U U
Types:Instant
A:SP$ Counter | Cost$ 2 U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | RememberCountered$ True | SubAbility$ DBChangeZone | SpellDescription$ Counter target spell. If that spell is countered this way, its controller may put a creature card from his or her hand onto the battlefield.
SVar:DBChangeZone:DB$ ChangeZone | ChangeType$ Creature | Origin$ Hand | Destination$ Battlefield | ChangeNum$ 1 | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/fold_into_aether.jpg
Oracle:Counter target spell. If that spell is countered this way, its controller may put a creature card from his or her hand onto the battlefield.
SetInfo:5DN Uncommon

View File

@@ -0,0 +1,9 @@
Name:Gavony
ManaCost:no cost
Types:Plane Innistrad
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature | AddKeyword$ Vigilance | Description$ All creatures have vigilance.
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll Chaos, creatures you control are indestructible this turn.
SVar:RolledChaos:AB$ PumpAll | Cost$ 0 | ValidCards$ Creature.YouCtrl | KW$ HIDDEN Indestructible
SVar:Picture:http://www.wizards.com/global/images/magic/general/gavony.jpg
Oracle:All creatures have vigilance.\nWhenever you roll {C}, creatures you control are indestructible this turn.
SetInfo:PC2 Common

View File

@@ -4,7 +4,7 @@ Types:Creature Spirit Avatar
PT:4/4
K:Unblockable
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigChangeZone | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, that player reveals his or her hand. You choose a card from it. That player exiles that card.
SVar:TrigChangeZone:AB$ChangeZone | Cost$ 0 | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TriggeredTarget | Chooser$ You | ChangeType$ Card | ChangeNum$ 1
SVar:TrigChangeZone:AB$ ChangeZone | Cost$ 0 | Origin$ Hand | Destination$ Exile | DefinedPlayer$ TriggeredTarget | Chooser$ You | ChangeType$ Card | ChangeNum$ 1
SVar:Picture:http://www.wizards.com/global/images/magic/general/ghastlord_of_fugue.jpg
Oracle:Ghastlord of Fugue is unblockable.\nWhenever Ghastlord of Fugue deals combat damage to a player, that player reveals his or her hand. You choose a card from it. That player exiles that card.
SetInfo:SHM Rare

View File

@@ -0,0 +1,12 @@
Name:Harsh Mercy
ManaCost:2 W
Types:Sorcery
A:SP$ RepeatEach | Cost$ 2 W | RepeatPlayers$ Player | RepeatSubAbility$ DBChooseType | SubAbility$ DBDestroyAll | StackDescription$ SpellDescription | SpellDescription$ Each player chooses a creature type. Destroy all creatures that aren't of a type chosen this way. They can't be regenerated.
SVar:DBChooseType:DB$ ChooseType | Defined$ Player.IsRemembered | Type$ Creature | AILogic$ MostProminentComputerControls | SubAbility$ DBRemember
SVar:DBRemember:DB$ PumpAll | ValidCards$ Creature.ChosenType | RememberAllPumped$ True
SVar:DBDestroyAll:DB$ DestroyAll | ValidCards$ Creature.IsNotRemembered | NoRegen$ True | SubAbility$ DBCleanup | StackDescription$ None
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/harsh_mercy.jpg
Oracle:Each player chooses a creature type. Destroy all creatures that aren't of a type chosen this way. They can't be regenerated.
SetInfo:ONS Rare

View File

@@ -0,0 +1,9 @@
Name:Hedron Fields of Agadeem
ManaCost:no cost
Types:Plane Zendikar
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.powerGE7 | AddHiddenKeyword$ CARDNAME can't attack or block. | Description$ Creatures with power 7 or greater can't attack or block.
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll Chaos, put a 7/7 colorless Eldrazi creature token with annihilator 1 onto the battlefield. (Whenever it attacks, defending player sacrifices a permanent.)
SVar:RolledChaos:AB$ Token | Cost$ 0 | TokenAmount$ 1 | TokenName$ Eldrazi | TokenTypes$ Creature,Eldrazi | TokenOwner$ You | TokenColors$ Colorless | TokenPower$ 7 | TokenToughness$ 7 | TokenKeywords$ Annihilator 1
SVar:Picture:http://www.wizards.com/global/images/magic/general/hedron_fields_of_agadeem.jpg
Oracle:Creatures with power 7 or greater can't attack or block.\nWhenever you roll {C}, put a 7/7 colorless Eldrazi creature token with annihilator 1 onto the battlefield. (Whenever it attacks, defending player sacrifices a permanent.)
SetInfo:PC2 Common

View File

@@ -0,0 +1,10 @@
Name:Heroism
ManaCost:2 W
Types:Enchantment
A:AB$ RepeatEach | Cost$ Sac<1/Creature.White/White Creature> | RepeatCards$ Creature.attacking+Red | RepeatSubAbility$ DBPump | SpellDescription$ For each attacking red creature, prevent all combat damage that would be dealt by that creature this turn unless its controller pays 2 R.
SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ HIDDEN Prevent all combat damage that would be dealt by CARDNAME. | UnlessCost$ 2 R | UnlessPayer$ RememberedController
SVar:RemRandomDeck:True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/heroism.jpg
Oracle:Sacrifice a white creature: For each attacking red creature, prevent all combat damage that would be dealt by that creature this turn unless its controller pays {2}{R}.
SetInfo:FEM Uncommon

View File

@@ -12,7 +12,7 @@ ALTERNATE
Name:Seek
ManaCost:W B
Types:Instant
A:SP$ ChangeZone | Cost$ W B | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Origin$ Library | DefinedPlayer$ Targeted | Chooser$ You | Destination$ Exile | Changetype$ Card | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBGainLife | SpellDescription$ Search target opponent's library for a card and exile it. You gain life equal to its converted mana cost. Then that player shuffles his or her library.
A:SP$ ChangeZone | Cost$ W B | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | Origin$ Library | DefinedPlayer$ Targeted | Chooser$ You | Destination$ Exile | Changetype$ Card | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ DBGainLife | StackDescription$ SpellDescription | SpellDescription$ Search target opponent's library for a card and exile it. You gain life equal to its converted mana cost. Then that player shuffles his or her library.
SVar:DBGainLife:DB$ GainLife | LifeAmount$ X | References$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$CardManaCost

View File

@@ -0,0 +1,7 @@
Name:Hinder
ManaCost:1 U U
Types:Instant
A:SP$ Counter | Cost$ 1 U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | DestinationChoice$ BottomOfLibrary,TopOfLibrary | SpellDescription$ Counter target spell. If that spell is countered this way, put that card on the top or bottom of its owner's library instead of into that player's graveyard.
SVar:Picture:http://www.wizards.com/global/images/magic/general/hinder.jpg
Oracle:Counter target spell. If that spell is countered this way, put that card on the top or bottom of its owner's library instead of into that player's graveyard.
SetInfo:CHK Uncommon

View File

@@ -0,0 +1,9 @@
Name:Jhoira of the Ghitu Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:+1/+0
A:AB$ Play | Cost$ 3 Discard<1/Card> | ActivationZone$ Command | AnySupportedCard$ Instant | RandomCopied$ True | RandomNum$ 3 | ChoiceNum$ 1 | CopyCard$ True | WithoutManaCost$ True | SpellDescription$ Copy three instant cards chosen at random. You may cast one of the copies without paying its mana cost.
A:AB$ Play | Cost$ 3 Discard<1/Card> | ActivationZone$ Command | AnySupportedCard$ Sorcery | RandomCopied$ True | RandomNum$ 3 | ChoiceNum$ 1 | CopyCard$ True | WithoutManaCost$ True | SorcerySpeed$ True | SpellDescription$ Copy three sorcery cards chosen at random. You may cast one of the copies without paying its mana cost. Activate this ability only any time you could cast a sorcery.
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/jhoira_of_the_ghitu_avatar.jpg
Oracle:Hand +1, life +0\n{3}, Discard a card: Copy three instant cards chosen at random. You may cast one of the copies without paying its mana cost.\n{3}, Discard a card: Copy three sorcery cards chosen at random. You may cast one of the copies without paying its mana cost. Activate this ability only any time you could cast a sorcery.
SetInfo:VAN Special

View File

@@ -4,9 +4,10 @@ Types:Enchantment
K:ETBReplacement:Other:ChooseColor
SVar:ChooseColor:DB$ ChooseColor | Defined$ You | SubAbility$ ChooseP | SpellDescription$ As CARDNAME enters the battlefield, choose a color and an opponent.
SVar:ChooseP:DB$ ChoosePlayer | Defined$ You | Choices$ Player.Opponent
S:Mode$ Continuous | Affected$ Creature.White | AddPower$ 2 | AddToughness$ 1 | IsPresent$ Permanent.nontoken+ChosenColor+YouDontCtrl | Description$ White creatures get +2/+1 as long as the chosen player controls a nontoken permanent of the chosen color.
T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Permanent.nontoken+ChosenColor+YouDontCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When the chosen player controls no nontoken permanents of the chosen color, sacrifice CARDNAME.
S:Mode$ Continuous | Affected$ Creature.White | AddPower$ 2 | AddToughness$ 1 | CheckSVar$ X | Description$ White creatures get +2/+1 as long as the chosen player controls a nontoken permanent of the chosen color.
T:Mode$ Always | TriggerZones$ Battlefield | IsPresent$ Permanent.nontoken+ChosenColor+ChosenCtrl | PresentCompare$ EQ0 | Execute$ TrigSac | TriggerDescription$ When the chosen player controls no nontoken permanents of the chosen color, sacrifice CARDNAME.
SVar:TrigSac:AB$ Sacrifice | Cost$ 0 | Defined$ Self
SVar:X:Count$Valid Permanent.nontoken+ChosenColor+ChosenCtrl
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/jihad.jpg
Oracle:As Jihad enters the battlefield, choose a color and an opponent.\nWhite creatures get +2/+1 as long as the chosen player controls a nontoken permanent of the chosen color.\nWhen the chosen player controls no nontoken permanents of the chosen color, sacrifice Jihad.

View File

@@ -0,0 +1,13 @@
Name:Kaboom!
ManaCost:4 R
Types:Sorcery
A:SP$ RepeatEach | Cost$ 4 R | ValidTgts$ Player | TargetMin$ 0 | TargetMax$ Maxplayer | References$ Maxplayer | RepeatPlayers$ Targeted | RepeatSubAbility$ DBDigUntil | StackDescription$ SpellDescription | SpellDescription$ Choose any number of target players. For each of those players, reveal cards from the top of your library until you reveal a nonland card. Kaboom deals damage equal to that card's converted mana cost to that player, then you put the revealed cards on the bottom of your library in any order.
SVar:DBDigUntil:DB$ DigUntil | Defined$ You | Valid$ Card.nonLand | ValidDescription$ nonland card | FoundDestination$ Library | FoundLibraryPosition$ -1 | RevealedDestination$ Library | RevealedLibraryPosition$ -1 | RememberFound$ True | SubAbility$ DBDmg
SVar:DBDmg:DB$ DealDamage | Defined$ Player.IsRemembered | NumDmg$ X | References$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
SVar:X:Remembered$CardManaCost
SVar:Maxplayer:PlayerCountPlayers$Amount
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kaboom!.jpg
Oracle:Choose any number of target players. For each of those players, reveal cards from the top of your library until you reveal a nonland card. Kaboom deals damage equal to that card's converted mana cost to that player, then you put the revealed cards on the bottom of your library in any order.
SetInfo:ONS Rare

View File

@@ -0,0 +1,15 @@
Name:Kamahl's Summons
ManaCost:3 G
Types:Sorcery
A:SP$ RepeatEach | Cost$ 3 G | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose | StackDescription$ SpellDescription | SubAbility$ DBRepeatToken | SpellDescription$ Each player may reveal any number of creature cards from his or her hand. Then each player puts a 2/2 green Bear creature token onto the battlefield for each card he or she revealed this way.
SVar:DBChoose:DB$ Reveal | Defined$ Player.IsRemembered | AnyNumber$ True | RevealValid$ Creature | RememberRevealed$ True
SVar:DBRepeatToken:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBToken | SubAbility$ DBCleanup
SVar:DBToken:DB$ Token | TokenAmount$ X | References$ X | TokenName$ Bear | TokenTypes$ Creature,Bear | TokenOwner$ Player.IsRemembered | TokenColors$ Green | TokenPower$ 2 | TokenToughness$ 2
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$ValidHand Card.IsRemembered+RememberedPlayerCtrl
SVar:NeedsToPlayVar:Y GE3
SVar:Y:Count$ValidHand Creature.YouCtrl
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/kamahls_summons.jpg
Oracle:Each player may reveal any number of creature cards from his or her hand. Then each player puts a 2/2 green Bear creature token onto the battlefield for each card he or she revealed this way.
SetInfo:ONS Uncommon

View File

@@ -1,7 +1,9 @@
Name:Karma
ManaCost:2 W W
Types:Enchantment
Text:At the beginning of each player's upkeep, Karma deals damage to that player equal to the number of Swamps he or she controls.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigDamage | TriggerDescription$ At the beginning of each player's upkeep, CARDNAME deals damage to that player equal to the number of Swamps he or she controls.
SVar:TrigDamage:AB$ DealDamage | Cost$ 0 | Defined$ TriggeredPlayer | NumDmg$ X | References$ X
SVar:X:Count$Valid Swamp.ActivePlayerCtrl
SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/karma.jpg
Oracle:At the beginning of each player's upkeep, Karma deals damage to that player equal to the number of Swamps he or she controls.

View File

@@ -0,0 +1,8 @@
Name:Karmic Justice
ManaCost:2 W
Types:Enchantment
T:Mode$ Destroyed | ValidCauser$ Player.Opponent | ValidCard$ Permanent.nonCreature+YouCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigDestroy | TriggerDescription$ Whenever a spell or ability an opponent controls destroys a noncreature permanent you control, you may destroy target permanent that opponent controls.
SVar:TrigDestroy:AB$ Destroy | Cost$ 0 | ValidTgts$ Permanent | TargetsWithDefinedController$ TriggeredCauser
SVar:Picture:http://www.wizards.com/global/images/magic/general/karmic_justice.jpg
Oracle:Whenever a spell or ability an opponent controls destroys a noncreature permanent you control, you may destroy target permanent that opponent controls.
SetInfo:ODY Rare

View File

@@ -0,0 +1,12 @@
Name:Karona, False God Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:-1/+8
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigExchangeChoose | TriggerDescription$ At the beginning of your upkeep, exchange control of a permanent you control chosen at random and a permanent target opponent controls chosen at random.
SVar:TrigExchangeChoose:AB$ ChooseCard | Cost$ 0 | ValidTgts$ Opponent | Choices$ Permanent.TargetedPlayerCtrl | AtRandom$ True | Amount$ 1 | RememberChosen$ True | SubAbility$ ChooseYou
SVar:ChooseYou:DB$ ChooseCard | Choices$ Permanent.YouCtrl | Amount$ 1 | AtRandom$ True | RememberChosen$ True | SubAbility$ DBExchange
SVar:DBExchange:DB$ ExchangeControl | Defined$ Remembered | BothDefined$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/karona_false_god_avatar.jpg
Oracle:Hand -1, life +8\nAt the beginning of your upkeep, exchange control of a permanent you control chosen at random and a permanent target opponent controls chosen at random.
SetInfo:VAN Special

View File

@@ -0,0 +1,10 @@
Name:Kessig
ManaCost:no cost
Types:Plane Innistrad
S:Mode$ Continuous | Affected$ Creature.nonWerewolf | EffectZone$ Command | AddHiddenKeyword$ Prevent all combat damage that would be dealt by CARDNAME. | Description$ Prevent all combat damage that would be dealt by non-Werewolf creatures.
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll Chaos, each creature you control gets +2/+2, gains trample, and becomes a Werewolf in addition to its other types until end of turn.
SVar:RolledChaos:AB$ AnimateAll | Cost$ 0 | ValidCards$ Creature.YouCtrl | Types$ Werewolf | SubAbility$ DBPump
SVar:DBPump:DB$ PumpAll | ValidCards$ Creature.YouCtrl | KW$ Trample | NumAtt$ 2 | NumDef$ 2
SVar:Picture:http://www.wizards.com/global/images/magic/general/kessig.jpg
Oracle:Prevent all combat damage that would be dealt by non-Werewolf creatures.\nWhenever you roll {C}, each creature you control gets +2/+2, gains trample, and becomes a Werewolf in addition to its other types until end of turn.
SetInfo:PC2 Common

View File

@@ -1,8 +1,8 @@
Name:Knowledge Exploitation
ManaCost:5 U U
Types:Tribal Instant Rogue
A:SP$ ChangeZone | Cost$ 5 U U | ValidTgts$ Opponent | 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.)
A:SP$ ChangeZone | Cost$ 5 U U | ValidTgts$ Opponent | Origin$ Library | Destination$ Library | ChangeType$ Instant,Sorcery | ChangeNum$ 1 | RememberChanged$ True | Reveal$ True | Shuffle$ False | DefinedPlayer$ Targeted | Chooser$ You | Mandatory$ True | SubAbility$ DBPlay | StackDescription$ Search {p:Targeted}'s library for an instant or sorcery card | 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 | StackDescription$ Search {p:Targeted}'s library for an instant or sorcery card | 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

View File

@@ -0,0 +1,11 @@
Name:Koskun Falls
ManaCost:2 B B
Types:World Enchantment
S:Mode$ CantAttackUnless | ValidCard$ Creature | Target$ You | Cost$ 2 | Description$ Creatures can't attack you unless their controller pays 2 for each creature he or she controls that's attacking you.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, sacrifice CARDNAME unless you tap an untapped creature you control.
SVar:TrigSac:AB$ Sacrifice | Cost$ 0 | Defined$ Self | UnlessCost$ tapXType<1/Creature> | UnlessPayer$ You
SVar:NeedsToPlayVar:Y GE1
SVar:Y:Count$Valid Creature.YouCtrl
SVar:Picture:http://www.wizards.com/global/images/magic/general/koskun_falls.jpg
Oracle:At the beginning of your upkeep, sacrifice Koskun Falls unless you tap an untapped creature you control.\nCreatures can't attack you unless their controller pays {2} for each creature he or she controls that's attacking you.
SetInfo:HML Rare

View File

@@ -0,0 +1,10 @@
Name:Kresh the Bloodbraided Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:+1/-3
T:Mode$ Devoured | ValidDevoured$ Creature.YouCtrl | TriggerZones$ Command | Execute$ TrigToken | TriggerDescription$ Whenever a creature you control is devoured, put an X/X green Ooze creature token onto the battlefield, where X is the devoured creature's power.
SVar:TrigToken:AB$ Token | Cost$ 0 | TokenImage$ G X X Ooze | TokenAmount$ 1 | TokenName$ Ooze | TokenTypes$ Creature,Ooze | TokenOwner$ You | TokenColors$ Green | TokenPower$ X | TokenToughness$ X | References$ X | TokenImage$ g x x ooze rtr | SpellDescription$ Put an X/X green Ooze creature token onto the battlefield.
SVar:X:TriggeredDevoured$CardPower
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/kresh_the_bloodbraided_avatar.jpg
Oracle:Hand +1, life -3\nWhenever a creature you control is devoured, put an X/X green Ooze creature token onto the battlefield, where X is the devoured creature's power.
SetInfo:VAN Special

View File

@@ -0,0 +1,11 @@
Name:Leech Bonder
ManaCost:2 U
Types:Creature Merfolk Soldier
PT:3/3
K:etbCounter:M1M1:2
A:AB$ Pump | Cost$ U Q | ValidTgts$ Creature | TgtPrompt$ Select target creature to remove counters | SubAbility$ DBMove | StackDescription$ None | SpellDescription$ Move a counter from target creature onto another target creature.
SVar:DBMove:DB$ MoveCounter | Source$ ParentTarget | ValidTgts$ Creature | TgtPrompt$ Select target creature to add counters | TargetUnique$ True | CounterType$ Any | CounterNum$ 1
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/leech_bonder.jpg
Oracle:Leech Bonder enters the battlefield with two -1/-1 counters on it.\n{U}, {Q}: Move a counter from target creature onto another target creature. ({Q} is the untap symbol.)
SetInfo:SHM Uncommon

View File

@@ -1,9 +1,9 @@
Name:Lobotomy
ManaCost:2 U B
Types:Sorcery
A:SP$ ChangeZone | Cost$ 2 U B | Origin$ Hand | Destination$ Exile | ValidTgts$ Player | ChangeType$ Card.nonBasic | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBSearch | SpellDescription$ Target player reveals his or her hand, then you choose a card other than a basic land card from it. Search that player's graveyard, hand, and library for all cards with the same name as the chosen card and exile them. Then that player shuffles his or her library.
SVar:DBSearch:DB$ChangeZoneAll | Origin$ Graveyard,Hand,Library | Destination$ Exile | ChangeType$ Remembered.sameName | Shuffle$ True| Defined$ Targeted | SubAbility$ DBCleanup
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
A:SP$ ChangeZone | Cost$ 2 U B | Origin$ Hand | Destination$ Exile | ValidTgts$ Player | DefinedPlayer$ Targeted | Chooser$ You | ChangeType$ Card.nonBasic | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | ForgetOtherRemembered$ True | SubAbility$ DBSearch | SpellDescription$ Target player reveals his or her hand, then you choose a card other than a basic land card from it. Search that player's graveyard, hand, and library for all cards with the same name as the chosen card and exile them. Then that player shuffles his or her library.
SVar:DBSearch:DB$ ChangeZoneAll | Origin$ Graveyard,Hand,Library | Destination$ Exile | ChangeType$ Remembered.sameName | Shuffle$ True| Defined$ Targeted | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/lobotomy.jpg
Oracle:Target player reveals his or her hand, then you choose a card other than a basic land card from it. Search that player's graveyard, hand, and library for all cards with the same name as the chosen card and exile them. Then that player shuffles his or her library.
SetInfo:TMP Uncommon

View File

@@ -1,7 +1,7 @@
Name:Lost Hours
ManaCost:1 B
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Hand | Destination$ Library | LibraryPosition$ 2 | ValidTgts$ Player | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | SpellDescription$ Target player reveals his or her hand. You choose a nonland card from it. That player puts that card into his or her library third from the top.
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Hand | Destination$ Library | LibraryPosition$ 2 | ValidTgts$ Player | DefinedPlayer$ Targeted | Chooser$ You | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | SpellDescription$ Target player reveals his or her hand. You choose a nonland card from it. That player puts that card into his or her library third from the top.
SVar:Picture:http://www.wizards.com/global/images/magic/general/lost_hours.jpg
Oracle:Target player reveals his or her hand. You choose a nonland card from it. That player puts that card into his or her library third from the top.
SetInfo:FUT Common

View File

@@ -0,0 +1,10 @@
Name:Lullmage Mentor
ManaCost:1 U U
Types:Creature Merfolk Wizard
PT:2/2
T:Mode$ Countered | ValidCause$ Card.YouCtrl | ValidCard$ Card | OptionalDecider$ You | Execute$ TrigToken | TriggerDescription$ Whenever a spell or ability you control counters a spell, you may put a 1/1 blue Merfolk creature token onto the battlefield.
SVar:TrigToken:AB$ Token | Cost$ 0 | TokenImage$ U 1 1 Merfolk | TokenAmount$ 1 | TokenName$ Merfolk | TokenTypes$ Creature,Merfolk | TokenOwner$ You | TokenColors$ Blue | TokenPower$ 1 | TokenToughness$ 1
A:AB$ Counter | Cost$ tapXType<7/Merfolk> | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SpellDescription$ Counter target spell.
SVar:Picture:http://www.wizards.com/global/images/magic/general/lullmage_mentor.jpg
Oracle:Whenever a spell or ability you control counters a spell, you may put a 1/1 blue Merfolk creature token onto the battlefield.\nTap seven untapped Merfolk you control: Counter target spell.
SetInfo:ZEN Rare

View File

@@ -1,7 +1,7 @@
Name:Mercadian Atlas
ManaCost:5
Types:Artifact
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | Execute$ AtlasDraw | CheckSVar$ X | SVarCompare$ EQ0 | Optional$ True | TriggerDescription$ At the beginning of your end step, if you didn't play a land this turn, you may draw a card.
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | Execute$ AtlasDraw | CheckSVar$ X | SVarCompare$ EQ0 | Optional$ True | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of your end step, if you didn't play a land this turn, you may draw a card.
SVar:AtlasDraw:DB$ Draw | Defined$ You | NumCards$ 1
SVar:X:Count$YourLandsPlayed
SVar:Picture:http://www.wizards.com/global/images/magic/general/mercadian_atlas.jpg

View File

@@ -4,7 +4,7 @@ Types:Creature Nightmare Horror
PT:1/1
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMesmericExile | TriggerDescription$ When CARDNAME enters the battlefield, target opponent reveals his or her hand and you choose a nonland card from it. Exile that card. When CARDNAME leaves the battlefield, return the exiled card to its owner's hand.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigMesmericBounce | Secondary$ True | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME enters the battlefield, target opponent reveals his or her hand and you choose a nonland card from it. Exile that card. When CARDNAME leaves the battlefield, return the exiled card to its owner's hand.
SVar:TrigMesmericExile:AB$ ChangeZone | Cost$ 0 | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | TgtPrompt$ Select target opponent | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True
SVar:TrigMesmericExile:AB$ ChangeZone | Cost$ 0 | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | DefinedPlayer$ Targeted | Chooser$ You | TgtPrompt$ Select target opponent | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True
SVar:TrigMesmericBounce:AB$ ChangeZone | Cost$ 0 | Origin$ Exile | Destination$ Hand | Defined$ Remembered | SubAbility$ DBMesmericCleanup
SVar:DBMesmericCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/mesmeric_fiend.jpg

View File

@@ -0,0 +1,9 @@
Name:Multani's Presence
ManaCost:G
Types:Enchantment
T:Mode$ Countered | ValidCard$ Card | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ DBDraw | TriggerDescription$ Whenever a spell you've cast is countered, draw a card.
SVar:DBDraw:AB$ Draw | Cost$ 0 | NumCards$ 1
SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/multanis_presence.jpg
Oracle:Whenever a spell you've cast is countered, draw a card.
SetInfo:ULG Uncommon

View File

@@ -2,7 +2,10 @@ Name:Nebuchadnezzar
ManaCost:3 U B
Types:Legendary Creature Human Wizard
PT:3/3
#This is necessary for cost payment, but not used.
A:AB$ NameCard | Cost$ X T | Defined$ You | SubAbility$ DBReveal | PlayerTurn$ True | SpellDescription$ Name a card. Target opponent reveals X cards at random from his or her hand. Then that player discards all cards with that name revealed this way. Activate this ability only during your turn.
SVar:DBReveal:DB$ Reveal | ValidTgts$ Opponent | Random$ True | NumCards$ X | References$ X | RememberRevealed$ True | SubAbility$ DBDiscard
SVar:DBDiscard:DB$ Discard | DefinedCards$ ValidHand Card.IsRemembered+NamedCard | Defined$ Targeted | Mode$ Defined | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$xPaid
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/nebuchadnezzar.jpg

View File

@@ -0,0 +1,12 @@
Name:Nephalia
ManaCost:no cost
Types:Plane Innistrad
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | Execute$ TrigMill | TriggerDescription$ At the beginning of your end step, put the top seven cards of your library into your graveyard. Then return a card at random from your graveyard to your hand.
SVar:TrigMill:AB$ Mill | Cost$ 0 | NumCards$ 7 | SubAbility$ DBRandom
SVar:DBRandom:DB$ ChooseCard | Choices$ Card.YouOwn | ChoiceZone$ Graveyard | AtRandom$ True | Amount$ 1 | SubAbility$ DBReturn
SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ ChosenCard
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll Chaos, return target card from your graveyard to your hand.
SVar:RolledChaos:AB$ ChangeZone | Cost$ 0 | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select target card in your graveyard | ValidTgts$ Card.YouOwn
SVar:Picture:http://www.wizards.com/global/images/magic/general/nephalia.jpg
Oracle:At the beginning of your end step, put the top seven cards of your library into your graveyard. Then return a card at random from your graveyard to your hand.\nWhenever you roll {C}, return target card from your graveyard to your hand.
SetInfo:PC2 Common

View File

@@ -1,7 +1,7 @@
Name:Night Terrors
ManaCost:2 B
Types:Sorcery
A:SP$ ChangeZone | Cost$ 2 B | Origin$ Hand | Destination$ Exile | ValidTgts$ Player | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | SpellDescription$ Target player reveals his or her hand. You choose a nonland card from it. Exile that card.
A:SP$ ChangeZone | Cost$ 2 B | Origin$ Hand | Destination$ Exile | ValidTgts$ Player | DefinedPlayer$ Targeted | Chooser$ You | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | Mandatory$ True | SpellDescription$ Target player reveals his or her hand. You choose a nonland card from it. Exile that card.
SVar:Picture:http://www.wizards.com/global/images/magic/general/night_terrors.jpg
Oracle:Target player reveals his or her hand. You choose a nonland card from it. Exile that card.
SetInfo:ISD Common

View File

@@ -1,7 +1,7 @@
Name:Painful Memories
ManaCost:1 B
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Hand | Destination$ Library | LibraryPosition$ 0 | ValidTgts$ Opponent | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | SpellDescription$ Look at target opponent's hand and choose a card from it. Put that card on top of that player's library.
A:SP$ ChangeZone | Cost$ 1 B | Origin$ Hand | Destination$ Library | LibraryPosition$ 0 | ValidTgts$ Opponent | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | StackDescription$ SpellDescription | SpellDescription$ Look at target opponent's hand and choose a card from it. Put that card on top of that player's library.
SVar:Picture:http://www.wizards.com/global/images/magic/general/painful_memories.jpg
Oracle:Look at target opponent's hand and choose a card from it. Put that card on top of that player's library.
SetInfo:MIR Uncommon

View File

@@ -2,7 +2,7 @@ Name:Parallax Nexus
ManaCost:2 B
Types:Enchantment
K:Fading:5
A:AB$ ChangeZone | Cost$ SubCounter<1/FADE> | ValidTgts$ Opponent | SorcerySpeed$ True | TgtPrompt$ Select target opponent | Origin$ Hand | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | RememberChanged$ True | Chooser$ Targeted | IsCurse$ True | Mandatory$ True | Hidden$ True | SpellDescription$ Target opponent exiles a card from his or her hand. Activate this ability only any time you could cast a sorcery.
A:AB$ ChangeZone | Cost$ SubCounter<1/FADE> | ValidTgts$ Opponent | SorcerySpeed$ True | TgtPrompt$ Select target opponent | Origin$ Hand | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | RememberChanged$ True | Chooser$ Targeted | IsCurse$ True | Mandatory$ True | Hidden$ True | StackDescription$ SpellDescription | SpellDescription$ Target opponent exiles a card from his or her hand. Activate this ability only any time you could cast a sorcery.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, each player returns to his or her hand all cards he or she owns exiled with CARDNAME.
SVar:TrigReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Hand | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True

View File

@@ -0,0 +1,10 @@
Name:Peacekeeper Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:+0/+9
A:AB$ RepeatEach | Cost$ 3 | ActivationZone$ Command | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ ArrestEach | StackDescription$ SpellDescription | SpellDescription$ For each opponent who controls a creature, put a token onto the battlefield that's a copy of a card named Arrest and attach it to a creature that player controls chosen at random.
SVar:ArrestEach:DB$ ChooseCard | Amount$ 1 | Choices$ Creature.RememberedPlayerCtrl | AtRandom$ True | SubAbility$ DBAttach
SVar:DBAttach:DB$ CopyPermanent | NumCopies$ 1 | ValidSupportedCopy$ Card.namedArrest | DefinedName$ Arrest | AttachedTo$ ChosenCard | ConditionDefined$ ChosenCard | ConditionPresent$ Creature | ConditionCompare$ GE1
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/peacekeeper_avatar.jpg
Oracle:Hand +0, life +9\n{3}: For each opponent who controls a creature, put a token onto the battlefield that's a copy of a card named Arrest and attach it to a creature that player controls chosen at random.
SetInfo:VAN Special

View File

@@ -1,7 +1,7 @@
Name:Perish the Thought
ManaCost:2 B
Types:Sorcery
A:SP$ ChangeZone | Cost$ 2 B | Origin$ Hand | Destination$ Library | ValidTgts$ Opponent | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | Shuffle$ True | Mandatory$ True | SpellDescription$ Target opponent reveals his or her hand. You choose a card from it. That player shuffles that card into his or her library.
A:SP$ ChangeZone | Cost$ 2 B | Origin$ Hand | Destination$ Library | ValidTgts$ Opponent | DefinedPlayer$ Targeted | Chooser$ You | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | Shuffle$ True | Mandatory$ True | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals his or her hand. You choose a card from it. That player shuffles that card into his or her library.
SVar:Picture:http://www.wizards.com/global/images/magic/general/perish_the_thought.jpg
Oracle:Target opponent reveals his or her hand. You choose a card from it. That player shuffles that card into his or her library.
SetInfo:ROE Common

View File

@@ -1,7 +1,7 @@
Name:Praetor's Grasp
ManaCost:1 B B
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 B B | Origin$ Library | Destination$ Exile | ValidTgts$ Opponent | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | SubAbility$ DBPump | SpellDescription$ Search target opponent's library for a card and exile it face down. Then that player shuffles his or her library. You may look at and play that card for as long as it remains exiled.
A:SP$ ChangeZone | Cost$ 1 B B | Origin$ Library | Destination$ Exile | ValidTgts$ Opponent | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | SubAbility$ DBPump | StackDescription$ SpellDescription | SpellDescription$ Search target opponent's library for a card and exile it face down. Then that player shuffles his or her library. You may look at and play that card for as long as it remains exiled.
SVar:DBPump:DB$ Pump | Defined$ Remembered | KW$ Your opponent may look at this card. & May be played by your opponent | PumpZone$ Exile | Permanent$ True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/praetors_grasp.jpg

View File

@@ -2,7 +2,7 @@ Name:Reconnaissance
ManaCost:W
Types:Enchantment
A:AB$ RemoveFromCombat | Cost$ 0 | ValidTgts$ Creature.attacking+YouCtrl | TgtPrompt$ Select target attacking creature you control. | SubAbility$ DBUntap | SpellDescription$ Remove target attacking creature you control from combat and untap it.
SVar:DBUntap:DB$Untap | Defined$ Targeted
SVar:DBUntap:DB$ Untap | Defined$ Targeted
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/reconnaissance.jpg
Oracle:{0}: Remove target attacking creature you control from combat and untap it.

View File

@@ -0,0 +1,11 @@
Name:Runed Halo
ManaCost:W W
Types:Enchantment
K:ETBReplacement:Other:DBNameCard
SVar:DBNameCard:DB$ NameCard | Defined$ You | SpellDescription$ As CARDNAME enters the battlefield, name a card.
S:Mode$ Continuous | Affected$ You | AddKeyword$ Protection:ChosenName | Description$ You have protection from the chosen name. (You can't be targeted, dealt damage, or enchanted by anything with that name.)
SVar:RemAIDeck:True
SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/runed_halo.jpg
Oracle:As Runed Halo enters the battlefield, name a card.\nYou have protection from the chosen name. (You can't be targeted, dealt damage, or enchanted by anything with that name.)
SetInfo:SHM Rare

View File

@@ -3,6 +3,11 @@ ManaCost:3 W
Types:Creature Griffin
PT:2/2
K:Flying
A:AB$ Pump | Cost$ R | ValidTgts$ Creature | TgtPrompt$ Select target creature that can't block this creature this turn | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBPump | StackDescription$ {c:Targeted} can't block CARDNAME this turn. | SpellDescription$ Target creature can't block CARDNAME this turn.
SVar:DBPump:DB$ Pump | KW$ HIDDEN CantBeBlockedBy Creature.IsRemembered | StackDescription$ None
T:Mode$ Phase | Phase$ Cleanup | TriggerZones$ Battlefield | Execute$ DBCleanup | Static$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/screeching_griffin.jpg
Oracle:Flying\n{R}: Target creature can't block Screeching Griffin this turn.

View File

@@ -3,6 +3,11 @@ ManaCost:3 UR
Types:Creature Elemental
PT:6/6
K:etbCounter:M1M1:4
A:AB$ Pump | Cost$ UR | ValidTgts$ Creature | TgtPrompt$ Select target creature that can't block this creature this turn | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBPump | StackDescription$ {c:Targeted} can't block CARDNAME this turn. | SpellDescription$ Target creature can't block CARDNAME this turn.
SVar:DBPump:DB$ Pump | KW$ HIDDEN CantBeBlockedBy Creature.IsRemembered | StackDescription$ None
T:Mode$ Phase | Phase$ Cleanup | TriggerZones$ Battlefield | Execute$ DBCleanup | Static$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
T:Mode$ SpellCast | ValidCard$ Card.Red | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigRemoveCounter | TriggerDescription$ Whenever you cast a red spell, remove a -1/-1 counter from CARDNAME.
T:Mode$ SpellCast | ValidCard$ Card.Blue | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigRemoveCounter | TriggerDescription$ Whenever you cast a blue spell, remove a -1/-1 counter from CARDNAME.
SVar:TrigRemoveCounter:AB$ RemoveCounter | Cost$ 0 | Defined$ Self | CounterType$ M1M1 | CounterNum$ 1

View File

@@ -6,7 +6,7 @@ SVar:DBChoose:DB$ ChooseCard | Defined$ You | Amount$ 1 | AtRandom$ True | Choic
SVar:DBChange:DB$ ChangeZone | Origin$ Library | Destination$ Hand | Defined$ ChosenCard | StackDescription$ None | SubAbility$ DBShuffle | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ3
SVar:DBShuffle:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Library | Shuffle$ True | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$DifferentCardNamesRemembered
SVar:X:Count$DifferentCardNames_Creature.IsRemembered
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/signal_the_clans.jpg
Oracle:Search your library for three creature cards and reveal them. If you reveal three cards with different names, choose one of them at random and put that card into your hand. Shuffle the rest into your library.

View File

@@ -0,0 +1,13 @@
Name:Sliver Queen Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:+0/+7
T:Mode$ SpellCast | ValidCard$ Creature.nonSliver | ValidActivatingPlayer$ You | TriggerZones$ Command | Execute$ TrigCopy | TriggerDescription$ Whenever you cast a non-Sliver creature spell, exile that spell. If you do, put a token onto the battlefield that's a copy of a random non-Shapeshifter Sliver creature card with the same converted mana cost as that spell.
SVar:TrigCopy:AB$ ChangeZone | Cost$ 0 | Defined$ TriggeredCard | Origin$ Stack | Destination$ Exile | Fizzle$ True | RememberChanged$ True | SubAbility$ DBCopy
SVar:DBCopy:DB$ CopyPermanent | NumCopies$ 1 | ValidSupportedCopy$ Creature.Sliver+nonShapeshifter+cmcEQX | RandomCopied$ True | RandomNum$ 1 | ConditionCheckSVar$ RememberedSize | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:TriggeredCard$CardManaCost
SVar:RememberedSize:Remembered$Amount
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/sliver_queen_avatar.jpg
Oracle:Hand +0, life +7\nWhenever you cast a non-Sliver creature spell, exile that spell. If you do, put a token onto the battlefield that's a copy of a random non-Shapeshifter Sliver creature card with the same converted mana cost as that spell.
SetInfo:VAN Special

View File

@@ -0,0 +1,16 @@
Name:Soulbright Flamekin
ManaCost:1 R
Types:Creature Elemental Shaman
PT:2/1
A:AB$ Pump | Cost$ 2 | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Trample | SubAbility$ StoreNum | SpellDescription$ Target creature gains trample until end of turn. If this is the third time this ability has resolved this turn, you may add R R R R R R R R to your mana pool.
SVar:StoreNum:DB$ StoreSVar | SVar$ SoulbrightNum | Type$ CountSVar | Expression$ SoulbrightNum/Plus.1 | SubAbility$ SoulbrightMana
SVar:SoulbrightMana:DB$ Mana | Produced$ R R R R R R R R | ConditionCheckSVar$ SoulbrightNum | ConditionSVarCompare$ EQ3 | Optional$ True
SVar:SoulbrightNum:Number$0
T:Mode$ Phase | Phase$ Cleanup | Execute$ TrigReset | Static$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReset | Static$ True
SVar:TrigReset:AB$ StoreSVar | Cost$ 0 | SVar$ SoulbrightNum | Type$ Number | Expression$ 0
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/soulbright_flamekin.jpg
Oracle:{2}: Target creature gains trample until end of turn. If this is the third time this ability has resolved this turn, you may add {R}{R}{R}{R}{R}{R}{R}{R} to your mana pool.
SetInfo:DD2 Common
SetInfo:LRW Common

View File

@@ -1,7 +1,7 @@
Name:Spelljack
ManaCost:3 U U U
Types:Instant
A:SP$ Counter | Cost$ 3 U U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | RememberTargets$ True | ForgetOtherTargets$ True | Destination$ Exile | SubAbility$ DBEffect | SpellDescription$ Counter target spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. You may play it without paying its mana cost for as long as it remains exiled. (If it has X in its mana cost, X is 0.)
A:SP$ Counter | Cost$ 3 U U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | RememberCountered$ True | ForgetOtherTargets$ True | Destination$ Exile | SubAbility$ DBEffect | SpellDescription$ Counter target spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyard. You may play it without paying its mana cost for as long as it remains exiled. (If it has X in its mana cost, X is 0.)
SVar:DBEffect:DB$ Effect | Name$ Spelljack Effect | RememberObjects$ Remembered | StaticAbilities$ PlayOpp,PlayYou | Duration$ Permanent | Triggers$ TrigCleanup | SVars$ DBCleanup | References$ PlayOpp,PlayYou,TrigCleanup,DBCleanup
SVar:PlayOpp: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 cards exiled with Spelljack.
SVar:PlayYou:Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered+YouOwn | AffectedZone$ Exile | AddHiddenKeyword$ May be played without paying its mana cost

View File

@@ -2,6 +2,11 @@ Name:Spin Engine
ManaCost:3
Types:Artifact Creature Construct
PT:3/1
A:AB$ Pump | Cost$ R | ValidTgts$ Creature | TgtPrompt$ Select target creature that can't block this creature this turn | IsCurse$ True | RememberObjects$ Targeted | SubAbility$ DBPump | StackDescription$ {c:Targeted} can't block CARDNAME this turn. | SpellDescription$ Target creature can't block CARDNAME this turn.
SVar:DBPump:DB$ Pump | KW$ HIDDEN CantBeBlockedBy Creature.IsRemembered | StackDescription$ None
T:Mode$ Phase | Phase$ Cleanup | TriggerZones$ Battlefield | Execute$ DBCleanup | Static$ True
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ DBCleanup | Static$ True
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/spin_engine.jpg
Oracle:{R}: Target creature can't block Spin Engine this turn.

View File

@@ -1,8 +1,9 @@
Name:Splitting Headache
ManaCost:3 B
Types:Sorcery
A:SP$ Discard | Cost$ 3 B | ValidTgts$ Player | NumCards$ 2 | Mode$ TgtChoose | SpellDescription$ Choose one - Target player discards two cards;
A:SP$ Discard | Cost$ 3 B | ValidTgts$ Player | NumCards$ 1 | Mode$ RevealYouChoose | SpellDescription$ or target player reveals his or her hand, you choose a card from it, then that player discards that card.
A:SP$ Charm | Cost$ 3 B | Choices$ SplitDiscard,FocusDiscard | CharmNum$ 1 | SpellDescription$ Choose one - Target player discards two cards; or target player reveals his or her hand, you choose a card from it, then that player discards that card.
SVar:SplitDiscard:DB$ Discard | ValidTgts$ Player | NumCards$ 2 | Mode$ TgtChoose | SpellDescription$ Choose one - Target player discards two cards;
SVar:FocusDiscard:DB$ Discard | ValidTgts$ Player | NumCards$ 1 | Mode$ RevealYouChoose | SpellDescription$ Target player reveals his or her hand, you choose a card from it, then that player discards that card.
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/splitting_headache.jpg
Oracle:Choose one - Target player discards two cards; or target player reveals his or her hand, you choose a card from it, then that player discards that card.

View File

@@ -3,7 +3,7 @@ ManaCost:1 R R
Types:Legendary Creature Human Rogue
PT:2/2
A:AB$ Destroy | Cost$ T | ValidTgts$ Artifact,Creature | TgtPrompt$ Select target artifact or creature | SubAbility$ TrigControl | SpellDescription$ Destroy target artifact or creature.
SVar:TrigControl:DB$GainControl | Cost$ 0 | Defined$ Self | NewController$ TargetedController | SubAbility$ RemCombat | SpellDescription$ That permanent's controller gains control of CARDNAME. (This effect lasts indefinitely.)
SVar:TrigControl:DB$ GainControl | Cost$ 0 | Defined$ Self | NewController$ TargetedController | SubAbility$ RemCombat | SpellDescription$ That permanent's controller gains control of CARDNAME. (This effect lasts indefinitely.)
SVar:RemCombat:DB$ RemoveFromCombat | Defined$ Targeted
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/starke_of_rath.jpg

View File

@@ -0,0 +1,10 @@
Name:Stonehewer Giant Avatar
ManaCost:no cost
Types:Vanguard
HandLifeModifier:+1/-5
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.YouCtrl | TriggerZones$ Command | Execute$ TrigCopyEquip | TriggerDescription$ Whenever a creature enters the battlefield under your control, put a token onto the battlefield that's a copy of a random Equipment card with converted mana cost less than or equal to that creature's converted mana cost. Attach that Equipment to that creature.
SVar:TrigCopyEquip:AB$ CopyPermanent | Cost$ 0 | Defined$ TriggeredCard | NumCopies$ 1 | ValidSupportedCopy$ Equipment.cmcLEX | References$ X | RandomCopied$ True | RandomNum$ 1 | AttachedTo$ TriggeredCard
SVar:X:TriggeredCard$CardManaCost
SVar:Picture:http://www.cardforge.org/fpics/vgd-lq/stonehewer_giant_avatar.jpg
Oracle:Hand +1, life -5\nWhenever a creature enters the battlefield under your control, put a token onto the battlefield that's a copy of a random Equipment card with converted mana cost less than or equal to that creature's converted mana cost. Attach that Equipment to that creature.
SetInfo:VAN Special

View File

@@ -0,0 +1,11 @@
Name:Swift Silence
ManaCost:2 W U U
Types:Instant
A:SP$ Counter | Cost$ 2 W U U | AllType$ Spell | AllValid$ Card.Other | RememberCountered$ True | SubAbility$ DBDraw | SpellDescription$ Counter all other spells. Draw a card for each spell countered this way.
SVar:DBDraw:DB$ Draw | NumCards$ X | References$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/swift_silence.jpg
Oracle:Counter all other spells. Draw a card for each spell countered this way.
SetInfo:DIS Rare

View File

@@ -0,0 +1,10 @@
Name:The Zephyr Maze
ManaCost:no cost
Types:Plane Kyneth
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.withFlying | AddPower$ 2 | Description$ Creatures with flying get +2/+0.
S:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.withoutFlying | AddPower$ -2 | Description$ Creatures without flying get -2/-0.
T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll Chaos, target creature gains flying until end of turn.
SVar:RolledChaos:AB$ Pump | Cost$ 0 | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Flying
SVar:Picture:http://www.wizards.com/global/images/magic/general/the_zephyr_maze.jpg
Oracle:Creatures with flying get +2/+0.\nCreatures without flying get -2/-0.\nWhenever you roll {C}, target creature gains flying until end of turn.
SetInfo:PC2 Common

View File

@@ -2,7 +2,7 @@ Name:Thoughtseize
ManaCost:B
Types:Sorcery
A:SP$ Discard | Cost$ B | ValidTgts$ Player | NumCards$ 1 | DiscardValid$ Card.nonLand | Mode$ RevealYouChoose | SubAbility$ DBLoseLife | SpellDescription$ Target player reveals his or her hand. You choose a nonland card from it. That player discards that card. You lose 2 life.
SVar:DBLoseLife:DB$LoseLife | LifeAmount$ 2
SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ 2
SVar:Picture:http://resources.wizards.com/magic/cards/lrw/en/card145969.jpg
Oracle:Target player reveals his or her hand. You choose a nonland card from it. That player discards that card. You lose 2 life.
SetInfo:LRW Rare

View File

@@ -2,11 +2,8 @@ Name:Thundering Wurm
ManaCost:2 G
Types:Creature Wurm
PT:4/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDiscard | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a land card.
SVar:TrigDiscard:AB$ Discard | Cost$ 0 | NumCards$ 1 | DiscardValid$ Land | Mode$ TgtChoose | Optional$ True | RememberDiscarded$ True | SubAbility$ DBSacSelf
SVar:DBSacSelf:DB$ Sacrifice | Cost$ 0 | Defined$ Self | SubAbility$ DBCleanup | ConditionCheckSVar$ X | References$ X | ConditionSVarCompare$ LT1
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBSacSelf | TriggerDescription$ When CARDNAME enters the battlefield, sacrifice it unless you discard a land card.
SVar:DBSacSelf:DB$ Sacrifice | Defined$ Self | UnlessCost$ Discard<1/Land> | UnlessPayer$ You
SVar:NeedsToPlayVar:Y GE1
SVar:Y:Count$TypeInYourHand.Land
SVar:Picture:http://www.wizards.com/global/images/magic/general/thundering_wurm.jpg

View File

@@ -4,9 +4,9 @@ Types:Artifact Creature Zombie
PT:2/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, target opponent reveals his or her hand and you choose a nonland card from it. Exile that card. When CARDNAME leaves the battlefield, return the exiled card to its owner's hand.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigBounce | Secondary$ True | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME enters the battlefield, target opponent reveals his or her hand and you choose a nonland card from it. Exile that card. When CARDNAME leaves the battlefield, return the exiled card to its owner's hand.
SVar:TrigExile:AB$ChangeZone | Cost$ 0 | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | TgtPrompt$ Select target player | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | ForgetOtherRemembered$ True
SVar:TrigBounce:AB$ChangeZone | Cost$ 0 | Origin$ Exile | Destination$ Hand | Defined$ Remembered | SubAbility$ DBCleanup
SVar:DBCleanup:DB$Cleanup | ClearRemembered$ True
SVar:TrigExile:AB$ ChangeZone | Cost$ 0 | Origin$ Hand | Destination$ Exile | ValidTgts$ Opponent | DefinedPlayer$ Targeted | Chooser$ You | TgtPrompt$ Select target opponent | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | ForgetOtherRemembered$ True
SVar:TrigBounce:AB$ ChangeZone | Cost$ 0 | Origin$ Exile | Destination$ Hand | Defined$ Remembered | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/tidehollow_sculler.jpg
Oracle:When Tidehollow Sculler enters the battlefield, target opponent reveals his or her hand and you choose a nonland card from it. Exile that card.\nWhen Tidehollow Sculler leaves the battlefield, return the exiled card to its owner's hand.
SetInfo:ALA Uncommon

View File

@@ -2,7 +2,7 @@ Name:Trickbind
ManaCost:1 U
Types:Instant
K:Split second
A:SP$ Counter | Cost$ 1 U | TargetType$ Activated,Triggered | TgtPrompt$ Select target Activated or Triggered Ability | RememberTargets$ True | ValidTgts$ Card | SubAbility$ DBEffect | SpellDescription$ Counter target activated or triggered ability. If a permanent's ability is countered this way, activated abilities of that permanent can't be activated this turn. (Mana abilities can't be targeted.)
A:SP$ Counter | Cost$ 1 U | TargetType$ Activated,Triggered | TgtPrompt$ Select target Activated or Triggered Ability | RememberCountered$ True | ValidTgts$ Card | SubAbility$ DBEffect | SpellDescription$ Counter target activated or triggered ability. If a permanent's ability is countered this way, activated abilities of that permanent can't be activated this turn. (Mana abilities can't be targeted.)
SVar:DBEffect:DB$ Effect | Name$ Trickbind Effect | StaticAbilities$ STCantBeActivated | RememberObjects$ Remembered | SubAbility$ DBCleanup | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ EQ1
SVar:STCantBeActivated:Mode$ CantBeActivated | EffectZone$ Command | ValidCard$ Permanent.IsRemembered
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True

View File

@@ -0,0 +1,11 @@
Name:Vexing Shusher
ManaCost:RG RG
Types:Creature Goblin Shaman
PT:2/2
K:CARDNAME can't be countered.
A:AB$ Pump | Cost$ RG | ValidTgts$ Card.inZoneStack | TgtZone$ Stack,Battlefield | PumpZone$ Stack | KW$ HIDDEN CARDNAME can't be countered. | SpellDescription$ Target spell can't be countered by spells or abilities.
#Should include another zone otherwise the target would not be defined as a card
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/vexing_shusher.jpg
Oracle:Vexing Shusher can't be countered.\n{R/G}: Target spell can't be countered by spells or abilities.
SetInfo:SHM Rare

View File

@@ -0,0 +1,17 @@
Name:Warp World
ManaCost:5 R R R
Types:Sorcery
A:SP$ RepeatEach | Cost$ 5 R R R | RepeatPlayers$ Player | RepeatSubAbility$ DBShuffle | SubAbility$ ChangePermanent | StackDescription$ SpellDescription | SpellDescription$ Each player shuffles all permanents he or she owns into his or her library, then reveals that many cards from the top of his or her library. Each player puts all artifact, creature, and land cards revealed this way onto the battlefield, then does the same for enchantment cards, then puts all cards revealed this way that weren't put onto the battlefield on the bottom of his or her library.
SVar:DBShuffle:DB$ ChangeZoneAll | ChangeType$ Permanent.RememberedPlayerCtrl | Imprint$ True | Origin$ Battlefield | Destination$ Library | Shuffle$ True | SubAbility$ DBDig
SVar:DBDig:DB$ Dig | Defined$ Remembered | NoMove$ True | DigNum$ WarpX | References$ WarpX | RememberRevealed$ True | Reveal$ True | SubAbility$ DBCleanImprint
SVar:DBCleanImprint:DB$ Cleanup | ClearImprinted$ True
SVar:WarpX:Imprinted$Amount
SVar:ChangePermanent:DB$ ChangeZoneAll | ChangeType$ Artifact.IsRemembered,Creature.IsRemembered,Land.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ ChangeEnchantment
SVar:ChangeEnchantment:DB$ ChangeZoneAll | ChangeType$ Enchantment.IsRemembered | Origin$ Library | Destination$ Battlefield | ForgetChanged$ True | SubAbility$ GotoBottom
SVar:GotoBottom:DB$ ChangeZoneAll | ChangeType$ Card.IsRemembered | Origin$ Library | Destination$ Library | LibraryPosition$ -1 | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/warp_world.jpg
Oracle:Each player shuffles all permanents he or she owns into his or her library, then reveals that many cards from the top of his or her library. Each player puts all artifact, creature, and land cards revealed this way onto the battlefield, then does the same for enchantment cards, then puts all cards revealed this way that weren't put onto the battlefield on the bottom of his or her library.
SetInfo:RAV Rare
SetInfo:M10 Rare
SetInfo:10E Rare

View File

@@ -0,0 +1,10 @@
Name:Weight of Conscience
ManaCost:1 W
Types:Enchantment Aura
K:Enchant creature
A:SP$ Attach | Cost$ 1 W | ValidTgts$ Creature | AILogic$ Curse
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack. | Description$ Enchanted creature can't attack.
A:AB$ ChangeZone | Cost$ tapXType<2/Creature.sharesCreatureTypeWith/creatures that share a creature type> | Defined$ Enchanted | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile enchanted creature.
SVar:Picture:http://www.wizards.com/global/images/magic/general/weight_of_conscience.jpg
Oracle:Enchant creature\nEnchanted creature can't attack.\nTap two untapped creatures you control that share a creature type: Exile enchanted creature.
SetInfo:MOR Common

View File

@@ -2,7 +2,7 @@ Name:Wound Reflection
ManaCost:5 B
Types:Enchantment
T:Mode$ Phase | Phase$ End of Turn | TriggerZones$ Battlefield | Execute$ RepeatOpps | TriggerDescription$ At the beginning of each end step, each opponent loses life equal to the life he or she lost this turn. (Damage causes loss of life.)
SVar:RepeatOpps:AB$ RepeatEach | Cost$ 0 | RepeatPlayers$ Player | RepeatSubAbility$ TrigLoseLife
SVar:RepeatOpps:AB$ RepeatEach | Cost$ 0 | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ TrigLoseLife
SVar:TrigLoseLife:DB$ LoseLife | Defined$ Remembered | LifeAmount$ X | References$ X
SVar:X:PlayerCountRemembered$LifeLostThisTurn
SVar:Picture:http://www.wizards.com/global/images/magic/general/wound_reflection.jpg

View File

@@ -0,0 +1,20 @@
Name:Zur's Weirding
ManaCost:3 U
Types:Enchantment
S:Mode$ Continuous | Affected$ Player | AddKeyword$ Play with your hand revealed. | Description$ Players play with their hands revealed.
R:Event$ Draw | ActiveZones$ Battlefield | ValidPlayer$ Player | ReplaceWith$ RevealTop | Description$ If a player would draw a card, he or she reveals it instead. Then any other player may pay 2 life. If a player does, put that card into its owner's graveyard. Otherwise, that player draws a card.
SVar:RevealTop:AB$ Dig | Cost$ 0 | Defined$ ReplacedPlayer | DigNum$ 1 | NoMove$ True | Reveal$ True | SubAbility$ DBCheck
SVar:DBCheck:DB$ StoreSVar | SVar$ ZurCheck | Type$ Number | Expression$ 1 | UnlessPayer$ NonReplacedPlayer | UnlessCost$ PayLife<2> | SubAbility$ DBMill | StackDescription$ None
SVar:DBMill:DB$ Mill | Defined$ ReplacedPlayer | NumCards$ 1 | SubAbility$ DBDraw | ConditionCheckSVar$ ZurCheck | ConditionSVarCompare$ EQ0 | StackDescription$ None
SVar:DBDraw:DB$ Draw | Defined$ ReplacedPlayer | NumCards$ 1 | SubAbility$ DBReset | ConditionCheckSVar$ ZurCheck | ConditionSVarCompare$ EQ1 | StackDescription$ that player draws a card
SVar:DBReset:DB$ StoreSVar | SVar$ ZurCheck | Type$ Number | Expression$ 0
SVar:ZurCheck:Number$0
SVar:RemAIDeck:True
SVar:RemMultiplayer:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/zurs_weirding.jpg
Oracle:Players play with their hands revealed.\nIf a player would draw a card, he or she reveals it instead. Then any other player may pay 2 life. If a player does, put that card into its owner's graveyard. Otherwise, that player draws a card.
SetInfo:ICE Rare
SetInfo:5ED Rare
SetInfo:8ED Rare
SetInfo:6ED Rare
SetInfo:9ED Rare

View File

@@ -166,6 +166,7 @@ u_1_1_camarid.jpg http://www.cardforge.org/fpics/tokens/u_1
u_1_1_cloud_sprite.jpg http://www.cardforge.org/fpics/tokens/u_1_1_cloud_sprite.jpg
u_1_1_faerie.jpg http://www.cardforge.org/fpics/tokens/u_1_1_faerie.jpg
u_1_1_illusion.jpg http://www.cardforge.org/fpics/tokens/u_1_1_illusion.jpg
u_1_1_merfolk.jpg http://www.cardforge.org/fpics/tokens/u_1_1_merfolk.jpg
u_1_1_merfolk_wizard.jpg http://www.cardforge.org/fpics/tokens/u_1_1_merfolk_wizard.jpg
u_1_1_thopter.jpg http://www.cardforge.org/fpics/tokens/u_1_1_thopter.jpg
u_1_1_spirit_avr.jpg http://www.cardforge.org/fpics/tokens/u_1_1_spirit_avr.jpg
@@ -236,5 +237,4 @@ morph.jpg http://www.cardforge.org/fpics/effects/mo
# //These tokens are not currently used by any cards in Forge, but links provided should they be scripted so the correct name is used:
# //g_1_1_wolves_of_the_hunt.jpg http://www.cardforge.org/fpics/tokens/g_1_1_wolves_of_the_hunt.jpg [LEG] Master of the Hunt
# //rg_1_1_goblin_warrior.jpg http://www.cardforge.org/fpics/tokens/rg_1_1_goblin_warrior.jpg [SHM] Wort, the Raidmother
# //u_1_1_merfolk.jpg http://www.cardforge.org/fpics/tokens/u_1_1_merfolk.jpg [ZEN] Lullmage Mentor
# //w_1_1_knight.jpg http://www.cardforge.org/fpics/tokens/w_1_1_knight.jpg [ALL] Errand of Duty

View File

@@ -0,0 +1,34 @@
[duel]
[metadata]
Name=Preacher 3
Title=Preacher
Difficulty=hard
Description=WB Cleric deck
Icon=Preacher.jpg
Deck Type=constructed
[main]
1 Akroma's Devoted
3 Ancestor's Prophet
1 Battlefield Medic
3 Battletide Alchemist
2 Cathedral Sanctifier
2 Celestial Gatekeeper
4 Doubtless One
4 Edgewalker
4 Hedron-Field Purists
2 High Priest of Penance
1 Mox Jet
1 Mox Pearl
1 Order of Whiteclay
12 Plains
1 Profane Prayers
1 Rotlung Reanimator
4 Scrubland
1 Skirsdag High Priest
5 Swamp
1 Syndic of Tithes
1 Temple Acolyte
1 Urborg, Tomb of Yawgmoth
2 Vile Deacon
2 Weathered Wayfarer
[sideboard]

View File

@@ -133,6 +133,7 @@ public class Card extends GameEntity implements Comparable<Card> {
private List<Card> blockedThisTurn = null;
private List<Card> blockedByThisTurn = null;
private boolean isCommander = false;
private boolean startsGameInPlay = false;
private boolean drawnThisTurn = false;
private boolean tapped = false;
@@ -1258,13 +1259,12 @@ public class Card extends GameEntity implements Comparable<Card> {
if (this.hasKeyword("CARDNAME can't have counters placed on it.")) {
return false;
}
if (this.isCreature() && counterName.equals(CounterType.M1M1)) {
if (this.isCreature() && counterName == CounterType.M1M1) {
for (final Card c : this.getController().getCreaturesInPlay()) { // look for Melira, Sylvok Outcast
if (c.hasKeyword("Creatures you control can't have -1/-1 counters placed on them.")) {
return false;
}
}
}
return true;
}
@@ -4470,26 +4470,10 @@ public class Card extends GameEntity implements Comparable<Card> {
public final void addMultiKickerMagnitude(final int n) {
this.multiKickerMagnitude += n;
}
/**
* <p>
* Setter for the field <code>multiKickerMagnitude</code>.
* </p>
*
* @param n
* a int.
*/
public final void setMultiKickerMagnitude(final int n) {
this.multiKickerMagnitude = n;
}
/**
* <p>
* Getter for the field <code>multiKickerMagnitude</code>.
* </p>
*
* @return a int.
*/
public final int getMultiKickerMagnitude() {
return this.multiKickerMagnitude;
}
@@ -7321,6 +7305,10 @@ public class Card extends GameEntity implements Comparable<Card> {
if (!this.isType(source.getChosenType())) {
return false;
}
} else if (property.equals("IsCommander")) {
if(!this.isCommander) {
return false;
}
} else {
if (!this.isType(property)) {
return false;
@@ -8358,7 +8346,7 @@ public class Card extends GameEntity implements Comparable<Card> {
additionalLog = "(As -1/-1 Counters)";
}
if (source.hasKeyword("Deathtouch") && this.isCreature()) {
Singletons.getModel().getGame().getAction().destroy(this);
Singletons.getModel().getGame().getAction().destroy(this, null);
additionalLog = "(Deathtouch)";
} else if (this.isInPlay() && !wither) {
this.damage += damageToAdd;
@@ -9140,4 +9128,33 @@ public class Card extends GameEntity implements Comparable<Card> {
cardRules = r;
}
public boolean isCommander() {
// TODO - have a field
return this.isCommander;
}
public void setCommander(boolean b) {
this.isCommander = b;
}
public void setSplitStateToPlayAbility(SpellAbility sa) {
if( !isSplitCard() ) return; // just in case
// Split card support
List<SpellAbility> leftSplitAbilities = getState(CardCharacteristicName.LeftSplit).getSpellAbility();
List<SpellAbility> rightSplitAbilities = getState(CardCharacteristicName.RightSplit).getSpellAbility();
for (SpellAbility a : leftSplitAbilities) {
if (sa == a || sa.getDescription().equals(String.format("%s (without paying its mana cost)", a.getDescription()))) {
setState(CardCharacteristicName.LeftSplit);
return;
}
}
for (SpellAbility a : rightSplitAbilities) {
if (sa == a || sa.getDescription().equals(String.format("%s (without paying its mana cost)", a.getDescription()))) {
setState(CardCharacteristicName.RightSplit);
return;
}
}
throw new RuntimeException("Not found which part to choose for ability " + sa + " from card " + this);
}
} // end Card class

View File

@@ -15,6 +15,7 @@ import forge.control.input.InputSynchronized;
*
*/
public class FThreads {
static {
System.out.printf("(FThreads static ctor): Running on a machine with %d cpu core(s)%n", Runtime.getRuntime().availableProcessors() );
}
@@ -124,4 +125,8 @@ public class FThreads {
getScheduledPool().schedule(inputUpdater, milliseconds, TimeUnit.MILLISECONDS);
}
public static String debugGetCurrThreadId() {
return isEDT() ? "EDT" : Long.toString(Thread.currentThread().getId());
}
}

View File

@@ -114,6 +114,4 @@ final class CardFace implements ICardFace {
if ( variables == null ) variables = emptyMap;
if ( null == nonAbilityText ) nonAbilityText = "";
}
}

View File

@@ -40,6 +40,8 @@ public final class CardRules implements ICardCharacteristics {
private CardAiHints aiHints;
private ColorSet colorIdentity = null;
public CardRules(ICardFace[] faces, CardSplitType altMode, CardAiHints cah, Map<String, CardInSet> sets) {
splitType = altMode;
mainPart = faces[0];
@@ -57,6 +59,45 @@ public final class CardRules implements ICardCharacteristics {
System.err.println(getName() + " was not assigned any set.");
setsPrinted.put(CardEdition.UNKNOWN.getCode(), new CardInSet(CardRarity.Common, 1) );
}
//Calculate Color Identity
byte colMask = calculateColorIdentity(mainPart);
if(otherPart != null)
{
colMask |= calculateColorIdentity(otherPart);
}
colorIdentity = ColorSet.fromMask(colMask);
}
private byte calculateColorIdentity(ICardFace face)
{
byte res = face.getColor().getColor();
boolean isReminder = false;
boolean isSymbol = false;
String oracleText = face.getOracleText();
int len = oracleText.length();
for(int i = 0; i < len; i++) {
char c = oracleText.charAt(i); // This is to avoid needless allocations performed by toCharArray()
switch(c) {
case('('): isReminder = true; break;
case(')'): isReminder = false; break;
case('{'): isSymbol = true; break;
case('}'): isSymbol = false; break;
default:
if(isSymbol && !isReminder) {
switch(c) {
case('W'): res |= MagicColor.WHITE; break;
case('U'): res |= MagicColor.BLUE; break;
case('B'): res |= MagicColor.BLACK; break;
case('R'): res |= MagicColor.RED; break;
case('G'): res |= MagicColor.GREEN; break;
}
}
break;
}
}
return res;
}
public boolean isTraditional() {
@@ -177,4 +218,9 @@ public final class CardRules implements ICardCharacteristics {
public final List<String> getAbilities() {
return null;
}
public ColorSet getColorIdentity() {
return colorIdentity;
}
}

View File

@@ -456,10 +456,17 @@ public final class CardRulesPredicates {
public static final Predicate<CardRules> IS_CREATURE = CardRulesPredicates
.coreType(true, CardCoreType.Creature);
public static final Predicate<CardRules> IS_LEGENDARY = CardRulesPredicates
.superType(true, CardSuperType.Legendary);
/** The Constant isArtifact. */
public static final Predicate<CardRules> IS_ARTIFACT = CardRulesPredicates
.coreType(true, CardCoreType.Artifact);
/** The Constant isEquipment. */
public static final Predicate<CardRules> IS_EQUIPMENT = CardRulesPredicates
.subType("Equipment");
/** The Constant isLand. */
public static final Predicate<CardRules> IS_LAND = CardRulesPredicates.coreType(true, CardCoreType.Land);

View File

@@ -220,6 +220,10 @@ public class AbilityUtils {
list = sa.getRootAbility().getPaidList("Tapped");
}
else if (defined.startsWith("Untapped")) {
list = sa.getRootAbility().getPaidList("Untapped");
}
else if (defined.startsWith("Valid ")) {
String validDefined = defined.substring("Valid ".length());
GameState game = Singletons.getModel().getGame();
@@ -286,250 +290,21 @@ public class AbilityUtils {
* @return a int.
*/
public static int calculateAmount(final Card card, String amount, final SpellAbility ability) {
// amount can be anything, not just 'X' as long as sVar exists
// return empty strings and constants
if (StringUtils.isBlank(amount)) return 0;
final boolean startsWithPlus = amount.charAt(0) == '+';
if(startsWithPlus) amount = amount.substring(1);
if (amount == null || amount.isEmpty()) {
return 0;
}
// If Amount is -X, strip the minus sign before looking for an SVar of
// that kind
int multiplier = 1;
if (amount.startsWith("-")) {
multiplier = -1;
// Strip and save sign for calculations
boolean startsWithMinus = amount.charAt(0) == '-';
int multiplier = startsWithMinus ? -1 : 1;
if(startsWithMinus)
amount = amount.substring(1);
} else if (amount.startsWith("+")) {
amount = amount.substring(1);
}
String svarval;
if (ability != null) {
// return result soon for plain numbers
if (StringUtils.isNumeric(amount)) return Integer.parseInt(amount) * multiplier;
svarval = ability.getSVar(amount);
if (svarval.equals("")) {
try {
Integer.parseInt(amount);
}
catch (NumberFormatException ignored) {
//If this is reached, amount wasn't an integer
//Print a warning to console to help debug if an ability is not stolen properly.
StringBuilder sb = new StringBuilder("WARNING:SVar fallback to Card (");
sb.append(card.getName()).append(") and Ability(").append(ability.toString()).append(")");
System.out.println(sb.toString());
svarval = card.getSVar(amount);
}
}
} else {
svarval = card.getSVar(amount);
}
if (!svarval.equals("")) {
final String[] calcX = svarval.split("\\$");
if ((calcX.length == 1) || calcX[1].equals("none")) {
return 0;
}
if (calcX[0].startsWith("Count")) {
return AbilityUtils.xCount(card, calcX[1], ability) * multiplier;
} else if (calcX[0].startsWith("Number")) {
return CardFactoryUtil.xCount(card, svarval) * multiplier;
} else if (calcX[0].startsWith("SVar")) {
final String[] l = calcX[1].split("/");
final String[] m = CardFactoryUtil.parseMath(l);
return CardFactoryUtil.doXMath(AbilityUtils.calculateAmount(card, l[0], ability), m, card)
* multiplier;
} else if (calcX[0].startsWith("PlayerCount")) {
final String hType = calcX[0].substring(11);
final ArrayList<Player> players = new ArrayList<Player>();
if (hType.equals("Players") || hType.equals("")) {
players.addAll(Singletons.getModel().getGame().getPlayers());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Opponents")) {
players.addAll(card.getController().getOpponents());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Other")) {
players.addAll(card.getController().getAllOtherPlayers());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Remembered")) {
for (final Object o : card.getRemembered()) {
if (o instanceof Player) {
players.add((Player) o);
}
}
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("NonActive")) {
players.addAll(Singletons.getModel().getGame().getPlayers());
players.remove(Singletons.getModel().getGame().getPhaseHandler().getPlayerTurn());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
} else if (calcX[0].startsWith("Remembered")) {
// Add whole Remembered list to handlePaid
final List<Card> list = new ArrayList<Card>();
if (card.getRemembered().isEmpty()) {
final Card newCard = Singletons.getModel().getGame().getCardState(card);
for (final Object o : newCard.getRemembered()) {
if (o instanceof Card) {
list.add(Singletons.getModel().getGame().getCardState((Card) o));
}
}
}
if (calcX[0].endsWith("LKI")) { // last known information
for (final Object o : card.getRemembered()) {
if (o instanceof Card) {
list.add((Card) o);
}
}
} else {
for (final Object o : card.getRemembered()) {
if (o instanceof Card) {
list.add(Singletons.getModel().getGame().getCardState((Card) o));
}
}
}
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
} else if (calcX[0].startsWith("Imprinted")) {
// Add whole Imprinted list to handlePaid
final List<Card> list = new ArrayList<Card>();
for (final Card c : card.getImprinted()) {
list.add(Singletons.getModel().getGame().getCardState(c));
}
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
} else if (calcX[0].matches("Enchanted")) {
// Add whole Enchanted list to handlePaid
final List<Card> list = new ArrayList<Card>();
if (card.isEnchanting()) {
Object o = card.getEnchanting();
if (o instanceof Card) {
list.add(Singletons.getModel().getGame().getCardState((Card) o));
}
}
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
} else if (ability != null) {
// Player attribute counting
if (calcX[0].startsWith("TargetedPlayer")) {
final ArrayList<Player> players = new ArrayList<Player>();
final SpellAbility saTargeting = ability.getSATargetingPlayer();
if (null != saTargeting) {
players.addAll(saTargeting.getTarget().getTargetPlayers());
}
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("TargetedObjects")) {
final ArrayList<Object> objects = new ArrayList<Object>();
// Make list of all targeted objects starting with the root SpellAbility
SpellAbility loopSA = ability.getRootAbility();
while (loopSA != null) {
if (loopSA.getTarget() != null) {
objects.addAll(loopSA.getTarget().getTargets());
}
loopSA = loopSA.getSubAbility();
}
return CardFactoryUtil.objectXCount(objects, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("TargetedController")) {
final ArrayList<Player> players = new ArrayList<Player>();
final List<Card> list = getDefinedCards(card, "Targeted", ability);
final List<SpellAbility> sas = AbilityUtils.getDefinedSpellAbilities(card, "Targeted",
ability);
for (final Card c : list) {
final Player p = c.getController();
if (!players.contains(p)) {
players.add(p);
}
}
for (final SpellAbility s : sas) {
final Player p = s.getSourceCard().getController();
if (!players.contains(p)) {
players.add(p);
}
}
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("TargetedByTarget")) {
final List<Card> tgtList = new ArrayList<Card>();
final List<SpellAbility> saList = getDefinedSpellAbilities(card, "Targeted", ability);
for (final SpellAbility s : saList) {
tgtList.addAll(getDefinedCards(s.getSourceCard(), "Targeted", s));
}
return CardFactoryUtil.handlePaid(tgtList, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("TriggeredPlayer") || calcX[0].startsWith("TriggeredTarget")) {
final SpellAbility root = ability.getRootAbility();
Object o = root.getTriggeringObject(calcX[0].substring(9));
final List<Player> players = new ArrayList<Player>();
if (o instanceof Player) {
players.add((Player) o);
}
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
// Added on 9/30/12 (ArsenalNut) - Ended up not using but might be useful in future
/*
if (calcX[0].startsWith("EnchantedController")) {
final ArrayList<Player> players = new ArrayList<Player>();
players.addAll(AbilityFactory.getDefinedPlayers(card, "EnchantedController", ability));
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
*/
List<Card> list = new ArrayList<Card>();
if (calcX[0].startsWith("Sacrificed")) {
list = ability.getRootAbility().getPaidList("Sacrificed");
} else if (calcX[0].startsWith("Discarded")) {
final SpellAbility root = ability.getRootAbility();
list = root.getPaidList("Discarded");
if ((null == list) && root.isTrigger()) {
list = root.getSourceCard().getSpellPermanent().getPaidList("Discarded");
}
} else if (calcX[0].startsWith("Exiled")) {
list = ability.getRootAbility().getPaidList("Exiled");
} else if (calcX[0].startsWith("Tapped")) {
list = ability.getRootAbility().getPaidList("Tapped");
} else if (calcX[0].startsWith("Revealed")) {
list = ability.getRootAbility().getPaidList("Revealed");
} else if (calcX[0].startsWith("Targeted")) {
list = ability.findTargetedCards();
} else if (calcX[0].startsWith("Triggered")) {
final SpellAbility root = ability.getRootAbility();
list = new ArrayList<Card>();
list.add((Card) root.getTriggeringObject(calcX[0].substring(9)));
} else if (calcX[0].startsWith("TriggerCount")) {
// TriggerCount is similar to a regular Count, but just
// pulls Integer Values from Trigger objects
final SpellAbility root = ability.getRootAbility();
final String[] l = calcX[1].split("/");
final String[] m = CardFactoryUtil.parseMath(l);
final int count = (Integer) root.getTriggeringObject(l[0]);
return CardFactoryUtil.doXMath(count, m, card) * multiplier;
} else if (calcX[0].startsWith("Replaced")) {
final SpellAbility root = ability.getRootAbility();
list = new ArrayList<Card>();
list.add((Card) root.getReplacingObject(calcX[0].substring(8)));
} else if (calcX[0].startsWith("ReplaceCount")) {
// ReplaceCount is similar to a regular Count, but just
// pulls Integer Values from Replacement objects
final SpellAbility root = ability.getRootAbility();
final String[] l = calcX[1].split("/");
final String[] m = CardFactoryUtil.parseMath(l);
final int count = (Integer) root.getReplacingObject(l[0]);
return CardFactoryUtil.doXMath(count, m, card) * multiplier;
} else {
return 0;
}
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
} else {
return 0;
}
}
// These are some special cases - who is implementing them?
if (amount.equals("ChosenX") || amount.equals("ChosenY")) {
// isn't made yet
return 0;
@@ -539,7 +314,244 @@ public class AbilityUtils {
return 0;
}
return Integer.parseInt(amount) * multiplier;
// Try to fetch variable, try ability first, then card.
String svarval = null;
if (ability != null) {
svarval = ability.getSVar(amount);
}
if (StringUtils.isBlank(svarval)) {
if( ability != null) {
System.err.printf("SVar '%s' not found in ability, fallback to Card (%s). Ability is (%s)%n", amount, card.getName(), ability);
}
svarval = card.getSVar(amount);
}
// Nothing to do here if value is missing or blank
if (StringUtils.isBlank(svarval)) {
System.err.printf("SVar '%s' not defined in Card (%s)%n", amount, card.getName());
return 0;
}
// Handle numeric constant coming in svar value
if( StringUtils.isNumeric(svarval) )
return multiplier * Integer.parseInt(svarval);
// Parse Object$Property string
final String[] calcX = svarval.split("\\$");
// Incorrect parses mean zero.
if ((calcX.length == 1) || calcX[1].equals("none"))
return 0;
if (calcX[0].startsWith("Count"))
return AbilityUtils.xCount(card, calcX[1], ability) * multiplier;
if (calcX[0].startsWith("Number"))
return CardFactoryUtil.xCount(card, svarval) * multiplier;
if (calcX[0].startsWith("SVar")) {
final String[] l = calcX[1].split("/");
final String m = CardFactoryUtil.extractOperators(calcX[1]);
return CardFactoryUtil.doXMath(AbilityUtils.calculateAmount(card, l[0], ability), m, card) * multiplier;
}
if (calcX[0].startsWith("PlayerCount")) {
final String hType = calcX[0].substring(11);
final ArrayList<Player> players = new ArrayList<Player>();
if (hType.equals("Players") || hType.equals("")) {
players.addAll(Singletons.getModel().getGame().getPlayers());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Opponents")) {
players.addAll(card.getController().getOpponents());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Other")) {
players.addAll(card.getController().getAllOtherPlayers());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("Remembered")) {
for (final Object o : card.getRemembered()) {
if (o instanceof Player) {
players.add((Player) o);
}
}
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
} else if (hType.equals("NonActive")) {
players.addAll(Singletons.getModel().getGame().getPlayers());
players.remove(Singletons.getModel().getGame().getPhaseHandler().getPlayerTurn());
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
return 0;
}
if (calcX[0].startsWith("Remembered")) {
// Add whole Remembered list to handlePaid
final List<Card> list = new ArrayList<Card>();
if (card.getRemembered().isEmpty()) {
final Card newCard = Singletons.getModel().getGame().getCardState(card);
for (final Object o : newCard.getRemembered()) {
if (o instanceof Card) {
list.add(Singletons.getModel().getGame().getCardState((Card) o));
}
}
}
if (calcX[0].endsWith("LKI")) { // last known information
for (final Object o : card.getRemembered()) {
if (o instanceof Card) {
list.add((Card) o);
}
}
} else {
for (final Object o : card.getRemembered()) {
if (o instanceof Card) {
list.add(Singletons.getModel().getGame().getCardState((Card) o));
}
}
}
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("Imprinted")) {
// Add whole Imprinted list to handlePaid
final List<Card> list = new ArrayList<Card>();
for (final Card c : card.getImprinted()) {
list.add(Singletons.getModel().getGame().getCardState(c));
}
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
}
if (calcX[0].matches("Enchanted")) {
// Add whole Enchanted list to handlePaid
final List<Card> list = new ArrayList<Card>();
if (card.isEnchanting()) {
Object o = card.getEnchanting();
if (o instanceof Card) {
list.add(Singletons.getModel().getGame().getCardState((Card) o));
}
}
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
}
if (ability == null)
return 0;
// Player attribute counting
if (calcX[0].startsWith("TargetedPlayer")) {
final ArrayList<Player> players = new ArrayList<Player>();
final SpellAbility saTargeting = ability.getSATargetingPlayer();
if (null != saTargeting) {
players.addAll(saTargeting.getTarget().getTargetPlayers());
}
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("TargetedObjects")) {
final ArrayList<Object> objects = new ArrayList<Object>();
// Make list of all targeted objects starting with the root SpellAbility
SpellAbility loopSA = ability.getRootAbility();
while (loopSA != null) {
if (loopSA.getTarget() != null) {
objects.addAll(loopSA.getTarget().getTargets());
}
loopSA = loopSA.getSubAbility();
}
return CardFactoryUtil.objectXCount(objects, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("TargetedController")) {
final ArrayList<Player> players = new ArrayList<Player>();
final List<Card> list = getDefinedCards(card, "Targeted", ability);
final List<SpellAbility> sas = AbilityUtils.getDefinedSpellAbilities(card, "Targeted",
ability);
for (final Card c : list) {
final Player p = c.getController();
if (!players.contains(p)) {
players.add(p);
}
}
for (final SpellAbility s : sas) {
final Player p = s.getSourceCard().getController();
if (!players.contains(p)) {
players.add(p);
}
}
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("TargetedByTarget")) {
final List<Card> tgtList = new ArrayList<Card>();
final List<SpellAbility> saList = getDefinedSpellAbilities(card, "Targeted", ability);
for (final SpellAbility s : saList) {
tgtList.addAll(getDefinedCards(s.getSourceCard(), "Targeted", s));
}
return CardFactoryUtil.handlePaid(tgtList, calcX[1], card) * multiplier;
}
if (calcX[0].startsWith("TriggeredPlayer") || calcX[0].startsWith("TriggeredTarget")) {
final SpellAbility root = ability.getRootAbility();
Object o = root.getTriggeringObject(calcX[0].substring(9));
final List<Player> players = new ArrayList<Player>();
if (o instanceof Player) {
players.add((Player) o);
}
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
// Added on 9/30/12 (ArsenalNut) - Ended up not using but might be useful in future
/*
if (calcX[0].startsWith("EnchantedController")) {
final ArrayList<Player> players = new ArrayList<Player>();
players.addAll(AbilityFactory.getDefinedPlayers(card, "EnchantedController", ability));
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
}
*/
List<Card> list = new ArrayList<Card>();
if (calcX[0].startsWith("Sacrificed")) {
list = ability.getRootAbility().getPaidList("Sacrificed");
} else if (calcX[0].startsWith("Discarded")) {
final SpellAbility root = ability.getRootAbility();
list = root.getPaidList("Discarded");
if ((null == list) && root.isTrigger()) {
list = root.getSourceCard().getSpellPermanent().getPaidList("Discarded");
}
} else if (calcX[0].startsWith("Exiled")) {
list = ability.getRootAbility().getPaidList("Exiled");
} else if (calcX[0].startsWith("Tapped")) {
list = ability.getRootAbility().getPaidList("Tapped");
} else if (calcX[0].startsWith("Revealed")) {
list = ability.getRootAbility().getPaidList("Revealed");
} else if (calcX[0].startsWith("Targeted")) {
list = ability.findTargetedCards();
} else if (calcX[0].startsWith("Triggered")) {
final SpellAbility root = ability.getRootAbility();
list = new ArrayList<Card>();
list.add((Card) root.getTriggeringObject(calcX[0].substring(9)));
} else if (calcX[0].startsWith("TriggerCount")) {
// TriggerCount is similar to a regular Count, but just
// pulls Integer Values from Trigger objects
final SpellAbility root = ability.getRootAbility();
final String[] l = calcX[1].split("/");
final String m = CardFactoryUtil.extractOperators(calcX[1]);
final int count = (Integer) root.getTriggeringObject(l[0]);
return CardFactoryUtil.doXMath(count, m, card) * multiplier;
} else if (calcX[0].startsWith("Replaced")) {
final SpellAbility root = ability.getRootAbility();
list = new ArrayList<Card>();
list.add((Card) root.getReplacingObject(calcX[0].substring(8)));
} else if (calcX[0].startsWith("ReplaceCount")) {
// ReplaceCount is similar to a regular Count, but just
// pulls Integer Values from Replacement objects
final SpellAbility root = ability.getRootAbility();
final String[] l = calcX[1].split("/");
final String m = CardFactoryUtil.extractOperators(calcX[1]);
final int count = (Integer) root.getReplacingObject(l[0]);
return CardFactoryUtil.doXMath(count, m, card) * multiplier;
} else {
return 0;
}
return CardFactoryUtil.handlePaid(list, calcX[1], card) * multiplier;
}
/**
@@ -619,7 +631,7 @@ public class AbilityUtils {
} else if (type.startsWith("Targeted")) {
source = null;
ArrayList<Card> tgts = sa.findTargetedCards();
List<Card> tgts = sa.findTargetedCards();
if (!tgts.isEmpty()) {
source = tgts.get(0);
}
@@ -829,6 +841,11 @@ public class AbilityUtils {
}
}
}
} else if (defined.equals("NonReplacedPlayer")) {
final SpellAbility root = sa.getRootAbility();
Player p = (Player) root.getReplacingObject("Player");
players.addAll(sa.getActivatingPlayer().getGame().getPlayers());
players.remove(p);
} else if (defined.equals("EnchantedController")) {
if (card.getEnchantingCard() == null) {
return players;
@@ -1102,7 +1119,7 @@ public class AbilityUtils {
}
} else {
// if it's paid by the AI already the human can pay, but it won't change anything
paid |= GameActionUtil.payCostDuringAbilityResolve(payer, ability, cost, sa, game);
paid |= GameActionUtil.payCostDuringAbilityResolve(ability, cost, sa, game);
}
}
@@ -1172,11 +1189,19 @@ public class AbilityUtils {
private static boolean willAIPayForAbility(SpellAbility sa, Player payer, SpellAbility ability, boolean paid, List<Player> payers) {
Card source = sa.getSourceCard();
boolean payForOwnOnly = "OnlyOwn".equals(sa.getParam("UnlessAI"));
boolean payOwner = sa.hasParam("UnlessAI") ? sa.getParam("UnlessAI").startsWith("Defined") : false;
boolean payNever = "Never".equals(sa.getParam("UnlessAI"));
boolean isMine = sa.getActivatingPlayer().equals(payer);
if (payNever) { return false; }
if (payForOwnOnly && !isMine) { return false; }
if (payOwner) {
final String defined = sa.getParam("UnlessAI").substring(7);
final Player player = AbilityUtils.getDefinedPlayers(source, defined, sa).get(0);
if (!payer.equals(player)) {
return false;
}
}
// AI will only pay when it's not already payed and only opponents abilities
if (paid || (payers.size() > 1 && (isMine && !payForOwnOnly))) {
@@ -1214,7 +1239,7 @@ public class AbilityUtils {
public static int xCount(final Card c, final String s, final SpellAbility sa) {
final String[] l = s.split("/");
final String[] m = CardFactoryUtil.parseMath(l);
final String expr = CardFactoryUtil.extractOperators(s);
final String[] sq;
sq = l[0].split("\\.");
@@ -1223,9 +1248,9 @@ public class AbilityUtils {
// Count$Kicked.<numHB>.<numNotHB>
if (sq[0].startsWith("Kicked")) {
if (sa.isKicked()) {
return CardFactoryUtil.doXMath(Integer.parseInt(sq[1]), m, c); // Kicked
return CardFactoryUtil.doXMath(Integer.parseInt(sq[1]), expr, c); // Kicked
} else {
return CardFactoryUtil.doXMath(Integer.parseInt(sq[2]), m, c); // not Kicked
return CardFactoryUtil.doXMath(Integer.parseInt(sq[2]), expr, c); // not Kicked
}
}
@@ -1235,9 +1260,9 @@ public class AbilityUtils {
final int lhs = calculateAmount(c, compString[1], sa);
final int rhs = calculateAmount(c, compString[2].substring(2), sa);
if (Expressions.compare(lhs, compString[2], rhs)) {
return CardFactoryUtil.doXMath(Integer.parseInt(sq[1]), m, c);
return CardFactoryUtil.doXMath(Integer.parseInt(sq[1]), expr, c);
} else {
return CardFactoryUtil.doXMath(Integer.parseInt(sq[2]), m, c);
return CardFactoryUtil.doXMath(Integer.parseInt(sq[2]), expr, c);
}
}
}

View File

@@ -10,6 +10,7 @@ import forge.card.ability.ai.AlwaysPlayAi;
import forge.card.ability.ai.AnimateAi;
import forge.card.ability.ai.AnimateAllAi;
import forge.card.ability.ai.AttachAi;
import forge.card.ability.ai.BecomesBlockedAi;
import forge.card.ability.ai.BondAi;
import forge.card.ability.ai.CanPlayAsDrawbackAi;
import forge.card.ability.ai.CannotPlayAi;
@@ -112,6 +113,7 @@ public enum ApiType {
Animate (AnimateEffect.class, AnimateAi.class),
AnimateAll (AnimateAllEffect.class, AnimateAllAi.class),
Attach (AttachEffect.class, AttachAi.class),
BecomesBlocked (BecomesBlockedEffect.class, BecomesBlockedAi.class),
Bond (BondEffect.class, BondAi.class),
ChangeZone(ChangeZoneEffect.class, ChangeZoneAi.class),
ChangeZoneAll(ChangeZoneAllEffect.class, ChangeZoneAllAi.class),

View File

@@ -0,0 +1,65 @@
package forge.card.ability.ai;
import java.util.List;
import forge.Card;
import forge.CardLists;
import forge.Singletons;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.ai.ComputerUtilCard;
import forge.game.player.AIPlayer;
import forge.game.zone.ZoneType;
public class BecomesBlockedAi extends SpellAbilityAi {
@Override
protected boolean canPlayAI(AIPlayer aiPlayer, SpellAbility sa) {
final Card source = sa.getSourceCard();
final Target tgt = sa.getTarget();
List<Card> list = Singletons.getModel().getGame().getCardsIn(ZoneType.Battlefield);
list = CardLists.getValidCards(list, tgt.getValidTgts(), source.getController(), source);
list = CardLists.getTargetableCards(list, sa);
while (tgt.getNumTargeted() < tgt.getMaxTargets(source, sa)) {
Card choice = null;
if (list.isEmpty()) {
return false;
}
choice = ComputerUtilCard.getBestCreatureAI(list);
if (choice == null) { // can't find anything left
return false;
}
list.remove(choice);
tgt.addTarget(choice);
}
return true;
}
@Override
public boolean chkAIDrawback(SpellAbility sa, AIPlayer aiPlayer) {
// TODO - implement AI
return false;
}
/* (non-Javadoc)
* @see forge.card.abilityfactory.SpellAiLogic#doTriggerAINoCost(forge.game.player.Player, java.util.Map, forge.card.spellability.SpellAbility, boolean)
*/
@Override
protected boolean doTriggerAINoCost(AIPlayer aiPlayer, SpellAbility sa, boolean mandatory) {
boolean chance;
// TODO - implement AI
chance = false;
return chance;
}
}

View File

@@ -1071,7 +1071,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
if (tgt != null) {
if (!tgt.getTargetPlayers().isEmpty()) {
player = player != null ? player : tgt.getTargetPlayers().get(0);
player = sa.hasParam("DefinedPlayer") ? player : tgt.getTargetPlayers().get(0);
if (!player.canBeTargetedBy(sa)) {
return;
}

View File

@@ -8,7 +8,6 @@ import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.spellability.TargetSelection;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCost;
import forge.game.ai.ComputerUtilMana;
@@ -50,7 +49,7 @@ public class CounterAi extends SpellAbilityAi {
}
tgt.resetTargets();
if (TargetSelection.matchSpellAbility(sa, topSA, tgt)) {
if (sa.canTargetSpellAbility(topSA)) {
tgt.addTarget(topSA);
} else {
return false;
@@ -120,7 +119,7 @@ public class CounterAi extends SpellAbilityAi {
}
tgt.resetTargets();
if (TargetSelection.matchSpellAbility(sa, topSA, tgt)) {
if (sa.canTargetSpellAbility(topSA)) {
tgt.addTarget(topSA);
} else {
return false;

View File

@@ -49,8 +49,7 @@ public class CountersPutAi extends SpellAbilityAi {
list = CardLists.filter(player.getCardsIn(ZoneType.Battlefield), new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return c.canBeTargetedBy(sa) && !c.hasKeyword("CARDNAME can't have counters placed on it.")
&& !(c.hasKeyword("CARDNAME can't have -1/-1 counters placed on it.") && type.equals("M1M1"));
return c.canBeTargetedBy(sa) && c.canHaveCountersPlacedOnIt(CounterType.valueOf(type));
}
});

View File

@@ -15,7 +15,6 @@ import forge.card.cost.Cost;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.spellability.TargetSelection;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
@@ -103,8 +102,7 @@ public class DamageDealAi extends DamageAiBase {
if (tgt != null && tgt.getTargetPlayers().isEmpty() && !sa.hasParam("DividedAsYouChoose")) {
int actualPay = 0;
final boolean noPrevention = sa.hasParam("NoPrevention");
final ArrayList<Card> cards = tgt.getTargetCards();
for (final Card c : cards) {
for (final Card c : tgt.getTargetCards()) {
final int adjDamage = ComputerUtilCombat.getEnoughDamageToKill(c, dmg, source, false, noPrevention);
if ((adjDamage > actualPay) && (adjDamage <= dmg)) {
actualPay = adjDamage;
@@ -144,7 +142,7 @@ public class DamageDealAi extends DamageAiBase {
final ArrayList<Object> objects = tgt.getTargets();
if (saMe.hasParam("TargetUnique")) {
objects.addAll(TargetSelection.getUniqueTargets(saMe));
objects.addAll(saMe.getUniqueTargets());
}
for (final Object o : objects) {
if (o instanceof Card) {
@@ -472,7 +470,7 @@ public class DamageDealAi extends DamageAiBase {
// If I can kill my target by paying less mana, do it
int actualPay = 0;
final boolean noPrevention = sa.hasParam("NoPrevention");
final ArrayList<Card> cards = tgt.getTargetCards();
final List<Card> cards = tgt.getTargetCards();
//target is a player
if (cards.isEmpty()) {
actualPay = dmg;

View File

@@ -18,7 +18,7 @@
*/
package forge.card.ability.ai;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import forge.Card;
@@ -96,7 +96,7 @@ public class DrawAi extends SpellAbilityAi {
}
if (tgt != null) {
final ArrayList<Player> players = tgt.getTargetPlayers();
final List<Player> players = tgt.getTargetPlayers();
if ((players.size() > 0) && players.get(0).isOpponentOf(ai)) {
return true;
}

Some files were not shown because too many files have changed in this diff Show More