From 537a792dccc2b4efb461001363b6436d86aa6f0e Mon Sep 17 00:00:00 2001 From: elcnesh Date: Mon, 9 Jun 2014 20:10:48 +0000 Subject: [PATCH] Fix cost changes and play restrictions on morphs. Dream Chisel now works on all morphs (including Zoetic Cavern), and cards like Meddling Mage don't prohibit the named card to be cast face down. --- .../main/java/forge/game/card/CardFactoryUtil.java | 12 ++++-------- .../java/forge/game/mana/ManaCostAdjustment.java | 14 +++++++++++++- .../main/java/forge/game/spellability/Spell.java | 4 ++-- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 2c103cbd7d7..784703b9aed 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -94,14 +94,10 @@ public class CardFactoryUtil { @Override public boolean canPlay() { - //Lands do not have SpellPermanents. - if (sourceCard.isLand()) { - return (sourceCard.getGame().getZoneOf(sourceCard).is(ZoneType.Hand) || sourceCard.hasKeyword("May be played")) - && sourceCard.getController().canCastSorcery(); - } - else { - return sourceCard.getSpellPermanent().canPlay(); - } + sourceCard.setState(CardCharacteristicName.FaceDown); + boolean success = super.canPlay(); + sourceCard.setState(CardCharacteristicName.Original); + return success; } }; diff --git a/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java b/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java index 3fe8077fc03..9fda95d2745 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java +++ b/forge-game/src/main/java/forge/game/mana/ManaCostAdjustment.java @@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Lists; +import forge.card.CardCharacteristicName; import forge.card.mana.ManaCostShard; import forge.game.Game; import forge.game.ability.AbilityUtils; @@ -38,6 +39,7 @@ public class ManaCostAdjustment { return; } + boolean isStateChangeToFaceDown = false; if (sa.isSpell()) { if (sa.isDelve()) { final Player pc = originalCard.getController(); @@ -52,6 +54,10 @@ public class ManaCostAdjustment { } else if (sa.getHostCard().hasKeyword("Convoke")) { adjustCostByConvoke(cost, sa); + } else if (((Spell) sa).isCastFaceDown()) { + // Turn face down to apply cost modifiers correctly + originalCard.setState(CardCharacteristicName.FaceDown); + isStateChangeToFaceDown = true; } } // isSpell @@ -97,7 +103,13 @@ public class ManaCostAdjustment { for (final StaticAbility stAb : setAbilities) { applyAbility(stAb, "SetCost", sa, cost); } - } // GetSpellCostChange + + // Reset card state (if changed) + if (isStateChangeToFaceDown) { + originalCard.setState(CardCharacteristicName.Original); + } + } + // GetSpellCostChange /** diff --git a/forge-game/src/main/java/forge/game/spellability/Spell.java b/forge-game/src/main/java/forge/game/spellability/Spell.java index 15b5f352089..952c6e82bb6 100644 --- a/forge-game/src/main/java/forge/game/spellability/Spell.java +++ b/forge-game/src/main/java/forge/game/spellability/Spell.java @@ -89,8 +89,8 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable return false; } - // for uncastables like lotus bloom, check if manaCost is blank - if (isBasicSpell() && card.getManaCost().isNoCost()) { + // for uncastables like lotus bloom, check if manaCost is blank (except for morph spells) + if (!isCastFaceDown() && isBasicSpell() && card.getManaCost().isNoCost()) { return false; }