diff --git a/Mage/src/main/java/mage/abilities/keyword/MorphAbility.java b/Mage/src/main/java/mage/abilities/keyword/MorphAbility.java
index 2738a54846..7ea7f48f7e 100644
--- a/Mage/src/main/java/mage/abilities/keyword/MorphAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/MorphAbility.java
@@ -100,7 +100,7 @@ public class MorphAbility extends StaticAbility implements AlternativeSourceCost
protected static final String ABILITY_KEYWORD = "Morph";
protected static final String ABILITY_KEYWORD_MEGA = "Megamorph";
protected static final String REMINDER_TEXT = "(You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)";
- protected static final String REMINDER_TEXT_MEGA = "(You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its megamorph cost and put a +1/+1 counter on it.)";
+ protected static final String REMINDER_TEXT_MEGA = "(You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its megamorph cost and put a +1/+1 counter on it.)";
protected String ruleText;
protected AlternativeCost2Impl alternateCosts = new AlternativeCost2Impl(ABILITY_KEYWORD, REMINDER_TEXT, new GenericManaCost(3));
protected Costs morphCosts;
@@ -194,7 +194,8 @@ public class MorphAbility extends StaticAbility implements AlternativeSourceCost
@Override
public boolean isAvailable(Ability source, Game game) {
- return true;
+ return game.isMainPhase() && game.getActivePlayerId().equals(source.getControllerId())
+ && (game.getStack().isEmpty() || (game.getStack().size() == 1 && game.getStack().getFirst().getSourceId().equals(source.getSourceId())));
}
@Override
@@ -282,10 +283,7 @@ public class MorphAbility extends StaticAbility implements AlternativeSourceCost
@Override
public String getCastMessageSuffix(Game game) {
- StringBuilder sb = new StringBuilder();
- int position = 0;
- sb.append(alternateCosts.getCastSuffixMessage(position));
- return sb.toString();
+ return alternateCosts.getCastSuffixMessage(0);
}
@Override
diff --git a/Mage/src/main/java/mage/game/stack/Spell.java b/Mage/src/main/java/mage/game/stack/Spell.java
index 57a0fb74f9..bd421709e6 100644
--- a/Mage/src/main/java/mage/game/stack/Spell.java
+++ b/Mage/src/main/java/mage/game/stack/Spell.java
@@ -432,6 +432,13 @@ public class Spell extends StackObjImpl implements Card {
@Override
public String getLogName() {
+ if (faceDown) {
+ if (getCardType().contains(CardType.CREATURE)) {
+ return "face down creature spell";
+ } else {
+ return "face down spell";
+ }
+ }
return GameLog.getColoredObjectIdName(card);
}
@@ -451,7 +458,7 @@ public class Spell extends StackObjImpl implements Card {
@Override
public List getCardType() {
- if (this.getSpellAbility().getSpellAbilityType().equals(SpellAbilityType.FACE_DOWN_CREATURE)) {
+ if (faceDown) {
List cardTypes = new ArrayList<>();
cardTypes.add(CardType.CREATURE);
return cardTypes;
diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java
index 4b6c31e4ad..0b84f713b1 100644
--- a/Mage/src/main/java/mage/players/PlayerImpl.java
+++ b/Mage/src/main/java/mage/players/PlayerImpl.java
@@ -2768,7 +2768,9 @@ public abstract class PlayerImpl implements Player, Serializable {
case STATIC:
if (card.getCardType().contains(CardType.LAND) && ability instanceof AlternativeSourceCosts) {
if (canLandPlayAlternateSourceCostsAbility(card, available, ability, game)) { // e.g. Land with Morph
- playable.add(card.getId());
+ if (game.canPlaySorcery(getId())) {
+ playable.add(card.getId());
+ }
break Abilities;
}
}