mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
merge latest trunk
This commit is contained in:
54
.gitattributes
vendored
54
.gitattributes
vendored
@@ -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
|
||||
|
||||
53
CHANGES.txt
53
CHANGES.txt
@@ -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
|
||||
|
||||
|
||||
------------
|
||||
|
||||
@@ -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
|
||||
9
res/cardsfolder/a/akroma_angel_of_wrath_avatar.txt
Normal file
9
res/cardsfolder/a/akroma_angel_of_wrath_avatar.txt
Normal 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
|
||||
@@ -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
|
||||
10
res/cardsfolder/a/astral_arena.txt
Normal file
10
res/cardsfolder/a/astral_arena.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
8
res/cardsfolder/b/benthic_explorers.txt
Normal file
8
res/cardsfolder/b/benthic_explorers.txt
Normal 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
|
||||
17
res/cardsfolder/b/blazing_effigy.txt
Normal file
17
res/cardsfolder/b/blazing_effigy.txt
Normal 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
|
||||
11
res/cardsfolder/b/bloodhill_bastion.txt
Normal file
11
res/cardsfolder/b/bloodhill_bastion.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
11
res/cardsfolder/c/comet_storm.txt
Normal file
11
res/cardsfolder/c/comet_storm.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
9
res/cardsfolder/c/curtain_of_light.txt
Normal file
9
res/cardsfolder/c/curtain_of_light.txt
Normal 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
|
||||
8
res/cardsfolder/c/cut_the_tethers.txt
Normal file
8
res/cardsfolder/c/cut_the_tethers.txt
Normal 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
|
||||
9
res/cardsfolder/d/dazzling_beauty.txt
Normal file
9
res/cardsfolder/d/dazzling_beauty.txt
Normal 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
|
||||
10
res/cardsfolder/d/delay.txt
Normal file
10
res/cardsfolder/d/delay.txt
Normal 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
|
||||
@@ -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.
|
||||
|
||||
8
res/cardsfolder/e/eight_and_a_half_tails_avatar.txt
Normal file
8
res/cardsfolder/e/eight_and_a_half_tails_avatar.txt
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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.)
|
||||
|
||||
@@ -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
|
||||
|
||||
9
res/cardsfolder/f/fold_into_aether.txt
Normal file
9
res/cardsfolder/f/fold_into_aether.txt
Normal 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
|
||||
9
res/cardsfolder/g/gavony.txt
Normal file
9
res/cardsfolder/g/gavony.txt
Normal 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
|
||||
@@ -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
|
||||
12
res/cardsfolder/h/harsh_mercy.txt
Normal file
12
res/cardsfolder/h/harsh_mercy.txt
Normal 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
|
||||
9
res/cardsfolder/h/hedron_fields_of_agadeem.txt
Normal file
9
res/cardsfolder/h/hedron_fields_of_agadeem.txt
Normal 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
|
||||
10
res/cardsfolder/h/heroism.txt
Normal file
10
res/cardsfolder/h/heroism.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
7
res/cardsfolder/h/hinder.txt
Normal file
7
res/cardsfolder/h/hinder.txt
Normal 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
|
||||
9
res/cardsfolder/j/jhoira_of_the_ghitu_avatar.txt
Normal file
9
res/cardsfolder/j/jhoira_of_the_ghitu_avatar.txt
Normal 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
|
||||
@@ -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.
|
||||
|
||||
13
res/cardsfolder/k/kaboom!.txt
Normal file
13
res/cardsfolder/k/kaboom!.txt
Normal 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
|
||||
15
res/cardsfolder/k/kamahls_summons.txt
Normal file
15
res/cardsfolder/k/kamahls_summons.txt
Normal 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
|
||||
@@ -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.
|
||||
|
||||
8
res/cardsfolder/k/karmic_justice.txt
Normal file
8
res/cardsfolder/k/karmic_justice.txt
Normal 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
|
||||
12
res/cardsfolder/k/karona_false_god_avatar.txt
Normal file
12
res/cardsfolder/k/karona_false_god_avatar.txt
Normal 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
|
||||
10
res/cardsfolder/k/kessig.txt
Normal file
10
res/cardsfolder/k/kessig.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
11
res/cardsfolder/k/koskun_falls.txt
Normal file
11
res/cardsfolder/k/koskun_falls.txt
Normal 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
|
||||
10
res/cardsfolder/k/kresh_the_bloodbraided_avatar.txt
Normal file
10
res/cardsfolder/k/kresh_the_bloodbraided_avatar.txt
Normal 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
|
||||
11
res/cardsfolder/l/leech_bonder.txt
Normal file
11
res/cardsfolder/l/leech_bonder.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
10
res/cardsfolder/l/lullmage_mentor.txt
Normal file
10
res/cardsfolder/l/lullmage_mentor.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
9
res/cardsfolder/m/multanis_presence.txt
Normal file
9
res/cardsfolder/m/multanis_presence.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
12
res/cardsfolder/n/nephalia.txt
Normal file
12
res/cardsfolder/n/nephalia.txt
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
10
res/cardsfolder/p/peacekeeper_avatar.txt
Normal file
10
res/cardsfolder/p/peacekeeper_avatar.txt
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
11
res/cardsfolder/r/runed_halo.txt
Normal file
11
res/cardsfolder/r/runed_halo.txt
Normal 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
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
13
res/cardsfolder/s/sliver_queen_avatar.txt
Normal file
13
res/cardsfolder/s/sliver_queen_avatar.txt
Normal 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
|
||||
16
res/cardsfolder/s/soulbright_flamekin.txt
Normal file
16
res/cardsfolder/s/soulbright_flamekin.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
10
res/cardsfolder/s/stonehewer_giant_avatar.txt
Normal file
10
res/cardsfolder/s/stonehewer_giant_avatar.txt
Normal 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
|
||||
11
res/cardsfolder/s/swift_silence.txt
Normal file
11
res/cardsfolder/s/swift_silence.txt
Normal 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
|
||||
10
res/cardsfolder/t/the_zephyr_maze.txt
Normal file
10
res/cardsfolder/t/the_zephyr_maze.txt
Normal 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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
11
res/cardsfolder/v/vexing_shusher.txt
Normal file
11
res/cardsfolder/v/vexing_shusher.txt
Normal 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
|
||||
17
res/cardsfolder/w/warp_world.txt
Normal file
17
res/cardsfolder/w/warp_world.txt
Normal 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
|
||||
10
res/cardsfolder/w/weight_of_conscience.txt
Normal file
10
res/cardsfolder/w/weight_of_conscience.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
20
res/cardsfolder/z/zurs_weirding.txt
Normal file
20
res/cardsfolder/z/zurs_weirding.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
34
res/quest/duels/Preacher 3.dck
Normal file
34
res/quest/duels/Preacher 3.dck
Normal 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]
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -114,6 +114,4 @@ final class CardFace implements ICardFace {
|
||||
if ( variables == null ) variables = emptyMap;
|
||||
if ( null == nonAbilityText ) nonAbilityText = "";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
65
src/main/java/forge/card/ability/ai/BecomesBlockedAi.java
Normal file
65
src/main/java/forge/card/ability/ai/BecomesBlockedAi.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user