From dc02e5e52d80ebccfc91c9d82422a98bfbd99e6f Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 20 Jun 2024 11:16:26 +0200 Subject: [PATCH 01/15] Prowl: use sharesCreatureTypeWith --- forge-game/src/main/java/forge/game/player/Player.java | 8 ++------ .../forge/game/spellability/SpellAbilityRestriction.java | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 42908ea4965..2e5f694eb72 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -2132,12 +2132,8 @@ public class Player extends GameEntity implements Comparable { return lost; } - public final boolean hasProwl(final Set types) { - StringBuilder sb = new StringBuilder(); - for (String type : types) { - sb.append("Card.YouCtrl+").append(type).append(","); - } - return !game.getDamageDoneThisTurn(true, true, sb.toString(), "Player", null, this, null).isEmpty(); + public final boolean hasProwl(final SpellAbility sa) { + return !game.getDamageDoneThisTurn(true, true, "Card.YouCtrl+sharesCreatureTypeWith", "Player", sa.getHostCard(), this, sa).isEmpty(); } public final boolean hasFreerunning() { diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java index a1c2876bb62..512ef4e4ec4 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityRestriction.java @@ -440,7 +440,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { } } if (sa.isProwl()) { - if (!activator.hasProwl(c.getType().getCreatureTypes())) { + if (!activator.hasProwl(sa)) { return false; } } From f226826819bc42dd1843a09bd6b710bffd3d4d1f Mon Sep 17 00:00:00 2001 From: Chris H Date: Thu, 20 Jun 2024 09:20:10 -0400 Subject: [PATCH 02/15] Migrate mh3 (#5443) * Migrate MH3 from upcoming --------- Co-authored-by: Hans Mackowiak --- forge-gui/res/blockdata/blocks.txt | 1 + .../res/cardsfolder/{upcoming => a}/abstruse_appropriation.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/accursed_marauder.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/achilles_davenport.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/aerie_auxiliary.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/aether_refinery.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/aether_revolt.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/aether_spike.txt | 0 .../res/cardsfolder/{upcoming => a}/aggressive_biomancy.txt | 0 .../res/cardsfolder/{upcoming => a}/ajani_fells_the_godsire.txt | 0 .../{upcoming => a}/ajani_nacatl_pariah_ajani_nacatl_avenger.txt | 0 .../{upcoming => a}/albiorix_goose_tyrant_wild_goose_chase.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/altair_ibn_laahad.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/amped_raptor.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/amphibian_downpour.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/angelic_aberration.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/arcbound_condor.txt | 0 .../res/cardsfolder/{upcoming => a}/archway_of_innovation.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/arena_of_glory.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/argent_dais.txt | 0 .../res/cardsfolder/{upcoming => a}/ashling_flame_dancer.txt | 0 forge-gui/res/cardsfolder/{upcoming => a}/aurora_shifter.txt | 0 .../cardsfolder/{upcoming => a}/azlask_the_swelling_scourge.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/barrowgoyf.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/basking_broodscale.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/benthic_anomaly.txt | 0 .../res/cardsfolder/{upcoming => b}/bespoke_battlewagon.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/birthing_ritual.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/bismuth_mindrender.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/blaster_hulk.txt | 0 .../res/cardsfolder/{upcoming => b}/bloodbraid_challenger.txt | 0 .../{upcoming => b}/bloodsoaked_insight_sanguine_morass.txt | 0 .../res/cardsfolder/{upcoming => b}/blooming_cactusfolk.txt | 0 .../cardsfolder/{upcoming => b}/boggart_trawler_boggart_bog.txt | 0 .../res/cardsfolder/{upcoming => b}/bountiful_landscape.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/brainsurge.txt | 0 .../res/cardsfolder/{upcoming => b}/breaker_of_creation.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/breathe_your_last.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/bria_riptide_rogue.txt | 0 .../bridgeworks_battle_tanglespan_bridgeworks.txt | 0 forge-gui/res/cardsfolder/{upcoming => b}/broodmate_tyrant.txt | 0 .../cardsfolder/{upcoming => b}/byrke_long_ear_of_the_law.txt | 0 .../res/cardsfolder/{upcoming => c}/cathartic_operation.txt | 0 .../res/cardsfolder/{upcoming => c}/cayth_famed_mechanist.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/charitable_levy.txt | 0 .../res/cardsfolder/{upcoming => c}/chittering_dispatcher.txt | 0 .../res/cardsfolder/{upcoming => c}/chthonian_nightmare.txt | 0 .../res/cardsfolder/{upcoming => c}/cleopatra_exiled_pharaoh.txt | 0 .../res/cardsfolder/{upcoming => c}/collective_resistance.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/colossal_dreadmask.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/conduit_goblin.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/consign_to_memory.txt | 0 .../res/cardsfolder/{upcoming => c}/consuming_corruption.txt | 0 .../res/cardsfolder/{upcoming => c}/contaminated_landscape.txt | 0 .../res/cardsfolder/{upcoming => c}/conversion_apparatus.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/copy_land.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/copycrook.txt | 0 .../res/cardsfolder/{upcoming => c}/coram_the_undertaker.txt | 0 .../res/cardsfolder/{upcoming => c}/corrupted_shapeshifter.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/cranial_ram.txt | 0 forge-gui/res/cardsfolder/{upcoming => c}/cursed_wombat.txt | 0 .../res/cardsfolder/{upcoming => c}/cyclops_superconductor.txt | 0 .../res/cardsfolder/{upcoming => d}/deceptive_landscape.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/deem_inferior.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/depth_defiler.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/desert_warfare.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/detectives_phoenix.txt | 0 .../res/cardsfolder/{upcoming => d}/devourer_of_destiny.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/disa_the_restless.txt | 0 .../disciple_of_freyalise_garden_of_freyalise.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/disruptor_flute.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/dog_umbra.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/dreadmobile.txt | 0 .../res/cardsfolder/{upcoming => d}/dreamdrinker_vampire.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/dreamtide_whale.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/drossclaw.txt | 0 .../{upcoming => d}/drowner_of_truth_drowned_jungle.txt | 0 forge-gui/res/cardsfolder/{upcoming => d}/drownyard_lurker.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/echoes_of_eternity.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/eivor_battle_ready.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/eladamri_korvecdal.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/eldrazi_confluence.txt | 0 .../res/cardsfolder/{upcoming => e}/eldrazi_linebreaker.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/eldrazi_ravager.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/eldrazi_repurposer.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/eldritch_immunity.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/electrozoa.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/emerald_collector.txt | 0 .../res/cardsfolder/{upcoming => e}/emissary_of_soulfire.txt | 0 .../res/cardsfolder/{upcoming => e}/emperor_apatzec_intli_iv.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/emperor_of_bones.txt | 0 .../res/cardsfolder/{upcoming => e}/emrakul_the_world_anew.txt | 0 .../res/cardsfolder/{upcoming => e}/envoy_of_the_ancestors.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/essence_reliquary.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/etched_slith.txt | 0 .../res/cardsfolder/{upcoming => e}/etherium_pteramander.txt | 0 .../res/cardsfolder/{upcoming => e}/eviscerators_insight.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/evolution_witness.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/expanding_ooze.txt | 0 forge-gui/res/cardsfolder/{upcoming => e}/expel_the_unworthy.txt | 0 .../res/cardsfolder/{upcoming => e}/exterminator_magmarch.txt | 0 .../res/cardsfolder/{upcoming => e}/ezio_blade_of_vengeance.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/faithful_watchdog.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/fanatic_of_rhonas.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/fanged_flames.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/fangs_of_kalonia.txt | 0 .../cardsfolder/{upcoming => f}/fell_the_profane_fell_mire.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/fetid_gargantua.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/filigree_racer.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/final_act.txt | 0 .../res/cardsfolder/{upcoming => f}/flare_of_cultivation.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/flare_of_denial.txt | 0 .../res/cardsfolder/{upcoming => f}/flare_of_duplication.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/flare_of_fortitude.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/flare_of_malice.txt | 0 .../res/cardsfolder/{upcoming => f}/foreboding_landscape.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/fowl_strike.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/frogmyr_enforcer.txt | 0 forge-gui/res/cardsfolder/{upcoming => f}/furnace_hellkite.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/galvanic_discharge.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/ghostfire_slice.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/gift_of_the_viper.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/glaring_fleshraker.txt | 0 .../{upcoming => g}/glasswing_grace_age_graced_chapel.txt | 0 .../res/cardsfolder/{upcoming => g}/glimpse_the_impossible.txt | 0 .../res/cardsfolder/{upcoming => g}/gluttonous_hellkite.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/glyph_elemental.txt | 0 .../res/cardsfolder/{upcoming => g}/golden_tail_trainer.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/grave_expectations.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/gravedig.txt | 0 .../res/cardsfolder/{upcoming => g}/grenzo_crooked_jailer.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/grim_servant.txt | 0 .../grist_voracious_larva_grist_the_plague_swarm.txt | 0 .../cardsfolder/{upcoming => g}/guardian_of_the_forgotten.txt | 0 forge-gui/res/cardsfolder/{upcoming => g}/guide_of_souls.txt | 0 .../res/cardsfolder/{upcoming => h}/harbinger_of_the_seas.txt | 0 forge-gui/res/cardsfolder/{upcoming => h}/haystack.txt | 0 .../cardsfolder/{upcoming => h}/herigast_erupting_nullkite.txt | 0 forge-gui/res/cardsfolder/{upcoming => h}/hexgold_slith.txt | 0 forge-gui/res/cardsfolder/{upcoming => h}/hidden_blade.txt | 0 forge-gui/res/cardsfolder/{upcoming => h}/hideous_taskmaster.txt | 0 forge-gui/res/cardsfolder/{upcoming => h}/hope_ender_coatl.txt | 0 .../res/cardsfolder/{upcoming => h}/horizon_of_progress.txt | 0 .../res/cardsfolder/{upcoming => h}/horrid_shadowspinner.txt | 0 forge-gui/res/cardsfolder/{upcoming => h}/horrific_assault.txt | 0 .../res/cardsfolder/{upcoming => h}/hourglass_of_the_lost.txt | 0 forge-gui/res/cardsfolder/{upcoming => h}/hydra_trainer.txt | 0 .../hydroelectric_specimen_hydroelectric_laboratory.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/idol_of_false_gods.txt | 0 .../res/cardsfolder/{upcoming => i}/impetuous_lootmonger.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/imskir_iron_eater.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/indebted_spirit.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/infernal_captor.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/infested_thrinax.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/inspired_inventor.txt | 0 .../res/cardsfolder/{upcoming => i}/intruders_inquisition.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/inventors_axe.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/inversion_behemoth.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/invert_polarity.txt | 0 .../res/cardsfolder/{upcoming => i}/it_that_heralds_the_end.txt | 0 forge-gui/res/cardsfolder/{upcoming => i}/izzet_generatorium.txt | 0 .../res/cardsfolder/{upcoming => j}/jessie_zane_fangbringer.txt | 0 forge-gui/res/cardsfolder/{upcoming => j}/jet_collector.txt | 0 forge-gui/res/cardsfolder/{upcoming => j}/jolted_awake.txt | 0 forge-gui/res/cardsfolder/{upcoming => j}/jyoti_moag_ancient.txt | 0 .../res/cardsfolder/{upcoming => k}/kami_of_jealous_thirst.txt | 0 .../cardsfolder/{upcoming => k}/kozilek_the_broken_reality.txt | 0 forge-gui/res/cardsfolder/{upcoming => k}/kozileks_command.txt | 0 forge-gui/res/cardsfolder/{upcoming => k}/kozileks_unsealing.txt | 0 .../res/cardsfolder/{upcoming => k}/kudo_king_among_bears.txt | 0 forge-gui/res/cardsfolder/{upcoming => l}/lazotep_quarry.txt | 0 .../{upcoming => l}/legion_leadership_legion_stronghold.txt | 0 forge-gui/res/cardsfolder/{upcoming => l}/leonardo_da_vinci.txt | 0 forge-gui/res/cardsfolder/{upcoming => l}/lethal_throwdown.txt | 0 forge-gui/res/cardsfolder/{upcoming => l}/lion_umbra.txt | 0 .../res/cardsfolder/{upcoming => l}/localized_destruction.txt | 0 .../cardsfolder/{upcoming => l}/lumra_bellow_of_the_woods.txt | 0 .../res/cardsfolder/{upcoming => m}/mabel_heir_to_cragflame.txt | 0 .../cardsfolder/{upcoming => m}/magar_of_the_magic_strings.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/malevolent_rumble.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/mandibular_kite.txt | 0 .../res/cardsfolder/{upcoming => m}/march_from_velis_vel.txt | 0 .../res/cardsfolder/{upcoming => m}/marionette_apprentice.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/metastatic_evangel.txt | 0 .../res/cardsfolder/{upcoming => m}/mindless_conscription.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/mogg_mob.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/molten_gatekeeper.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/monstrous_vortex.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/monumental_henge.txt | 0 .../res/cardsfolder/{upcoming => m}/muster_the_departed.txt | 0 forge-gui/res/cardsfolder/{upcoming => m}/mutated_cultist.txt | 0 forge-gui/res/cardsfolder/{upcoming => n}/nadu_winged_wisdom.txt | 0 .../res/cardsfolder/{upcoming => n}/nashi_illusion_gadgeteer.txt | 0 forge-gui/res/cardsfolder/{upcoming => n}/necrodominance.txt | 0 forge-gui/res/cardsfolder/{upcoming => n}/nethergoyf.txt | 0 forge-gui/res/cardsfolder/{upcoming => n}/nightshade_dryad.txt | 0 .../res/cardsfolder/{upcoming => n}/null_elemental_blast.txt | 0 forge-gui/res/cardsfolder/{upcoming => n}/nulldrifter.txt | 0 forge-gui/res/cardsfolder/{upcoming => n}/nyxborn_hydra.txt | 0 forge-gui/res/cardsfolder/{upcoming => n}/nyxborn_unicorn.txt | 0 forge-gui/res/cardsfolder/{upcoming => o}/obstinate_gargoyle.txt | 0 forge-gui/res/cardsfolder/{upcoming => o}/ocelot_pride.txt | 0 .../res/cardsfolder/{upcoming => o}/omo_queen_of_vesuva.txt | 0 forge-gui/res/cardsfolder/{upcoming => o}/ondu_knotmaster.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/party_thrasher.txt | 0 .../res/cardsfolder/{upcoming => p}/path_of_annihilation.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/pearl_collector.txt | 0 .../cardsfolder/{upcoming => p}/pearl_ear_imperial_advisor.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/perilous_landscape.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/petrifying_meddler.txt | 0 .../cardsfolder/{upcoming => p}/phelia_exuberant_shepherd.txt | 0 .../cardsfolder/{upcoming => p}/phlage_titan_of_fires_fury.txt | 0 .../res/cardsfolder/{upcoming => p}/phyrexian_ironworks.txt | 0 .../cardsfolder/{upcoming => p}/pinnacle_monk_mystic_peak.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/planar_genesis.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/planar_nexus.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/polygoyf.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/powerbalance.txt | 0 .../res/cardsfolder/{upcoming => p}/prairie_survivalist.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/primal_prayers.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/propagator_drone.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/proud_pack_rhino.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/psychic_frog.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/pyretic_rebirth.txt | 0 forge-gui/res/cardsfolder/{upcoming => p}/pyrogoyf.txt | 0 .../res/cardsfolder/{upcoming => q}/quest_for_the_necropolis.txt | 0 .../cardsfolder/{upcoming => r}/ral_and_the_implicit_maze.txt | 0 .../{upcoming => r}/ral_monsoon_mage_ral_leyline_prodigy.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/rampant_frogantua.txt | 0 .../cardsfolder/{upcoming => r}/rankle_pitiless_trickster.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/razorfield_ripper.txt | 0 .../{upcoming => r}/razorgrass_ambush_razorgrass_field.txt | 0 .../res/cardsfolder/{upcoming => r}/reckless_pyrosurfer.txt | 0 .../res/cardsfolder/{upcoming => r}/refurbished_familiar.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/reiterating_bolt.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/resolute_rejection.txt | 0 .../res/cardsfolder/{upcoming => r}/retrofitted_transmogrant.txt | 0 .../{upcoming => r}/revitalizing_repast_old_growth_grove.txt | 0 .../res/cardsfolder/{upcoming => r}/riddle_gate_gargoyle.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/ripples_of_undeath.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/roil_cartographer.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/rosecot_knight.txt | 0 .../res/cardsfolder/{upcoming => r}/rosheen_roaring_prophet.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/ruby_collector.txt | 0 forge-gui/res/cardsfolder/{upcoming => r}/runecarved_obelisk.txt | 0 .../{upcoming => r}/rush_of_inspiration_crackling_falls.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/sage_of_the_maze.txt | 0 .../res/cardsfolder/{upcoming => s}/sage_of_the_unknowable.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/saint_elenda.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/salvation_colossus.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/sapphire_collector.txt | 0 .../res/cardsfolder/{upcoming => s}/sarpadian_simulacrum.txt | 0 .../res/cardsfolder/{upcoming => s}/satya_aetherflux_genius.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/sawhorn_nemesis.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/scurrilous_sentry.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/scurry_of_gremlins.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/seething_landscape.txt | 0 .../res/cardsfolder/{upcoming => s}/selective_obliteration.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/serum_visionary.txt | 0 .../res/cardsfolder/{upcoming => s}/shadow_of_the_second_sun.txt | 0 .../res/cardsfolder/{upcoming => s}/shattered_landscape.txt | 0 .../res/cardsfolder/{upcoming => s}/sheltering_landscape.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/shifting_woodland.txt | 0 .../cardsfolder/{upcoming => s}/shilgengar_sire_of_famine.txt | 0 .../res/cardsfolder/{upcoming => s}/siege_gang_lieutenant.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/siege_smash.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/signature_slam.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/silent_extraction.txt | 0 .../res/cardsfolder/{upcoming => s}/silverquill_lecturer.txt | 0 .../{upcoming => s}/sink_into_stupor_soporific_springs.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/six.txt | 0 .../res/cardsfolder/{upcoming => s}/skittering_precursor.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/skoa_embermage.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/smelted_chargebug.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/snapping_voidcraw.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/sneaky_snacker.txt | 0 .../res/cardsfolder/{upcoming => s}/snow_covered_wastes.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/solar_transformer.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/solitary_defiance.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/solstice_zealot.txt | 0 .../sorin_of_house_markov_sorin_ravenous_neonate.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/sowing_mycospawn.txt | 0 .../res/cardsfolder/{upcoming => s}/spawn_gang_commander.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/spawnbed_protector.txt | 0 .../res/cardsfolder/{upcoming => s}/sphinx_of_the_revelation.txt | 0 .../res/cardsfolder/{upcoming => s}/springheart_nantuko.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/spymasters_vault.txt | 0 .../res/cardsfolder/{upcoming => s}/stalwart_realmwarden.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/static_prison.txt | 0 .../res/cardsfolder/{upcoming => s}/stone_idol_generator.txt | 0 .../strength_of_the_harvest_haven_of_the_harvest.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/strix_serenade.txt | 0 .../{upcoming => s}/stump_stomp_burnwillow_clearing.txt | 0 .../{upcoming => s}/sundering_eruption_volcanic_fissure.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/sunken_palace.txt | 0 .../{upcoming => s}/suppression_ray_orderly_plaza.txt | 0 forge-gui/res/cardsfolder/{upcoming => s}/switchgrass_grazer.txt | 0 .../res/cardsfolder/{upcoming => t}/talon_gates_of_madara.txt | 0 .../tamiyo_inquisitive_student_tamiyo_seasoned_scholar.txt | 0 .../{upcoming => t}/tamiyo_meets_the_story_circle.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/tarmogoyf_nest.txt | 0 .../res/cardsfolder/{upcoming => t}/temperamental_oozewagg.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/tempest_harvester.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/tempt_with_mayhem.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/territory_culler.txt | 0 .../cardsfolder/{upcoming => t}/teysa_of_the_ghost_council.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/the_animus.txt | 0 .../res/cardsfolder/{upcoming => t}/the_creation_of_avacyn.txt | 0 .../res/cardsfolder/{upcoming => t}/the_hunger_tide_rises.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/the_necrobloom.txt | 0 .../res/cardsfolder/{upcoming => t}/the_spear_of_leonidas.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/thief_of_existence.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/thieving_aven.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/thriving_skyclaw.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/titans_vanguard.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/tranquil_landscape.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/trenchpost.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/tricksters_elk.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/triton_wavebreaker.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/triumphant_getaway.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/tune_the_narrative.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/twins_of_discord.txt | 0 forge-gui/res/cardsfolder/{upcoming => t}/twisted_landscape.txt | 0 .../res/cardsfolder/{upcoming => t}/twisted_riddlekeeper.txt | 0 forge-gui/res/cardsfolder/{upcoming => u}/ugins_binding.txt | 0 forge-gui/res/cardsfolder/{upcoming => u}/ugins_labyrinth.txt | 0 .../res/cardsfolder/{upcoming => u}/ulalek_fused_atrocity.txt | 0 forge-gui/res/cardsfolder/{upcoming => u}/ulamog_the_defiler.txt | 0 forge-gui/res/cardsfolder/{upcoming => u}/ulamogs_dreadsire.txt | 0 .../res/cardsfolder/{upcoming => u}/unfathomable_truths.txt | 0 forge-gui/res/cardsfolder/{upcoming => u}/unstable_amulet.txt | 0 forge-gui/res/cardsfolder/{upcoming => u}/urzas_cave.txt | 0 .../res/cardsfolder/{upcoming => u}/utter_insignificance.txt | 0 forge-gui/res/cardsfolder/{upcoming => v}/vexing_bauble.txt | 0 forge-gui/res/cardsfolder/{upcoming => v}/voidpouncer.txt | 0 .../res/cardsfolder/{upcoming => v}/volatile_stormdrake.txt | 0 forge-gui/res/cardsfolder/{upcoming => v}/voltstorm_angel.txt | 0 .../res/cardsfolder/{upcoming => v}/vona_de_ledo_the_antifex.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/wagon_wrecker.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/warped_tusker.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/warren_soultrader.txt | 0 .../res/cardsfolder/{upcoming => w}/wastescape_battlemage.txt | 0 .../{upcoming => w}/waterlogged_teachings_inundated_archive.txt | 0 .../res/cardsfolder/{upcoming => w}/weave_the_nightmare.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/wheel_of_potential.txt | 0 .../res/cardsfolder/{upcoming => w}/white_orchid_phantom.txt | 0 .../res/cardsfolder/{upcoming => w}/wight_of_the_reliquary.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/wing_it.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/winter_moon.txt | 0 .../{upcoming => w}/witch_enchanter_witch_blessed_meadow.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/wither_and_bloom.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/wonderscape_sage.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/wrath_of_the_skies.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/writhing_chrysalis.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/wumpus_aberration.txt | 0 forge-gui/res/cardsfolder/{upcoming => w}/wurmcoil_larva.txt | 0 356 files changed, 1 insertion(+) rename forge-gui/res/cardsfolder/{upcoming => a}/abstruse_appropriation.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/accursed_marauder.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/achilles_davenport.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/aerie_auxiliary.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/aether_refinery.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/aether_revolt.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/aether_spike.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/aggressive_biomancy.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/ajani_fells_the_godsire.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/ajani_nacatl_pariah_ajani_nacatl_avenger.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/albiorix_goose_tyrant_wild_goose_chase.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/altair_ibn_laahad.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/amped_raptor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/amphibian_downpour.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/angelic_aberration.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/arcbound_condor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/archway_of_innovation.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/arena_of_glory.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/argent_dais.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/ashling_flame_dancer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/aurora_shifter.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => a}/azlask_the_swelling_scourge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/barrowgoyf.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/basking_broodscale.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/benthic_anomaly.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bespoke_battlewagon.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/birthing_ritual.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bismuth_mindrender.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/blaster_hulk.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bloodbraid_challenger.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bloodsoaked_insight_sanguine_morass.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/blooming_cactusfolk.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/boggart_trawler_boggart_bog.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bountiful_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/brainsurge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/breaker_of_creation.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/breathe_your_last.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bria_riptide_rogue.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/bridgeworks_battle_tanglespan_bridgeworks.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/broodmate_tyrant.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => b}/byrke_long_ear_of_the_law.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cathartic_operation.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cayth_famed_mechanist.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/charitable_levy.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/chittering_dispatcher.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/chthonian_nightmare.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cleopatra_exiled_pharaoh.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/collective_resistance.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/colossal_dreadmask.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/conduit_goblin.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/consign_to_memory.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/consuming_corruption.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/contaminated_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/conversion_apparatus.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/copy_land.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/copycrook.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/coram_the_undertaker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/corrupted_shapeshifter.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cranial_ram.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cursed_wombat.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => c}/cyclops_superconductor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/deceptive_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/deem_inferior.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/depth_defiler.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/desert_warfare.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/detectives_phoenix.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/devourer_of_destiny.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/disa_the_restless.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/disciple_of_freyalise_garden_of_freyalise.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/disruptor_flute.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dog_umbra.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dreadmobile.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dreamdrinker_vampire.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/dreamtide_whale.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/drossclaw.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/drowner_of_truth_drowned_jungle.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => d}/drownyard_lurker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/echoes_of_eternity.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eivor_battle_ready.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eladamri_korvecdal.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eldrazi_confluence.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eldrazi_linebreaker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eldrazi_ravager.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eldrazi_repurposer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eldritch_immunity.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/electrozoa.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/emerald_collector.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/emissary_of_soulfire.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/emperor_apatzec_intli_iv.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/emperor_of_bones.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/emrakul_the_world_anew.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/envoy_of_the_ancestors.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/essence_reliquary.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/etched_slith.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/etherium_pteramander.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/eviscerators_insight.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/evolution_witness.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/expanding_ooze.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/expel_the_unworthy.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/exterminator_magmarch.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => e}/ezio_blade_of_vengeance.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/faithful_watchdog.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fanatic_of_rhonas.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fanged_flames.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fangs_of_kalonia.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fell_the_profane_fell_mire.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fetid_gargantua.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/filigree_racer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/final_act.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/flare_of_cultivation.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/flare_of_denial.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/flare_of_duplication.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/flare_of_fortitude.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/flare_of_malice.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/foreboding_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/fowl_strike.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/frogmyr_enforcer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => f}/furnace_hellkite.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/galvanic_discharge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/ghostfire_slice.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gift_of_the_viper.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/glaring_fleshraker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/glasswing_grace_age_graced_chapel.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/glimpse_the_impossible.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gluttonous_hellkite.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/glyph_elemental.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/golden_tail_trainer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/grave_expectations.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/gravedig.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/grenzo_crooked_jailer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/grim_servant.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/grist_voracious_larva_grist_the_plague_swarm.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/guardian_of_the_forgotten.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => g}/guide_of_souls.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/harbinger_of_the_seas.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/haystack.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/herigast_erupting_nullkite.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hexgold_slith.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hidden_blade.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hideous_taskmaster.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hope_ender_coatl.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/horizon_of_progress.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/horrid_shadowspinner.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/horrific_assault.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hourglass_of_the_lost.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hydra_trainer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => h}/hydroelectric_specimen_hydroelectric_laboratory.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/idol_of_false_gods.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/impetuous_lootmonger.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/imskir_iron_eater.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/indebted_spirit.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/infernal_captor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/infested_thrinax.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/inspired_inventor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/intruders_inquisition.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/inventors_axe.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/inversion_behemoth.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/invert_polarity.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/it_that_heralds_the_end.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => i}/izzet_generatorium.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => j}/jessie_zane_fangbringer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => j}/jet_collector.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => j}/jolted_awake.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => j}/jyoti_moag_ancient.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kami_of_jealous_thirst.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kozilek_the_broken_reality.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kozileks_command.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kozileks_unsealing.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => k}/kudo_king_among_bears.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/lazotep_quarry.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/legion_leadership_legion_stronghold.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/leonardo_da_vinci.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/lethal_throwdown.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/lion_umbra.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/localized_destruction.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => l}/lumra_bellow_of_the_woods.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mabel_heir_to_cragflame.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/magar_of_the_magic_strings.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/malevolent_rumble.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mandibular_kite.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/march_from_velis_vel.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/marionette_apprentice.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/metastatic_evangel.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mindless_conscription.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mogg_mob.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/molten_gatekeeper.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/monstrous_vortex.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/monumental_henge.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/muster_the_departed.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => m}/mutated_cultist.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/nadu_winged_wisdom.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/nashi_illusion_gadgeteer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/necrodominance.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/nethergoyf.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/nightshade_dryad.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/null_elemental_blast.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/nulldrifter.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/nyxborn_hydra.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => n}/nyxborn_unicorn.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => o}/obstinate_gargoyle.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => o}/ocelot_pride.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => o}/omo_queen_of_vesuva.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => o}/ondu_knotmaster.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/party_thrasher.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/path_of_annihilation.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/pearl_collector.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/pearl_ear_imperial_advisor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/perilous_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/petrifying_meddler.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/phelia_exuberant_shepherd.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/phlage_titan_of_fires_fury.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/phyrexian_ironworks.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/pinnacle_monk_mystic_peak.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/planar_genesis.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/planar_nexus.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/polygoyf.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/powerbalance.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/prairie_survivalist.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/primal_prayers.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/propagator_drone.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/proud_pack_rhino.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/psychic_frog.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/pyretic_rebirth.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => p}/pyrogoyf.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => q}/quest_for_the_necropolis.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/ral_and_the_implicit_maze.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/ral_monsoon_mage_ral_leyline_prodigy.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rampant_frogantua.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rankle_pitiless_trickster.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/razorfield_ripper.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/razorgrass_ambush_razorgrass_field.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/reckless_pyrosurfer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/refurbished_familiar.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/reiterating_bolt.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/resolute_rejection.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/retrofitted_transmogrant.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/revitalizing_repast_old_growth_grove.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/riddle_gate_gargoyle.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/ripples_of_undeath.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/roil_cartographer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rosecot_knight.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rosheen_roaring_prophet.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/ruby_collector.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/runecarved_obelisk.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => r}/rush_of_inspiration_crackling_falls.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sage_of_the_maze.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sage_of_the_unknowable.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/saint_elenda.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/salvation_colossus.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sapphire_collector.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sarpadian_simulacrum.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/satya_aetherflux_genius.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sawhorn_nemesis.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/scurrilous_sentry.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/scurry_of_gremlins.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/seething_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/selective_obliteration.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/serum_visionary.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/shadow_of_the_second_sun.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/shattered_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sheltering_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/shifting_woodland.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/shilgengar_sire_of_famine.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/siege_gang_lieutenant.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/siege_smash.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/signature_slam.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/silent_extraction.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/silverquill_lecturer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sink_into_stupor_soporific_springs.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/six.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/skittering_precursor.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/skoa_embermage.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/smelted_chargebug.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/snapping_voidcraw.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sneaky_snacker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/snow_covered_wastes.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/solar_transformer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/solitary_defiance.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/solstice_zealot.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sorin_of_house_markov_sorin_ravenous_neonate.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sowing_mycospawn.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/spawn_gang_commander.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/spawnbed_protector.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sphinx_of_the_revelation.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/springheart_nantuko.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/spymasters_vault.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/stalwart_realmwarden.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/static_prison.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/stone_idol_generator.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/strength_of_the_harvest_haven_of_the_harvest.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/strix_serenade.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/stump_stomp_burnwillow_clearing.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sundering_eruption_volcanic_fissure.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/sunken_palace.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/suppression_ray_orderly_plaza.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => s}/switchgrass_grazer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/talon_gates_of_madara.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tamiyo_inquisitive_student_tamiyo_seasoned_scholar.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tamiyo_meets_the_story_circle.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tarmogoyf_nest.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/temperamental_oozewagg.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tempest_harvester.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tempt_with_mayhem.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/territory_culler.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/teysa_of_the_ghost_council.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_animus.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_creation_of_avacyn.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_hunger_tide_rises.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_necrobloom.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/the_spear_of_leonidas.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/thief_of_existence.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/thieving_aven.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/thriving_skyclaw.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/titans_vanguard.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tranquil_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/trenchpost.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tricksters_elk.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/triton_wavebreaker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/triumphant_getaway.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/tune_the_narrative.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/twins_of_discord.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/twisted_landscape.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => t}/twisted_riddlekeeper.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/ugins_binding.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/ugins_labyrinth.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/ulalek_fused_atrocity.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/ulamog_the_defiler.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/ulamogs_dreadsire.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/unfathomable_truths.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/unstable_amulet.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/urzas_cave.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => u}/utter_insignificance.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/vexing_bauble.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/voidpouncer.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/volatile_stormdrake.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/voltstorm_angel.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => v}/vona_de_ledo_the_antifex.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wagon_wrecker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/warped_tusker.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/warren_soultrader.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wastescape_battlemage.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/waterlogged_teachings_inundated_archive.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/weave_the_nightmare.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wheel_of_potential.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/white_orchid_phantom.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wight_of_the_reliquary.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wing_it.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/winter_moon.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/witch_enchanter_witch_blessed_meadow.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wither_and_bloom.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wonderscape_sage.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wrath_of_the_skies.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/writhing_chrysalis.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wumpus_aberration.txt (100%) rename forge-gui/res/cardsfolder/{upcoming => w}/wurmcoil_larva.txt (100%) diff --git a/forge-gui/res/blockdata/blocks.txt b/forge-gui/res/blockdata/blocks.txt index ff3fd09b4b2..f48de2eb6d2 100644 --- a/forge-gui/res/blockdata/blocks.txt +++ b/forge-gui/res/blockdata/blocks.txt @@ -132,3 +132,4 @@ Alchemy: Ixalan, 3/6/LCI, YLCI Ravnica Remastered, 3/6/RAV, RVR Murders at Karlov Manor, 3/6/MKM, MKM Outlaws of Thunder Junction, 3/6/OTJ, OTJ +Modern Horizons 3, 3/6/MH3, MH3 \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/abstruse_appropriation.txt b/forge-gui/res/cardsfolder/a/abstruse_appropriation.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/abstruse_appropriation.txt rename to forge-gui/res/cardsfolder/a/abstruse_appropriation.txt diff --git a/forge-gui/res/cardsfolder/upcoming/accursed_marauder.txt b/forge-gui/res/cardsfolder/a/accursed_marauder.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/accursed_marauder.txt rename to forge-gui/res/cardsfolder/a/accursed_marauder.txt diff --git a/forge-gui/res/cardsfolder/upcoming/achilles_davenport.txt b/forge-gui/res/cardsfolder/a/achilles_davenport.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/achilles_davenport.txt rename to forge-gui/res/cardsfolder/a/achilles_davenport.txt diff --git a/forge-gui/res/cardsfolder/upcoming/aerie_auxiliary.txt b/forge-gui/res/cardsfolder/a/aerie_auxiliary.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/aerie_auxiliary.txt rename to forge-gui/res/cardsfolder/a/aerie_auxiliary.txt diff --git a/forge-gui/res/cardsfolder/upcoming/aether_refinery.txt b/forge-gui/res/cardsfolder/a/aether_refinery.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/aether_refinery.txt rename to forge-gui/res/cardsfolder/a/aether_refinery.txt diff --git a/forge-gui/res/cardsfolder/upcoming/aether_revolt.txt b/forge-gui/res/cardsfolder/a/aether_revolt.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/aether_revolt.txt rename to forge-gui/res/cardsfolder/a/aether_revolt.txt diff --git a/forge-gui/res/cardsfolder/upcoming/aether_spike.txt b/forge-gui/res/cardsfolder/a/aether_spike.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/aether_spike.txt rename to forge-gui/res/cardsfolder/a/aether_spike.txt diff --git a/forge-gui/res/cardsfolder/upcoming/aggressive_biomancy.txt b/forge-gui/res/cardsfolder/a/aggressive_biomancy.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/aggressive_biomancy.txt rename to forge-gui/res/cardsfolder/a/aggressive_biomancy.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ajani_fells_the_godsire.txt b/forge-gui/res/cardsfolder/a/ajani_fells_the_godsire.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ajani_fells_the_godsire.txt rename to forge-gui/res/cardsfolder/a/ajani_fells_the_godsire.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ajani_nacatl_pariah_ajani_nacatl_avenger.txt b/forge-gui/res/cardsfolder/a/ajani_nacatl_pariah_ajani_nacatl_avenger.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ajani_nacatl_pariah_ajani_nacatl_avenger.txt rename to forge-gui/res/cardsfolder/a/ajani_nacatl_pariah_ajani_nacatl_avenger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/albiorix_goose_tyrant_wild_goose_chase.txt b/forge-gui/res/cardsfolder/a/albiorix_goose_tyrant_wild_goose_chase.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/albiorix_goose_tyrant_wild_goose_chase.txt rename to forge-gui/res/cardsfolder/a/albiorix_goose_tyrant_wild_goose_chase.txt diff --git a/forge-gui/res/cardsfolder/upcoming/altair_ibn_laahad.txt b/forge-gui/res/cardsfolder/a/altair_ibn_laahad.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/altair_ibn_laahad.txt rename to forge-gui/res/cardsfolder/a/altair_ibn_laahad.txt diff --git a/forge-gui/res/cardsfolder/upcoming/amped_raptor.txt b/forge-gui/res/cardsfolder/a/amped_raptor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/amped_raptor.txt rename to forge-gui/res/cardsfolder/a/amped_raptor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/amphibian_downpour.txt b/forge-gui/res/cardsfolder/a/amphibian_downpour.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/amphibian_downpour.txt rename to forge-gui/res/cardsfolder/a/amphibian_downpour.txt diff --git a/forge-gui/res/cardsfolder/upcoming/angelic_aberration.txt b/forge-gui/res/cardsfolder/a/angelic_aberration.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/angelic_aberration.txt rename to forge-gui/res/cardsfolder/a/angelic_aberration.txt diff --git a/forge-gui/res/cardsfolder/upcoming/arcbound_condor.txt b/forge-gui/res/cardsfolder/a/arcbound_condor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/arcbound_condor.txt rename to forge-gui/res/cardsfolder/a/arcbound_condor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/archway_of_innovation.txt b/forge-gui/res/cardsfolder/a/archway_of_innovation.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/archway_of_innovation.txt rename to forge-gui/res/cardsfolder/a/archway_of_innovation.txt diff --git a/forge-gui/res/cardsfolder/upcoming/arena_of_glory.txt b/forge-gui/res/cardsfolder/a/arena_of_glory.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/arena_of_glory.txt rename to forge-gui/res/cardsfolder/a/arena_of_glory.txt diff --git a/forge-gui/res/cardsfolder/upcoming/argent_dais.txt b/forge-gui/res/cardsfolder/a/argent_dais.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/argent_dais.txt rename to forge-gui/res/cardsfolder/a/argent_dais.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ashling_flame_dancer.txt b/forge-gui/res/cardsfolder/a/ashling_flame_dancer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ashling_flame_dancer.txt rename to forge-gui/res/cardsfolder/a/ashling_flame_dancer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/aurora_shifter.txt b/forge-gui/res/cardsfolder/a/aurora_shifter.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/aurora_shifter.txt rename to forge-gui/res/cardsfolder/a/aurora_shifter.txt diff --git a/forge-gui/res/cardsfolder/upcoming/azlask_the_swelling_scourge.txt b/forge-gui/res/cardsfolder/a/azlask_the_swelling_scourge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/azlask_the_swelling_scourge.txt rename to forge-gui/res/cardsfolder/a/azlask_the_swelling_scourge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/barrowgoyf.txt b/forge-gui/res/cardsfolder/b/barrowgoyf.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/barrowgoyf.txt rename to forge-gui/res/cardsfolder/b/barrowgoyf.txt diff --git a/forge-gui/res/cardsfolder/upcoming/basking_broodscale.txt b/forge-gui/res/cardsfolder/b/basking_broodscale.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/basking_broodscale.txt rename to forge-gui/res/cardsfolder/b/basking_broodscale.txt diff --git a/forge-gui/res/cardsfolder/upcoming/benthic_anomaly.txt b/forge-gui/res/cardsfolder/b/benthic_anomaly.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/benthic_anomaly.txt rename to forge-gui/res/cardsfolder/b/benthic_anomaly.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bespoke_battlewagon.txt b/forge-gui/res/cardsfolder/b/bespoke_battlewagon.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bespoke_battlewagon.txt rename to forge-gui/res/cardsfolder/b/bespoke_battlewagon.txt diff --git a/forge-gui/res/cardsfolder/upcoming/birthing_ritual.txt b/forge-gui/res/cardsfolder/b/birthing_ritual.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/birthing_ritual.txt rename to forge-gui/res/cardsfolder/b/birthing_ritual.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bismuth_mindrender.txt b/forge-gui/res/cardsfolder/b/bismuth_mindrender.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bismuth_mindrender.txt rename to forge-gui/res/cardsfolder/b/bismuth_mindrender.txt diff --git a/forge-gui/res/cardsfolder/upcoming/blaster_hulk.txt b/forge-gui/res/cardsfolder/b/blaster_hulk.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/blaster_hulk.txt rename to forge-gui/res/cardsfolder/b/blaster_hulk.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bloodbraid_challenger.txt b/forge-gui/res/cardsfolder/b/bloodbraid_challenger.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bloodbraid_challenger.txt rename to forge-gui/res/cardsfolder/b/bloodbraid_challenger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bloodsoaked_insight_sanguine_morass.txt b/forge-gui/res/cardsfolder/b/bloodsoaked_insight_sanguine_morass.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bloodsoaked_insight_sanguine_morass.txt rename to forge-gui/res/cardsfolder/b/bloodsoaked_insight_sanguine_morass.txt diff --git a/forge-gui/res/cardsfolder/upcoming/blooming_cactusfolk.txt b/forge-gui/res/cardsfolder/b/blooming_cactusfolk.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/blooming_cactusfolk.txt rename to forge-gui/res/cardsfolder/b/blooming_cactusfolk.txt diff --git a/forge-gui/res/cardsfolder/upcoming/boggart_trawler_boggart_bog.txt b/forge-gui/res/cardsfolder/b/boggart_trawler_boggart_bog.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/boggart_trawler_boggart_bog.txt rename to forge-gui/res/cardsfolder/b/boggart_trawler_boggart_bog.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bountiful_landscape.txt b/forge-gui/res/cardsfolder/b/bountiful_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bountiful_landscape.txt rename to forge-gui/res/cardsfolder/b/bountiful_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/brainsurge.txt b/forge-gui/res/cardsfolder/b/brainsurge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/brainsurge.txt rename to forge-gui/res/cardsfolder/b/brainsurge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/breaker_of_creation.txt b/forge-gui/res/cardsfolder/b/breaker_of_creation.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/breaker_of_creation.txt rename to forge-gui/res/cardsfolder/b/breaker_of_creation.txt diff --git a/forge-gui/res/cardsfolder/upcoming/breathe_your_last.txt b/forge-gui/res/cardsfolder/b/breathe_your_last.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/breathe_your_last.txt rename to forge-gui/res/cardsfolder/b/breathe_your_last.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bria_riptide_rogue.txt b/forge-gui/res/cardsfolder/b/bria_riptide_rogue.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bria_riptide_rogue.txt rename to forge-gui/res/cardsfolder/b/bria_riptide_rogue.txt diff --git a/forge-gui/res/cardsfolder/upcoming/bridgeworks_battle_tanglespan_bridgeworks.txt b/forge-gui/res/cardsfolder/b/bridgeworks_battle_tanglespan_bridgeworks.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/bridgeworks_battle_tanglespan_bridgeworks.txt rename to forge-gui/res/cardsfolder/b/bridgeworks_battle_tanglespan_bridgeworks.txt diff --git a/forge-gui/res/cardsfolder/upcoming/broodmate_tyrant.txt b/forge-gui/res/cardsfolder/b/broodmate_tyrant.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/broodmate_tyrant.txt rename to forge-gui/res/cardsfolder/b/broodmate_tyrant.txt diff --git a/forge-gui/res/cardsfolder/upcoming/byrke_long_ear_of_the_law.txt b/forge-gui/res/cardsfolder/b/byrke_long_ear_of_the_law.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/byrke_long_ear_of_the_law.txt rename to forge-gui/res/cardsfolder/b/byrke_long_ear_of_the_law.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cathartic_operation.txt b/forge-gui/res/cardsfolder/c/cathartic_operation.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cathartic_operation.txt rename to forge-gui/res/cardsfolder/c/cathartic_operation.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cayth_famed_mechanist.txt b/forge-gui/res/cardsfolder/c/cayth_famed_mechanist.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cayth_famed_mechanist.txt rename to forge-gui/res/cardsfolder/c/cayth_famed_mechanist.txt diff --git a/forge-gui/res/cardsfolder/upcoming/charitable_levy.txt b/forge-gui/res/cardsfolder/c/charitable_levy.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/charitable_levy.txt rename to forge-gui/res/cardsfolder/c/charitable_levy.txt diff --git a/forge-gui/res/cardsfolder/upcoming/chittering_dispatcher.txt b/forge-gui/res/cardsfolder/c/chittering_dispatcher.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/chittering_dispatcher.txt rename to forge-gui/res/cardsfolder/c/chittering_dispatcher.txt diff --git a/forge-gui/res/cardsfolder/upcoming/chthonian_nightmare.txt b/forge-gui/res/cardsfolder/c/chthonian_nightmare.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/chthonian_nightmare.txt rename to forge-gui/res/cardsfolder/c/chthonian_nightmare.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cleopatra_exiled_pharaoh.txt b/forge-gui/res/cardsfolder/c/cleopatra_exiled_pharaoh.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cleopatra_exiled_pharaoh.txt rename to forge-gui/res/cardsfolder/c/cleopatra_exiled_pharaoh.txt diff --git a/forge-gui/res/cardsfolder/upcoming/collective_resistance.txt b/forge-gui/res/cardsfolder/c/collective_resistance.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/collective_resistance.txt rename to forge-gui/res/cardsfolder/c/collective_resistance.txt diff --git a/forge-gui/res/cardsfolder/upcoming/colossal_dreadmask.txt b/forge-gui/res/cardsfolder/c/colossal_dreadmask.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/colossal_dreadmask.txt rename to forge-gui/res/cardsfolder/c/colossal_dreadmask.txt diff --git a/forge-gui/res/cardsfolder/upcoming/conduit_goblin.txt b/forge-gui/res/cardsfolder/c/conduit_goblin.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/conduit_goblin.txt rename to forge-gui/res/cardsfolder/c/conduit_goblin.txt diff --git a/forge-gui/res/cardsfolder/upcoming/consign_to_memory.txt b/forge-gui/res/cardsfolder/c/consign_to_memory.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/consign_to_memory.txt rename to forge-gui/res/cardsfolder/c/consign_to_memory.txt diff --git a/forge-gui/res/cardsfolder/upcoming/consuming_corruption.txt b/forge-gui/res/cardsfolder/c/consuming_corruption.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/consuming_corruption.txt rename to forge-gui/res/cardsfolder/c/consuming_corruption.txt diff --git a/forge-gui/res/cardsfolder/upcoming/contaminated_landscape.txt b/forge-gui/res/cardsfolder/c/contaminated_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/contaminated_landscape.txt rename to forge-gui/res/cardsfolder/c/contaminated_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/conversion_apparatus.txt b/forge-gui/res/cardsfolder/c/conversion_apparatus.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/conversion_apparatus.txt rename to forge-gui/res/cardsfolder/c/conversion_apparatus.txt diff --git a/forge-gui/res/cardsfolder/upcoming/copy_land.txt b/forge-gui/res/cardsfolder/c/copy_land.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/copy_land.txt rename to forge-gui/res/cardsfolder/c/copy_land.txt diff --git a/forge-gui/res/cardsfolder/upcoming/copycrook.txt b/forge-gui/res/cardsfolder/c/copycrook.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/copycrook.txt rename to forge-gui/res/cardsfolder/c/copycrook.txt diff --git a/forge-gui/res/cardsfolder/upcoming/coram_the_undertaker.txt b/forge-gui/res/cardsfolder/c/coram_the_undertaker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/coram_the_undertaker.txt rename to forge-gui/res/cardsfolder/c/coram_the_undertaker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/corrupted_shapeshifter.txt b/forge-gui/res/cardsfolder/c/corrupted_shapeshifter.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/corrupted_shapeshifter.txt rename to forge-gui/res/cardsfolder/c/corrupted_shapeshifter.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cranial_ram.txt b/forge-gui/res/cardsfolder/c/cranial_ram.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cranial_ram.txt rename to forge-gui/res/cardsfolder/c/cranial_ram.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cursed_wombat.txt b/forge-gui/res/cardsfolder/c/cursed_wombat.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cursed_wombat.txt rename to forge-gui/res/cardsfolder/c/cursed_wombat.txt diff --git a/forge-gui/res/cardsfolder/upcoming/cyclops_superconductor.txt b/forge-gui/res/cardsfolder/c/cyclops_superconductor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/cyclops_superconductor.txt rename to forge-gui/res/cardsfolder/c/cyclops_superconductor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/deceptive_landscape.txt b/forge-gui/res/cardsfolder/d/deceptive_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/deceptive_landscape.txt rename to forge-gui/res/cardsfolder/d/deceptive_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/deem_inferior.txt b/forge-gui/res/cardsfolder/d/deem_inferior.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/deem_inferior.txt rename to forge-gui/res/cardsfolder/d/deem_inferior.txt diff --git a/forge-gui/res/cardsfolder/upcoming/depth_defiler.txt b/forge-gui/res/cardsfolder/d/depth_defiler.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/depth_defiler.txt rename to forge-gui/res/cardsfolder/d/depth_defiler.txt diff --git a/forge-gui/res/cardsfolder/upcoming/desert_warfare.txt b/forge-gui/res/cardsfolder/d/desert_warfare.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/desert_warfare.txt rename to forge-gui/res/cardsfolder/d/desert_warfare.txt diff --git a/forge-gui/res/cardsfolder/upcoming/detectives_phoenix.txt b/forge-gui/res/cardsfolder/d/detectives_phoenix.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/detectives_phoenix.txt rename to forge-gui/res/cardsfolder/d/detectives_phoenix.txt diff --git a/forge-gui/res/cardsfolder/upcoming/devourer_of_destiny.txt b/forge-gui/res/cardsfolder/d/devourer_of_destiny.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/devourer_of_destiny.txt rename to forge-gui/res/cardsfolder/d/devourer_of_destiny.txt diff --git a/forge-gui/res/cardsfolder/upcoming/disa_the_restless.txt b/forge-gui/res/cardsfolder/d/disa_the_restless.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/disa_the_restless.txt rename to forge-gui/res/cardsfolder/d/disa_the_restless.txt diff --git a/forge-gui/res/cardsfolder/upcoming/disciple_of_freyalise_garden_of_freyalise.txt b/forge-gui/res/cardsfolder/d/disciple_of_freyalise_garden_of_freyalise.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/disciple_of_freyalise_garden_of_freyalise.txt rename to forge-gui/res/cardsfolder/d/disciple_of_freyalise_garden_of_freyalise.txt diff --git a/forge-gui/res/cardsfolder/upcoming/disruptor_flute.txt b/forge-gui/res/cardsfolder/d/disruptor_flute.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/disruptor_flute.txt rename to forge-gui/res/cardsfolder/d/disruptor_flute.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dog_umbra.txt b/forge-gui/res/cardsfolder/d/dog_umbra.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dog_umbra.txt rename to forge-gui/res/cardsfolder/d/dog_umbra.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dreadmobile.txt b/forge-gui/res/cardsfolder/d/dreadmobile.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dreadmobile.txt rename to forge-gui/res/cardsfolder/d/dreadmobile.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dreamdrinker_vampire.txt b/forge-gui/res/cardsfolder/d/dreamdrinker_vampire.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dreamdrinker_vampire.txt rename to forge-gui/res/cardsfolder/d/dreamdrinker_vampire.txt diff --git a/forge-gui/res/cardsfolder/upcoming/dreamtide_whale.txt b/forge-gui/res/cardsfolder/d/dreamtide_whale.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/dreamtide_whale.txt rename to forge-gui/res/cardsfolder/d/dreamtide_whale.txt diff --git a/forge-gui/res/cardsfolder/upcoming/drossclaw.txt b/forge-gui/res/cardsfolder/d/drossclaw.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/drossclaw.txt rename to forge-gui/res/cardsfolder/d/drossclaw.txt diff --git a/forge-gui/res/cardsfolder/upcoming/drowner_of_truth_drowned_jungle.txt b/forge-gui/res/cardsfolder/d/drowner_of_truth_drowned_jungle.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/drowner_of_truth_drowned_jungle.txt rename to forge-gui/res/cardsfolder/d/drowner_of_truth_drowned_jungle.txt diff --git a/forge-gui/res/cardsfolder/upcoming/drownyard_lurker.txt b/forge-gui/res/cardsfolder/d/drownyard_lurker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/drownyard_lurker.txt rename to forge-gui/res/cardsfolder/d/drownyard_lurker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/echoes_of_eternity.txt b/forge-gui/res/cardsfolder/e/echoes_of_eternity.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/echoes_of_eternity.txt rename to forge-gui/res/cardsfolder/e/echoes_of_eternity.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eivor_battle_ready.txt b/forge-gui/res/cardsfolder/e/eivor_battle_ready.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eivor_battle_ready.txt rename to forge-gui/res/cardsfolder/e/eivor_battle_ready.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eladamri_korvecdal.txt b/forge-gui/res/cardsfolder/e/eladamri_korvecdal.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eladamri_korvecdal.txt rename to forge-gui/res/cardsfolder/e/eladamri_korvecdal.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eldrazi_confluence.txt b/forge-gui/res/cardsfolder/e/eldrazi_confluence.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eldrazi_confluence.txt rename to forge-gui/res/cardsfolder/e/eldrazi_confluence.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eldrazi_linebreaker.txt b/forge-gui/res/cardsfolder/e/eldrazi_linebreaker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eldrazi_linebreaker.txt rename to forge-gui/res/cardsfolder/e/eldrazi_linebreaker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eldrazi_ravager.txt b/forge-gui/res/cardsfolder/e/eldrazi_ravager.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eldrazi_ravager.txt rename to forge-gui/res/cardsfolder/e/eldrazi_ravager.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eldrazi_repurposer.txt b/forge-gui/res/cardsfolder/e/eldrazi_repurposer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eldrazi_repurposer.txt rename to forge-gui/res/cardsfolder/e/eldrazi_repurposer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eldritch_immunity.txt b/forge-gui/res/cardsfolder/e/eldritch_immunity.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eldritch_immunity.txt rename to forge-gui/res/cardsfolder/e/eldritch_immunity.txt diff --git a/forge-gui/res/cardsfolder/upcoming/electrozoa.txt b/forge-gui/res/cardsfolder/e/electrozoa.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/electrozoa.txt rename to forge-gui/res/cardsfolder/e/electrozoa.txt diff --git a/forge-gui/res/cardsfolder/upcoming/emerald_collector.txt b/forge-gui/res/cardsfolder/e/emerald_collector.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/emerald_collector.txt rename to forge-gui/res/cardsfolder/e/emerald_collector.txt diff --git a/forge-gui/res/cardsfolder/upcoming/emissary_of_soulfire.txt b/forge-gui/res/cardsfolder/e/emissary_of_soulfire.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/emissary_of_soulfire.txt rename to forge-gui/res/cardsfolder/e/emissary_of_soulfire.txt diff --git a/forge-gui/res/cardsfolder/upcoming/emperor_apatzec_intli_iv.txt b/forge-gui/res/cardsfolder/e/emperor_apatzec_intli_iv.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/emperor_apatzec_intli_iv.txt rename to forge-gui/res/cardsfolder/e/emperor_apatzec_intli_iv.txt diff --git a/forge-gui/res/cardsfolder/upcoming/emperor_of_bones.txt b/forge-gui/res/cardsfolder/e/emperor_of_bones.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/emperor_of_bones.txt rename to forge-gui/res/cardsfolder/e/emperor_of_bones.txt diff --git a/forge-gui/res/cardsfolder/upcoming/emrakul_the_world_anew.txt b/forge-gui/res/cardsfolder/e/emrakul_the_world_anew.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/emrakul_the_world_anew.txt rename to forge-gui/res/cardsfolder/e/emrakul_the_world_anew.txt diff --git a/forge-gui/res/cardsfolder/upcoming/envoy_of_the_ancestors.txt b/forge-gui/res/cardsfolder/e/envoy_of_the_ancestors.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/envoy_of_the_ancestors.txt rename to forge-gui/res/cardsfolder/e/envoy_of_the_ancestors.txt diff --git a/forge-gui/res/cardsfolder/upcoming/essence_reliquary.txt b/forge-gui/res/cardsfolder/e/essence_reliquary.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/essence_reliquary.txt rename to forge-gui/res/cardsfolder/e/essence_reliquary.txt diff --git a/forge-gui/res/cardsfolder/upcoming/etched_slith.txt b/forge-gui/res/cardsfolder/e/etched_slith.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/etched_slith.txt rename to forge-gui/res/cardsfolder/e/etched_slith.txt diff --git a/forge-gui/res/cardsfolder/upcoming/etherium_pteramander.txt b/forge-gui/res/cardsfolder/e/etherium_pteramander.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/etherium_pteramander.txt rename to forge-gui/res/cardsfolder/e/etherium_pteramander.txt diff --git a/forge-gui/res/cardsfolder/upcoming/eviscerators_insight.txt b/forge-gui/res/cardsfolder/e/eviscerators_insight.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/eviscerators_insight.txt rename to forge-gui/res/cardsfolder/e/eviscerators_insight.txt diff --git a/forge-gui/res/cardsfolder/upcoming/evolution_witness.txt b/forge-gui/res/cardsfolder/e/evolution_witness.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/evolution_witness.txt rename to forge-gui/res/cardsfolder/e/evolution_witness.txt diff --git a/forge-gui/res/cardsfolder/upcoming/expanding_ooze.txt b/forge-gui/res/cardsfolder/e/expanding_ooze.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/expanding_ooze.txt rename to forge-gui/res/cardsfolder/e/expanding_ooze.txt diff --git a/forge-gui/res/cardsfolder/upcoming/expel_the_unworthy.txt b/forge-gui/res/cardsfolder/e/expel_the_unworthy.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/expel_the_unworthy.txt rename to forge-gui/res/cardsfolder/e/expel_the_unworthy.txt diff --git a/forge-gui/res/cardsfolder/upcoming/exterminator_magmarch.txt b/forge-gui/res/cardsfolder/e/exterminator_magmarch.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/exterminator_magmarch.txt rename to forge-gui/res/cardsfolder/e/exterminator_magmarch.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ezio_blade_of_vengeance.txt b/forge-gui/res/cardsfolder/e/ezio_blade_of_vengeance.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ezio_blade_of_vengeance.txt rename to forge-gui/res/cardsfolder/e/ezio_blade_of_vengeance.txt diff --git a/forge-gui/res/cardsfolder/upcoming/faithful_watchdog.txt b/forge-gui/res/cardsfolder/f/faithful_watchdog.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/faithful_watchdog.txt rename to forge-gui/res/cardsfolder/f/faithful_watchdog.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fanatic_of_rhonas.txt b/forge-gui/res/cardsfolder/f/fanatic_of_rhonas.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fanatic_of_rhonas.txt rename to forge-gui/res/cardsfolder/f/fanatic_of_rhonas.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fanged_flames.txt b/forge-gui/res/cardsfolder/f/fanged_flames.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fanged_flames.txt rename to forge-gui/res/cardsfolder/f/fanged_flames.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fangs_of_kalonia.txt b/forge-gui/res/cardsfolder/f/fangs_of_kalonia.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fangs_of_kalonia.txt rename to forge-gui/res/cardsfolder/f/fangs_of_kalonia.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fell_the_profane_fell_mire.txt b/forge-gui/res/cardsfolder/f/fell_the_profane_fell_mire.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fell_the_profane_fell_mire.txt rename to forge-gui/res/cardsfolder/f/fell_the_profane_fell_mire.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fetid_gargantua.txt b/forge-gui/res/cardsfolder/f/fetid_gargantua.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fetid_gargantua.txt rename to forge-gui/res/cardsfolder/f/fetid_gargantua.txt diff --git a/forge-gui/res/cardsfolder/upcoming/filigree_racer.txt b/forge-gui/res/cardsfolder/f/filigree_racer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/filigree_racer.txt rename to forge-gui/res/cardsfolder/f/filigree_racer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/final_act.txt b/forge-gui/res/cardsfolder/f/final_act.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/final_act.txt rename to forge-gui/res/cardsfolder/f/final_act.txt diff --git a/forge-gui/res/cardsfolder/upcoming/flare_of_cultivation.txt b/forge-gui/res/cardsfolder/f/flare_of_cultivation.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/flare_of_cultivation.txt rename to forge-gui/res/cardsfolder/f/flare_of_cultivation.txt diff --git a/forge-gui/res/cardsfolder/upcoming/flare_of_denial.txt b/forge-gui/res/cardsfolder/f/flare_of_denial.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/flare_of_denial.txt rename to forge-gui/res/cardsfolder/f/flare_of_denial.txt diff --git a/forge-gui/res/cardsfolder/upcoming/flare_of_duplication.txt b/forge-gui/res/cardsfolder/f/flare_of_duplication.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/flare_of_duplication.txt rename to forge-gui/res/cardsfolder/f/flare_of_duplication.txt diff --git a/forge-gui/res/cardsfolder/upcoming/flare_of_fortitude.txt b/forge-gui/res/cardsfolder/f/flare_of_fortitude.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/flare_of_fortitude.txt rename to forge-gui/res/cardsfolder/f/flare_of_fortitude.txt diff --git a/forge-gui/res/cardsfolder/upcoming/flare_of_malice.txt b/forge-gui/res/cardsfolder/f/flare_of_malice.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/flare_of_malice.txt rename to forge-gui/res/cardsfolder/f/flare_of_malice.txt diff --git a/forge-gui/res/cardsfolder/upcoming/foreboding_landscape.txt b/forge-gui/res/cardsfolder/f/foreboding_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/foreboding_landscape.txt rename to forge-gui/res/cardsfolder/f/foreboding_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fowl_strike.txt b/forge-gui/res/cardsfolder/f/fowl_strike.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/fowl_strike.txt rename to forge-gui/res/cardsfolder/f/fowl_strike.txt diff --git a/forge-gui/res/cardsfolder/upcoming/frogmyr_enforcer.txt b/forge-gui/res/cardsfolder/f/frogmyr_enforcer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/frogmyr_enforcer.txt rename to forge-gui/res/cardsfolder/f/frogmyr_enforcer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/furnace_hellkite.txt b/forge-gui/res/cardsfolder/f/furnace_hellkite.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/furnace_hellkite.txt rename to forge-gui/res/cardsfolder/f/furnace_hellkite.txt diff --git a/forge-gui/res/cardsfolder/upcoming/galvanic_discharge.txt b/forge-gui/res/cardsfolder/g/galvanic_discharge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/galvanic_discharge.txt rename to forge-gui/res/cardsfolder/g/galvanic_discharge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ghostfire_slice.txt b/forge-gui/res/cardsfolder/g/ghostfire_slice.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ghostfire_slice.txt rename to forge-gui/res/cardsfolder/g/ghostfire_slice.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gift_of_the_viper.txt b/forge-gui/res/cardsfolder/g/gift_of_the_viper.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gift_of_the_viper.txt rename to forge-gui/res/cardsfolder/g/gift_of_the_viper.txt diff --git a/forge-gui/res/cardsfolder/upcoming/glaring_fleshraker.txt b/forge-gui/res/cardsfolder/g/glaring_fleshraker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/glaring_fleshraker.txt rename to forge-gui/res/cardsfolder/g/glaring_fleshraker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/glasswing_grace_age_graced_chapel.txt b/forge-gui/res/cardsfolder/g/glasswing_grace_age_graced_chapel.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/glasswing_grace_age_graced_chapel.txt rename to forge-gui/res/cardsfolder/g/glasswing_grace_age_graced_chapel.txt diff --git a/forge-gui/res/cardsfolder/upcoming/glimpse_the_impossible.txt b/forge-gui/res/cardsfolder/g/glimpse_the_impossible.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/glimpse_the_impossible.txt rename to forge-gui/res/cardsfolder/g/glimpse_the_impossible.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gluttonous_hellkite.txt b/forge-gui/res/cardsfolder/g/gluttonous_hellkite.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gluttonous_hellkite.txt rename to forge-gui/res/cardsfolder/g/gluttonous_hellkite.txt diff --git a/forge-gui/res/cardsfolder/upcoming/glyph_elemental.txt b/forge-gui/res/cardsfolder/g/glyph_elemental.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/glyph_elemental.txt rename to forge-gui/res/cardsfolder/g/glyph_elemental.txt diff --git a/forge-gui/res/cardsfolder/upcoming/golden_tail_trainer.txt b/forge-gui/res/cardsfolder/g/golden_tail_trainer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/golden_tail_trainer.txt rename to forge-gui/res/cardsfolder/g/golden_tail_trainer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/grave_expectations.txt b/forge-gui/res/cardsfolder/g/grave_expectations.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/grave_expectations.txt rename to forge-gui/res/cardsfolder/g/grave_expectations.txt diff --git a/forge-gui/res/cardsfolder/upcoming/gravedig.txt b/forge-gui/res/cardsfolder/g/gravedig.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/gravedig.txt rename to forge-gui/res/cardsfolder/g/gravedig.txt diff --git a/forge-gui/res/cardsfolder/upcoming/grenzo_crooked_jailer.txt b/forge-gui/res/cardsfolder/g/grenzo_crooked_jailer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/grenzo_crooked_jailer.txt rename to forge-gui/res/cardsfolder/g/grenzo_crooked_jailer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/grim_servant.txt b/forge-gui/res/cardsfolder/g/grim_servant.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/grim_servant.txt rename to forge-gui/res/cardsfolder/g/grim_servant.txt diff --git a/forge-gui/res/cardsfolder/upcoming/grist_voracious_larva_grist_the_plague_swarm.txt b/forge-gui/res/cardsfolder/g/grist_voracious_larva_grist_the_plague_swarm.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/grist_voracious_larva_grist_the_plague_swarm.txt rename to forge-gui/res/cardsfolder/g/grist_voracious_larva_grist_the_plague_swarm.txt diff --git a/forge-gui/res/cardsfolder/upcoming/guardian_of_the_forgotten.txt b/forge-gui/res/cardsfolder/g/guardian_of_the_forgotten.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/guardian_of_the_forgotten.txt rename to forge-gui/res/cardsfolder/g/guardian_of_the_forgotten.txt diff --git a/forge-gui/res/cardsfolder/upcoming/guide_of_souls.txt b/forge-gui/res/cardsfolder/g/guide_of_souls.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/guide_of_souls.txt rename to forge-gui/res/cardsfolder/g/guide_of_souls.txt diff --git a/forge-gui/res/cardsfolder/upcoming/harbinger_of_the_seas.txt b/forge-gui/res/cardsfolder/h/harbinger_of_the_seas.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/harbinger_of_the_seas.txt rename to forge-gui/res/cardsfolder/h/harbinger_of_the_seas.txt diff --git a/forge-gui/res/cardsfolder/upcoming/haystack.txt b/forge-gui/res/cardsfolder/h/haystack.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/haystack.txt rename to forge-gui/res/cardsfolder/h/haystack.txt diff --git a/forge-gui/res/cardsfolder/upcoming/herigast_erupting_nullkite.txt b/forge-gui/res/cardsfolder/h/herigast_erupting_nullkite.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/herigast_erupting_nullkite.txt rename to forge-gui/res/cardsfolder/h/herigast_erupting_nullkite.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hexgold_slith.txt b/forge-gui/res/cardsfolder/h/hexgold_slith.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hexgold_slith.txt rename to forge-gui/res/cardsfolder/h/hexgold_slith.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hidden_blade.txt b/forge-gui/res/cardsfolder/h/hidden_blade.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hidden_blade.txt rename to forge-gui/res/cardsfolder/h/hidden_blade.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hideous_taskmaster.txt b/forge-gui/res/cardsfolder/h/hideous_taskmaster.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hideous_taskmaster.txt rename to forge-gui/res/cardsfolder/h/hideous_taskmaster.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hope_ender_coatl.txt b/forge-gui/res/cardsfolder/h/hope_ender_coatl.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hope_ender_coatl.txt rename to forge-gui/res/cardsfolder/h/hope_ender_coatl.txt diff --git a/forge-gui/res/cardsfolder/upcoming/horizon_of_progress.txt b/forge-gui/res/cardsfolder/h/horizon_of_progress.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/horizon_of_progress.txt rename to forge-gui/res/cardsfolder/h/horizon_of_progress.txt diff --git a/forge-gui/res/cardsfolder/upcoming/horrid_shadowspinner.txt b/forge-gui/res/cardsfolder/h/horrid_shadowspinner.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/horrid_shadowspinner.txt rename to forge-gui/res/cardsfolder/h/horrid_shadowspinner.txt diff --git a/forge-gui/res/cardsfolder/upcoming/horrific_assault.txt b/forge-gui/res/cardsfolder/h/horrific_assault.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/horrific_assault.txt rename to forge-gui/res/cardsfolder/h/horrific_assault.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hourglass_of_the_lost.txt b/forge-gui/res/cardsfolder/h/hourglass_of_the_lost.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hourglass_of_the_lost.txt rename to forge-gui/res/cardsfolder/h/hourglass_of_the_lost.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hydra_trainer.txt b/forge-gui/res/cardsfolder/h/hydra_trainer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hydra_trainer.txt rename to forge-gui/res/cardsfolder/h/hydra_trainer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/hydroelectric_specimen_hydroelectric_laboratory.txt b/forge-gui/res/cardsfolder/h/hydroelectric_specimen_hydroelectric_laboratory.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/hydroelectric_specimen_hydroelectric_laboratory.txt rename to forge-gui/res/cardsfolder/h/hydroelectric_specimen_hydroelectric_laboratory.txt diff --git a/forge-gui/res/cardsfolder/upcoming/idol_of_false_gods.txt b/forge-gui/res/cardsfolder/i/idol_of_false_gods.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/idol_of_false_gods.txt rename to forge-gui/res/cardsfolder/i/idol_of_false_gods.txt diff --git a/forge-gui/res/cardsfolder/upcoming/impetuous_lootmonger.txt b/forge-gui/res/cardsfolder/i/impetuous_lootmonger.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/impetuous_lootmonger.txt rename to forge-gui/res/cardsfolder/i/impetuous_lootmonger.txt diff --git a/forge-gui/res/cardsfolder/upcoming/imskir_iron_eater.txt b/forge-gui/res/cardsfolder/i/imskir_iron_eater.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/imskir_iron_eater.txt rename to forge-gui/res/cardsfolder/i/imskir_iron_eater.txt diff --git a/forge-gui/res/cardsfolder/upcoming/indebted_spirit.txt b/forge-gui/res/cardsfolder/i/indebted_spirit.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/indebted_spirit.txt rename to forge-gui/res/cardsfolder/i/indebted_spirit.txt diff --git a/forge-gui/res/cardsfolder/upcoming/infernal_captor.txt b/forge-gui/res/cardsfolder/i/infernal_captor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/infernal_captor.txt rename to forge-gui/res/cardsfolder/i/infernal_captor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/infested_thrinax.txt b/forge-gui/res/cardsfolder/i/infested_thrinax.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/infested_thrinax.txt rename to forge-gui/res/cardsfolder/i/infested_thrinax.txt diff --git a/forge-gui/res/cardsfolder/upcoming/inspired_inventor.txt b/forge-gui/res/cardsfolder/i/inspired_inventor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/inspired_inventor.txt rename to forge-gui/res/cardsfolder/i/inspired_inventor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/intruders_inquisition.txt b/forge-gui/res/cardsfolder/i/intruders_inquisition.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/intruders_inquisition.txt rename to forge-gui/res/cardsfolder/i/intruders_inquisition.txt diff --git a/forge-gui/res/cardsfolder/upcoming/inventors_axe.txt b/forge-gui/res/cardsfolder/i/inventors_axe.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/inventors_axe.txt rename to forge-gui/res/cardsfolder/i/inventors_axe.txt diff --git a/forge-gui/res/cardsfolder/upcoming/inversion_behemoth.txt b/forge-gui/res/cardsfolder/i/inversion_behemoth.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/inversion_behemoth.txt rename to forge-gui/res/cardsfolder/i/inversion_behemoth.txt diff --git a/forge-gui/res/cardsfolder/upcoming/invert_polarity.txt b/forge-gui/res/cardsfolder/i/invert_polarity.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/invert_polarity.txt rename to forge-gui/res/cardsfolder/i/invert_polarity.txt diff --git a/forge-gui/res/cardsfolder/upcoming/it_that_heralds_the_end.txt b/forge-gui/res/cardsfolder/i/it_that_heralds_the_end.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/it_that_heralds_the_end.txt rename to forge-gui/res/cardsfolder/i/it_that_heralds_the_end.txt diff --git a/forge-gui/res/cardsfolder/upcoming/izzet_generatorium.txt b/forge-gui/res/cardsfolder/i/izzet_generatorium.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/izzet_generatorium.txt rename to forge-gui/res/cardsfolder/i/izzet_generatorium.txt diff --git a/forge-gui/res/cardsfolder/upcoming/jessie_zane_fangbringer.txt b/forge-gui/res/cardsfolder/j/jessie_zane_fangbringer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/jessie_zane_fangbringer.txt rename to forge-gui/res/cardsfolder/j/jessie_zane_fangbringer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/jet_collector.txt b/forge-gui/res/cardsfolder/j/jet_collector.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/jet_collector.txt rename to forge-gui/res/cardsfolder/j/jet_collector.txt diff --git a/forge-gui/res/cardsfolder/upcoming/jolted_awake.txt b/forge-gui/res/cardsfolder/j/jolted_awake.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/jolted_awake.txt rename to forge-gui/res/cardsfolder/j/jolted_awake.txt diff --git a/forge-gui/res/cardsfolder/upcoming/jyoti_moag_ancient.txt b/forge-gui/res/cardsfolder/j/jyoti_moag_ancient.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/jyoti_moag_ancient.txt rename to forge-gui/res/cardsfolder/j/jyoti_moag_ancient.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kami_of_jealous_thirst.txt b/forge-gui/res/cardsfolder/k/kami_of_jealous_thirst.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kami_of_jealous_thirst.txt rename to forge-gui/res/cardsfolder/k/kami_of_jealous_thirst.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kozilek_the_broken_reality.txt b/forge-gui/res/cardsfolder/k/kozilek_the_broken_reality.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kozilek_the_broken_reality.txt rename to forge-gui/res/cardsfolder/k/kozilek_the_broken_reality.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kozileks_command.txt b/forge-gui/res/cardsfolder/k/kozileks_command.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kozileks_command.txt rename to forge-gui/res/cardsfolder/k/kozileks_command.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kozileks_unsealing.txt b/forge-gui/res/cardsfolder/k/kozileks_unsealing.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kozileks_unsealing.txt rename to forge-gui/res/cardsfolder/k/kozileks_unsealing.txt diff --git a/forge-gui/res/cardsfolder/upcoming/kudo_king_among_bears.txt b/forge-gui/res/cardsfolder/k/kudo_king_among_bears.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/kudo_king_among_bears.txt rename to forge-gui/res/cardsfolder/k/kudo_king_among_bears.txt diff --git a/forge-gui/res/cardsfolder/upcoming/lazotep_quarry.txt b/forge-gui/res/cardsfolder/l/lazotep_quarry.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/lazotep_quarry.txt rename to forge-gui/res/cardsfolder/l/lazotep_quarry.txt diff --git a/forge-gui/res/cardsfolder/upcoming/legion_leadership_legion_stronghold.txt b/forge-gui/res/cardsfolder/l/legion_leadership_legion_stronghold.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/legion_leadership_legion_stronghold.txt rename to forge-gui/res/cardsfolder/l/legion_leadership_legion_stronghold.txt diff --git a/forge-gui/res/cardsfolder/upcoming/leonardo_da_vinci.txt b/forge-gui/res/cardsfolder/l/leonardo_da_vinci.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/leonardo_da_vinci.txt rename to forge-gui/res/cardsfolder/l/leonardo_da_vinci.txt diff --git a/forge-gui/res/cardsfolder/upcoming/lethal_throwdown.txt b/forge-gui/res/cardsfolder/l/lethal_throwdown.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/lethal_throwdown.txt rename to forge-gui/res/cardsfolder/l/lethal_throwdown.txt diff --git a/forge-gui/res/cardsfolder/upcoming/lion_umbra.txt b/forge-gui/res/cardsfolder/l/lion_umbra.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/lion_umbra.txt rename to forge-gui/res/cardsfolder/l/lion_umbra.txt diff --git a/forge-gui/res/cardsfolder/upcoming/localized_destruction.txt b/forge-gui/res/cardsfolder/l/localized_destruction.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/localized_destruction.txt rename to forge-gui/res/cardsfolder/l/localized_destruction.txt diff --git a/forge-gui/res/cardsfolder/upcoming/lumra_bellow_of_the_woods.txt b/forge-gui/res/cardsfolder/l/lumra_bellow_of_the_woods.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/lumra_bellow_of_the_woods.txt rename to forge-gui/res/cardsfolder/l/lumra_bellow_of_the_woods.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mabel_heir_to_cragflame.txt b/forge-gui/res/cardsfolder/m/mabel_heir_to_cragflame.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mabel_heir_to_cragflame.txt rename to forge-gui/res/cardsfolder/m/mabel_heir_to_cragflame.txt diff --git a/forge-gui/res/cardsfolder/upcoming/magar_of_the_magic_strings.txt b/forge-gui/res/cardsfolder/m/magar_of_the_magic_strings.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/magar_of_the_magic_strings.txt rename to forge-gui/res/cardsfolder/m/magar_of_the_magic_strings.txt diff --git a/forge-gui/res/cardsfolder/upcoming/malevolent_rumble.txt b/forge-gui/res/cardsfolder/m/malevolent_rumble.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/malevolent_rumble.txt rename to forge-gui/res/cardsfolder/m/malevolent_rumble.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mandibular_kite.txt b/forge-gui/res/cardsfolder/m/mandibular_kite.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mandibular_kite.txt rename to forge-gui/res/cardsfolder/m/mandibular_kite.txt diff --git a/forge-gui/res/cardsfolder/upcoming/march_from_velis_vel.txt b/forge-gui/res/cardsfolder/m/march_from_velis_vel.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/march_from_velis_vel.txt rename to forge-gui/res/cardsfolder/m/march_from_velis_vel.txt diff --git a/forge-gui/res/cardsfolder/upcoming/marionette_apprentice.txt b/forge-gui/res/cardsfolder/m/marionette_apprentice.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/marionette_apprentice.txt rename to forge-gui/res/cardsfolder/m/marionette_apprentice.txt diff --git a/forge-gui/res/cardsfolder/upcoming/metastatic_evangel.txt b/forge-gui/res/cardsfolder/m/metastatic_evangel.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/metastatic_evangel.txt rename to forge-gui/res/cardsfolder/m/metastatic_evangel.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mindless_conscription.txt b/forge-gui/res/cardsfolder/m/mindless_conscription.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mindless_conscription.txt rename to forge-gui/res/cardsfolder/m/mindless_conscription.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mogg_mob.txt b/forge-gui/res/cardsfolder/m/mogg_mob.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mogg_mob.txt rename to forge-gui/res/cardsfolder/m/mogg_mob.txt diff --git a/forge-gui/res/cardsfolder/upcoming/molten_gatekeeper.txt b/forge-gui/res/cardsfolder/m/molten_gatekeeper.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/molten_gatekeeper.txt rename to forge-gui/res/cardsfolder/m/molten_gatekeeper.txt diff --git a/forge-gui/res/cardsfolder/upcoming/monstrous_vortex.txt b/forge-gui/res/cardsfolder/m/monstrous_vortex.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/monstrous_vortex.txt rename to forge-gui/res/cardsfolder/m/monstrous_vortex.txt diff --git a/forge-gui/res/cardsfolder/upcoming/monumental_henge.txt b/forge-gui/res/cardsfolder/m/monumental_henge.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/monumental_henge.txt rename to forge-gui/res/cardsfolder/m/monumental_henge.txt diff --git a/forge-gui/res/cardsfolder/upcoming/muster_the_departed.txt b/forge-gui/res/cardsfolder/m/muster_the_departed.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/muster_the_departed.txt rename to forge-gui/res/cardsfolder/m/muster_the_departed.txt diff --git a/forge-gui/res/cardsfolder/upcoming/mutated_cultist.txt b/forge-gui/res/cardsfolder/m/mutated_cultist.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/mutated_cultist.txt rename to forge-gui/res/cardsfolder/m/mutated_cultist.txt diff --git a/forge-gui/res/cardsfolder/upcoming/nadu_winged_wisdom.txt b/forge-gui/res/cardsfolder/n/nadu_winged_wisdom.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/nadu_winged_wisdom.txt rename to forge-gui/res/cardsfolder/n/nadu_winged_wisdom.txt diff --git a/forge-gui/res/cardsfolder/upcoming/nashi_illusion_gadgeteer.txt b/forge-gui/res/cardsfolder/n/nashi_illusion_gadgeteer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/nashi_illusion_gadgeteer.txt rename to forge-gui/res/cardsfolder/n/nashi_illusion_gadgeteer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/necrodominance.txt b/forge-gui/res/cardsfolder/n/necrodominance.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/necrodominance.txt rename to forge-gui/res/cardsfolder/n/necrodominance.txt diff --git a/forge-gui/res/cardsfolder/upcoming/nethergoyf.txt b/forge-gui/res/cardsfolder/n/nethergoyf.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/nethergoyf.txt rename to forge-gui/res/cardsfolder/n/nethergoyf.txt diff --git a/forge-gui/res/cardsfolder/upcoming/nightshade_dryad.txt b/forge-gui/res/cardsfolder/n/nightshade_dryad.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/nightshade_dryad.txt rename to forge-gui/res/cardsfolder/n/nightshade_dryad.txt diff --git a/forge-gui/res/cardsfolder/upcoming/null_elemental_blast.txt b/forge-gui/res/cardsfolder/n/null_elemental_blast.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/null_elemental_blast.txt rename to forge-gui/res/cardsfolder/n/null_elemental_blast.txt diff --git a/forge-gui/res/cardsfolder/upcoming/nulldrifter.txt b/forge-gui/res/cardsfolder/n/nulldrifter.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/nulldrifter.txt rename to forge-gui/res/cardsfolder/n/nulldrifter.txt diff --git a/forge-gui/res/cardsfolder/upcoming/nyxborn_hydra.txt b/forge-gui/res/cardsfolder/n/nyxborn_hydra.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/nyxborn_hydra.txt rename to forge-gui/res/cardsfolder/n/nyxborn_hydra.txt diff --git a/forge-gui/res/cardsfolder/upcoming/nyxborn_unicorn.txt b/forge-gui/res/cardsfolder/n/nyxborn_unicorn.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/nyxborn_unicorn.txt rename to forge-gui/res/cardsfolder/n/nyxborn_unicorn.txt diff --git a/forge-gui/res/cardsfolder/upcoming/obstinate_gargoyle.txt b/forge-gui/res/cardsfolder/o/obstinate_gargoyle.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/obstinate_gargoyle.txt rename to forge-gui/res/cardsfolder/o/obstinate_gargoyle.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ocelot_pride.txt b/forge-gui/res/cardsfolder/o/ocelot_pride.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ocelot_pride.txt rename to forge-gui/res/cardsfolder/o/ocelot_pride.txt diff --git a/forge-gui/res/cardsfolder/upcoming/omo_queen_of_vesuva.txt b/forge-gui/res/cardsfolder/o/omo_queen_of_vesuva.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/omo_queen_of_vesuva.txt rename to forge-gui/res/cardsfolder/o/omo_queen_of_vesuva.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ondu_knotmaster.txt b/forge-gui/res/cardsfolder/o/ondu_knotmaster.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ondu_knotmaster.txt rename to forge-gui/res/cardsfolder/o/ondu_knotmaster.txt diff --git a/forge-gui/res/cardsfolder/upcoming/party_thrasher.txt b/forge-gui/res/cardsfolder/p/party_thrasher.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/party_thrasher.txt rename to forge-gui/res/cardsfolder/p/party_thrasher.txt diff --git a/forge-gui/res/cardsfolder/upcoming/path_of_annihilation.txt b/forge-gui/res/cardsfolder/p/path_of_annihilation.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/path_of_annihilation.txt rename to forge-gui/res/cardsfolder/p/path_of_annihilation.txt diff --git a/forge-gui/res/cardsfolder/upcoming/pearl_collector.txt b/forge-gui/res/cardsfolder/p/pearl_collector.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/pearl_collector.txt rename to forge-gui/res/cardsfolder/p/pearl_collector.txt diff --git a/forge-gui/res/cardsfolder/upcoming/pearl_ear_imperial_advisor.txt b/forge-gui/res/cardsfolder/p/pearl_ear_imperial_advisor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/pearl_ear_imperial_advisor.txt rename to forge-gui/res/cardsfolder/p/pearl_ear_imperial_advisor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/perilous_landscape.txt b/forge-gui/res/cardsfolder/p/perilous_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/perilous_landscape.txt rename to forge-gui/res/cardsfolder/p/perilous_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/petrifying_meddler.txt b/forge-gui/res/cardsfolder/p/petrifying_meddler.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/petrifying_meddler.txt rename to forge-gui/res/cardsfolder/p/petrifying_meddler.txt diff --git a/forge-gui/res/cardsfolder/upcoming/phelia_exuberant_shepherd.txt b/forge-gui/res/cardsfolder/p/phelia_exuberant_shepherd.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/phelia_exuberant_shepherd.txt rename to forge-gui/res/cardsfolder/p/phelia_exuberant_shepherd.txt diff --git a/forge-gui/res/cardsfolder/upcoming/phlage_titan_of_fires_fury.txt b/forge-gui/res/cardsfolder/p/phlage_titan_of_fires_fury.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/phlage_titan_of_fires_fury.txt rename to forge-gui/res/cardsfolder/p/phlage_titan_of_fires_fury.txt diff --git a/forge-gui/res/cardsfolder/upcoming/phyrexian_ironworks.txt b/forge-gui/res/cardsfolder/p/phyrexian_ironworks.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/phyrexian_ironworks.txt rename to forge-gui/res/cardsfolder/p/phyrexian_ironworks.txt diff --git a/forge-gui/res/cardsfolder/upcoming/pinnacle_monk_mystic_peak.txt b/forge-gui/res/cardsfolder/p/pinnacle_monk_mystic_peak.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/pinnacle_monk_mystic_peak.txt rename to forge-gui/res/cardsfolder/p/pinnacle_monk_mystic_peak.txt diff --git a/forge-gui/res/cardsfolder/upcoming/planar_genesis.txt b/forge-gui/res/cardsfolder/p/planar_genesis.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/planar_genesis.txt rename to forge-gui/res/cardsfolder/p/planar_genesis.txt diff --git a/forge-gui/res/cardsfolder/upcoming/planar_nexus.txt b/forge-gui/res/cardsfolder/p/planar_nexus.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/planar_nexus.txt rename to forge-gui/res/cardsfolder/p/planar_nexus.txt diff --git a/forge-gui/res/cardsfolder/upcoming/polygoyf.txt b/forge-gui/res/cardsfolder/p/polygoyf.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/polygoyf.txt rename to forge-gui/res/cardsfolder/p/polygoyf.txt diff --git a/forge-gui/res/cardsfolder/upcoming/powerbalance.txt b/forge-gui/res/cardsfolder/p/powerbalance.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/powerbalance.txt rename to forge-gui/res/cardsfolder/p/powerbalance.txt diff --git a/forge-gui/res/cardsfolder/upcoming/prairie_survivalist.txt b/forge-gui/res/cardsfolder/p/prairie_survivalist.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/prairie_survivalist.txt rename to forge-gui/res/cardsfolder/p/prairie_survivalist.txt diff --git a/forge-gui/res/cardsfolder/upcoming/primal_prayers.txt b/forge-gui/res/cardsfolder/p/primal_prayers.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/primal_prayers.txt rename to forge-gui/res/cardsfolder/p/primal_prayers.txt diff --git a/forge-gui/res/cardsfolder/upcoming/propagator_drone.txt b/forge-gui/res/cardsfolder/p/propagator_drone.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/propagator_drone.txt rename to forge-gui/res/cardsfolder/p/propagator_drone.txt diff --git a/forge-gui/res/cardsfolder/upcoming/proud_pack_rhino.txt b/forge-gui/res/cardsfolder/p/proud_pack_rhino.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/proud_pack_rhino.txt rename to forge-gui/res/cardsfolder/p/proud_pack_rhino.txt diff --git a/forge-gui/res/cardsfolder/upcoming/psychic_frog.txt b/forge-gui/res/cardsfolder/p/psychic_frog.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/psychic_frog.txt rename to forge-gui/res/cardsfolder/p/psychic_frog.txt diff --git a/forge-gui/res/cardsfolder/upcoming/pyretic_rebirth.txt b/forge-gui/res/cardsfolder/p/pyretic_rebirth.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/pyretic_rebirth.txt rename to forge-gui/res/cardsfolder/p/pyretic_rebirth.txt diff --git a/forge-gui/res/cardsfolder/upcoming/pyrogoyf.txt b/forge-gui/res/cardsfolder/p/pyrogoyf.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/pyrogoyf.txt rename to forge-gui/res/cardsfolder/p/pyrogoyf.txt diff --git a/forge-gui/res/cardsfolder/upcoming/quest_for_the_necropolis.txt b/forge-gui/res/cardsfolder/q/quest_for_the_necropolis.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/quest_for_the_necropolis.txt rename to forge-gui/res/cardsfolder/q/quest_for_the_necropolis.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ral_and_the_implicit_maze.txt b/forge-gui/res/cardsfolder/r/ral_and_the_implicit_maze.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ral_and_the_implicit_maze.txt rename to forge-gui/res/cardsfolder/r/ral_and_the_implicit_maze.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ral_monsoon_mage_ral_leyline_prodigy.txt b/forge-gui/res/cardsfolder/r/ral_monsoon_mage_ral_leyline_prodigy.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ral_monsoon_mage_ral_leyline_prodigy.txt rename to forge-gui/res/cardsfolder/r/ral_monsoon_mage_ral_leyline_prodigy.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rampant_frogantua.txt b/forge-gui/res/cardsfolder/r/rampant_frogantua.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rampant_frogantua.txt rename to forge-gui/res/cardsfolder/r/rampant_frogantua.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rankle_pitiless_trickster.txt b/forge-gui/res/cardsfolder/r/rankle_pitiless_trickster.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rankle_pitiless_trickster.txt rename to forge-gui/res/cardsfolder/r/rankle_pitiless_trickster.txt diff --git a/forge-gui/res/cardsfolder/upcoming/razorfield_ripper.txt b/forge-gui/res/cardsfolder/r/razorfield_ripper.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/razorfield_ripper.txt rename to forge-gui/res/cardsfolder/r/razorfield_ripper.txt diff --git a/forge-gui/res/cardsfolder/upcoming/razorgrass_ambush_razorgrass_field.txt b/forge-gui/res/cardsfolder/r/razorgrass_ambush_razorgrass_field.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/razorgrass_ambush_razorgrass_field.txt rename to forge-gui/res/cardsfolder/r/razorgrass_ambush_razorgrass_field.txt diff --git a/forge-gui/res/cardsfolder/upcoming/reckless_pyrosurfer.txt b/forge-gui/res/cardsfolder/r/reckless_pyrosurfer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/reckless_pyrosurfer.txt rename to forge-gui/res/cardsfolder/r/reckless_pyrosurfer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/refurbished_familiar.txt b/forge-gui/res/cardsfolder/r/refurbished_familiar.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/refurbished_familiar.txt rename to forge-gui/res/cardsfolder/r/refurbished_familiar.txt diff --git a/forge-gui/res/cardsfolder/upcoming/reiterating_bolt.txt b/forge-gui/res/cardsfolder/r/reiterating_bolt.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/reiterating_bolt.txt rename to forge-gui/res/cardsfolder/r/reiterating_bolt.txt diff --git a/forge-gui/res/cardsfolder/upcoming/resolute_rejection.txt b/forge-gui/res/cardsfolder/r/resolute_rejection.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/resolute_rejection.txt rename to forge-gui/res/cardsfolder/r/resolute_rejection.txt diff --git a/forge-gui/res/cardsfolder/upcoming/retrofitted_transmogrant.txt b/forge-gui/res/cardsfolder/r/retrofitted_transmogrant.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/retrofitted_transmogrant.txt rename to forge-gui/res/cardsfolder/r/retrofitted_transmogrant.txt diff --git a/forge-gui/res/cardsfolder/upcoming/revitalizing_repast_old_growth_grove.txt b/forge-gui/res/cardsfolder/r/revitalizing_repast_old_growth_grove.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/revitalizing_repast_old_growth_grove.txt rename to forge-gui/res/cardsfolder/r/revitalizing_repast_old_growth_grove.txt diff --git a/forge-gui/res/cardsfolder/upcoming/riddle_gate_gargoyle.txt b/forge-gui/res/cardsfolder/r/riddle_gate_gargoyle.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/riddle_gate_gargoyle.txt rename to forge-gui/res/cardsfolder/r/riddle_gate_gargoyle.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ripples_of_undeath.txt b/forge-gui/res/cardsfolder/r/ripples_of_undeath.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ripples_of_undeath.txt rename to forge-gui/res/cardsfolder/r/ripples_of_undeath.txt diff --git a/forge-gui/res/cardsfolder/upcoming/roil_cartographer.txt b/forge-gui/res/cardsfolder/r/roil_cartographer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/roil_cartographer.txt rename to forge-gui/res/cardsfolder/r/roil_cartographer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rosecot_knight.txt b/forge-gui/res/cardsfolder/r/rosecot_knight.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rosecot_knight.txt rename to forge-gui/res/cardsfolder/r/rosecot_knight.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rosheen_roaring_prophet.txt b/forge-gui/res/cardsfolder/r/rosheen_roaring_prophet.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rosheen_roaring_prophet.txt rename to forge-gui/res/cardsfolder/r/rosheen_roaring_prophet.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ruby_collector.txt b/forge-gui/res/cardsfolder/r/ruby_collector.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ruby_collector.txt rename to forge-gui/res/cardsfolder/r/ruby_collector.txt diff --git a/forge-gui/res/cardsfolder/upcoming/runecarved_obelisk.txt b/forge-gui/res/cardsfolder/r/runecarved_obelisk.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/runecarved_obelisk.txt rename to forge-gui/res/cardsfolder/r/runecarved_obelisk.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rush_of_inspiration_crackling_falls.txt b/forge-gui/res/cardsfolder/r/rush_of_inspiration_crackling_falls.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/rush_of_inspiration_crackling_falls.txt rename to forge-gui/res/cardsfolder/r/rush_of_inspiration_crackling_falls.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sage_of_the_maze.txt b/forge-gui/res/cardsfolder/s/sage_of_the_maze.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sage_of_the_maze.txt rename to forge-gui/res/cardsfolder/s/sage_of_the_maze.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sage_of_the_unknowable.txt b/forge-gui/res/cardsfolder/s/sage_of_the_unknowable.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sage_of_the_unknowable.txt rename to forge-gui/res/cardsfolder/s/sage_of_the_unknowable.txt diff --git a/forge-gui/res/cardsfolder/upcoming/saint_elenda.txt b/forge-gui/res/cardsfolder/s/saint_elenda.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/saint_elenda.txt rename to forge-gui/res/cardsfolder/s/saint_elenda.txt diff --git a/forge-gui/res/cardsfolder/upcoming/salvation_colossus.txt b/forge-gui/res/cardsfolder/s/salvation_colossus.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/salvation_colossus.txt rename to forge-gui/res/cardsfolder/s/salvation_colossus.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sapphire_collector.txt b/forge-gui/res/cardsfolder/s/sapphire_collector.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sapphire_collector.txt rename to forge-gui/res/cardsfolder/s/sapphire_collector.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sarpadian_simulacrum.txt b/forge-gui/res/cardsfolder/s/sarpadian_simulacrum.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sarpadian_simulacrum.txt rename to forge-gui/res/cardsfolder/s/sarpadian_simulacrum.txt diff --git a/forge-gui/res/cardsfolder/upcoming/satya_aetherflux_genius.txt b/forge-gui/res/cardsfolder/s/satya_aetherflux_genius.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/satya_aetherflux_genius.txt rename to forge-gui/res/cardsfolder/s/satya_aetherflux_genius.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sawhorn_nemesis.txt b/forge-gui/res/cardsfolder/s/sawhorn_nemesis.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sawhorn_nemesis.txt rename to forge-gui/res/cardsfolder/s/sawhorn_nemesis.txt diff --git a/forge-gui/res/cardsfolder/upcoming/scurrilous_sentry.txt b/forge-gui/res/cardsfolder/s/scurrilous_sentry.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/scurrilous_sentry.txt rename to forge-gui/res/cardsfolder/s/scurrilous_sentry.txt diff --git a/forge-gui/res/cardsfolder/upcoming/scurry_of_gremlins.txt b/forge-gui/res/cardsfolder/s/scurry_of_gremlins.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/scurry_of_gremlins.txt rename to forge-gui/res/cardsfolder/s/scurry_of_gremlins.txt diff --git a/forge-gui/res/cardsfolder/upcoming/seething_landscape.txt b/forge-gui/res/cardsfolder/s/seething_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/seething_landscape.txt rename to forge-gui/res/cardsfolder/s/seething_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/selective_obliteration.txt b/forge-gui/res/cardsfolder/s/selective_obliteration.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/selective_obliteration.txt rename to forge-gui/res/cardsfolder/s/selective_obliteration.txt diff --git a/forge-gui/res/cardsfolder/upcoming/serum_visionary.txt b/forge-gui/res/cardsfolder/s/serum_visionary.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/serum_visionary.txt rename to forge-gui/res/cardsfolder/s/serum_visionary.txt diff --git a/forge-gui/res/cardsfolder/upcoming/shadow_of_the_second_sun.txt b/forge-gui/res/cardsfolder/s/shadow_of_the_second_sun.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/shadow_of_the_second_sun.txt rename to forge-gui/res/cardsfolder/s/shadow_of_the_second_sun.txt diff --git a/forge-gui/res/cardsfolder/upcoming/shattered_landscape.txt b/forge-gui/res/cardsfolder/s/shattered_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/shattered_landscape.txt rename to forge-gui/res/cardsfolder/s/shattered_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sheltering_landscape.txt b/forge-gui/res/cardsfolder/s/sheltering_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sheltering_landscape.txt rename to forge-gui/res/cardsfolder/s/sheltering_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/shifting_woodland.txt b/forge-gui/res/cardsfolder/s/shifting_woodland.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/shifting_woodland.txt rename to forge-gui/res/cardsfolder/s/shifting_woodland.txt diff --git a/forge-gui/res/cardsfolder/upcoming/shilgengar_sire_of_famine.txt b/forge-gui/res/cardsfolder/s/shilgengar_sire_of_famine.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/shilgengar_sire_of_famine.txt rename to forge-gui/res/cardsfolder/s/shilgengar_sire_of_famine.txt diff --git a/forge-gui/res/cardsfolder/upcoming/siege_gang_lieutenant.txt b/forge-gui/res/cardsfolder/s/siege_gang_lieutenant.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/siege_gang_lieutenant.txt rename to forge-gui/res/cardsfolder/s/siege_gang_lieutenant.txt diff --git a/forge-gui/res/cardsfolder/upcoming/siege_smash.txt b/forge-gui/res/cardsfolder/s/siege_smash.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/siege_smash.txt rename to forge-gui/res/cardsfolder/s/siege_smash.txt diff --git a/forge-gui/res/cardsfolder/upcoming/signature_slam.txt b/forge-gui/res/cardsfolder/s/signature_slam.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/signature_slam.txt rename to forge-gui/res/cardsfolder/s/signature_slam.txt diff --git a/forge-gui/res/cardsfolder/upcoming/silent_extraction.txt b/forge-gui/res/cardsfolder/s/silent_extraction.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/silent_extraction.txt rename to forge-gui/res/cardsfolder/s/silent_extraction.txt diff --git a/forge-gui/res/cardsfolder/upcoming/silverquill_lecturer.txt b/forge-gui/res/cardsfolder/s/silverquill_lecturer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/silverquill_lecturer.txt rename to forge-gui/res/cardsfolder/s/silverquill_lecturer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sink_into_stupor_soporific_springs.txt b/forge-gui/res/cardsfolder/s/sink_into_stupor_soporific_springs.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sink_into_stupor_soporific_springs.txt rename to forge-gui/res/cardsfolder/s/sink_into_stupor_soporific_springs.txt diff --git a/forge-gui/res/cardsfolder/upcoming/six.txt b/forge-gui/res/cardsfolder/s/six.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/six.txt rename to forge-gui/res/cardsfolder/s/six.txt diff --git a/forge-gui/res/cardsfolder/upcoming/skittering_precursor.txt b/forge-gui/res/cardsfolder/s/skittering_precursor.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/skittering_precursor.txt rename to forge-gui/res/cardsfolder/s/skittering_precursor.txt diff --git a/forge-gui/res/cardsfolder/upcoming/skoa_embermage.txt b/forge-gui/res/cardsfolder/s/skoa_embermage.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/skoa_embermage.txt rename to forge-gui/res/cardsfolder/s/skoa_embermage.txt diff --git a/forge-gui/res/cardsfolder/upcoming/smelted_chargebug.txt b/forge-gui/res/cardsfolder/s/smelted_chargebug.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/smelted_chargebug.txt rename to forge-gui/res/cardsfolder/s/smelted_chargebug.txt diff --git a/forge-gui/res/cardsfolder/upcoming/snapping_voidcraw.txt b/forge-gui/res/cardsfolder/s/snapping_voidcraw.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/snapping_voidcraw.txt rename to forge-gui/res/cardsfolder/s/snapping_voidcraw.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sneaky_snacker.txt b/forge-gui/res/cardsfolder/s/sneaky_snacker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sneaky_snacker.txt rename to forge-gui/res/cardsfolder/s/sneaky_snacker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/snow_covered_wastes.txt b/forge-gui/res/cardsfolder/s/snow_covered_wastes.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/snow_covered_wastes.txt rename to forge-gui/res/cardsfolder/s/snow_covered_wastes.txt diff --git a/forge-gui/res/cardsfolder/upcoming/solar_transformer.txt b/forge-gui/res/cardsfolder/s/solar_transformer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/solar_transformer.txt rename to forge-gui/res/cardsfolder/s/solar_transformer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/solitary_defiance.txt b/forge-gui/res/cardsfolder/s/solitary_defiance.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/solitary_defiance.txt rename to forge-gui/res/cardsfolder/s/solitary_defiance.txt diff --git a/forge-gui/res/cardsfolder/upcoming/solstice_zealot.txt b/forge-gui/res/cardsfolder/s/solstice_zealot.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/solstice_zealot.txt rename to forge-gui/res/cardsfolder/s/solstice_zealot.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sorin_of_house_markov_sorin_ravenous_neonate.txt b/forge-gui/res/cardsfolder/s/sorin_of_house_markov_sorin_ravenous_neonate.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sorin_of_house_markov_sorin_ravenous_neonate.txt rename to forge-gui/res/cardsfolder/s/sorin_of_house_markov_sorin_ravenous_neonate.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sowing_mycospawn.txt b/forge-gui/res/cardsfolder/s/sowing_mycospawn.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sowing_mycospawn.txt rename to forge-gui/res/cardsfolder/s/sowing_mycospawn.txt diff --git a/forge-gui/res/cardsfolder/upcoming/spawn_gang_commander.txt b/forge-gui/res/cardsfolder/s/spawn_gang_commander.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/spawn_gang_commander.txt rename to forge-gui/res/cardsfolder/s/spawn_gang_commander.txt diff --git a/forge-gui/res/cardsfolder/upcoming/spawnbed_protector.txt b/forge-gui/res/cardsfolder/s/spawnbed_protector.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/spawnbed_protector.txt rename to forge-gui/res/cardsfolder/s/spawnbed_protector.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sphinx_of_the_revelation.txt b/forge-gui/res/cardsfolder/s/sphinx_of_the_revelation.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sphinx_of_the_revelation.txt rename to forge-gui/res/cardsfolder/s/sphinx_of_the_revelation.txt diff --git a/forge-gui/res/cardsfolder/upcoming/springheart_nantuko.txt b/forge-gui/res/cardsfolder/s/springheart_nantuko.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/springheart_nantuko.txt rename to forge-gui/res/cardsfolder/s/springheart_nantuko.txt diff --git a/forge-gui/res/cardsfolder/upcoming/spymasters_vault.txt b/forge-gui/res/cardsfolder/s/spymasters_vault.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/spymasters_vault.txt rename to forge-gui/res/cardsfolder/s/spymasters_vault.txt diff --git a/forge-gui/res/cardsfolder/upcoming/stalwart_realmwarden.txt b/forge-gui/res/cardsfolder/s/stalwart_realmwarden.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/stalwart_realmwarden.txt rename to forge-gui/res/cardsfolder/s/stalwart_realmwarden.txt diff --git a/forge-gui/res/cardsfolder/upcoming/static_prison.txt b/forge-gui/res/cardsfolder/s/static_prison.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/static_prison.txt rename to forge-gui/res/cardsfolder/s/static_prison.txt diff --git a/forge-gui/res/cardsfolder/upcoming/stone_idol_generator.txt b/forge-gui/res/cardsfolder/s/stone_idol_generator.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/stone_idol_generator.txt rename to forge-gui/res/cardsfolder/s/stone_idol_generator.txt diff --git a/forge-gui/res/cardsfolder/upcoming/strength_of_the_harvest_haven_of_the_harvest.txt b/forge-gui/res/cardsfolder/s/strength_of_the_harvest_haven_of_the_harvest.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/strength_of_the_harvest_haven_of_the_harvest.txt rename to forge-gui/res/cardsfolder/s/strength_of_the_harvest_haven_of_the_harvest.txt diff --git a/forge-gui/res/cardsfolder/upcoming/strix_serenade.txt b/forge-gui/res/cardsfolder/s/strix_serenade.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/strix_serenade.txt rename to forge-gui/res/cardsfolder/s/strix_serenade.txt diff --git a/forge-gui/res/cardsfolder/upcoming/stump_stomp_burnwillow_clearing.txt b/forge-gui/res/cardsfolder/s/stump_stomp_burnwillow_clearing.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/stump_stomp_burnwillow_clearing.txt rename to forge-gui/res/cardsfolder/s/stump_stomp_burnwillow_clearing.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sundering_eruption_volcanic_fissure.txt b/forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sundering_eruption_volcanic_fissure.txt rename to forge-gui/res/cardsfolder/s/sundering_eruption_volcanic_fissure.txt diff --git a/forge-gui/res/cardsfolder/upcoming/sunken_palace.txt b/forge-gui/res/cardsfolder/s/sunken_palace.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/sunken_palace.txt rename to forge-gui/res/cardsfolder/s/sunken_palace.txt diff --git a/forge-gui/res/cardsfolder/upcoming/suppression_ray_orderly_plaza.txt b/forge-gui/res/cardsfolder/s/suppression_ray_orderly_plaza.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/suppression_ray_orderly_plaza.txt rename to forge-gui/res/cardsfolder/s/suppression_ray_orderly_plaza.txt diff --git a/forge-gui/res/cardsfolder/upcoming/switchgrass_grazer.txt b/forge-gui/res/cardsfolder/s/switchgrass_grazer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/switchgrass_grazer.txt rename to forge-gui/res/cardsfolder/s/switchgrass_grazer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/talon_gates_of_madara.txt b/forge-gui/res/cardsfolder/t/talon_gates_of_madara.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/talon_gates_of_madara.txt rename to forge-gui/res/cardsfolder/t/talon_gates_of_madara.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tamiyo_inquisitive_student_tamiyo_seasoned_scholar.txt b/forge-gui/res/cardsfolder/t/tamiyo_inquisitive_student_tamiyo_seasoned_scholar.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tamiyo_inquisitive_student_tamiyo_seasoned_scholar.txt rename to forge-gui/res/cardsfolder/t/tamiyo_inquisitive_student_tamiyo_seasoned_scholar.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tamiyo_meets_the_story_circle.txt b/forge-gui/res/cardsfolder/t/tamiyo_meets_the_story_circle.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tamiyo_meets_the_story_circle.txt rename to forge-gui/res/cardsfolder/t/tamiyo_meets_the_story_circle.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tarmogoyf_nest.txt b/forge-gui/res/cardsfolder/t/tarmogoyf_nest.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tarmogoyf_nest.txt rename to forge-gui/res/cardsfolder/t/tarmogoyf_nest.txt diff --git a/forge-gui/res/cardsfolder/upcoming/temperamental_oozewagg.txt b/forge-gui/res/cardsfolder/t/temperamental_oozewagg.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/temperamental_oozewagg.txt rename to forge-gui/res/cardsfolder/t/temperamental_oozewagg.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tempest_harvester.txt b/forge-gui/res/cardsfolder/t/tempest_harvester.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tempest_harvester.txt rename to forge-gui/res/cardsfolder/t/tempest_harvester.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tempt_with_mayhem.txt b/forge-gui/res/cardsfolder/t/tempt_with_mayhem.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tempt_with_mayhem.txt rename to forge-gui/res/cardsfolder/t/tempt_with_mayhem.txt diff --git a/forge-gui/res/cardsfolder/upcoming/territory_culler.txt b/forge-gui/res/cardsfolder/t/territory_culler.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/territory_culler.txt rename to forge-gui/res/cardsfolder/t/territory_culler.txt diff --git a/forge-gui/res/cardsfolder/upcoming/teysa_of_the_ghost_council.txt b/forge-gui/res/cardsfolder/t/teysa_of_the_ghost_council.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/teysa_of_the_ghost_council.txt rename to forge-gui/res/cardsfolder/t/teysa_of_the_ghost_council.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_animus.txt b/forge-gui/res/cardsfolder/t/the_animus.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_animus.txt rename to forge-gui/res/cardsfolder/t/the_animus.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_creation_of_avacyn.txt b/forge-gui/res/cardsfolder/t/the_creation_of_avacyn.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_creation_of_avacyn.txt rename to forge-gui/res/cardsfolder/t/the_creation_of_avacyn.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_hunger_tide_rises.txt b/forge-gui/res/cardsfolder/t/the_hunger_tide_rises.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_hunger_tide_rises.txt rename to forge-gui/res/cardsfolder/t/the_hunger_tide_rises.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_necrobloom.txt b/forge-gui/res/cardsfolder/t/the_necrobloom.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_necrobloom.txt rename to forge-gui/res/cardsfolder/t/the_necrobloom.txt diff --git a/forge-gui/res/cardsfolder/upcoming/the_spear_of_leonidas.txt b/forge-gui/res/cardsfolder/t/the_spear_of_leonidas.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/the_spear_of_leonidas.txt rename to forge-gui/res/cardsfolder/t/the_spear_of_leonidas.txt diff --git a/forge-gui/res/cardsfolder/upcoming/thief_of_existence.txt b/forge-gui/res/cardsfolder/t/thief_of_existence.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/thief_of_existence.txt rename to forge-gui/res/cardsfolder/t/thief_of_existence.txt diff --git a/forge-gui/res/cardsfolder/upcoming/thieving_aven.txt b/forge-gui/res/cardsfolder/t/thieving_aven.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/thieving_aven.txt rename to forge-gui/res/cardsfolder/t/thieving_aven.txt diff --git a/forge-gui/res/cardsfolder/upcoming/thriving_skyclaw.txt b/forge-gui/res/cardsfolder/t/thriving_skyclaw.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/thriving_skyclaw.txt rename to forge-gui/res/cardsfolder/t/thriving_skyclaw.txt diff --git a/forge-gui/res/cardsfolder/upcoming/titans_vanguard.txt b/forge-gui/res/cardsfolder/t/titans_vanguard.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/titans_vanguard.txt rename to forge-gui/res/cardsfolder/t/titans_vanguard.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tranquil_landscape.txt b/forge-gui/res/cardsfolder/t/tranquil_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tranquil_landscape.txt rename to forge-gui/res/cardsfolder/t/tranquil_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/trenchpost.txt b/forge-gui/res/cardsfolder/t/trenchpost.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/trenchpost.txt rename to forge-gui/res/cardsfolder/t/trenchpost.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tricksters_elk.txt b/forge-gui/res/cardsfolder/t/tricksters_elk.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tricksters_elk.txt rename to forge-gui/res/cardsfolder/t/tricksters_elk.txt diff --git a/forge-gui/res/cardsfolder/upcoming/triton_wavebreaker.txt b/forge-gui/res/cardsfolder/t/triton_wavebreaker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/triton_wavebreaker.txt rename to forge-gui/res/cardsfolder/t/triton_wavebreaker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/triumphant_getaway.txt b/forge-gui/res/cardsfolder/t/triumphant_getaway.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/triumphant_getaway.txt rename to forge-gui/res/cardsfolder/t/triumphant_getaway.txt diff --git a/forge-gui/res/cardsfolder/upcoming/tune_the_narrative.txt b/forge-gui/res/cardsfolder/t/tune_the_narrative.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/tune_the_narrative.txt rename to forge-gui/res/cardsfolder/t/tune_the_narrative.txt diff --git a/forge-gui/res/cardsfolder/upcoming/twins_of_discord.txt b/forge-gui/res/cardsfolder/t/twins_of_discord.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/twins_of_discord.txt rename to forge-gui/res/cardsfolder/t/twins_of_discord.txt diff --git a/forge-gui/res/cardsfolder/upcoming/twisted_landscape.txt b/forge-gui/res/cardsfolder/t/twisted_landscape.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/twisted_landscape.txt rename to forge-gui/res/cardsfolder/t/twisted_landscape.txt diff --git a/forge-gui/res/cardsfolder/upcoming/twisted_riddlekeeper.txt b/forge-gui/res/cardsfolder/t/twisted_riddlekeeper.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/twisted_riddlekeeper.txt rename to forge-gui/res/cardsfolder/t/twisted_riddlekeeper.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ugins_binding.txt b/forge-gui/res/cardsfolder/u/ugins_binding.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ugins_binding.txt rename to forge-gui/res/cardsfolder/u/ugins_binding.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ugins_labyrinth.txt b/forge-gui/res/cardsfolder/u/ugins_labyrinth.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ugins_labyrinth.txt rename to forge-gui/res/cardsfolder/u/ugins_labyrinth.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ulalek_fused_atrocity.txt b/forge-gui/res/cardsfolder/u/ulalek_fused_atrocity.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ulalek_fused_atrocity.txt rename to forge-gui/res/cardsfolder/u/ulalek_fused_atrocity.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ulamog_the_defiler.txt b/forge-gui/res/cardsfolder/u/ulamog_the_defiler.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ulamog_the_defiler.txt rename to forge-gui/res/cardsfolder/u/ulamog_the_defiler.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ulamogs_dreadsire.txt b/forge-gui/res/cardsfolder/u/ulamogs_dreadsire.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/ulamogs_dreadsire.txt rename to forge-gui/res/cardsfolder/u/ulamogs_dreadsire.txt diff --git a/forge-gui/res/cardsfolder/upcoming/unfathomable_truths.txt b/forge-gui/res/cardsfolder/u/unfathomable_truths.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/unfathomable_truths.txt rename to forge-gui/res/cardsfolder/u/unfathomable_truths.txt diff --git a/forge-gui/res/cardsfolder/upcoming/unstable_amulet.txt b/forge-gui/res/cardsfolder/u/unstable_amulet.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/unstable_amulet.txt rename to forge-gui/res/cardsfolder/u/unstable_amulet.txt diff --git a/forge-gui/res/cardsfolder/upcoming/urzas_cave.txt b/forge-gui/res/cardsfolder/u/urzas_cave.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/urzas_cave.txt rename to forge-gui/res/cardsfolder/u/urzas_cave.txt diff --git a/forge-gui/res/cardsfolder/upcoming/utter_insignificance.txt b/forge-gui/res/cardsfolder/u/utter_insignificance.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/utter_insignificance.txt rename to forge-gui/res/cardsfolder/u/utter_insignificance.txt diff --git a/forge-gui/res/cardsfolder/upcoming/vexing_bauble.txt b/forge-gui/res/cardsfolder/v/vexing_bauble.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/vexing_bauble.txt rename to forge-gui/res/cardsfolder/v/vexing_bauble.txt diff --git a/forge-gui/res/cardsfolder/upcoming/voidpouncer.txt b/forge-gui/res/cardsfolder/v/voidpouncer.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/voidpouncer.txt rename to forge-gui/res/cardsfolder/v/voidpouncer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/volatile_stormdrake.txt b/forge-gui/res/cardsfolder/v/volatile_stormdrake.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/volatile_stormdrake.txt rename to forge-gui/res/cardsfolder/v/volatile_stormdrake.txt diff --git a/forge-gui/res/cardsfolder/upcoming/voltstorm_angel.txt b/forge-gui/res/cardsfolder/v/voltstorm_angel.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/voltstorm_angel.txt rename to forge-gui/res/cardsfolder/v/voltstorm_angel.txt diff --git a/forge-gui/res/cardsfolder/upcoming/vona_de_ledo_the_antifex.txt b/forge-gui/res/cardsfolder/v/vona_de_ledo_the_antifex.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/vona_de_ledo_the_antifex.txt rename to forge-gui/res/cardsfolder/v/vona_de_ledo_the_antifex.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wagon_wrecker.txt b/forge-gui/res/cardsfolder/w/wagon_wrecker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wagon_wrecker.txt rename to forge-gui/res/cardsfolder/w/wagon_wrecker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/warped_tusker.txt b/forge-gui/res/cardsfolder/w/warped_tusker.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/warped_tusker.txt rename to forge-gui/res/cardsfolder/w/warped_tusker.txt diff --git a/forge-gui/res/cardsfolder/upcoming/warren_soultrader.txt b/forge-gui/res/cardsfolder/w/warren_soultrader.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/warren_soultrader.txt rename to forge-gui/res/cardsfolder/w/warren_soultrader.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wastescape_battlemage.txt b/forge-gui/res/cardsfolder/w/wastescape_battlemage.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wastescape_battlemage.txt rename to forge-gui/res/cardsfolder/w/wastescape_battlemage.txt diff --git a/forge-gui/res/cardsfolder/upcoming/waterlogged_teachings_inundated_archive.txt b/forge-gui/res/cardsfolder/w/waterlogged_teachings_inundated_archive.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/waterlogged_teachings_inundated_archive.txt rename to forge-gui/res/cardsfolder/w/waterlogged_teachings_inundated_archive.txt diff --git a/forge-gui/res/cardsfolder/upcoming/weave_the_nightmare.txt b/forge-gui/res/cardsfolder/w/weave_the_nightmare.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/weave_the_nightmare.txt rename to forge-gui/res/cardsfolder/w/weave_the_nightmare.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wheel_of_potential.txt b/forge-gui/res/cardsfolder/w/wheel_of_potential.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wheel_of_potential.txt rename to forge-gui/res/cardsfolder/w/wheel_of_potential.txt diff --git a/forge-gui/res/cardsfolder/upcoming/white_orchid_phantom.txt b/forge-gui/res/cardsfolder/w/white_orchid_phantom.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/white_orchid_phantom.txt rename to forge-gui/res/cardsfolder/w/white_orchid_phantom.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wight_of_the_reliquary.txt b/forge-gui/res/cardsfolder/w/wight_of_the_reliquary.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wight_of_the_reliquary.txt rename to forge-gui/res/cardsfolder/w/wight_of_the_reliquary.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wing_it.txt b/forge-gui/res/cardsfolder/w/wing_it.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wing_it.txt rename to forge-gui/res/cardsfolder/w/wing_it.txt diff --git a/forge-gui/res/cardsfolder/upcoming/winter_moon.txt b/forge-gui/res/cardsfolder/w/winter_moon.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/winter_moon.txt rename to forge-gui/res/cardsfolder/w/winter_moon.txt diff --git a/forge-gui/res/cardsfolder/upcoming/witch_enchanter_witch_blessed_meadow.txt b/forge-gui/res/cardsfolder/w/witch_enchanter_witch_blessed_meadow.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/witch_enchanter_witch_blessed_meadow.txt rename to forge-gui/res/cardsfolder/w/witch_enchanter_witch_blessed_meadow.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wither_and_bloom.txt b/forge-gui/res/cardsfolder/w/wither_and_bloom.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wither_and_bloom.txt rename to forge-gui/res/cardsfolder/w/wither_and_bloom.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wonderscape_sage.txt b/forge-gui/res/cardsfolder/w/wonderscape_sage.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wonderscape_sage.txt rename to forge-gui/res/cardsfolder/w/wonderscape_sage.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wrath_of_the_skies.txt b/forge-gui/res/cardsfolder/w/wrath_of_the_skies.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wrath_of_the_skies.txt rename to forge-gui/res/cardsfolder/w/wrath_of_the_skies.txt diff --git a/forge-gui/res/cardsfolder/upcoming/writhing_chrysalis.txt b/forge-gui/res/cardsfolder/w/writhing_chrysalis.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/writhing_chrysalis.txt rename to forge-gui/res/cardsfolder/w/writhing_chrysalis.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wumpus_aberration.txt b/forge-gui/res/cardsfolder/w/wumpus_aberration.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wumpus_aberration.txt rename to forge-gui/res/cardsfolder/w/wumpus_aberration.txt diff --git a/forge-gui/res/cardsfolder/upcoming/wurmcoil_larva.txt b/forge-gui/res/cardsfolder/w/wurmcoil_larva.txt similarity index 100% rename from forge-gui/res/cardsfolder/upcoming/wurmcoil_larva.txt rename to forge-gui/res/cardsfolder/w/wurmcoil_larva.txt From ba40634d7fd03cf58a6394e199e2f2fa42480532 Mon Sep 17 00:00:00 2001 From: Chris H Date: Fri, 21 Jun 2024 08:47:07 -0400 Subject: [PATCH 03/15] Update wither_and_bloom.txt --- forge-gui/res/cardsfolder/w/wither_and_bloom.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/w/wither_and_bloom.txt b/forge-gui/res/cardsfolder/w/wither_and_bloom.txt index 647242c1d27..d98d7c83e15 100644 --- a/forge-gui/res/cardsfolder/w/wither_and_bloom.txt +++ b/forge-gui/res/cardsfolder/w/wither_and_bloom.txt @@ -1,6 +1,6 @@ Name:Wither and Bloom ManaCost:1 B -Types:Sorcery +Types:Instant A:SP$ Pump | ValidTgts$ Creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True | SpellDescription$ Target creature gets -3/-3 until end of turn. A:AB$ PutCounter | Cost$ 1 B ExileFromGrave<1/CARDNAME> | ActivationZone$ Graveyard | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 1 | SorcerySpeed$ True | SpellDescription$ Put a +1/+1 counter on target creature you control. Activate only as a sorcery. DeckHas:Ability$Counters|Graveyard From b8f60ccbad240646974560f961b9ba7ceb657054 Mon Sep 17 00:00:00 2001 From: Paul Hammerton <18243520+paulsnoops@users.noreply.github.com> Date: Fri, 21 Jun 2024 17:56:08 +0100 Subject: [PATCH 04/15] Edition updates: ACR --- forge-gui/res/editions/Assassin's Creed.txt | 82 +++++++++++++++++++-- 1 file changed, 77 insertions(+), 5 deletions(-) diff --git a/forge-gui/res/editions/Assassin's Creed.txt b/forge-gui/res/editions/Assassin's Creed.txt index a09dcf6f39b..6d3d187b76e 100644 --- a/forge-gui/res/editions/Assassin's Creed.txt +++ b/forge-gui/res/editions/Assassin's Creed.txt @@ -9,29 +9,43 @@ ScryfallCode=ACR 1 M The Capitoline Triad @Syd Mills 2 R Caduceus, Staff of Hermes @Evan Shipard 3 U Distract the Guards @Torgeir Fjereide +4 U Fall of the First Civilization @L J Koh 5 U Haystack @Xabi Gaztelua 6 U Hookblade @Thanh Tuấn 7 R Layla Hassan @Michael MacRae 8 R Senu, Keen-Eyed Protector @Michael MacRae +9 U Tax Collector @Miklós Ligeti 10 U Templar Knight @Daniel Correia +11 R What Must Be Done @Syd Mills +13 U Ballad of the Black Flag @Miklós Ligeti 14 U Become Anonymous @Alice Xia Zhang 15 R Crystal Skull, Isu Spyglass @Thanh Tuấn +16 R Desynchronization @Lie Setiawan 17 U Eagle Vision @Kim Sokol +18 U Escape Detection @Justyna Dura 19 R Evie Frye @Lie Setiawan 20 M Leonardo da Vinci @Wangjie Li +22 U Assassin Initiate @Mandy Jurgens 23 U Chain Assassination @Filipe Pagliuso 24 R Desmond Miles @Julia Vasilyeva 25 M Ezio Auditore da Firenze @Fajareka Setiawan +26 U Hemlock Vial @Daniel Correia 28 U Petty Larceny @Fajareka Setiawan +29 U Phantom Blade @Craig J Spearing 30 U Restart Sequence @Lie Setiawan 31 U The Revelations of Ezio @Lixin Yin 32 U Roshan, Hidden Magister @Marta Nael +34 U Hidden Footblade @Néstor Ossandón Leal 36 U Origin of the Hidden Ones @Kim Sokol 38 R The Spear of Leonidas @Narendra Bintara Adi +39 U The Aesir Escape Valhalla @Allen Morris +40 R Aveline de Grandpré @Aurore Folny 41 U Hunter's Bow @Miklós Ligeti +42 U Palazzo Archers @Miklós Ligeti 43 U Viewpoint Synchronization @Daniel Correia 44 U Adéwalé, Breaker of Chains @Justyna Dura 45 M Altaïr Ibn-La'Ahad @Axel Sauerwald +46 U Arbaaz Mir @Wangjie Li 48 R Aya of Alexandria @JB Casacop 49 R Basim Ibn Ishaq @JB Casacop 50 R Bayek of Siwa @JB Casacop @@ -40,31 +54,47 @@ ScryfallCode=ACR 53 M Edward Kenway @Borja Pindado 54 M Eivor, Wolf-Kissed @Justyna Dura 55 U Ezio, Brash Novice @Elizabeth Peiró +56 R Havi, the All-Father @Daniel Correia 57 R Haytham Kenway @Vilhelmas Banys 58 R Jackdaw @Evan Shipard 59 M Kassandra, Eagle Bearer @Anna Steinbauer 60 U Lydia Frye @Mandy Jurgens 61 R Mary Read and Anne Bonny @Wangjie Li 62 R Ratonhnhaké:ton @Greg Staples +63 U Shao Jun @Stephen Stark 64 R Shaun & Rebecca, Agents @Gintas Galvanauskas 65 U Shay Cormac @Axel Sauerwald 66 R Sigurd, Jarl of Ravensthorpe @Alexander Gering 67 R Sokrates, Athenian Teacher @Alice Xia Zhang +68 U Adrestia @Mintautas Šukys 69 R The Animus @Néstor Ossandón Leal 70 M Apple of Eden, Isu Relic @L J Koh +71 U Brotherhood Regalia @Xabi Gaztelua +72 R Excalibur, Sword of Eden @Thanh Tuấn 73 U Hidden Blade @L J Koh 74 R Mjölnir, Storm Hammer @L J Koh +75 U Smoke Bomb @Borja Pindado +76 M Staff of Eden, Vault's Key @L J Koh +77 U Towering Viewpoint @Lixin Yin 79 R Abstergo Entertainment @Alexander Gering 80 U Brotherhood Headquarters @Narendra Bintara Adi +81 U Path to Exile @Kim Sokol +82 U Reconnaissance @Mandy Jurgens 83 R Rest in Peace @Rimas Valeikis 84 U Coastal Piracy @Wei Guan +85 U Propaganda @Erikas Perl 86 M Temporal Trespass @Borja Pindado +87 R Black Market Connections @Filipe Pagliuso 88 R Conspiracy @Allen Morris 89 R Cover of Darkness @Paulius Daščioras -92 C Murder @Lixin Yin +90 U Fatal Push @Lie Setiawan +91 U Go for the Throat @Torgeir Fjereide +92 U Murder @Lixin Yin 93 R Royal Assassin @Vilhelmas Banys 94 U Cathartic Reunion @Syd Mills +96 U Mortify @Wangjie Li 97 U Reconstruct History @Néstor Ossandón Leal +98 U Terminate @Fajareka Setiawan 99 M Sword of Feast and Famine @Thanh Tuấn 100 M Sword of Light and Shadow @Borja Pindado 111 R Sunbaked Canyon @Alexander Gering @@ -75,10 +105,11 @@ ScryfallCode=ACR 116 R Waterlogged Grove @Alexander Gering 117 M The Capitoline Triad @John Stanko 118 M Leonardo da Vinci @Miklós Ligeti -119 M Cleopatra, Exiled Pharaoh @Néstor Ossandon Leal +119 M Cleopatra, Exiled Pharaoh @Néstor Ossandón Leal 120 R Mary Read and Anne Bonny @Wangjie Li 121 R Sokrates, Athenian Teacher @JB Casacop 122 M Apple of Eden, Isu Relic @Thanh Tuấn +123 M Staff of Eden, Vault's Key @Narendra Bintara Adi 124 M Sword of Feast and Famine @Bruce Brenneise 125 M Sword of Light and Shadow @Bruce Brenneise 127 R Layla Hassan @Luisa J. Preissler @@ -87,31 +118,38 @@ ScryfallCode=ACR 130 R Desmond Miles @Alex Negrea 131 M Ezio Auditore da Firenze @Luisa J. Preissler 133 U Roshan, Hidden Magister @Astri Lohne +135 R Aveline de Grandpré @Luisa J. Preissler 136 U Adéwalé, Breaker of Chains @Miguel Mercado 137 M Altaïr Ibn-La'Ahad @Alex Negrea +138 U Arbaaz Mir @Bastien L. Deharme 140 R Aya of Alexandria @Chase Stone 141 R Basim Ibn Ishaq @Astri Lohne 142 R Bayek of Siwa @Miguel Mercado 143 M Edward Kenway @Alex Negrea 144 M Eivor, Wolf-Kissed @Jessie Lam 145 U Ezio, Brash Novice @Luisa J. Preissler +146 R Havi, the All-Father @John Stanko 147 R Haytham Kenway @Andreia Ugrai 148 M Kassandra, Eagle Bearer @Jessie Lam 149 U Lydia Frye @Bastien L. Deharme 150 R Ratonhnhaké:ton @Andreia Ugrai +151 U Shao Jun @Andreia Ugrai 152 R Shaun & Rebecca, Agents @John Stanko 153 U Shay Cormac @Alex Negrea 154 R Sigurd, Jarl of Ravensthorpe @Jessie Lam 155 R Caduceus, Staff of Hermes @Evan Shipard 156 R Rest in Peace @Rimas Valeikis +157 R What Must Be Done @Syd Mills +159 R Desynchronization @Lie Setiawan 160 M Temporal Trespass @Borja Pindado +161 R Black Market Connections @Filipe Pagliuso 162 R Conspiracy @Allen Morris 163 R Cover of Darkness @Paulius Daščioras 164 R Royal Assassin @Vilhelmas Banys 165 R The Spear of Leonidas @Narendra Bintara Adi 166 R Assassin's Trophy @Erikas Perl 167 R Jackdaw @Evan Shipard -168 R The Animus @Néstor Ossandon Leal +168 R The Animus @Néstor Ossandón Leal 170 R Mjölnir, Storm Hammer @L J Koh 171 R Abstergo Entertainment @Alexander Gering 172 M The Capitoline Triad @Syd Mills @@ -120,23 +158,33 @@ ScryfallCode=ACR 175 U Haystack @Xabi Gaztelua 176 U Hookblade @Thanh Tuấn 177 R Layla Hassan @Michael MacRae +178 U Path to Exile @Kim Sokol +179 U Reconnaissance @Mandy Jurgens 181 R Senu, Keen-Eyed Protector @Michael MacRae 183 U Templar Knight @Daniel Correia 186 U Become Anonymous @Alice Xia Zhang +189 R Desynchronization @Lie Setiawan 190 U Eagle Vision @Kim Sokol +191 U Escape Detection @Justyna Dura 192 R Evie Frye @Lie Setiawan 193 M Leonardo da Vinci @Wangjie Li +195 U Propaganda @Erikas Perl 196 M Temporal Trespass @Borja Pindado 200 R Conspiracy @Allen Morris 201 R Cover of Darkness @Paulius Daščioras 202 R Desmond Miles @Julia Vasilyeva 203 M Ezio Auditore da Firenze @Fajareka Setiawan -208 C Murder @Lixin Yin +205 U Go for the Throat @Torgeir Fjereide +206 U Hemlock Vial @Daniel Correia +208 U Murder @Lixin Yin 209 U Petty Larceny @Fajareka Setiawan +210 U Phantom Blade @Craig J Spearing 211 U Restart Sequence @Lie Setiawan 212 U Roshan, Hidden Magister @Marta Nael 213 R Royal Assassin @Vilhelmas Banys +216 U Hidden Footblade @Néstor Ossandón Leal 219 R The Spear of Leonidas @Narendra Bintara Adi +220 R Aveline de Grandpré @Aurore Folny 221 U Hunter's Bow @Miklós Ligeti 223 U Viewpoint Synchronization @Daniel Correia 224 U Adéwalé, Breaker of Chains @Justyna Dura @@ -153,16 +201,21 @@ ScryfallCode=ACR 240 M Kassandra, Eagle Bearer @Anna Steinbauer 241 U Lydia Frye @Mandy Jurgens 242 R Mary Read and Anne Bonny @Wangjie Li +243 U Mortify @Wangjie Li 244 R Ratonhnhaké:ton @Greg Staples 247 R Shaun & Rebecca, Agents @Gintas Galvanauskas 249 R Sigurd, Jarl of Ravensthorpe @Alexander Gering 250 R Sokrates, Athenian Teacher @Alice Xia Zhang +251 U Terminate @Fajareka Setiawan +252 U Adrestia @Mintautas Šukys 253 R The Animus @Néstor Ossandón Leal 254 M Apple of Eden, Isu Relic @L J Koh +255 U Brotherhood Regalia @Xabi Gaztelua 257 U Hidden Blade @L J Koh 258 R Mjölnir, Storm Hammer @L J Koh 261 M Sword of Feast and Famine @Thanh Tuấn 262 M Sword of Light and Shadow @Borja Pindado +263 U Towering Viewpoint @Lixin Yin 265 R Abstergo Entertainment @Alexander Gering 266 U Brotherhood Headquarters @Narendra Bintara Adi 267 M Ezio Auditore da Firenze @Luisa J. Preissler @@ -174,11 +227,30 @@ ScryfallCode=ACR 273 R Sokrates, Athenian Teacher @JB Casacop 274 M Eivor, Battle-Ready @Fajareka Setiawan 275 M Ezio, Blade of Vengeance @Jake Murray +276 C Battlefield Improvisation @Mintautas Šukys +277 C Detained by Legionnaires @Néstor Ossandón Leal 278 R Escarpment Fortress @Vaigintas Pakenis +279 U Keen-Eyed Raven @Alexandre Honoré +280 U Settlement Blacksmith @Daniel Correia +281 U Assassin Den @Jurijus Chitrovas +282 U Brotherhood Spy @Jurijus Chitrovas +283 C Hookblade Veteran @Borja Pindado +284 C Tranquilize @Thanh Tuấn +285 U Brotherhood Ambushers @Alexandre Honoré +287 C Merciless Harlequin @Lixin Yin +288 U Poison-Blade Mentor @Xabi Gaztelua +289 C Headsplitter @L J Koh +290 U Labyrinth Adversary @Narendra Bintara Adi +291 C Misthios's Fury @Allen Morris +292 C Spartan Veteran @Bartek Fedyczak 293 R Surtr, Fiery Jötun @Evan Shipard 294 R Achilles Davenport @Josu Solano 295 R Auditore Ambush @Julia Vasilyeva +296 U Bureau Headmaster @Thanh Tuấn 297 R Raven Clan War-Axe @Kim Sokol 298 R Rooftop Bypass @Pablo Mendoza -306 C Royal Assassin @Wei Guan +299 C Hired Blade @Elizabeth Peiró +300 U Stone Quarry @Piotr Dura +301 U Submerged Boneyard @Alexandre Honoré +306 R Royal Assassin @Wei Guan 307 U Hidden Blade @Evyn Fong From 2ca1260272ce6a82a36852f40d5f3638c6cf27f7 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Fri, 21 Jun 2024 21:35:02 +0000 Subject: [PATCH 05/15] Update satya_aetherflux_genius.txt --- forge-gui/res/cardsfolder/s/satya_aetherflux_genius.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/s/satya_aetherflux_genius.txt b/forge-gui/res/cardsfolder/s/satya_aetherflux_genius.txt index 8a20f6b191c..f8a4284dd97 100644 --- a/forge-gui/res/cardsfolder/s/satya_aetherflux_genius.txt +++ b/forge-gui/res/cardsfolder/s/satya_aetherflux_genius.txt @@ -8,7 +8,7 @@ T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigCopy | TriggerZones$ Battl SVar:TrigCopy:DB$ CopyPermanent | RememberTokens$ True | ValidTgts$ Creature.nonToken+YouCtrl+Other | TgtPrompt$ Select up to one other target nontoken you control | TargetMin$ 0 | TargetMax$ 1 | TokenTapped$ True | TokenAttacking$ True | SubAbility$ DBEnergy SVar:DBEnergy:DB$ PutCounter | Defined$ You | CounterType$ ENERGY | CounterNum$ 2 | SubAbility$ DBDelayTrig SVar:DBDelayTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End Of Turn | Execute$ TrigSac | RememberObjects$ Remembered | SubAbility$ DBCleanup | TriggerDescription$ At the beginning of the next end step, sacrifice that token unless you pay an amount of {E} equal to its mana value. -SVar:TrigSac:DB$ SacrificeAll | Defined$ DelayTriggerRemembered | Controller$ You | UnlessCost$ PayEnergy | UnlessPayer$ You +SVar:TrigSac:DB$ SacrificeAll | Defined$ DelayTriggerRememberedLKI | Controller$ You | UnlessCost$ PayEnergy | UnlessPayer$ You SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True -SVar:X:Remembered$CardManaCost +SVar:X:TriggerRemembered$CardManaCost Oracle:Menace, haste\nWhenever Satya, Aetherflux Genius attacks, create a tapped and attacking token that's a copy of up to one other target nontoken creature you control. You get {E}{E} (two energy counters). At the beginning of the next end step, sacrifice that token unless you pay an amount of {E} equal to its mana value. From fa1cdca3aa598dc6144e75b791f64be4ebe8ea5e Mon Sep 17 00:00:00 2001 From: Chris H Date: Sat, 22 Jun 2024 01:59:26 -0400 Subject: [PATCH 06/15] Update phelia_exuberant_shepherd.txt (#5450) --- forge-gui/res/cardsfolder/p/phelia_exuberant_shepherd.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/p/phelia_exuberant_shepherd.txt b/forge-gui/res/cardsfolder/p/phelia_exuberant_shepherd.txt index 8bb1249affd..b3d2e10f3d2 100644 --- a/forge-gui/res/cardsfolder/p/phelia_exuberant_shepherd.txt +++ b/forge-gui/res/cardsfolder/p/phelia_exuberant_shepherd.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Dog PT:2/2 K:Flash T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigExile | TriggerDescription$ Whenever CARDNAME attacks, exile up to one other target nonland permanent. At the beginning of the next end step, return that card to the battlefield under its owner's control. If it entered under your control, put a +1/+1 counter on NICKNAME. -SVar:TrigExile:DB$ ChangeZone | ValidTgts$ Permanent.Other | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one other target permanent | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DelTrig +SVar:TrigExile:DB$ ChangeZone | ValidTgts$ Permanent.Other+nonLand | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select up to one other target nonland permanent | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DelTrig SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigBounce | TriggerDescription$ Return exiled permanent to the battlefield. | RememberObjects$ RememberedLKI | SubAbility$ DBCleanup SVar:TrigBounce:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ DelayTriggerRememberedLKI | Imprint$ True | SubAbility$ DBPutCounter SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | ConditionDefined$ Imprinted | ConditionPresent$ Card.YouCtrl+ThisTurnEntered | SubAbility$ DBCleanup From 50f7e4a33f597d158b124cebe169c660d92ed141 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sat, 22 Jun 2024 06:01:27 +0000 Subject: [PATCH 07/15] Update arco_flagellant.txt --- forge-gui/res/cardsfolder/a/arco_flagellant.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/a/arco_flagellant.txt b/forge-gui/res/cardsfolder/a/arco_flagellant.txt index d29ddf7083a..756c77a5bb9 100644 --- a/forge-gui/res/cardsfolder/a/arco_flagellant.txt +++ b/forge-gui/res/cardsfolder/a/arco_flagellant.txt @@ -4,6 +4,6 @@ Types:Creature Human PT:3/1 K:Squad:2 K:CARDNAME can't block. -A:AB$ Pump | PrecostDesc$ Endurant — | Cost$ PayLife<3> | KW$ Indestructible | SpellDescription$ CARDNAME gains indestructible until end of turn. +A:AB$ Pump | PrecostDesc$ Endurant — | Cost$ PayLife<3> | KW$ Indestructible | Defined$ Self | SpellDescription$ CARDNAME gains indestructible until end of turn. DeckHas:Ability$Token Oracle:Squad {2} (As an additional cost to cast this spell, you may pay {2} any number of times. When this creature enters the battlefield, create that many tokens that are copies of it.)\nArco-Flagellant can't block.\nEndurant — Pay 3 life: Arco-Flagellant gains indestructible until end of turn. From fd6db7e00ae4292d90e1bd78e443b3e830ea305a Mon Sep 17 00:00:00 2001 From: Paul Hammerton <18243520+paulsnoops@users.noreply.github.com> Date: Sat, 22 Jun 2024 08:16:52 +0100 Subject: [PATCH 08/15] Edition updates: ACR, M3C, SLD --- forge-gui/res/editions/Assassin's Creed.txt | 39 +++++++++++++++++++ .../editions/Modern Horizons 3 Commander.txt | 12 +++--- .../res/editions/Secret Lair Drop Series.txt | 28 ++++++++++++- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/forge-gui/res/editions/Assassin's Creed.txt b/forge-gui/res/editions/Assassin's Creed.txt index 6d3d187b76e..49fb53b1891 100644 --- a/forge-gui/res/editions/Assassin's Creed.txt +++ b/forge-gui/res/editions/Assassin's Creed.txt @@ -17,6 +17,7 @@ ScryfallCode=ACR 9 U Tax Collector @Miklós Ligeti 10 U Templar Knight @Daniel Correia 11 R What Must Be Done @Syd Mills +12 U Assassin Gauntlet @Paulius Daščioras 13 U Ballad of the Black Flag @Miklós Ligeti 14 U Become Anonymous @Alice Xia Zhang 15 R Crystal Skull, Isu Spyglass @Thanh Tuấn @@ -30,13 +31,17 @@ ScryfallCode=ACR 24 R Desmond Miles @Julia Vasilyeva 25 M Ezio Auditore da Firenze @Fajareka Setiawan 26 U Hemlock Vial @Daniel Correia +27 R Jacob Frye @Lie Setiawan 28 U Petty Larceny @Fajareka Setiawan 29 U Phantom Blade @Craig J Spearing 30 U Restart Sequence @Lie Setiawan 31 U The Revelations of Ezio @Lixin Yin 32 U Roshan, Hidden Magister @Marta Nael +33 U Alexios, Deimos of Kosmos @Bartek Fedyczak 34 U Hidden Footblade @Néstor Ossandón Leal +35 U Monastery Raid @Alexandre Honoré 36 U Origin of the Hidden Ones @Kim Sokol +37 U Overpowering Attack @Kim Sokol 38 R The Spear of Leonidas @Narendra Bintara Adi 39 U The Aesir Escape Valhalla @Allen Morris 40 R Aveline de Grandpré @Aurore Folny @@ -46,6 +51,7 @@ ScryfallCode=ACR 44 U Adéwalé, Breaker of Chains @Justyna Dura 45 M Altaïr Ibn-La'Ahad @Axel Sauerwald 46 U Arbaaz Mir @Wangjie Li +47 U Arno Dorian @Narendra Bintara Adi 48 R Aya of Alexandria @JB Casacop 49 R Basim Ibn Ishaq @JB Casacop 50 R Bayek of Siwa @JB Casacop @@ -76,6 +82,7 @@ ScryfallCode=ACR 75 U Smoke Bomb @Borja Pindado 76 M Staff of Eden, Vault's Key @L J Koh 77 U Towering Viewpoint @Lixin Yin +78 M Yggdrasil, Rebirth Engine @Rytis Sabaliauskas 79 R Abstergo Entertainment @Alexander Gering 80 U Brotherhood Headquarters @Narendra Bintara Adi 81 U Path to Exile @Kim Sokol @@ -92,6 +99,7 @@ ScryfallCode=ACR 92 U Murder @Lixin Yin 93 R Royal Assassin @Vilhelmas Banys 94 U Cathartic Reunion @Syd Mills +95 R Assassin's Trophy @Erikas Perl 96 U Mortify @Wangjie Li 97 U Reconstruct History @Néstor Ossandón Leal 98 U Terminate @Fajareka Setiawan @@ -112,16 +120,20 @@ ScryfallCode=ACR 123 M Staff of Eden, Vault's Key @Narendra Bintara Adi 124 M Sword of Feast and Famine @Bruce Brenneise 125 M Sword of Light and Shadow @Bruce Brenneise +126 M Yggdrasil, Rebirth Engine @Josu Solano 127 R Layla Hassan @Luisa J. Preissler 128 R Senu, Keen-Eyed Protector @Andreia Ugrai 129 R Evie Frye @Bastien L. Deharme 130 R Desmond Miles @Alex Negrea 131 M Ezio Auditore da Firenze @Luisa J. Preissler +132 R Jacob Frye @Bastien L. Deharme 133 U Roshan, Hidden Magister @Astri Lohne +134 U Alexios, Deimos of Kosmos @Jessie Lam 135 R Aveline de Grandpré @Luisa J. Preissler 136 U Adéwalé, Breaker of Chains @Miguel Mercado 137 M Altaïr Ibn-La'Ahad @Alex Negrea 138 U Arbaaz Mir @Bastien L. Deharme +139 U Arno Dorian @Andreia Ugrai 140 R Aya of Alexandria @Chase Stone 141 R Basim Ibn Ishaq @Astri Lohne 142 R Bayek of Siwa @Miguel Mercado @@ -140,6 +152,7 @@ ScryfallCode=ACR 155 R Caduceus, Staff of Hermes @Evan Shipard 156 R Rest in Peace @Rimas Valeikis 157 R What Must Be Done @Syd Mills +158 R Crystal Skull, Isu Spyglass @Thanh Tuấn 159 R Desynchronization @Lie Setiawan 160 M Temporal Trespass @Borja Pindado 161 R Black Market Connections @Filipe Pagliuso @@ -150,6 +163,7 @@ ScryfallCode=ACR 166 R Assassin's Trophy @Erikas Perl 167 R Jackdaw @Evan Shipard 168 R The Animus @Néstor Ossandón Leal +169 R Excalibur, Sword of Eden @Thanh Tuấn 170 R Mjölnir, Storm Hammer @L J Koh 171 R Abstergo Entertainment @Alexander Gering 172 M The Capitoline Triad @Syd Mills @@ -160,9 +174,14 @@ ScryfallCode=ACR 177 R Layla Hassan @Michael MacRae 178 U Path to Exile @Kim Sokol 179 U Reconnaissance @Mandy Jurgens +180 R Rest in Peace @Rimas Valeikis 181 R Senu, Keen-Eyed Protector @Michael MacRae +182 U Tax Collector @Miklós Ligeti 183 U Templar Knight @Daniel Correia +184 R What Must Be Done @Syd Mills +185 U Assassin Gauntlet @Paulius Daščioras 186 U Become Anonymous @Alice Xia Zhang +187 U Coastal Piracy @Wei Guan 189 R Desynchronization @Lie Setiawan 190 U Eagle Vision @Kim Sokol 191 U Escape Detection @Justyna Dura @@ -170,32 +189,45 @@ ScryfallCode=ACR 193 M Leonardo da Vinci @Wangjie Li 195 U Propaganda @Erikas Perl 196 M Temporal Trespass @Borja Pindado +197 U Assassin Initiate @Mandy Jurgens +198 R Black Market Connections @Filipe Pagliuso 200 R Conspiracy @Allen Morris 201 R Cover of Darkness @Paulius Daščioras 202 R Desmond Miles @Julia Vasilyeva 203 M Ezio Auditore da Firenze @Fajareka Setiawan 205 U Go for the Throat @Torgeir Fjereide 206 U Hemlock Vial @Daniel Correia +207 R Jacob Frye @Lie Setiawan 208 U Murder @Lixin Yin 209 U Petty Larceny @Fajareka Setiawan 210 U Phantom Blade @Craig J Spearing 211 U Restart Sequence @Lie Setiawan 212 U Roshan, Hidden Magister @Marta Nael 213 R Royal Assassin @Vilhelmas Banys +214 U Alexios, Deimos of Kosmos @Bartek Fedyczak +215 U Cathartic Reunion @Syd Mills 216 U Hidden Footblade @Néstor Ossandón Leal +217 U Monastery Raid @Alexandre Honoré +218 U Overpowering Attack @Kim Sokol 219 R The Spear of Leonidas @Narendra Bintara Adi 220 R Aveline de Grandpré @Aurore Folny 221 U Hunter's Bow @Miklós Ligeti +222 U Palazzo Archers @Miklós Ligeti 223 U Viewpoint Synchronization @Daniel Correia 224 U Adéwalé, Breaker of Chains @Justyna Dura 225 M Altaïr Ibn-La'Ahad @Axel Sauerwald +226 U Arbaaz Mir @Wangjie Li +227 U Arno Dorian @Narendra Bintara Adi 228 R Assassin's Trophy @Erikas Perl +229 R Aya of Alexandria @JB Casacop +230 R Basim Ibn Ishaq @JB Casacop 231 R Bayek of Siwa @JB Casacop 232 U Bleeding Effect @Néstor Ossandón Leal 233 M Cleopatra, Exiled Pharaoh @Mandy Jurgens 234 M Edward Kenway @Borja Pindado 235 M Eivor, Wolf-Kissed @Justyna Dura 236 U Ezio, Brash Novice @Elizabeth Peiró +237 R Havi, the All-Father @Daniel Correia 238 R Haytham Kenway @Vilhelmas Banys 239 R Jackdaw @Evan Shipard 240 M Kassandra, Eagle Bearer @Anna Steinbauer @@ -203,7 +235,10 @@ ScryfallCode=ACR 242 R Mary Read and Anne Bonny @Wangjie Li 243 U Mortify @Wangjie Li 244 R Ratonhnhaké:ton @Greg Staples +245 U Reconstruct History @Néstor Ossandón Leal +246 U Shao Jun @Stephen Stark 247 R Shaun & Rebecca, Agents @Gintas Galvanauskas +248 U Shay Cormac @Axel Sauerwald 249 R Sigurd, Jarl of Ravensthorpe @Alexander Gering 250 R Sokrates, Athenian Teacher @Alice Xia Zhang 251 U Terminate @Fajareka Setiawan @@ -211,11 +246,15 @@ ScryfallCode=ACR 253 R The Animus @Néstor Ossandón Leal 254 M Apple of Eden, Isu Relic @L J Koh 255 U Brotherhood Regalia @Xabi Gaztelua +256 R Excalibur, Sword of Eden @Thanh Tuấn 257 U Hidden Blade @L J Koh 258 R Mjölnir, Storm Hammer @L J Koh +259 U Smoke Bomb @Borja Pindado +260 M Staff of Eden, Vault's Key @L J Koh 261 M Sword of Feast and Famine @Thanh Tuấn 262 M Sword of Light and Shadow @Borja Pindado 263 U Towering Viewpoint @Lixin Yin +264 M Yggdrasil, Rebirth Engine @Rytis Sabaliauskas 265 R Abstergo Entertainment @Alexander Gering 266 U Brotherhood Headquarters @Narendra Bintara Adi 267 M Ezio Auditore da Firenze @Luisa J. Preissler diff --git a/forge-gui/res/editions/Modern Horizons 3 Commander.txt b/forge-gui/res/editions/Modern Horizons 3 Commander.txt index 32bc91c08e6..c96e6b2a9a7 100644 --- a/forge-gui/res/editions/Modern Horizons 3 Commander.txt +++ b/forge-gui/res/editions/Modern Horizons 3 Commander.txt @@ -179,7 +179,7 @@ ScryfallCode=M3C 191 U Propaganda @Clint Cearley 192 R Replication Technique @Viko Menezes 193 R Summary Dismissal @Igor Kieryluk -194 R Tezzeret's Gambit @Karl Kopinski +194 U Tezzeret's Gambit @Karl Kopinski 195 C Treasure Cruise @Cynthia Sheppard 196 R Ugin's Insight @Tyler Jacobson 197 M Archon of Cruelty @Andrew Mar @@ -224,7 +224,7 @@ ScryfallCode=M3C 236 R Magus of the Candelabra @Jason A. Engle 237 R Mana Reflection @Chris Seaman 238 C Poison Dart Frog @Julia Metzger -239 R Rampaging Baloths @Steve Prescott +239 M Rampaging Baloths @Steve Prescott 240 C Rampant Growth @Steven Belledin 241 R Ramunap Excavator @Mark Behm 242 R Return of the Wildspeaker @Chris Rallis @@ -251,7 +251,7 @@ ScryfallCode=M3C 263 C Grisly Salvage @Dave Kendall 264 M Grist, the Hunger Tide @Yongjae Choi 265 C Growth Spiral @Seb McKinnon -266 M Hydroid Krasis @Jason Felix +266 R Hydroid Krasis @Jason Felix 267 R Izoni, Thousand-Eyed @Eric Deschamps 268 R Kolaghan's Command @Daarken 269 R Maelstrom Pulse @Anthony Francisco @@ -282,7 +282,7 @@ ScryfallCode=M3C 294 M Gonti's Aether Heart @Vincent Proce 295 U Hedron Archive @Craig J Spearing 296 U Herald's Horn @Jason Felix -297 R Idol of Oblivion @Piotr Dura +297 U Idol of Oblivion @Piotr Dura 298 U Lightning Greaves @Michael Komarck 299 R Maskwood Nexus @Jason A. Engle 300 R Mirage Mirror @Craig J Spearing @@ -303,7 +303,7 @@ ScryfallCode=M3C 315 C Wayfarer's Bauble @Darrell Riche 316 R Adarkar Wastes @Piotr Dura 317 U Aether Hub @Sam Burley -318 U Ash Barrens @Jonas De Ro +318 C Ash Barrens @Jonas De Ro 319 U Azorius Chancery @John Avon 320 C Basilisk Gate @Jorge Jacinto 321 R Battlefield Forge @Thomas Stoop @@ -324,7 +324,7 @@ ScryfallCode=M3C 336 C Desert of the Indomitable @James Paick 337 C Desert of the Mindful @Christine Choi 338 R Dreamroot Cascade @Sam Burley -339 U Eldrazi Temple @Jorge Jacinto +339 R Eldrazi Temple @Jorge Jacinto 340 C Evolving Wilds @Alayna Danner 341 R Exotic Orchard @Steven Belledin 342 R Flooded Grove @Dave Kendall diff --git a/forge-gui/res/editions/Secret Lair Drop Series.txt b/forge-gui/res/editions/Secret Lair Drop Series.txt index 54ef13bbbd1..e11c82aec9e 100644 --- a/forge-gui/res/editions/Secret Lair Drop Series.txt +++ b/forge-gui/res/editions/Secret Lair Drop Series.txt @@ -1384,6 +1384,11 @@ F1540 M Rainbow Dash @John Thacker 1555b M Jetmir, Nexus of Revels @Nicole Gustafsson 1556 R Jinnie Fay, Jetmir's Second @Jack Hughes 1556b R Jinnie Fay, Jetmir's Second @Jack Hughes +1557 M Najeela, the Blade-Blossom @Clint Cearley & Diana Cearley +1558 M Kelsien, the Plague @Dan Watson +1559 M Queen Marchesa @Narendra Bintara Adi +1560 R Ramses, Assassin Lord @Zezhou Chen +1561 M Admiral Beckett Brass @Fajareka Setiawan 1566 R Gonti, Lord of Luxury @Ivan Shavrin 1566★ R Gonti, Lord of Luxury @Ivan Shavrin 1567 R Vilis, Broker of Blood @Peter Diamond @@ -1392,6 +1397,11 @@ F1540 M Rainbow Dash @John Thacker 1568★ M Anowon, the Ruin Thief @David Robert Hovey 1569 R Grenzo, Dungeon Warden @Alex Stone 1569★ R Grenzo, Dungeon Warden @Alex Stone +1570 R Blade of Selves @Miklós Ligeti & AndWorld Design +1571 R Conqueror's Flail @Miklós Ligeti & AndWorld Design +1572 R Darksteel Plate @Miklós Ligeti & AndWorld Design +1573 R Deathrender @Miklós Ligeti & AndWorld Design +1574 R Whispersilk Cloak @Miklós Ligeti & AndWorld Design 1575 R Reconnaissance @Josh Newton & Scott Okumura 1575★ R Reconnaissance @Josh Newton & Scott Okumura 1576 R Jace, Wielder of Mysteries @Josh Newton & Scott Okumura @@ -1409,16 +1419,22 @@ F1540 M Rainbow Dash @John Thacker 1584 R The Fifteenth Doctor @Kieran Yanner 1587 R Shelter @Mandy Jurgens 1587★ R Shelter @Mandy Jurgens +1592 R Diabolic Tutor @Leonardo Santanna 1594 R Chandra's Ignition @Justyna Dura 1594★ R Chandra's Ignition @Justyna Dura +1595 R Chord of Calling @Kekai Kotaki 1596 R Harmonize @Syutsuri 1596★ R Harmonize @Syutsuri 1597 R Azusa, Lost but Seeking @Jehan Choo 1597★ R Azusa, Lost but Seeking @Jehan Choo +1599 M Child of Alara @Aya Kato 1602 R Feather, the Redeemed @Yuko Shimizu 1602★ R Feather, the Redeemed @Yuko Shimizu +1603 R Song of Creation @PE-nekoR +1604 R Sol Ring @Narendra Bintara Adi 1605 R Inspiring Vantage @Dani Pendergast 1605★ R Inspiring Vantage @Dani Pendergast +1607 R Thespian's Stage @Billy Christian 1608 M Avabruck Caretaker @Kev Walker 1609 R Beastmaster Ascension @Greg Staples 1610 R Howl of the Night Pack @Johannes Voss @@ -1477,7 +1493,7 @@ F1540 M Rainbow Dash @John Thacker 1645★ M Fiend Artisan @Laura Plansker 1646 M Karador, Ghost Chieftain @Laura Plansker 1646★ M Karador, Ghost Chieftain @Laura Plansker -1687 M Kalitas, Traitor of Ghet +1687 M Kalitas, Traitor of Ghet @Massiveface 1688 R Magda, Brazen Outlaw @Cabrol 1689 M Dack Fayden @Dibujante Nocturno 1690 R Greasefang, Okiba Boss @Michael Walsh @@ -1500,6 +1516,16 @@ F1540 M Rainbow Dash @John Thacker 1705 R Goblin King @Bene Rohlmann 1706 R Professional Face-Breaker @Bene Rohlmann 1707 M Rankle, Master of Pranks @Bene Rohlmann +1708 R Soul Warden @Julie Bell +1709 R Shivan Dragon @Julie Bell +1710 R Elves of Deep Shadow @Julie Bell +1711 R Good-Fortune Unicorn @Julie Bell +1712 R Coat of Arms @Julie Bell +1713 R Dictate of Erebos @Kathleen Neeley & AndWorld Design +1714 R Fecundity @Kathleen Neeley & AndWorld Design +1715 R Mayhem Devil @Kathleen Neeley & AndWorld Design +1716 R Moldervine Reclamation @Kathleen Neeley & AndWorld Design +1717 M Prossh, Skyraider of Kher @Kathleen Neeley & AndWorld Design 8001 M Jace, the Mind Sculptor @Wizard of Barge 9990 R Doom Blade @Cynthia Sheppard 9991 R Massacre @Andrey Kuzinskiy From d4469ca7362629a4fe680f71a1448082ecc57800 Mon Sep 17 00:00:00 2001 From: Chris H Date: Sat, 22 Jun 2024 06:42:29 -0400 Subject: [PATCH 09/15] Add Spire Phantasm, Agent of Acquisitions, Cogwork Librarian, Leovold's Operative (#5437) * Next few Draft cards * Code review fixes * Add Spire Phantasm * Add Agent of Acquisitions, Cogwork Librarian, Leovold's Operative * Some small fixes * Getting closer * Now the UI is updating * Switch DraftPack to a delegate class * Fix agent of acquisitions when AI drafts it --- forge-core/src/main/java/forge/deck/Deck.java | 15 ++ .../java/forge/game/card/CardProperty.java | 3 + .../controllers/CEditorDraftingProcess.java | 11 +- .../src/test/java/forge/BoosterDraftTest.java | 9 +- .../cardsfolder/a/agent_of_acquisitions.txt | 7 + .../res/cardsfolder/c/cogwork_librarian.txt | 7 + .../res/cardsfolder/l/leovolds_operative.txt | 7 + .../res/cardsfolder/s/spire_phantasm.txt | 10 + .../editions/Conspiracy Take the Crown.txt | 1 + forge-gui/res/editions/Conspiracy.txt | 18 +- .../forge/gamemodes/limited/BoosterDraft.java | 41 +++- .../forge/gamemodes/limited/CardRanker.java | 17 +- .../forge/gamemodes/limited/DraftPack.java | 49 +++++ .../gamemodes/limited/IBoosterDraft.java | 4 +- .../gamemodes/limited/LimitedPlayer.java | 192 +++++++++++++++--- .../gamemodes/limited/LimitedPlayerAI.java | 51 ++++- 16 files changed, 384 insertions(+), 58 deletions(-) create mode 100644 forge-gui/res/cardsfolder/a/agent_of_acquisitions.txt create mode 100644 forge-gui/res/cardsfolder/c/cogwork_librarian.txt create mode 100644 forge-gui/res/cardsfolder/l/leovolds_operative.txt create mode 100644 forge-gui/res/cardsfolder/s/spire_phantasm.txt create mode 100644 forge-gui/src/main/java/forge/gamemodes/limited/DraftPack.java diff --git a/forge-core/src/main/java/forge/deck/Deck.java b/forge-core/src/main/java/forge/deck/Deck.java index 7c8fa7ed594..0f5e5e0fee4 100644 --- a/forge-core/src/main/java/forge/deck/Deck.java +++ b/forge-core/src/main/java/forge/deck/Deck.java @@ -174,6 +174,21 @@ public class Deck extends DeckBase implements Iterable kv : parts.entrySet()) { + CardPool pool = kv.getValue(); + for (Entry pc : pool) { + if (pc.getKey().getName().equalsIgnoreCase(name)) { + paperCard = pc.getKey(); + pool.remove(paperCard); + return paperCard; + } + } + } + return null; + } + // will return new if it was absent public CardPool getOrCreate(DeckSection deckSection) { CardPool p = get(deckSection); diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index f8423f91411..becfda819a0 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -2129,6 +2129,9 @@ public class CardProperty { List nameList = Lists.newArrayList(names.split(";")); return nameList.contains(card.getName()); + } else if (property.equals("NotedGuessPhantasm")) { + String names = sourceController.getDraftNotes().get("Spire Phantasm"); + return names != null && !names.isEmpty(); } else if (property.equals("NotedTypes")) { // Should Paliano Vanguard be hardcoded here or part of the property? String types = sourceController.getDraftNotes().get("Paliano Vanguard"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java index 30ddb32c78c..382104d339f 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java @@ -116,12 +116,21 @@ public class CEditorDraftingProcess extends ACEditorBase i // can only draft one at a time, regardless of the requested quantity PaperCard card = items.iterator().next().getKey(); + if (boosterDraft.getHumanPlayer().shouldSkipThisPick()) { + System.out.println(card + " not drafted because we're skipping this pick"); + showPackToDraft(); + return; + } + // Verify if card is in the activate pack? this.getDeckManager().addItem(card, 1); - // get next booster pack + // get next booster pack if we aren't picking again from this pack this.boosterDraft.setChoice(card); + showPackToDraft(); + } + protected void showPackToDraft() { boolean nextChoice = this.boosterDraft.hasNextChoice(); ItemPool pool = null; if (nextChoice) { diff --git a/forge-gui-desktop/src/test/java/forge/BoosterDraftTest.java b/forge-gui-desktop/src/test/java/forge/BoosterDraftTest.java index 0b35a78afc4..fcd0f5467c3 100644 --- a/forge-gui-desktop/src/test/java/forge/BoosterDraftTest.java +++ b/forge-gui-desktop/src/test/java/forge/BoosterDraftTest.java @@ -58,10 +58,15 @@ public class BoosterDraftTest implements IBoosterDraft { return result; } - /** {@inheritDoc} */ + /** + * {@inheritDoc} + * + * @return + */ @Override - public void setChoice(final PaperCard c) { + public boolean setChoice(final PaperCard c) { System.out.println(c.getName()); + return false; } @Override diff --git a/forge-gui/res/cardsfolder/a/agent_of_acquisitions.txt b/forge-gui/res/cardsfolder/a/agent_of_acquisitions.txt new file mode 100644 index 00000000000..c288c3a14e7 --- /dev/null +++ b/forge-gui/res/cardsfolder/a/agent_of_acquisitions.txt @@ -0,0 +1,7 @@ +Name:Agent of Acquisitions +ManaCost:2 +Types:Artifact Creature Construct +PT:2/1 +Draft:Draft CARDNAME face up. +Draft:Instead of drafting a card from a booster pack, you may draft each card in that booster pack, one at a time. If you do, turn CARDNAME face down and you can’t draft cards for the rest of this draft round. (You may look at booster packs passed to you.) +Oracle:Draft Agent of Acquisitions face up.\nInstead of drafting a card from a booster pack, you may draft each card in that booster pack, one at a time. If you do, turn Agent of Acquisitions face down and you can’t draft cards for the rest of this draft round. (You may look at booster packs passed to you.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/c/cogwork_librarian.txt b/forge-gui/res/cardsfolder/c/cogwork_librarian.txt new file mode 100644 index 00000000000..4afd4ab6f88 --- /dev/null +++ b/forge-gui/res/cardsfolder/c/cogwork_librarian.txt @@ -0,0 +1,7 @@ +Name:Cogwork Librarian +ManaCost:4 +Types:Artifact Creature Construct +PT:3/3 +Draft:Draft CARDNAME face up. +Draft:As you draft a card, you may draft an additional card from that booster pack. If you do, put CARDNAME into that booster pack. +Oracle:Draft Cogwork Librarian face up.\nAs you draft a card, you may draft an additional card from that booster pack. If you do, put Cogwork Librarian into that booster pack. diff --git a/forge-gui/res/cardsfolder/l/leovolds_operative.txt b/forge-gui/res/cardsfolder/l/leovolds_operative.txt new file mode 100644 index 00000000000..bd6ef58acac --- /dev/null +++ b/forge-gui/res/cardsfolder/l/leovolds_operative.txt @@ -0,0 +1,7 @@ +Name:Leovold's Operative +ManaCost:2 G +Types:Creature Elf Rogue +PT:3/2 +Draft:Draft CARDNAME face up. +Draft:As you draft a card, you may draft an additional card from that booster pack. If you do, turn CARDNAME face down, then pass the next booster pack without drafting a card from it. (You may look at that booster pack.) +Oracle:Draft Leovold’s Operative face up.\n\nAs you draft a card, you may draft an additional card from that booster pack. If you do, turn Leovold’s Operative face down, then pass the next booster pack without drafting a card from it. (You may look at that booster pack.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/s/spire_phantasm.txt b/forge-gui/res/cardsfolder/s/spire_phantasm.txt new file mode 100644 index 00000000000..b22b9644c96 --- /dev/null +++ b/forge-gui/res/cardsfolder/s/spire_phantasm.txt @@ -0,0 +1,10 @@ +Name:Spire Phantasm +ManaCost:2 U U +Types:Creature Gargoyle Illusion +PT:3/2 +Draft:Reveal CARDNAME as you draft it. +Draft:The next time a player drafts a card from this booster pack, guess that card’s name. Then that player reveals the drafted card. +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self+NotedGuessPhantasm | Execute$ DrawACard | TriggerDescription$ When CARDNAME enters the battlefield, if you guessed correctly for a card named Spire Phantasm, draw a card. +SVar:DrawACard:DB$ Draw | Amount$ 1 +Oracle:Reveal Spire Phantasm as you draft it. The next time a player drafts a card from this booster pack, guess that card’s name. Then that player reveals the drafted card.\nFlying\nWhen Spire Phantasm enters the battlefield, if you guessed correctly for a card named Spire Phantasm, draw a card. \ No newline at end of file diff --git a/forge-gui/res/editions/Conspiracy Take the Crown.txt b/forge-gui/res/editions/Conspiracy Take the Crown.txt index 9479b4645d5..70f7fe7701c 100644 --- a/forge-gui/res/editions/Conspiracy Take the Crown.txt +++ b/forge-gui/res/editions/Conspiracy Take the Crown.txt @@ -248,6 +248,7 @@ Hold the Perimeter Hymn of the Wilds Illusionary Informant Incendiary Dissent +Leovold's Operative Natural Unity Noble Banneret Paliano Vanguard diff --git a/forge-gui/res/editions/Conspiracy.txt b/forge-gui/res/editions/Conspiracy.txt index e68f8526d6a..2c60fc063e6 100644 --- a/forge-gui/res/editions/Conspiracy.txt +++ b/forge-gui/res/editions/Conspiracy.txt @@ -221,31 +221,31 @@ ScryfallCode=CNS 210 R Reflecting Pool @Fred Fields [Draft Matters] -#1 Advantageous Proclamation|CNS +1 Advantageous Proclamation|CNS 1 Aether Searcher|CNS -#1 Agent of Acquisitions|CNS +1 Agent of Acquisitions|CNS #1 Backup Plan|CNS 1 Brago's Favor|CNS #1 Canal Dredger|CNS 1 Cogwork Grinder|CNS -#1 Cogwork Librarian|CNS +1 Cogwork Librarian|CNS 1 Cogwork Spy|CNS 1 Cogwork Tracker|CNS #1 Deal Broker|CNS -#1 Double Stroke|CNS +1 Double Stroke|CNS 1 Immediate Action|CNS -#1 Iterative Analysis|CNS +1 Iterative Analysis|CNS #1 Lore Seeker|CNS 1 Lurking Automaton|CNS 1 Muzzio's Preparations|CNS 1 Paliano, the High City|CNS -#1 Power Play|CNS +1 Power Play|CNS 1 Secret Summoning|CNS 1 Secrets of Paradise|CNS -#1 Sentinel Dispatch|CNS -#1 Unexpected Potential|CNS +1 Sentinel Dispatch|CNS +1 Unexpected Potential|CNS 1 Whispergear Sneak|CNS -#1 Worldknit|CNS +1 Worldknit|CNS [tokens] w_1_1_spirit_flying diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java index cfa755c04d0..724c532d05e 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/BoosterDraft.java @@ -50,6 +50,7 @@ import java.util.*; */ public class BoosterDraft implements IBoosterDraft { + private static int nextId = 0; private static final int N_PLAYERS = 8; public static final String FILE_EXT = ".draft"; private final List players = new ArrayList<>(); @@ -371,9 +372,11 @@ public class BoosterDraft implements IBoosterDraft { } public void initializeBoosters() { + for (Supplier> boosterRound : this.product) { for (int i = 0; i < N_PLAYERS; i++) { - this.players.get(i).receiveUnopenedPack(boosterRound.get()); + DraftPack pack = new DraftPack(boosterRound.get(), nextId++); + this.players.get(i).receiveUnopenedPack(pack); } } startRound(); @@ -437,8 +440,10 @@ public class BoosterDraft implements IBoosterDraft { adjust = 0; } + // Do any players have a Canal Dredger? + for (int i = 0; i < N_PLAYERS; i++) { - List passingPack = this.players.get(i).passPack(); + DraftPack passingPack = this.players.get(i).passPack(); if (passingPack == null) continue; @@ -463,7 +468,17 @@ public class BoosterDraft implements IBoosterDraft { for (int i = 1; i < N_PLAYERS; i++) { LimitedPlayer pl = this.players.get(i); // TODO Agent of Acquisitions activation to loop the entire pack? - pl.draftCard(pl.chooseCard()); + + if (pl.shouldSkipThisPick()) { + continue; + } + + // Computer player has an empty pack or is passing the pack + Boolean passPack; + do { + // THe player holding onto the pack to draft an extra card... Do it now. + passPack = pl.draftCard(pl.chooseCard()); + } while (passPack != null && !passPack); } } @@ -473,6 +488,7 @@ public class BoosterDraft implements IBoosterDraft { @Override public boolean isRoundOver() { + // Really should check if all packs are empty, but this is a good enough approximation return packsInDraft == 0; } @@ -483,10 +499,12 @@ public class BoosterDraft implements IBoosterDraft { /** * {@inheritDoc} + * + * @return */ @Override - public void setChoice(final PaperCard c) { - final List thisBooster = this.localPlayer.nextChoice(); + public boolean setChoice(final PaperCard c) { + final DraftPack thisBooster = this.localPlayer.nextChoice(); if (!thisBooster.contains(c)) { throw new RuntimeException("BoosterDraft : setChoice() error - card not found - " + c @@ -495,11 +513,16 @@ public class BoosterDraft implements IBoosterDraft { recordDraftPick(thisBooster, c); - // TODO Agent of Acquisitions activation to loop the entire pack? - - this.localPlayer.draftCard(c); + boolean passPack = this.localPlayer.draftCard(c); + if (passPack) { + // Leovolds Operative and Cogwork Librarian get to draft an extra card.. How do we do that? + this.passPacks(); + } this.currentBoosterPick++; - this.passPacks(); + + // Return whether or not we passed, but that the UI always needs to refresh + // But returning might be useful for testing or other things? + return passPack; } private static String choosePackByPack(final List setz, int packs) { diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/CardRanker.java b/forge-gui/src/main/java/forge/gamemodes/limited/CardRanker.java index 2cf41228dd8..61f7baa244a 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/CardRanker.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/CardRanker.java @@ -3,7 +3,6 @@ package forge.gamemodes.limited; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; - import forge.card.ColorSet; import forge.card.DeckHints; import forge.card.MagicColor; @@ -114,6 +113,22 @@ public class CardRanker { return cardScores; } + public static List getOrderedRawScores(List cards) { + List> cardScores = Lists.newArrayList(); + for(PaperCard card : cards) { + cardScores.add(Pair.of(getRawScore(card), card)); + } + + cardScores.sort(Collections.reverseOrder(new CardRankingComparator())); + + List rankedCards = new ArrayList<>(cardScores.size()); + for (Pair pair : cardScores) { + rankedCards.add(pair.getValue()); + } + + return rankedCards; + } + public static double getRawScore(PaperCard card) { Double rawScore; if (MagicColor.Constant.BASIC_LANDS.contains(card.getName())) { diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/DraftPack.java b/forge-gui/src/main/java/forge/gamemodes/limited/DraftPack.java new file mode 100644 index 00000000000..be55802268b --- /dev/null +++ b/forge-gui/src/main/java/forge/gamemodes/limited/DraftPack.java @@ -0,0 +1,49 @@ +package forge.gamemodes.limited; + +import com.google.common.collect.ForwardingList; +import forge.item.PaperCard; + +import java.util.AbstractMap; +import java.util.List; +import java.util.Map; + +public class DraftPack extends ForwardingList { + private final List cards; + private final int id; + private LimitedPlayer passedFrom; + private Map.Entry awaitingGuess; + + public DraftPack(List cards, int id) { + this.cards = cards; + this.id = id; + } + + public int getId() { + return id; + } + + public LimitedPlayer getPassedFrom() { + return passedFrom; + } + + public void setPassedFrom(LimitedPlayer passedFrom) { + this.passedFrom = passedFrom; + } + + public void setAwaitingGuess(LimitedPlayer player, PaperCard card) { + this.awaitingGuess = new AbstractMap.SimpleEntry<>(player, card); + } + + public Map.Entry getAwaitingGuess() { + return awaitingGuess; + } + + public void resetAwaitingGuess() { + this.awaitingGuess = null; + } + + @Override + protected List delegate() { + return cards; + } +} diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/IBoosterDraft.java b/forge-gui/src/main/java/forge/gamemodes/limited/IBoosterDraft.java index c6dd6cac44d..2f1fd74edf3 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/IBoosterDraft.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/IBoosterDraft.java @@ -34,7 +34,7 @@ public interface IBoosterDraft { int getRound(); CardPool nextChoice(); - void setChoice(PaperCard c); + boolean setChoice(PaperCard c); boolean hasNextChoice(); boolean isRoundOver(); Deck[] getDecks(); // size 7, all the computers decks @@ -49,4 +49,6 @@ public interface IBoosterDraft { IDraftLog getDraftLog(); LimitedPlayer getNeighbor(LimitedPlayer p, boolean left); LimitedPlayer getPlayer(int i); + + } diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java index 89da1b279c5..13797ef6082 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayer.java @@ -21,15 +21,15 @@ public class LimitedPlayer { protected Deck deck; protected PaperCard lastPick; - protected Queue> packQueue; - protected Queue> unopenedPacks; + protected Queue packQueue; + protected Queue unopenedPacks; protected List removedFromCardPool = new ArrayList<>(); - private static final int CantDraftThisRound = 1; - private static final int SpyNextCardDrafted = 1 << 1; - private static final int ReceiveLastCard = 1 << 2; - private static final int CanRemoveAfterDraft = 1 << 3; - private static final int CanTradeAfterDraft = 1 << 4; + private static final int AgentAcquisitionsCanDraftAll = 1; + private static final int AgentAcquisitionsIsDraftingAll = 1 << 1; + private static final int AgentAcquisitionsSkipDraftRound = 1 << 2; + private static final int CogworkLibrarianExtraDraft = 1 << 3; + private static final int CogworkLibrarianReturnLibrarian = 1 << 4; private static final int AnimusRemoveFromPool = 1 << 5; private static final int NobleBanneretActive = 1 << 6; private static final int PalianoVanguardActive = 1 << 7; @@ -37,6 +37,10 @@ public class LimitedPlayer { private static final int SearcherNoteNext = 1 << 9; private static final int WhispergearBoosterPeek = 1 << 10; private static final int IllusionaryInformantPeek = 1 << 11; + private static final int LeovoldsOperativeCanExtraDraft = 1 << 12; + private static final int LeovoldsOperativeExtraDraft = 1 << 13; + private static final int LeovoldsOperativeSkipNext = 1 << 14; + private static final int SpyNextCardDrafted = 1 << 15; private int playerFlags = 0; @@ -88,24 +92,25 @@ public class LimitedPlayer { return null; } - public boolean draftCard(PaperCard bestPick) { + public Boolean draftCard(PaperCard bestPick) { return draftCard(bestPick, DeckSection.Sideboard); } - public boolean draftCard(PaperCard bestPick, DeckSection section) { + public Boolean draftCard(PaperCard bestPick, DeckSection section) { if (bestPick == null) { - return false; + return null; } - List chooseFrom = packQueue.peek(); + DraftPack chooseFrom = packQueue.peek(); if (chooseFrom == null) { - return false; + return null; } boolean removedFromPool = false; boolean alreadyRevealed = false; + boolean passPack = true; chooseFrom.remove(bestPick); - lastPick = lastPick; + lastPick = bestPick; draftedThisRound++; @@ -134,9 +139,10 @@ public class LimitedPlayer { recordRemoveFromDraft(bestPick, choice); } - LimitedPlayer fromPlayer = receivedFrom(); + + LimitedPlayer fromPlayer = chooseFrom.getPassedFrom(); // If the previous player has an active Cogwork Spy, show them this card - if ((fromPlayer.playerFlags & SpyNextCardDrafted) == SpyNextCardDrafted) { + if (fromPlayer != null && (fromPlayer.playerFlags & SpyNextCardDrafted) == SpyNextCardDrafted) { if (fromPlayer instanceof LimitedPlayerAI) { // I'm honestly not sure what the AI would do by learning this information // But just log that a reveal "happened" @@ -169,9 +175,73 @@ public class LimitedPlayer { } } + if ((playerFlags & AgentAcquisitionsCanDraftAll) == AgentAcquisitionsCanDraftAll) { + if (handleAgentOfAcquisitions(chooseFrom, bestPick)) { + addLog(name() + " drafted the rest of the pack with Agent of Acquisitions"); + playerFlags &= ~AgentAcquisitionsCanDraftAll; + playerFlags |= AgentAcquisitionsIsDraftingAll; + } + } + + if ((playerFlags & AgentAcquisitionsIsDraftingAll) == AgentAcquisitionsIsDraftingAll) { + if (chooseFrom.isEmpty()) { + playerFlags &= ~AgentAcquisitionsIsDraftingAll; + playerFlags |= AgentAcquisitionsSkipDraftRound; + } else { + passPack = false; + } + } + + if ((playerFlags & LeovoldsOperativeExtraDraft) == LeovoldsOperativeExtraDraft) { + if (handleLeovoldsOperative(chooseFrom, bestPick)) { + addLog(name() + " skipped their next pick with Leovold's Operative."); + playerFlags &= ~LeovoldsOperativeExtraDraft; + playerFlags |= LeovoldsOperativeSkipNext; + passPack = false; + } + } + + if ((playerFlags & LeovoldsOperativeCanExtraDraft) == LeovoldsOperativeCanExtraDraft) { + if (handleLeovoldsOperative(chooseFrom, bestPick)) { + addLog(name() + " picking again with Leovold's Operative."); + playerFlags &= ~LeovoldsOperativeCanExtraDraft; + playerFlags |= LeovoldsOperativeExtraDraft; + passPack = false; + } + } + + if ((playerFlags & CogworkLibrarianReturnLibrarian) == CogworkLibrarianReturnLibrarian) { + addLog(name() + " returned Cogwork Librarian to the pack."); + + PaperCard librarian = deck.removeCardName("Cogwork Librarian"); + // TODO The librarian needs to be removed from the UI + + // We shouldn't get here unless we've drafted librarian so we should be able to find one in Deck + // If somehow we don't wellll.. we should remove the bitflag anyway + playerFlags &= ~CogworkLibrarianReturnLibrarian; + if (librarian != null) { + chooseFrom.add(librarian); + } else { + System.out.println("This shouldn't happen. We drafted a libarian but didn't remove it properly."); + } + } + + if ((playerFlags & CogworkLibrarianExtraDraft) == CogworkLibrarianExtraDraft) { + if (handleCogworkLibrarian(chooseFrom, bestPick)) { + addLog(name() + " drafted an extra card with Cogwork Librarian."); + playerFlags &= ~CogworkLibrarianExtraDraft; + playerFlags |= CogworkLibrarianReturnLibrarian; + passPack = false; + } + } + + if (chooseFrom.getAwaitingGuess() != null) { + comparePhantasmGuess(chooseFrom, bestPick); + } + if (removedFromPool) { // Can we hide this from UI? - return true; + return passPack; } CardPool pool = deck.getOrCreate(section); @@ -182,7 +252,7 @@ public class LimitedPlayer { Iterable draftActions = bestPick.getRules().getMainPart().getDraftActions(); if (draftActions == null || !draftActions.iterator().hasNext()) { - return true; + return passPack; } // Draft Actions @@ -223,17 +293,17 @@ public class LimitedPlayer { } else { if (Iterables.contains(draftActions, "You may look at the next card drafted from this booster pack.")) { - // Cogwork Spy playerFlags |= SpyNextCardDrafted; - } - - if (Iterables.contains(draftActions, "Note the player who passed CARDNAME to you.")) { + } else if (fromPlayer != null && Iterables.contains(draftActions, "Note the player who passed CARDNAME to you.")) { // Note who passed it to you. // If you receive last card from Canal Dredger, we need to figure out who last had the pack? List note = noted.computeIfAbsent(bestPick.getName(), k -> Lists.newArrayList()); note.add(String.valueOf(fromPlayer.order)); + addLog(name() + " revealed " + bestPick.getName() + " and noted " + fromPlayer.name() + " passed it."); } else if (Iterables.contains(draftActions, "Reveal the next card you draft and note its name.")) { playerFlags |= SearcherNoteNext; + } else if (Iterables.contains(draftActions, "The next time a player drafts a card from this booster pack, guess that card’s name. Then that player reveals the drafted card.")) { + chooseFrom.setAwaitingGuess(this, handleSpirePhantasm(chooseFrom)); } addLog(name() + " revealed " + bestPick.getName() + " as " + name() + " drafted it."); @@ -261,6 +331,12 @@ public class LimitedPlayer { // Do we need to ask to use the Sneak immediately? } else if (Iterables.contains(draftActions, "During the draft, you may turn CARDNAME face down. If you do, look at the next card drafted by a player of your choice.")) { playerFlags |= IllusionaryInformantPeek; + } else if (Iterables.contains(draftActions, "As you draft a card, you may draft an additional card from that booster pack. If you do, put CARDNAME into that booster pack.")) { + playerFlags |= CogworkLibrarianExtraDraft; + } else if (Iterables.contains(draftActions, "As you draft a card, you may draft an additional card from that booster pack. If you do, turn CARDNAME face down, then pass the next booster pack without drafting a card from it. (You may look at that booster pack.)")) { + playerFlags |= LeovoldsOperativeExtraDraft; + } else if (Iterables.contains(draftActions, "Instead of drafting a card from a booster pack, you may draft each card in that booster pack, one at a time. If you do, turn CARDNAME face down and you can’t draft cards for the rest of this draft round. (You may look at booster packs passed to you.)")) { + playerFlags |= AgentAcquisitionsCanDraftAll; } } @@ -277,32 +353,44 @@ public class LimitedPlayer { // Mobile doesnt have a draft log yet } - public List nextChoice() { + public DraftPack nextChoice() { return packQueue.peek(); } - public LimitedPlayer receivedFrom() { - return draft.getNeighbor(this, draft.getRound() % 2 == 0); - } - public void newPack() { currentPack = order; draftedThisRound = 0; packQueue.add(unopenedPacks.poll()); + playerFlags &= ~AgentAcquisitionsSkipDraftRound; } public void adjustPackNumber(int adjust, int numPacks) { + // I shouldn't need this since DraftPack has this info currentPack = (currentPack + adjust + numPacks) % numPacks; } - public List passPack() { - return packQueue.poll(); + public DraftPack passPack() { + DraftPack pack = packQueue.poll(); + if (pack != null) { + pack.setPassedFrom(this); + } + return pack; } - public void receiveUnopenedPack(List pack) { + public boolean shouldSkipThisPick() { + boolean skipping = (playerFlags & AgentAcquisitionsSkipDraftRound) == AgentAcquisitionsSkipDraftRound || (playerFlags & LeovoldsOperativeSkipNext) == LeovoldsOperativeSkipNext; + + if (skipping && (playerFlags & LeovoldsOperativeSkipNext) == LeovoldsOperativeSkipNext) { + playerFlags &= ~LeovoldsOperativeSkipNext; + } + + return skipping; + } + + public void receiveUnopenedPack(DraftPack pack) { unopenedPacks.add(pack); } - public void receiveOpenedPack(List pack) { + public void receiveOpenedPack(DraftPack pack) { packQueue.add(pack); } @@ -504,7 +592,7 @@ public class LimitedPlayer { return true; } - protected List peekAtBoosterPack(int round, int playerNumber) { + protected DraftPack peekAtBoosterPack(int round, int playerNumber) { if (draft.getRound() > round) { // There aren't any unopened packs from earlier rounds return null; @@ -541,11 +629,51 @@ public class LimitedPlayer { return true; } + public PaperCard handleSpirePhantasm(DraftPack chooseFrom) { + if (chooseFrom.isEmpty()) { + return null; + } + + return SGuiChoose.one("Guess the next card drafted from this pack", chooseFrom); + } + + public boolean handleLeovoldsOperative(DraftPack pack, PaperCard drafted) { + if (Objects.equals(SGuiChoose.one("Draft an extra pick with Leovold's Operative?", Lists.newArrayList("Yes", "No")), "No")) { + return false; + } + + playerFlags |= LeovoldsOperativeExtraDraft; + return true; + } + + public boolean handleCogworkLibrarian(DraftPack pack, PaperCard drafted) { + return !Objects.equals(SGuiChoose.one("Draft an extra pick with Cogwork Librarian?", Lists.newArrayList("Yes", "No")), "No"); + } + + public boolean handleAgentOfAcquisitions(DraftPack pack, PaperCard drafted) { + return !Objects.equals(SGuiChoose.one("Draft the rest of the pack with Agent of Acquisitions?", Lists.newArrayList("Yes", "No")), "No"); + } + + public void comparePhantasmGuess(DraftPack pack, PaperCard drafted) { + LimitedPlayer guesser = pack.getAwaitingGuess().getKey(); + PaperCard guess = pack.getAwaitingGuess().getValue(); + + addLog(name() + " reveals " + drafted.getName() + " from " + guesser.name() + "'s guess of " + guess.getName() + " with Spire Phantasm."); + if (guess.equals(drafted)) { + addLog(guesser.name() + " correctly guessed " + guess.getName() + " with Spire Phantasm."); + guesser.getDraftNotes().computeIfAbsent("Spire Phantasm", k -> Lists.newArrayList()).add(guess.getName()); + } else { + addLog(guesser.name() + " incorrectly guessed " + guess.getName() + " with Spire Phantasm."); + } + + pack.resetAwaitingGuess(); + } + + /* public void addSingleBoosterPack(boolean random) { // TODO Lore Seeker // Generate booster pack then, insert it "before" the pack we're currently drafting from } - */ } diff --git a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayerAI.java b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayerAI.java index e486105c00f..ab5bc6e83c1 100644 --- a/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayerAI.java +++ b/forge-gui/src/main/java/forge/gamemodes/limited/LimitedPlayerAI.java @@ -12,6 +12,9 @@ import java.util.Collections; import java.util.List; import java.util.Set; +import static forge.gamemodes.limited.CardRanker.getOrderedRawScores; +import static forge.gamemodes.limited.CardRanker.rankCardsInPack; + public class LimitedPlayerAI extends LimitedPlayer { protected DeckColors deckCols; @@ -26,7 +29,7 @@ public class LimitedPlayerAI extends LimitedPlayer { return null; } - List chooseFrom = packQueue.peek(); + DraftPack chooseFrom = packQueue.peek(); if (chooseFrom.isEmpty()) { return null; } @@ -38,11 +41,10 @@ public class LimitedPlayerAI extends LimitedPlayer { // TODO Archdemon of Paliano random draft while active - final ColorSet chosenColors = deckCols.getChosenColors(); final boolean canAddMoreColors = deckCols.canChoseMoreColors(); - List rankedCards = CardRanker.rankCardsInPack(chooseFrom, pool.toFlatList(), chosenColors, canAddMoreColors); + List rankedCards = rankCardsInPack(chooseFrom, pool.toFlatList(), chosenColors, canAddMoreColors); PaperCard bestPick = rankedCards.get(0); if (canAddMoreColors) { @@ -177,4 +179,47 @@ public class LimitedPlayerAI extends LimitedPlayer { //peekAt.getLastPick(); return true; } + + @Override + public PaperCard handleSpirePhantasm(DraftPack chooseFrom) { + if (chooseFrom.isEmpty()) { + return null; + } + + // Choose the card with the highest rank left + return getOrderedRawScores(chooseFrom).get(0); + } + + @Override + public boolean handleLeovoldsOperative(DraftPack pack, PaperCard drafted) { + // Whats the score of the thing I just drafted? + // Whats the next card I would draft? + if (currentPack == 3) { + return true; + } + + return draftedThisRound < 3; + } + + @Override + public boolean handleAgentOfAcquisitions(DraftPack pack, PaperCard drafted) { + // Whats the score of the thing I just drafted? + // Whats the total score of the rest of the pack? + // How many of these cards would actually make my deck? + if (currentPack == 3) { + return true; + } + + return draftedThisRound > 2 && draftedThisRound < 6; + } + + @Override + public boolean handleCogworkLibrarian(DraftPack pack, PaperCard drafted) { + if (currentPack == 3) { + return true; + } + + return draftedThisRound < 3; + } + } From 8c37a7347f8663e868a6e628db62385be5b1d1e8 Mon Sep 17 00:00:00 2001 From: Fulgur14 <54345051+Fulgur14@users.noreply.github.com> Date: Sat, 22 Jun 2024 21:22:43 +0200 Subject: [PATCH 10/15] ACR cards (#5441) --- forge-gui/res/cardsfolder/c/cavalier_of_thorns.txt | 2 +- forge-gui/res/cardsfolder/e/etched_familiar.txt | 2 +- .../res/cardsfolder/k/kokusho_the_evening_star.txt | 2 +- .../upcoming/abstergo_entertainment.txt | 10 ++++++++++ .../upcoming/adewale_breaker_of_chains.txt | 9 +++++++++ forge-gui/res/cardsfolder/upcoming/arbaaz_mir.txt | 8 ++++++++ .../res/cardsfolder/upcoming/assassin_den.txt | 9 +++++++++ .../res/cardsfolder/upcoming/assassin_initiate.txt | 6 ++++++ .../res/cardsfolder/upcoming/auditore_ambush.txt | 7 +++++++ .../cardsfolder/upcoming/aveline_de_grandpre.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/aya_of_alexandria.txt | 10 ++++++++++ .../upcoming/ballad_of_the_black_flag.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/basim_ibn_ishaq.txt | 11 +++++++++++ .../upcoming/battlefield_improvisation.txt | 6 ++++++ .../res/cardsfolder/upcoming/bayek_of_siwa.txt | 8 ++++++++ .../cardsfolder/upcoming/brotherhood_ambushers.txt | 6 ++++++ .../upcoming/brotherhood_headquarters.txt | 9 +++++++++ .../cardsfolder/upcoming/brotherhood_patriarch.txt | 9 +++++++++ .../cardsfolder/upcoming/brotherhood_regalia.txt | 8 ++++++++ .../res/cardsfolder/upcoming/brotherhood_spy.txt | 9 +++++++++ .../res/cardsfolder/upcoming/bureau_headmaster.txt | 8 ++++++++ .../upcoming/caduceus_staff_of_hermes.txt | 9 +++++++++ .../upcoming/crystal_skull_isu_spyglass.txt | 7 +++++++ .../res/cardsfolder/upcoming/desmond_miles.txt | 13 +++++++++++++ .../res/cardsfolder/upcoming/desynchronization.txt | 5 +++++ .../upcoming/detained_by_legionnaires.txt | 7 +++++++ .../cardsfolder/upcoming/distract_the_guards.txt | 6 ++++++ .../res/cardsfolder/upcoming/eagle_vision.txt | 6 ++++++ .../res/cardsfolder/upcoming/edward_kenway.txt | 13 +++++++++++++ .../res/cardsfolder/upcoming/eivor_wolf_kissed.txt | 14 ++++++++++++++ .../cardsfolder/upcoming/escarpment_fortress.txt | 10 ++++++++++ forge-gui/res/cardsfolder/upcoming/evie_frye.txt | 12 ++++++++++++ .../res/cardsfolder/upcoming/haytham_kenway.txt | 13 +++++++++++++ .../res/cardsfolder/upcoming/hidden_footblade.txt | 10 ++++++++++ forge-gui/res/cardsfolder/upcoming/hookblade.txt | 9 +++++++++ .../res/cardsfolder/upcoming/spartan_veteran.txt | 7 +++++++ .../res/tokenscripts/b_1_1_assassin_menace.txt | 7 +++++++ forge-gui/res/tokenscripts/w_1_1_human_rogue.txt | 6 ++++++ 38 files changed, 310 insertions(+), 3 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/abstergo_entertainment.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/adewale_breaker_of_chains.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/arbaaz_mir.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/assassin_den.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/assassin_initiate.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/auditore_ambush.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/aveline_de_grandpre.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/aya_of_alexandria.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/ballad_of_the_black_flag.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/basim_ibn_ishaq.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/battlefield_improvisation.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/bayek_of_siwa.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/brotherhood_ambushers.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/brotherhood_headquarters.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/brotherhood_patriarch.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/brotherhood_regalia.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/brotherhood_spy.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/bureau_headmaster.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/caduceus_staff_of_hermes.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/crystal_skull_isu_spyglass.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/desmond_miles.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/desynchronization.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/detained_by_legionnaires.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/distract_the_guards.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/eagle_vision.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/edward_kenway.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/eivor_wolf_kissed.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/escarpment_fortress.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/evie_frye.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/haytham_kenway.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/hidden_footblade.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/hookblade.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/spartan_veteran.txt create mode 100644 forge-gui/res/tokenscripts/b_1_1_assassin_menace.txt create mode 100644 forge-gui/res/tokenscripts/w_1_1_human_rogue.txt diff --git a/forge-gui/res/cardsfolder/c/cavalier_of_thorns.txt b/forge-gui/res/cardsfolder/c/cavalier_of_thorns.txt index 61ffa7677c0..ed4253285b9 100644 --- a/forge-gui/res/cardsfolder/c/cavalier_of_thorns.txt +++ b/forge-gui/res/cardsfolder/c/cavalier_of_thorns.txt @@ -4,7 +4,7 @@ Types:Creature Elemental Knight PT:5/6 K:Reach T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, reveal the top five cards of your library. Put a land card from among them onto the battlefield and the rest into your graveyard. -SVar:TrigDig:DB$ Dig | DigNum$ 5 | ChangeNum$ 1 | ChangeValid$ Land | Optional$ True | DestinationZone$ Battlefield | DestinationZone2$ Graveyard +SVar:TrigDig:DB$ Dig | DigNum$ 5 | ChangeNum$ 1 | ChangeValid$ Land | DestinationZone$ Battlefield | DestinationZone2$ Graveyard T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME dies, you may exile it. If you do, put another target card from your graveyard on top of your library. SVar:TrigExile:AB$ ChangeZone | Cost$ ExileAnyGrave<1/Card.TriggeredNewCard> | Origin$ Graveyard | Destination$ Library | ValidTgts$ Card.YouOwn+Other | TgtPrompt$ Select another target card from your graveyard | AITgts$ Card.Other DeckHas:Ability$Graveyard diff --git a/forge-gui/res/cardsfolder/e/etched_familiar.txt b/forge-gui/res/cardsfolder/e/etched_familiar.txt index c0fc397fe80..cf3ca0c6efc 100644 --- a/forge-gui/res/cardsfolder/e/etched_familiar.txt +++ b/forge-gui/res/cardsfolder/e/etched_familiar.txt @@ -3,7 +3,7 @@ ManaCost:2 B Types:Artifact Creature Phyrexian Fox PT:3/2 T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME dies, each opponent loses 2 life and you gain 2 life. -SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredCardOpponent | LifeAmount$ 2 | SubAbility$ DBGainLife +SVar:TrigLoseLife:DB$ LoseLife | Defined$ Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ TriggeredCardController | LifeAmount$ 2 DeckHas:Ability$LifeGain Oracle:When Etched Familiar dies, each opponent loses 2 life and you gain 2 life. diff --git a/forge-gui/res/cardsfolder/k/kokusho_the_evening_star.txt b/forge-gui/res/cardsfolder/k/kokusho_the_evening_star.txt index 1326dcad122..98ca6b6afef 100644 --- a/forge-gui/res/cardsfolder/k/kokusho_the_evening_star.txt +++ b/forge-gui/res/cardsfolder/k/kokusho_the_evening_star.txt @@ -4,7 +4,7 @@ Types:Legendary Creature Dragon Spirit PT:5/5 K:Flying T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME dies, each opponent loses 5 life. You gain life equal to the life lost this way. -SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredCardOpponent | LifeAmount$ 5 | SubAbility$ DBGainLife +SVar:TrigLoseLife:DB$ LoseLife | Defined$ Opponent | LifeAmount$ 5 | SubAbility$ DBGainLife SVar:DBGainLife:DB$ GainLife | Defined$ TriggeredCardController | LifeAmount$ AFLifeLost SVar:AFLifeLost:Number$0 #AFLifeLost will be set by LoseLife diff --git a/forge-gui/res/cardsfolder/upcoming/abstergo_entertainment.txt b/forge-gui/res/cardsfolder/upcoming/abstergo_entertainment.txt new file mode 100644 index 00000000000..61d7cd225f1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/abstergo_entertainment.txt @@ -0,0 +1,10 @@ +Name:Abstergo Entertainment +ManaCost:no cost +Types:Legendary Land +A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. +A:AB$ Mana | Cost$ 1 T | Produced$ Any | SpellDescription$ Add one mana of any color. +A:AB$ ChangeZone | Cost$ 3 T Exile<1/CARDNAME> | Origin$ Graveyard | Destination$ Hand | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Card.Historic+YouOwn | TgtPrompt$ Select target historic card in your graveyard | AILogic$ BestCard | SubAbility$ ExileAll | SpellDescription$ Return up to one target historic card from your graveyard to your hand, then exile all graveyards. +SVar:ExileAll:DB$ ChangeZoneAll | Origin$ Graveyard | Destination$ Exile | ChangeType$ Card +DeckHas:Ability$Mana.Colorless +DeckHints:Color$Colorless & Keyword$Devoid +Oracle:{T}: Add {C}.\n{1}, {T}: Add one mana of any color.\n{3}, {T}, Exile Abstergo Entertainment: Return up to one target historic card from your graveyard to your hand, then exile all graveyards. diff --git a/forge-gui/res/cardsfolder/upcoming/adewale_breaker_of_chains.txt b/forge-gui/res/cardsfolder/upcoming/adewale_breaker_of_chains.txt new file mode 100644 index 00000000000..7982af56ff7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/adewale_breaker_of_chains.txt @@ -0,0 +1,9 @@ +Name:Adéwalé, Breaker of Chains +ManaCost:1 U B +Types:Legendary Creature Human Assassin Pirate +PT:4/1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When NICKNAME enters the battlefield, reveal the top six cards of your library. Put an Assassin, Pirate, or Vehicle card from among them into your hand and the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 6 | ChangeNum$ 1 | ChangeValid$ Assassin,Pirate,Vehicle | DestinationZone$ Hand | RestRandomOrder$ True +T:Mode$ DamageDone | ValidSource$ Vehicle.YouCtrl | ValidTarget$ Player | CombatDamage$ True | OptionalDecider$ You | TriggerZones$ Graveyard | Execute$ TrigChange | TriggerDescription$ Whenever a Vehicle you control deals combat damage to a player, you may return NICKNAME from your graveyard to your hand. +SVar:TrigChange:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand +Oracle:When Adéwalé enters the battlefield, reveal the top six cards of your library. Put an Assassin, Pirate, or Vehicle card from among them into your hand and the rest on the bottom of your library in a random order.\nWhenever a Vehicle you control deals combat damage to a player, you may return Adéwalé from your graveyard to your hand. diff --git a/forge-gui/res/cardsfolder/upcoming/arbaaz_mir.txt b/forge-gui/res/cardsfolder/upcoming/arbaaz_mir.txt new file mode 100644 index 00000000000..7a1e8564a26 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/arbaaz_mir.txt @@ -0,0 +1,8 @@ +Name:Arbaaz Mir +ManaCost:R W +Types:Legendary Creature Human Assassin +PT:2/2 +T:Mode$ ChangesZone | ValidCard$ Card.Self,Permanent.nonToken+Historic+Other+YouCtrl | Destination$ Battlefield | Execute$ TrigDealDamage | TriggerDescription$ Whenever CARDNAME or another nontoken historic permanent enters the battlefield under your control, CARDNAME deals 1 damage to each opponent and you gain 1 life. (Artifacts, legendaries, and Sagas are historic.) +SVar:TrigDealDamage:DB$ DamageAll | ValidPlayers$ Player.Opponent | NumDmg$ 1 | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 +Oracle:Whenever Arbaaz Mir or another nontoken historic permanent enters the battlefield under your control, Arbaaz Mir deals 1 damage to each opponent and you gain 1 life. (Artifacts, legendaries, and Sagas are historic.) diff --git a/forge-gui/res/cardsfolder/upcoming/assassin_den.txt b/forge-gui/res/cardsfolder/upcoming/assassin_den.txt new file mode 100644 index 00000000000..9bd0ddb3f4e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/assassin_den.txt @@ -0,0 +1,9 @@ +Name:Assassin Den +ManaCost:3 U +Types:Creature Wall +PT:2/4 +K:Defender +A:AB$ PutCounter | Cost$ 3 U | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBEffect | SorcerySpeed$ True | SpellDescription$ Put a +1/+1 counter on target creature you control. It can't be blocked this turn. Activate only as a sorcery. +SVar:DBEffect:DB$ Effect | ExileOnMoved$ Battlefield | RememberObjects$ ParentTarget | StaticAbilities$ Unblockable +SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ This creature can't be blocked this turn. +Oracle:Defender (This creature can't attack.)\n{3}{U}: Put a +1/+1 counter on target creature you control. It can't be blocked this turn. Activate only as a sorcery. diff --git a/forge-gui/res/cardsfolder/upcoming/assassin_initiate.txt b/forge-gui/res/cardsfolder/upcoming/assassin_initiate.txt new file mode 100644 index 00000000000..f53e901f3bc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/assassin_initiate.txt @@ -0,0 +1,6 @@ +Name:Assassin Initiate +ManaCost:B +Types:Creature Human Assassin +PT:1/1 +A:AB$ Pump | Cost$ 1 | KWChoice$ Flying,Deathtouch,Lifelink | SpellDescription$ CARDNAME gains your choice of flying, deathtouch, or lifelink until end of turn. +Oracle:{1}: Assassin Initiate gains your choice of flying, deathtouch, or lifelink until end of turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/auditore_ambush.txt b/forge-gui/res/cardsfolder/upcoming/auditore_ambush.txt new file mode 100644 index 00000000000..20faab1fc76 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/auditore_ambush.txt @@ -0,0 +1,7 @@ +Name:Auditore Ambush +ManaCost:2 U B +Types:Sorcery +A:SP$ Charm | MinCharmNum$ 1 | CharmNum$ 2 | Choices$ DBUnsummon,DBSearch +SVar:DBUnsummon:DB$ ChangeZone | ValidTgts$ Creature | TgtPrompt$ Select target creature to return to owner's hand | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return target creature to its owner's hand. +SVar:DBSearch:DB$ ChangeZone | ValidTgts$ Player | OriginAlternative$ Graveyard | Destination$ Hand | ChangeType$ Card.namedEzio; Blade of Vengeance | Optional$ True | ChangeNum$ 1 | Chooser$ Targeted | SpellDescription$ Target player searches their library and/or graveyard for a card named Ezio, Blade of Vengeance, reveals it, and puts it into their hand. If they search their library this way, they shuffle. +Oracle:Choose one or both —\n• Return target creature to its owner's hand.\n• Target player searches their library and/or graveyard for a card named Ezio, Blade of Vengeance, reveals it, and puts it into their hand. If they search their library this way, they shuffle. diff --git a/forge-gui/res/cardsfolder/upcoming/aveline_de_grandpre.txt b/forge-gui/res/cardsfolder/upcoming/aveline_de_grandpre.txt new file mode 100644 index 00000000000..062b424b375 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/aveline_de_grandpre.txt @@ -0,0 +1,10 @@ +Name:Aveline de Grandpré +ManaCost:2 G G +Types:Legendary Creature Human Assassin +PT:3/3 +K:Deathtouch +T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl+withDeathtouch | ValidTarget$ Player | TriggerZones$ Battlefield | CombatDamage$ True | Execute$ TrigPutCounter | TriggerDescription$ Whenever a creature you control with deathtouch deals combat damage to a player, put that many +1/+1 counters on that creature. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ TriggeredSourceLKICopy | CounterType$ P1P1 | CounterNum$ X +SVar:X:TriggerCount$DamageAmount +K:Disguise:B G +Oracle:Deathtouch\nWhenever a creature you control with deathtouch deals combat damage to a player, put that many +1/+1 counters on that creature.\nDisguise {B}{G} (You may cast this card face down for {3} as a 2/2 creature with ward {2}. Turn it face up any time for its disguise cost.) diff --git a/forge-gui/res/cardsfolder/upcoming/aya_of_alexandria.txt b/forge-gui/res/cardsfolder/upcoming/aya_of_alexandria.txt new file mode 100644 index 00000000000..f8174941cf2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/aya_of_alexandria.txt @@ -0,0 +1,10 @@ +Name:Aya of Alexandria +ManaCost:2 R W +Types:Legendary Creature Human Assassin +PT:4/3 +K:Menace +K:Lifelink +T:Mode$ DamageDone | ValidSource$ Creature.Historic+YouCtrl | Execute$ TrigToken | CombatDamage$ True | ValidTarget$ Player | TriggerZones$ Battlefield | TriggerDescription$ Whenever a historic creature you control deals combat damage to a player, create a 1/1 black Assassin creature token with menace. (Artifacts, legendaries, and Sagas are historic.) +SVar:TrigToken:DB$ Token | TokenScript$ b_1_1_assassin_menace +DeckHas:Ability$Token +Oracle:Menace, lifelink\nWhenever a historic creature you control deals combat damage to a player, create a 1/1 black Assassin creature token with menace. (Artifacts, legendaries, and Sagas are historic.) diff --git a/forge-gui/res/cardsfolder/upcoming/ballad_of_the_black_flag.txt b/forge-gui/res/cardsfolder/upcoming/ballad_of_the_black_flag.txt new file mode 100644 index 00000000000..c877230dd1f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ballad_of_the_black_flag.txt @@ -0,0 +1,10 @@ +Name:Ballad of the Black Flag +ManaCost:1 U U +Types:Enchantment Saga +K:Chapter:4:DBMill,DBMill,DBMill,DBCostReduction +SVar:DBMill:DB$ Mill | NumCards$ 3 | Defined$ You | Imprint$ True | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard,Exile | Destination$ Hand | ChangeType$ Card.Historic+YouOwn+IsImprinted | Hidden$ True | Optional$ True | SubAbility$ DBCleanup | SpellDescription$ Mill three cards. You may put a historic card from among them into your hand. (Artifacts, legendaries, and Sagas are historic.) +SVar:DBCleanup:DB$ Cleanup | ClearImprinted$ True +SVar:DBCostReduction:DB$ Effect | StaticAbilities$ ReduceSPcost +SVar:ReduceSPcost:Mode$ ReduceCost | EffectZone$ Command | ValidCard$ Card.Historic | Type$ Spell | Activator$ You | Amount$ 2 | Description$ Historic spells you cast this turn cost {2} less to cast. +Oracle:(As this Saga enters and after your draw step, add a lore counter. Sacrifice after IV.)\nI, II, III — Mill three cards. You may put a historic card from among them into your hand. (Artifacts, legendaries, and Sagas are historic.)\nIV — Historic spells you cast this turn cost {2} less to cast. diff --git a/forge-gui/res/cardsfolder/upcoming/basim_ibn_ishaq.txt b/forge-gui/res/cardsfolder/upcoming/basim_ibn_ishaq.txt new file mode 100644 index 00000000000..baead749ab3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/basim_ibn_ishaq.txt @@ -0,0 +1,11 @@ +Name:Basim Ibn Ishaq +ManaCost:U B +Types:Legendary Creature Human Assassin +PT:2/2 +T:Mode$ SpellCast | ValidCard$ Card.Historic | ValidActivatingPlayer$ You | ActivationLimit$ 1 | Execute$ TrigDraw | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a historic spell, draw a card. CARDNAME can't be blocked this turn. This ability triggers only once each turn. (Artifacts, legendaries, and Sagas are historic.) +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 | SubAbility$ DBUnblockable +SVar:DBUnblockable:DB$ Effect | RememberObjects$ Self | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable +SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ EFFECTSOURCE can't be blocked this turn. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPutCounter | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, put a +1/+1 counter on it. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +Oracle:Whenever you cast a historic spell, draw a card. Basim Ibn Ishaq can't be blocked this turn. This ability triggers only once each turn. (Artifacts, legendaries, and Sagas are historic.)\nWhenever Basim Ibn Ishaq deals combat damage to a player, put a +1/+1 counter on it. diff --git a/forge-gui/res/cardsfolder/upcoming/battlefield_improvisation.txt b/forge-gui/res/cardsfolder/upcoming/battlefield_improvisation.txt new file mode 100644 index 00000000000..59299acf48d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/battlefield_improvisation.txt @@ -0,0 +1,6 @@ +Name:Battlefield Improvisation +ManaCost:1 W +Types:Instant +A:SP$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +2 | NumDef$ +2 | SubAbility$ DBAttach | SpellDescription$ Target creature gets +2/+2 until end of turn. If that creature is attacking, you may attach any number of Equipment you control to it. +SVar:DBAttach:DB$ Attach | Defined$ ParentTarget.attacking | Object$ Valid Equipment.YouCtrl | Optional$ True +Oracle:Target creature gets +2/+2 until end of turn. If that creature is attacking, you may attach any number of Equipment you control to it. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/bayek_of_siwa.txt b/forge-gui/res/cardsfolder/upcoming/bayek_of_siwa.txt new file mode 100644 index 00000000000..09f5f3abf40 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bayek_of_siwa.txt @@ -0,0 +1,8 @@ +Name:Bayek of Siwa +ManaCost:3 R W +Types:Legendary Creature Human Assassin +PT:3/4 +K:Double Strike +S:Mode$ Continuous | Affected$ Creature.Historic+Other+YouCtrl | AddKeyword$ Double Strike | Condition$ PlayerTurn | Description$ As long as it's your turn, other historic creatures you control have double strike. +K:Disguise:1 R W +Oracle:Double strike\nAs long as it's your turn, other historic creatures you control have double strike.\nDisguise {1}{R}{W} (You may cast this card face down for {3} as a 2/2 creature with ward {2}. Turn it face up any time for its disguise cost.) diff --git a/forge-gui/res/cardsfolder/upcoming/brotherhood_ambushers.txt b/forge-gui/res/cardsfolder/upcoming/brotherhood_ambushers.txt new file mode 100644 index 00000000000..550c59d5ea6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brotherhood_ambushers.txt @@ -0,0 +1,6 @@ +Name:Brotherhood Ambushers +ManaCost:4 B +Types:Creature Human Assassin +PT:6/3 +K:Freerunning:3 B +Oracle:Freerunning {3}{B} (You may cast this spell for its freerunning cost if you dealt combat damage to a player this turn with an Assassin or commander.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/brotherhood_headquarters.txt b/forge-gui/res/cardsfolder/upcoming/brotherhood_headquarters.txt new file mode 100644 index 00000000000..3cc803f3f4f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brotherhood_headquarters.txt @@ -0,0 +1,9 @@ +Name:Brotherhood Headquarters +ManaCost:no cost +Types:Land +A:AB$ Mana | Cost$ T | Produced$ C | SpellDescription$ Add {C}. +A:AB$ Mana | Cost$ T | Produced$ Any | Amount$ 1 | RestrictValid$ Spell.Assassin,Spell.withFreerunning,Activated.Assassin | SpellDescription$ Add one mana of any color. Spend this mana only to cast an Assassin spell or a spell that has freerunning, or to activate an ability of an Assassin source. +AI:RemoveDeck:Random +DeckHas:Ability$Mana.Colorless +DeckHints:Type$Assassin +Oracle:{T}: Add {C}.\n{T}: Add one mana of any color. Spend this mana only to cast an Assassin spell or a spell that has freerunning, or to activate an ability of an Assassin source. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/brotherhood_patriarch.txt b/forge-gui/res/cardsfolder/upcoming/brotherhood_patriarch.txt new file mode 100644 index 00000000000..6c91bcf5ea9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brotherhood_patriarch.txt @@ -0,0 +1,9 @@ +Name:Brotherhood Patriarch +ManaCost:3 B +Types:Creature Human Assassin +PT:4/1 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLoseLife | TriggerDescription$ When CARDNAME dies, each opponent loses 2 life and you gain 2 life. +SVar:TrigLoseLife:DB$ LoseLife | Defined$ Opponent | LifeAmount$ 2 | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ TriggeredCardController | LifeAmount$ 2 +DeckHas:Ability$LifeGain +Oracle:When Brotherhood Patriarch dies, each opponent loses 2 life and you gain 2 life. diff --git a/forge-gui/res/cardsfolder/upcoming/brotherhood_regalia.txt b/forge-gui/res/cardsfolder/upcoming/brotherhood_regalia.txt new file mode 100644 index 00000000000..9ae8737d5c2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brotherhood_regalia.txt @@ -0,0 +1,8 @@ +Name:Brotherhood Regalia +ManaCost:2 +Types:Artifact Equipment +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Ward:2 | AddType$ Assassin | Description$ Equipped creature has ward {2}, is an Assassin in addition to its other types, and can't be blocked. +S:Mode$ CantBlockBy | ValidAttacker$ Creature.EquippedBy +K:Equip:1:Creature.Legendary+YouCtrl:legendary creature +K:Equip:3 +Oracle:Equipped creature has ward {2}, is an Assassin in addition to its other types, and can't be blocked.\nEquip legendary creature {1}\nEquip {3} diff --git a/forge-gui/res/cardsfolder/upcoming/brotherhood_spy.txt b/forge-gui/res/cardsfolder/upcoming/brotherhood_spy.txt new file mode 100644 index 00000000000..9097c2e605a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/brotherhood_spy.txt @@ -0,0 +1,9 @@ +Name:Brotherhood Spy +ManaCost:1 U +Types:Creature Human Assassin +PT:1/3 +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | IsPresent$ Assassin.Legendary+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ At the beginning of combat on your turn, if you control a legendary Assassin, CARDNAME gets +1/+0 until end of turn and can't be blocked this turn. +SVar:TrigPump:DB$ Pump | NumAtt$ +1 | SubAbility$ DBUnblockable +SVar:DBUnblockable:DB$ Effect | RememberObjects$ Self | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable +SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ EFFECTSOURCE can't be blocked this turn. +Oracle:At the beginning of combat on your turn, if you control a legendary Assassin, Brotherhood Spy gets +1/+0 until end of turn and can't be blocked this turn. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/bureau_headmaster.txt b/forge-gui/res/cardsfolder/upcoming/bureau_headmaster.txt new file mode 100644 index 00000000000..d28761d2f39 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bureau_headmaster.txt @@ -0,0 +1,8 @@ +Name:Bureau Headmaster +ManaCost:R W +Types:Creature Human Assassin +PT:2/2 +S:Mode$ ReduceCost | ValidCard$ Equipment | Type$ Spell | Activator$ You | Amount$ 1 | Description$ Equipment spells you cast cost {1} less to cast. +S:Mode$ ReduceCost | ValidCard$ Card | ValidSpell$ Activated.Equip | Activator$ You | Amount$ 1 | Description$ Equip abilities you activate cost {1} less to activate. +DeckHints:Type$Equipment +Oracle:Equipment spells you cast cost {1} less to cast.\nEquip abilities you activate cost {1} less to activate. diff --git a/forge-gui/res/cardsfolder/upcoming/caduceus_staff_of_hermes.txt b/forge-gui/res/cardsfolder/upcoming/caduceus_staff_of_hermes.txt new file mode 100644 index 00000000000..e0621b41876 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/caduceus_staff_of_hermes.txt @@ -0,0 +1,9 @@ +Name:Caduceus, Staff of Hermes +ManaCost:2 W +Types:Legendary Artifact Equipment +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Lifelink | Description$ Equipped creature has lifelink. +S:Mode$ Continuous | Affected$ Creature.EquippedBy | CheckSVar$ X | SVarCompare$ GE30 | AddPower$ 5 | AddToughness$ 5 | AddKeyword$ Indestructible & Prevent all damage that would be dealt to CARDNAME. | Description$ As long as you have 30 or more life, equipped creature gets +5/+5 and has indestructible and "Prevent all damage that would be dealt to this creature." +K:Equip:W W +SVar:X:Count$YourLifeTotal +DeckHas:Keyword$Lifelink & Ability$LifeGain +Oracle:Equipped creature has lifelink.\nAs long as you have 30 or more life, equipped creature gets +5/+5 and has indestructible and "Prevent all damage that would be dealt to this creature."\nEquip {W}{W} diff --git a/forge-gui/res/cardsfolder/upcoming/crystal_skull_isu_spyglass.txt b/forge-gui/res/cardsfolder/upcoming/crystal_skull_isu_spyglass.txt new file mode 100644 index 00000000000..28ba326e9a5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/crystal_skull_isu_spyglass.txt @@ -0,0 +1,7 @@ +Name:Crystal Skull, Isu Spyglass +ManaCost:2 U U +Types:Legendary Artifact +S:Mode$ Continuous | Affected$ Card.TopLibrary+YouCtrl | AffectedZone$ Library | MayLookAt$ You | Description$ You may look at the top card of your library any time. +S:Mode$ Continuous | Affected$ Card.Historic+TopLibrary+YouCtrl | AffectedZone$ Library | MayPlay$ True | Description$ You may play historic lands and cast historic spells from the top of your library. (Artifacts, legendaries, and Sagas are historic.) +A:AB$ Mana | Cost$ T | Produced$ U | SpellDescription$ Add {U}. +Oracle:You may look at the top card of your library any time.\nYou may play historic lands and cast historic spells from the top of your library. (Artifacts, legendaries, and Sagas are historic.)\n{T}: Add {U}. diff --git a/forge-gui/res/cardsfolder/upcoming/desmond_miles.txt b/forge-gui/res/cardsfolder/upcoming/desmond_miles.txt new file mode 100644 index 00000000000..87605dd7ee9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/desmond_miles.txt @@ -0,0 +1,13 @@ +Name:Desmond Miles +Types:Legendary Creature Human Assassin +PT:1/3 +K:Menace +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | Description$ CARDNAME gets +1/+0 for each other Assassin you control and each Assassin card in your graveyard. +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigSurveil | CombatDamage$ True | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, surveil X, where X is the amount of damage it dealt to that player. +SVar:TrigSurveil:DB$ Surveil | Amount$ Z +SVar:X:Count$Valid Assassin.YouCtrl+Other/Plus.Y +SVar:Y:Count$ValidGraveyard Assassin.YouCtrl +SVar:Z:TriggerCount$DamageAmount +SVar:BuffedBy:Assassin +DeckNeeds:Type$Assassin +Oracle:Menace\nDesmond Miles gets +1/+0 for each other Assassin you control and each Assassin card in your graveyard.\nWhenever Desmond Miles deals combat damage to a player, surveil X, where X is the amount of damage it dealt to that player. diff --git a/forge-gui/res/cardsfolder/upcoming/desynchronization.txt b/forge-gui/res/cardsfolder/upcoming/desynchronization.txt new file mode 100644 index 00000000000..9605beabe22 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/desynchronization.txt @@ -0,0 +1,5 @@ +Name:Desynchronization +ManaCost:2 U U +Types:Instant +A:SP$ ChangeZoneAll | ChangeType$ Permanent.nonLand+!Historic | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return each nonland permanent that's not historic to its owner's hand. (Artifacts, legendaries, and Sagas are historic.) +Oracle:Return each nonland permanent that's not historic to its owner's hand. (Artifacts, legendaries, and Sagas are historic.) diff --git a/forge-gui/res/cardsfolder/upcoming/detained_by_legionnaires.txt b/forge-gui/res/cardsfolder/upcoming/detained_by_legionnaires.txt new file mode 100644 index 00000000000..74e9ed1b76d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/detained_by_legionnaires.txt @@ -0,0 +1,7 @@ +Name:Detained by Legionnaires +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 or block. | Description$ Enchanted creature can't attack or block. +Oracle:Enchant creature\nEnchanted creature can't attack or block. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/distract_the_guards.txt b/forge-gui/res/cardsfolder/upcoming/distract_the_guards.txt new file mode 100644 index 00000000000..b31b48ee521 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/distract_the_guards.txt @@ -0,0 +1,6 @@ +Name:Distract the Guards +ManaCost:1 W W +Types:Sorcery +K:Freerunning:1 W +A:SP$ Token | TokenAmount$ 3 | TokenScript$ w_1_1_human_rogue | TokenOwner$ You | SpellDescription$ Create three 1/1 white Human Rogue creature tokens. +Oracle:Freerunning {1}{W} (You may cast this spell for its freerunning cost if you dealt combat damage to a player this turn with an Assassin or commander.)\nCreate three 1/1 white Human Rogue creature tokens. diff --git a/forge-gui/res/cardsfolder/upcoming/eagle_vision.txt b/forge-gui/res/cardsfolder/upcoming/eagle_vision.txt new file mode 100644 index 00000000000..4936b561da4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/eagle_vision.txt @@ -0,0 +1,6 @@ +Name:Eagle Vision +ManaCost:4 U +Types:Sorcery +K:Freerunning:1 U +A:SP$ Draw | NumCards$ 3 | SpellDescription$ Draw three cards. +Oracle:Freerunning {1}{U} (You may cast this spell for its freerunning cost if you dealt combat damage to a player this turn with an Assassin or commander.)\nDraw three cards. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/edward_kenway.txt b/forge-gui/res/cardsfolder/upcoming/edward_kenway.txt new file mode 100644 index 00000000000..9337d71cb11 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/edward_kenway.txt @@ -0,0 +1,13 @@ +Name:Edward Kenway +ManaCost:2 U B R +Types:Legendary Creature Human Assassin Pirate +PT:5/5 +T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, create a Treasure token for each tapped Assassin, Pirate, and/or Vehicle you control. +SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ c_a_treasure_sac | TokenOwner$ You +T:Mode$ DamageDone | ValidSource$ Vehicle.YouCtrl | ValidTarget$ Player | CombatDamage$ True | OptionalDecider$ You | Execute$ TrigDig | TriggerDescription$ Whenever a Vehicle you control deals combat damage to a player, look at the top card of that player's library, then exile it face down. You may play that card for as long as it remains exiled. +SVar:TrigDig:DB$ Dig | DigNum$ 1 | Defined$ TriggeredTarget | ForceRevealToController$ True | ChangeNum$ All | DestinationZone$ Exile | ExileFaceDown$ True | RememberChanged$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SubAbility$ DBCleanup | ForgetOnMoved$ Exile | Duration$ Permanent +SVar:STPlay:Mode$ Continuous | MayLookAt$ You | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play that card for as long as it remains exiled. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Count$Valid Assassin.tapped+YouCtrl,Pirate.tapped+YouCtrl,Vehicle.tapped+YouCtrl +Oracle:At the beginning of your end step, create a Treasure token for each tapped Assassin, Pirate, and/or Vehicle you control.\nWhenever a Vehicle you control deals combat damage to a player, look at the top card of that player's library, then exile it face down. You may play that card for as long as it remains exiled. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/eivor_wolf_kissed.txt b/forge-gui/res/cardsfolder/upcoming/eivor_wolf_kissed.txt new file mode 100644 index 00000000000..e42867661d7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/eivor_wolf_kissed.txt @@ -0,0 +1,14 @@ +Name:Eivor, Wolf-Kissed +ManaCost:3 R G W +Types:Legendary Creature Human Assassin Warrior +PT:7/6 +K:Trample +K:Haste +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigMill | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you mill that many cards. You may put a Saga card and/or a land card from among them onto the battlefield. +SVar:TrigMill:DB$ Mill | NumCards$ X | Defined$ You | RememberMilled$ True | SubAbility$ DBChangeZone +SVar:DBChangeZone:DB$ ChangeZone | Hidden$ True | Origin$ Graveyard,Exile | Destination$ Hand | ChangeType$ EACH Saga.YouOwn+IsRemembered & Land.YouOwn+IsRemembered | Optional$ True | SelectPrompt$ You may select a Saga card and/or a land card. | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:TriggerCount$DamageAmount +DeckHas:Ability$Mill +DeckHints:Type$Saga +Oracle:Trample, haste\nWhenever Eivor, Wolf-Kissed deals combat damage to a player, you mill that many cards. You may put a Saga card and/or a land card from among them onto the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/escarpment_fortress.txt b/forge-gui/res/cardsfolder/upcoming/escarpment_fortress.txt new file mode 100644 index 00000000000..c71ba4cf1af --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/escarpment_fortress.txt @@ -0,0 +1,10 @@ +Name:Escarpment Fortress +ManaCost:4 W +Types:Creature Wall +PT:3/5 +K:Defender +K:Reach +S:Mode$ Continuous | Affected$ Creature.Other+YouCtrl | AddPower$ 1 | Description$ Other creatures you control get +1/+0. +T:Mode$ AttackersDeclared | Execute$ TrigDraw | ValidAttackers$ Creature | ValidAttackersAmount$ GE2 | TriggerZones$ Battlefield | AttackingPlayer$ You | TriggerDescription$ Whenever you attack with two or more creatures, draw a card. +SVar:TrigDraw:DB$ Draw | NumCards$ 1 +Oracle:Defender (This creature can't attack.)\nReach (This creature can block creatures with flying.)\nOther creatures you control get +1/+0.\nWhenever you attack with two or more creatures, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/evie_frye.txt b/forge-gui/res/cardsfolder/upcoming/evie_frye.txt new file mode 100644 index 00000000000..3d638225d41 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/evie_frye.txt @@ -0,0 +1,12 @@ +Name:Evie Frye +Types:Legendary Creature Human Assassin +PT:2/1 +K:Partner:Jacob Frye +A:AB$ Draw | Cost$ 1 T | NumCards$ 1 | SubAbility$ DBDiscard | StackDescription$ SpellDescription | SpellDescription$ Draw a card, then discard a card. +SVar:DBDiscard:DB$ Discard | Defined$ You | Mode$ TgtChoose | Optional$ True | NumCards$ 1 | RememberDiscarded$ True | SubAbility$ DBImmediateTrig | StackDescription$ None +SVar:DBImmediateTrig:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Creature | ConditionCompare$ EQ1 | Execute$ TrigUnblockable | SubAbility$ DBCleanup | StackDescription$ SpellDescription | SpellDescription$ When you discard a creature card this way, target creature you control can't be blocked this turn. +SVar:TrigUnblockable:DB$ Effect | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | RememberObjects$ Targeted | ExileOnMoved$ Battlefield | StaticAbilities$ Unblockable +SVar:Unblockable:Mode$ CantBlockBy | ValidAttacker$ Card.IsRemembered | Description$ This creature can't be blocked this turn. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +DeckNeeds:Name$Jacob Frye +Oracle:Partner with Jacob Frye (When this creature enters the battlefield, target player may put Jacob into their hand from their library, then shuffle.)\n{1}, {T}: Draw a card, then discard a card. When you discard a creature card this way, target creature you control can't be blocked this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/haytham_kenway.txt b/forge-gui/res/cardsfolder/upcoming/haytham_kenway.txt new file mode 100644 index 00000000000..ab993bedbcc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/haytham_kenway.txt @@ -0,0 +1,13 @@ +Name:Haytham Kenway +ManaCost:2 W U +Types:Legendary Creature Human Knight +PT:3/3 +K:Protection:Assassin +S:Mode$ Continuous | Affected$ Knight.YouCtrl+Other | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Protection:Assassin | Description$ Other Knights you control get +2/+2 and have protection from Assassins. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile up to one target creature that player controls until CARDNAME leaves the battlefield. +SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.OppCtrl | TargetMin$ 0 | TargetMax$ OneEach | TargetsForEachPlayer$ True | TgtPrompt$ Select up to one target creature each opponent controls | Duration$ UntilHostLeavesPlay +SVar:OneEach:PlayerCountOpponents$Amount +SVar:PlayMain1:TRUE +SVar:OblivionRing:TRUE +DeckHints:Type$Knight +Oracle:Protection from Assassins\nOther Knights you control get +2/+2 and have protection from Assassins.\nWhen Haytham Kenway enters the battlefield, for each opponent, exile up to one target creature that player controls until Haytham Kenway leaves the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/hidden_footblade.txt b/forge-gui/res/cardsfolder/upcoming/hidden_footblade.txt new file mode 100644 index 00000000000..7d67517a516 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hidden_footblade.txt @@ -0,0 +1,10 @@ +Name:Hidden Footblade +ManaCost:R +Types:Artifact Equipment +K:Flash +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAttach | TriggerDescription$ When CARDNAME enters the battlefield, attach it to target creature you control. That creature gains indestructible until end of turn. +SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | SubAbility$ DBPump +SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ First Strike +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | AddKeyword$ Haste | Description$ Equipped creature gets +1/+0 and has haste. +K:Equip:2 +Oracle:Flash\nWhen Hidden Footblade enters the battlefield, attach it to target creature you control. That creature gains first strike until end of turn.\nEquipped creature gets +1/+0 and has haste.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/upcoming/hookblade.txt b/forge-gui/res/cardsfolder/upcoming/hookblade.txt new file mode 100644 index 00000000000..76c7b908ef0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/hookblade.txt @@ -0,0 +1,9 @@ +Name:Hookblade +ManaCost:1 W +Types:Artifact Equipment +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigAttach | TriggerDescription$ When CARDNAME enters the battlefield, attach it to target creature you control. +SVar:TrigAttach:DB$ Attach | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 1 | Description$ Equipped creature gets +1/+0. +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddKeyword$ Flying | Condition$ PlayerTurn | Description$ As long as it's your turn, equipped creature has flying. +K:Equip:2 +Oracle:When Hookblade enters the battlefield, attach it to target creature you control.\nEquipped creature gets +1/+0.\nAs long as it's your turn, equipped creature has flying.\nEquip {2} ({2}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/upcoming/spartan_veteran.txt b/forge-gui/res/cardsfolder/upcoming/spartan_veteran.txt new file mode 100644 index 00000000000..c5631d6fa64 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/spartan_veteran.txt @@ -0,0 +1,7 @@ +Name:Spartan Veteran +ManaCost:R +Types:Creature Human Soldier +PT:1/1 +S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ First Strike | Condition$ PlayerTurn | Description$ As long as it's your turn, CARDNAME has first strike. +A:AB$ Pump | Cost$ 2 | Defined$ Self | NumAtt$ +1 | SpellDescription$ CARDNAME gets +1/+0 until end of turn. +Oracle:As long as it's your turn, Spartan Veteran has first strike. (It deals combat damage before creatures without first strike.)\n{2}: Spartan Veteran gets +1/+0 until end of turn. diff --git a/forge-gui/res/tokenscripts/b_1_1_assassin_menace.txt b/forge-gui/res/tokenscripts/b_1_1_assassin_menace.txt new file mode 100644 index 00000000000..0a987cd25db --- /dev/null +++ b/forge-gui/res/tokenscripts/b_1_1_assassin_menace.txt @@ -0,0 +1,7 @@ +Name:Assassin Token +ManaCost:no cost +Types:Creature Assassin +Colors:black +PT:1/1 +K:Menace +Oracle:Menace \ No newline at end of file diff --git a/forge-gui/res/tokenscripts/w_1_1_human_rogue.txt b/forge-gui/res/tokenscripts/w_1_1_human_rogue.txt new file mode 100644 index 00000000000..03e318c521a --- /dev/null +++ b/forge-gui/res/tokenscripts/w_1_1_human_rogue.txt @@ -0,0 +1,6 @@ +Name:Human Rogue Token +ManaCost:no cost +Types:Creature Human Rogue +Colors:white +PT:1/1 +Oracle: \ No newline at end of file From 0abbc2def3656583ddf1014f99e99b31230feaf2 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 23 Jun 2024 02:12:14 +0200 Subject: [PATCH 11/15] StaticAbilityBlockRestict: remove Global Rules (#5454) * StaticAbilityBlockRestict: remove Global Rules * ~ remove rule * ~ remove global num --- .../java/forge/game/GlobalRuleChange.java | 5 +-- .../java/forge/game/combat/CombatUtil.java | 12 +----- .../StaticAbilityBlockRestrict.java | 39 +++++++++++++++++++ forge-gui/res/cardsfolder/a/astral_arena.txt | 2 +- .../res/cardsfolder/c/caverns_of_despair.txt | 2 +- .../res/cardsfolder/d/dueling_grounds.txt | 2 +- .../m/mirri_weatherlight_duelist.txt | 2 +- .../res/cardsfolder/s/silent_arbiter.txt | 2 +- 8 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 forge-game/src/main/java/forge/game/staticability/StaticAbilityBlockRestrict.java diff --git a/forge-game/src/main/java/forge/game/GlobalRuleChange.java b/forge-game/src/main/java/forge/game/GlobalRuleChange.java index e6942d0df0e..aa68c75f978 100644 --- a/forge-game/src/main/java/forge/game/GlobalRuleChange.java +++ b/forge-game/src/main/java/forge/game/GlobalRuleChange.java @@ -22,10 +22,7 @@ package forge.game; */ public enum GlobalRuleChange { - attackerChoosesBlockers ("The attacking player chooses how each creature blocks each combat."), - onlyOneBlocker ("No more than one creature can block each combat."), - onlyOneBlockerPerOpponent ("Each opponent can't block with more than one creature."), - onlyTwoBlockers ("No more than two creatures can block each combat."); + attackerChoosesBlockers ("The attacking player chooses how each creature blocks each combat."); private final String ruleText; diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java index 6f014c1ae52..900ec500637 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -24,7 +24,6 @@ import com.google.common.collect.Lists; import forge.card.mana.ManaCost; import forge.game.Game; import forge.game.GameEntity; -import forge.game.GlobalRuleChange; import forge.game.ability.AbilityKey; import forge.game.card.*; import forge.game.cost.Cost; @@ -36,6 +35,7 @@ import forge.game.player.Player; import forge.game.player.PlayerController.ManaPaymentPurpose; import forge.game.spellability.SpellAbility; import forge.game.staticability.StaticAbility; +import forge.game.staticability.StaticAbilityBlockRestrict; import forge.game.staticability.StaticAbilityCantAttackBlock; import forge.game.staticability.StaticAbilityMustBlock; import forge.game.trigger.TriggerType; @@ -460,18 +460,10 @@ public class CombatUtil { final Game game = blocker.getGame(); final int blockers = combat.getAllBlockers().size(); - if (blockers > 1 && game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyTwoBlockers)) { - return false; - } - - if (blockers > 0 && game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneBlocker)) { - return false; - } - CardCollection allOtherBlockers = combat.getAllBlockers(); allOtherBlockers.remove(blocker); final int blockersFromOnePlayer = CardLists.count(allOtherBlockers, CardPredicates.isController(blocker.getController())); - if (blockersFromOnePlayer > 0 && game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneBlockerPerOpponent)) { + if (blockersFromOnePlayer >= StaticAbilityBlockRestrict.blockRestrictNum(blocker.getController())) { return false; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityBlockRestrict.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityBlockRestrict.java new file mode 100644 index 00000000000..6b66d359d31 --- /dev/null +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityBlockRestrict.java @@ -0,0 +1,39 @@ +package forge.game.staticability; + +import forge.game.Game; +import forge.game.ability.AbilityUtils; +import forge.game.card.Card; +import forge.game.player.Player; +import forge.game.zone.ZoneType; + +public class StaticAbilityBlockRestrict { + static String MODE = "BlockRestrict"; + + static public int blockRestrictNum(Player defender) { + final Game game = defender.getGame(); + int num = Integer.MAX_VALUE; + for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { + for (final StaticAbility stAb : ca.getStaticAbilities()) { + if (!stAb.checkConditions(MODE)) { + continue; + } + if (blockRestrict(stAb, defender)) { + int stNum = AbilityUtils.calculateAmount(stAb.getHostCard(), + stAb.getParamOrDefault("MaxBlockers", "1"), stAb); + if (stNum < num) { + num = stNum; + } + } + + } + } + return num; + } + + static public boolean blockRestrict(StaticAbility stAb, Player defender) { + if (!stAb.matchesValidParam("ValidDefender", defender)) { + return false; + } + return true; + } +} diff --git a/forge-gui/res/cardsfolder/a/astral_arena.txt b/forge-gui/res/cardsfolder/a/astral_arena.txt index 4fd4a2a5cd6..b16d2053506 100644 --- a/forge-gui/res/cardsfolder/a/astral_arena.txt +++ b/forge-gui/res/cardsfolder/a/astral_arena.txt @@ -2,7 +2,7 @@ Name:Astral Arena ManaCost:no cost Types:Plane Kolbahan S:Mode$ AttackRestrict | EffectZone$ Command | MaxAttackers$ 1 | 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. +S:Mode$ BlockRestrict | EffectZone$ Command | MaxBlockers$ 1 | Description$ No more than one creature can block each combat. T:Mode$ ChaosEnsues | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever chaos ensues, CARDNAME deals 2 damage to each creature. SVar:RolledChaos:DB$ DamageAll | NumDmg$ 2 | ValidCards$ Creature SVar:AIRollPlanarDieParams:Mode$ Random | MinTurn$ 5 diff --git a/forge-gui/res/cardsfolder/c/caverns_of_despair.txt b/forge-gui/res/cardsfolder/c/caverns_of_despair.txt index 22d7b51e0d1..2d6e1186d42 100644 --- a/forge-gui/res/cardsfolder/c/caverns_of_despair.txt +++ b/forge-gui/res/cardsfolder/c/caverns_of_despair.txt @@ -2,7 +2,7 @@ Name:Caverns of Despair ManaCost:2 R R Types:World Enchantment S:Mode$ AttackRestrict | MaxAttackers$ 2 | Description$ No more than two creatures can attack each combat. -S:Mode$ Continuous | GlobalRule$ No more than two creatures can block each combat. | Description$ No more than two creatures can block each combat. +S:Mode$ BlockRestrict | MaxBlockers$ 2 | Description$ No more than two creatures can block each combat. SVar:NonStackingEffect:True AI:RemoveDeck:Random DeckHints:Type$Planeswalker|Artifact|Enchantment|Aura|Equipment diff --git a/forge-gui/res/cardsfolder/d/dueling_grounds.txt b/forge-gui/res/cardsfolder/d/dueling_grounds.txt index efa784fac6e..047f83221fe 100644 --- a/forge-gui/res/cardsfolder/d/dueling_grounds.txt +++ b/forge-gui/res/cardsfolder/d/dueling_grounds.txt @@ -2,6 +2,6 @@ Name:Dueling Grounds ManaCost:1 G W Types:Enchantment S:Mode$ AttackRestrict | MaxAttackers$ 1 | Description$ No more than one creature can attack each combat. -S:Mode$ Continuous | GlobalRule$ No more than one creature can block each combat. | Description$ No more than one creature can block each combat. +S:Mode$ BlockRestrict | MaxBlockers$ 1 | Description$ No more than one creature can block each combat. AI:RemoveDeck:Random Oracle:No more than one creature can attack each combat.\nNo more than one creature can block each combat. diff --git a/forge-gui/res/cardsfolder/m/mirri_weatherlight_duelist.txt b/forge-gui/res/cardsfolder/m/mirri_weatherlight_duelist.txt index 8cc85202be3..e4ccd840c7a 100644 --- a/forge-gui/res/cardsfolder/m/mirri_weatherlight_duelist.txt +++ b/forge-gui/res/cardsfolder/m/mirri_weatherlight_duelist.txt @@ -6,5 +6,5 @@ K:First Strike S:Mode$ AttackRestrict | IsPresent$ Card.Self+tapped | MaxAttackers$ 1 | ValidDefender$ You | Description$ As long as CARDNAME is tapped, no more than one creature can attack you each combat. T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigLimitBlock | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME attacks, each opponent can't block with more than one creature this combat. SVar:TrigLimitBlock:DB$ Effect | StaticAbilities$ STLimitBlock | Duration$ UntilEndOfCombat -SVar:STLimitBlock:Mode$ Continuous | EffectZone$ Command | GlobalRule$ Each opponent can't block with more than one creature. | Description$ Each opponent can't block with more than one creature this combat. +SVar:STLimitBlock:Mode$ BlockRestrict | EffectZone$ Command | MaxBlockers$ 1 | ValidDefender$ Opponent | Description$ Each opponent can't block with more than one creature this combat. Oracle:First strike\nWhenever Mirri, Weatherlight Duelist attacks, each opponent can't block with more than one creature this combat.\nAs long as Mirri, Weatherlight Duelist is tapped, no more than one creature can attack you each combat. diff --git a/forge-gui/res/cardsfolder/s/silent_arbiter.txt b/forge-gui/res/cardsfolder/s/silent_arbiter.txt index 579ee4b920a..93b2d71c023 100644 --- a/forge-gui/res/cardsfolder/s/silent_arbiter.txt +++ b/forge-gui/res/cardsfolder/s/silent_arbiter.txt @@ -3,5 +3,5 @@ ManaCost:4 Types:Artifact Creature Construct PT:1/5 S:Mode$ AttackRestrict | MaxAttackers$ 1 | Description$ No more than one creature can attack each combat. -S:Mode$ Continuous | GlobalRule$ No more than one creature can block each combat. | Description$ No more than one creature can block each combat. +S:Mode$ BlockRestrict | MaxBlockers$ 1 | Description$ No more than one creature can block each combat. Oracle:No more than one creature can attack each combat.\nNo more than one creature can block each combat. From e087f9564c9569650dce4f9169597c2e6ef0cd98 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 23 Jun 2024 07:17:24 +0200 Subject: [PATCH 12/15] ~ remove unused variables --- forge-game/src/main/java/forge/game/combat/CombatUtil.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java index 900ec500637..cc6931ab348 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -457,8 +457,6 @@ public class CombatUtil { if (!canBlockMoreCreatures(blocker, combat.getAttackersBlockedBy(blocker))) { return false; } - final Game game = blocker.getGame(); - final int blockers = combat.getAllBlockers().size(); CardCollection allOtherBlockers = combat.getAllBlockers(); allOtherBlockers.remove(blocker); From 4c0d7ff18fff9d9c1d1b5297c084e2d6a7515e27 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 23 Jun 2024 07:02:47 +0000 Subject: [PATCH 13/15] Update hama_pashar_ruin_seeker.txt --- forge-gui/res/cardsfolder/h/hama_pashar_ruin_seeker.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/h/hama_pashar_ruin_seeker.txt b/forge-gui/res/cardsfolder/h/hama_pashar_ruin_seeker.txt index d69f7a86ae5..86ae681a540 100644 --- a/forge-gui/res/cardsfolder/h/hama_pashar_ruin_seeker.txt +++ b/forge-gui/res/cardsfolder/h/hama_pashar_ruin_seeker.txt @@ -2,6 +2,6 @@ Name:Hama Pashar, Ruin Seeker ManaCost:1 W U Types:Legendary Creature Human Wizard PT:2/3 -S:Mode$ Panharmonicon | ValidMode$ RoomEntered | ValidCard$ Dungeon.YouOwn | Description$ Room abilities of dungeons you own trigger an additional time. +S:Mode$ Panharmonicon | ValidMode$ RoomEntered | ValidCard$ Dungeon.YouOwn | ValidZone$ Command | Description$ Room abilities of dungeons you own trigger an additional time. AI:RemoveDeck:Random Oracle:Room abilities of dungeons you own trigger an additional time. From e4f67afb824c9afae720234fb8cb22cc158ea86f Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 23 Jun 2024 10:20:52 +0300 Subject: [PATCH 14/15] - Fixed AI ignoring Mogg Bombers damage trigger. (#5456) --- forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index ddf543aab55..e1909896920 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -485,7 +485,7 @@ public class DamageDealAi extends DamageAiBase { return false; } - return damageChoosingTargets(ai, saMe, tgt, dmg, false, immediately); + return damageChoosingTargets(ai, saMe, tgt, dmg, saMe.isMandatory(), immediately); } /** From c9e4648a2ee4ef15e34b99981ee2eb05a6ba3ac9 Mon Sep 17 00:00:00 2001 From: Paul Hammerton <18243520+paulsnoops@users.noreply.github.com> Date: Sun, 23 Jun 2024 09:47:11 +0100 Subject: [PATCH 15/15] Edition updates: ACR --- forge-gui/res/editions/Assassin's Creed.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/forge-gui/res/editions/Assassin's Creed.txt b/forge-gui/res/editions/Assassin's Creed.txt index 49fb53b1891..0c147df3f12 100644 --- a/forge-gui/res/editions/Assassin's Creed.txt +++ b/forge-gui/res/editions/Assassin's Creed.txt @@ -26,6 +26,7 @@ ScryfallCode=ACR 18 U Escape Detection @Justyna Dura 19 R Evie Frye @Lie Setiawan 20 M Leonardo da Vinci @Wangjie Li +21 U Loyal Inventor @Gintas Galvanauskas 22 U Assassin Initiate @Mandy Jurgens 23 U Chain Assassination @Filipe Pagliuso 24 R Desmond Miles @Julia Vasilyeva @@ -105,6 +106,16 @@ ScryfallCode=ACR 98 U Terminate @Fajareka Setiawan 99 M Sword of Feast and Famine @Thanh Tuấn 100 M Sword of Light and Shadow @Borja Pindado +101 L Plains @Bruce Brenneise +102 L Plains @Borja Pindado +103 L Island @Alexandre Honoré +104 L Island @Filipe Pagliuso +105 L Swamp @Wei Guan +106 L Swamp @Wangjie Li +107 L Mountain @Wei Guan +108 L Mountain @Jeremy Paillotin +109 L Forest @Daniel Correia +110 L Forest @Miklós Ligeti 111 R Sunbaked Canyon @Alexander Gering 112 R Fiery Islet @Alexander Gering 113 M Ezio Auditore da Firenze @Alexander Gering @@ -182,19 +193,23 @@ ScryfallCode=ACR 185 U Assassin Gauntlet @Paulius Daščioras 186 U Become Anonymous @Alice Xia Zhang 187 U Coastal Piracy @Wei Guan +188 R Crystal Skull, Isu Spyglass @Thanh Tuấn 189 R Desynchronization @Lie Setiawan 190 U Eagle Vision @Kim Sokol 191 U Escape Detection @Justyna Dura 192 R Evie Frye @Lie Setiawan 193 M Leonardo da Vinci @Wangjie Li +194 U Loyal Inventor @Gintas Galvanauskas 195 U Propaganda @Erikas Perl 196 M Temporal Trespass @Borja Pindado 197 U Assassin Initiate @Mandy Jurgens 198 R Black Market Connections @Filipe Pagliuso +199 U Chain Assassination @Filipe Pagliuso 200 R Conspiracy @Allen Morris 201 R Cover of Darkness @Paulius Daščioras 202 R Desmond Miles @Julia Vasilyeva 203 M Ezio Auditore da Firenze @Fajareka Setiawan +204 U Fatal Push @Lie Setiawan 205 U Go for the Throat @Torgeir Fjereide 206 U Hemlock Vial @Daniel Correia 207 R Jacob Frye @Lie Setiawan @@ -276,6 +291,7 @@ ScryfallCode=ACR 283 C Hookblade Veteran @Borja Pindado 284 C Tranquilize @Thanh Tuấn 285 U Brotherhood Ambushers @Alexandre Honoré +286 C Brotherhood Patriarch @Néstor Ossandón Leal 287 C Merciless Harlequin @Lixin Yin 288 U Poison-Blade Mentor @Xabi Gaztelua 289 C Headsplitter @L J Koh @@ -291,5 +307,9 @@ ScryfallCode=ACR 299 C Hired Blade @Elizabeth Peiró 300 U Stone Quarry @Piotr Dura 301 U Submerged Boneyard @Alexandre Honoré +302 L Plains @Borja Pindado +303 L Island @Alexandre Honoré +304 L Swamp @Wangjie Li +305 L Mountain @Jeremy Paillotin 306 R Royal Assassin @Wei Guan 307 U Hidden Blade @Evyn Fong