diff --git a/.gitattributes b/.gitattributes index c6580cb3d8f..d942da72c70 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2913,6 +2913,7 @@ res/cardsfolder/d/dreadship_reef.txt svneol=native#text/plain res/cardsfolder/d/dreadwaters.txt -text res/cardsfolder/d/dreadwing.txt svneol=native#text/plain res/cardsfolder/d/dream_cache.txt svneol=native#text/plain +res/cardsfolder/d/dream_chisel.txt -text res/cardsfolder/d/dream_coat.txt -text svneol=unset#text/plain res/cardsfolder/d/dream_fighter.txt -text res/cardsfolder/d/dream_fracture.txt svneol=native#text/plain @@ -3445,6 +3446,7 @@ res/cardsfolder/e/exhumer_thrull.txt -text res/cardsfolder/e/exile.txt svneol=native#text/plain res/cardsfolder/e/exile_into_darkness.txt svneol=native#text/plain res/cardsfolder/e/exiled_boggart.txt svneol=native#text/plain +res/cardsfolder/e/exiled_doomsayer.txt -text res/cardsfolder/e/exorcist.txt svneol=native#text/plain res/cardsfolder/e/exoskeletal_armor.txt svneol=native#text/plain res/cardsfolder/e/exotic_curse.txt svneol=native#text/plain diff --git a/res/cardsfolder/d/dream_chisel.txt b/res/cardsfolder/d/dream_chisel.txt new file mode 100644 index 00000000000..a0b856337f3 --- /dev/null +++ b/res/cardsfolder/d/dream_chisel.txt @@ -0,0 +1,7 @@ +Name:Dream Chisel +ManaCost:2 +Types:Artifact +S:Mode$ ReduceCost | ValidCard$ Creature | Type$ MorphDown | Activator$ You | Amount$ 1 | Description$ Face-down creature spells you cast cost 1 less to cast. +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/dream_chisel.jpg +Oracle:Face-down creature spells you cast cost {1} less to cast. diff --git a/res/cardsfolder/e/exiled_doomsayer.txt b/res/cardsfolder/e/exiled_doomsayer.txt new file mode 100644 index 00000000000..a81b72ce182 --- /dev/null +++ b/res/cardsfolder/e/exiled_doomsayer.txt @@ -0,0 +1,8 @@ +Name:Exiled Doomsayer +ManaCost:1 W +Types:Creature Human Cleric +PT:1/2 +S:Mode$ RaiseCost | ValidCard$ Creature.faceDown | Type$ MorphUp | Amount$ 2 | Description$ All morph costs cost 2 more. (This doesn't affect the cost to cast creature spells face down.) +SVar:RemRandomDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/exiled_doomsayer.jpg +Oracle:All morph costs cost {2} more. (This doesn't affect the cost to cast creature spells face down.) diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index a49c52e8406..9309070b9de 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -233,6 +233,7 @@ public class CardFactoryUtil { final StringBuilder sbStack = new StringBuilder(); sbStack.append(sourceCard.getName()).append(" - turn this card face up."); morphUp.setStackDescription(sbStack.toString()); + morphUp.setIsMorphUp(true); return morphUp; } diff --git a/src/main/java/forge/card/spellability/SpellAbility.java b/src/main/java/forge/card/spellability/SpellAbility.java index f0bf48c4df1..b739dbbdc5d 100644 --- a/src/main/java/forge/card/spellability/SpellAbility.java +++ b/src/main/java/forge/card/spellability/SpellAbility.java @@ -78,6 +78,7 @@ public abstract class SpellAbility implements ISpellAbility { private boolean cycling = false; private boolean delve = false; private boolean offering = false; + private boolean morphup = false; private Card targetCard; /** The chosen target. */ @@ -330,6 +331,28 @@ public abstract class SpellAbility implements ISpellAbility { return this.replicate; } + /** + *

+ * setIsMorphUp. + *

+ * + * @param b + * a boolean. + */ + public final void setIsMorphUp(final boolean b) { + this.morphup = b; + } + + /** + *

+ * isMorphUp. + *

+ * + * @return a boolean. + */ + public boolean isMorphUp() { + return this.morphup; + } /** *

diff --git a/src/main/java/forge/card/staticability/StaticAbilityCostChange.java b/src/main/java/forge/card/staticability/StaticAbilityCostChange.java index de53584967f..90b1e7d31f3 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityCostChange.java +++ b/src/main/java/forge/card/staticability/StaticAbilityCostChange.java @@ -25,6 +25,7 @@ import forge.card.cardfactory.CardFactoryUtil; import forge.card.mana.ManaCostBeingPaid; import forge.card.mana.ManaCostShard; import forge.card.spellability.AbilityActivated; +import forge.card.spellability.Spell; import forge.card.spellability.SpellAbility; import forge.card.spellability.Target; import forge.game.player.Player; @@ -73,13 +74,17 @@ public class StaticAbilityCostChange { return; } } else if (params.get("Type").equals("NonManaAbility")) { - if (!(sa instanceof AbilityActivated) || sa.isManaAbility()) { - return; - } + if (!(sa instanceof AbilityActivated) || sa.isManaAbility()) { + return; + } } else if (params.get("Type").equals("Flashback")) { - if (!sa.isFlashBackAbility()) { - return; - } + if (!sa.isFlashBackAbility()) { + return; + } + } else if (params.get("Type").equals("MorphUp")) { + if (!sa.isMorphUp()) { + return; + } } } if (params.containsKey("AffectedZone") && !card.isInZone(ZoneType.smartValueOf(params.get("AffectedZone")))) { @@ -211,6 +216,10 @@ public class StaticAbilityCostChange { if (!sa.isFlashBackAbility()) { return; } + } else if (params.get("Type").equals("MorphDown")) { + if (!sa.isSpell() || !((Spell) sa).isCastFaceDown()) { + return; + } } } if (params.containsKey("ValidTarget")) {