mage: getPlayable does not work correctly with all spell reduction abilities (e.g. Mystical Dispute) or with targeting conditions for the cost reduction

I was unable to cast a Mystical Dispute on my opponent’s Mystical Dispute targeting my blue spell with one mana open for it. My opponent was at 3 mana and paid 1 to cast his.

Check and fix:

  • AbilitiesCostReductionControllerEffect.java
  • AffinityEffect.java
  • BantPlane.java
  • CommanderCostModification.java
  • ConditionalCostModificationEffect.java
  • CostModificationSourceEffect.java
  • EscalateAbility.java
  • FeedingGroundsPlane.java
  • !!! OfferingAbility.java
  • SourceCostReductionForEachCardInGraveyardEffect.java (removed)
  • SpellCostReductionSourceEffect.java
  • SpellCostReductionForEachSourceEffect
  • SpellCostReductionSourceForOpponentsEffect.java (removed)
  • SpellsCostIncreasementAllEffect.java (removed)
  • SpellsCostIncreasingAllEffect.java
    • DampingSphereIncreasementAllEffect
  • SpellsCostIncreasementControllerEffect.java (removed)
  • SpellsCostReductionAllEffect.java
    • SpellsCostReductionAllOfChosenSubtypeEffect
    • SpellsCostReductionAllOfChosenCardTypeEffect
  • SpellsCostReductionControllerEffect.java
    • CentaurOmenreaderSpellsCostReductionEffect
  • StriveAbility.java
  • TurriIslandPlane.java
  • SpellsCostModificationThatTargetSourceEffect.java

Use checkplayable state:

  • search by public void adjustCosts(

Refactor to standard method, search by cast that target (fix example):

  • AccursedWitch.java
  • AncientStoneIdol.java
  • AngelOfJubilation.java
  • AnimarSoulOfElements.java
  • ArcaneMelee.java
  • AuraOfSilence.java
  • AvatarOfFury.java
  • AvatarOfHope.java
  • xxx BattlefieldThaumaturge.java
  • BiomancersFamiliar.java
  • BlasphemousAct.java
  • BonePicker.java
  • BorealElemental.java
  • BrineGiant.java
  • BrutalSuppression.java
  • CallapheBelovedOfTheSea.java
  • CatalystStone.java
  • ChandrasIncinerator.java
  • CloudKey.java
  • CouncilOfTheAbsolute.java
  • DefenseGrid.java
  • DovinHandOfControl.java
  • Draco.java
  • Drought.java
  • EchoBaseCommando.java
  • EidolonOfObstruction.java
  • ElderwoodScion.java
  • ElspethConquersDeath.java
  • EmbalmersTools.java
  • Embercleave.java
  • EmrakulThePromisedEnd.java
  • EmryLurkerOfTheLoch.java
  • FerventChampion.java
  • Fluctuator.java
  • GateColossus.java
  • GaviNestWarden.java
  • GearseekerSerpent.java
  • GhaltaPrimalHunger.java
  • Gloom.java
  • Glowrider.java
  • GodPharaohsStatue.java
  • GrandArbiterAugustinIV.java
  • HardenedBerserker.java
  • Heartstone.java
  • HeraldOfWar.java
  • HollowOne.java
  • HumOfTheRadix.java
  • IcefallRegent.java
  • InfectiousCurse.java
  • JubilantSkybonder.java
  • KaerveksTorch.java
  • KaradorGhostChieftain.java
  • KasminaEnigmaticMentor.java
  • KopalaWardenOfWaves.java
  • LiciaSanguineTribune.java
  • LocketOfYesterdays.java
  • LodestoneGolem.java
  • LoreseekersStone.java
  • MemoryCrystal.java
  • MetalworkColossus.java
  • MizzixOfTheIzmagnus.java
  • MobilizedDistrict.java
  • MonasterySiege.java
  • MythUnbound.java
  • NemesisOfMortals.java
  • NewPerspectives.java
  • OppressiveRays.java
  • PowerArtifact.java
  • PrimevalProtector.java
  • Pteramander.java
  • PursuedWhale.java
  • RakdosLordOfRiots.java
  • RisenExecutioner.java
  • SaheeliTheGifted.java
  • SealOfTheGuildpact.java
  • SemblanceAnvil.java
  • SenatorLottDod.java
  • SpellwildOuphe.java
  • SphinxOfNewPrahv.java
  • StoneIdolTrap.java
  • Stratadon.java
  • SuppressionField.java
  • SyrElenoraTheDiscerning.java
  • TerrorOfThePeaks.java
  • ThaliaGuardianOfThraben.java
  • TheCauldronOfEternity.java
  • TheCircleOfLoyalty.java
  • TheGreatHenge.java
  • TitheTaker.java
  • TorgaarFamineIncarnate.java
  • TrainingGrounds.java
  • Trinisphere.java
  • ValiantChangeling.java
  • VolcanicSalvo.java
  • VrynWingmare.java
  • Warbringer.java
  • ZirdaTheDawnwaker.java

About this issue

  • Original URL
  • State: open
  • Created 4 years ago
  • Comments: 15 (7 by maintainers)

Commits related to this issue

Most upvoted comments

In that case, let’s create a master issue (it could be this one) for this and start adding every card that gets reported to it, while closing all the individual card issues as duplicates. #6680, #6685, #6696, and the reports in discord that you can’t cast spells with an untapped Chrome Mox in play were probably all issues revealed by this.

That sounds right to me. There are a lot of ways to cast a card that might be hard to calculate. For example, if you want to use Selvala, Explorer Returned without worrying about opponents getting priority due to effects triggering off the card draw, it is the strategically correct play to put a sometimes as-yet unaffordable spell on the stack. A player shouldn’t be hard locked out of that option.