diff --git a/.gitattributes b/.gitattributes index 847b9b4fe43..5e6271e8aee 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1321,6 +1321,7 @@ res/cardsfolder/divebomber_griffin.txt -text svneol=native#text/plain res/cardsfolder/diversionary_tactics.txt -text svneol=native#text/plain res/cardsfolder/divination.txt -text svneol=native#text/plain res/cardsfolder/divine_offering.txt -text svneol=native#text/plain +res/cardsfolder/divine_presence.txt -text svneol=native#text/plain res/cardsfolder/divine_sacrament.txt -text svneol=native#text/plain res/cardsfolder/divine_transformation.txt -text svneol=native#text/plain res/cardsfolder/divine_verdict.txt -text svneol=native#text/plain @@ -1918,6 +1919,7 @@ res/cardsfolder/fungus_sliver.txt -text svneol=native#text/plain res/cardsfolder/fungusaur.txt -text svneol=native#text/plain res/cardsfolder/furious_assault.txt -text svneol=native#text/plain res/cardsfolder/furnace_brood.txt -text svneol=native#text/plain +res/cardsfolder/furnace_of_rath.txt -text svneol=native#text/plain res/cardsfolder/furnace_spirit.txt -text svneol=native#text/plain res/cardsfolder/furnace_whelp.txt -text svneol=native#text/plain res/cardsfolder/fury_sliver.txt -text svneol=native#text/plain diff --git a/res/cardsfolder/divine_presence.txt b/res/cardsfolder/divine_presence.txt new file mode 100644 index 00000000000..1aa1f092a88 --- /dev/null +++ b/res/cardsfolder/divine_presence.txt @@ -0,0 +1,9 @@ +Name:Divine Presence +ManaCost:2 W +Types:Enchantment +Text:If a source would deal 4 or more damage to a creature or player, that source deals 3 damage to that creature or player instead. +SVar:PlayMain1:TRUE +SVar:RemAIDeck:True +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/divine_presence.jpg +End \ No newline at end of file diff --git a/res/cardsfolder/furnace_of_rath.txt b/res/cardsfolder/furnace_of_rath.txt new file mode 100644 index 00000000000..6aab0f8e489 --- /dev/null +++ b/res/cardsfolder/furnace_of_rath.txt @@ -0,0 +1,9 @@ +Name:Furnace of Rath +ManaCost:1 R R R +Types:Enchantment +Text:If a source would deal damage to a creature or player, it deals double that damage to that creature or player instead. +SVar:PlayMain1:TRUE +SVar:RemAIDeck:True +SVar:Rarity:Rare +SVar:Picture:http://www.wizards.com/global/images/magic/general/furnace_of_rath.jpg +End \ No newline at end of file diff --git a/src/forge/Card.java b/src/forge/Card.java index 5223a6c053d..d6c0e6499b8 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -2950,6 +2950,16 @@ public class Card extends MyObservable { int restDamage = damage; + if( AllZoneUtil.isCardInPlay("Furnace of Rath")) { + + restDamage += restDamage; + } + + if( AllZoneUtil.isCardInPlay("Divine Presence") && restDamage > 3) { + + restDamage = 3; + } + if(getName().equals("Phytohydra")) { addCounter(Counters.P1P1, restDamage); return 0; @@ -2965,7 +2975,7 @@ public class Card extends MyObservable { public void addDamage(HashMap sourcesMap) { for(Entry entry : sourcesMap.entrySet()) { - addDamageWithoutPrevention(entry.getValue(), entry.getKey()); // damage prevention is already checked! + addDamageAfterPrevention(entry.getValue(), entry.getKey()); // damage prevention is already checked! } } @@ -2978,15 +2988,24 @@ public class Card extends MyObservable { damageToAdd = replaceDamage(damageToAdd, source, false); damageToAdd = preventDamage(damageToAdd, source, false); - addDamageWithoutPrevention(damageToAdd,source); + addDamageAfterPrevention(damageToAdd,source); + } + + public void addDamageWithoutPrevention(final int damageIn, final Card source) { + int damageToAdd = damageIn; + + if(!CardFactoryUtil.canDamage(source, this)) return; + + damageToAdd = replaceDamage(damageToAdd, source, false); + + addDamageAfterPrevention(damageToAdd,source); } - public void addDamageWithoutPrevention(final int damageIn, final Card source) { + //This function handles damage after replacement and prevention effects are applied + public void addDamageAfterPrevention(final int damageIn, final Card source) { int damageToAdd = damageIn; boolean wither = false; - damageToAdd = replaceDamage(damageToAdd, source, false); - if( damageToAdd == 0 ) return; //Rule 119.8 System.out.println("Adding " + damageToAdd + " damage to " + getName()); diff --git a/src/forge/Player.java b/src/forge/Player.java index 0e6651ea6d3..87e2df8e67c 100644 --- a/src/forge/Player.java +++ b/src/forge/Player.java @@ -198,13 +198,20 @@ public abstract class Player extends MyObservable{ damageToDo = replaceDamage(damageToDo, source, false); damageToDo = preventDamage(damageToDo, source, false); - addDamageWithoutPrevention(damageToDo,source); + addDamageAfterPrevention(damageToDo,source); } public void addDamageWithoutPrevention(final int damage, final Card source) { int damageToDo = damage; - damageToDo = replaceDamage(damageToDo, source, false); + damageToDo = replaceDamage(damageToDo, source, false); + + addDamageAfterPrevention(damageToDo,source); + } + + //This function handles damage after replacement and prevention effects are applied + public void addDamageAfterPrevention(final int damage, final Card source) { + int damageToDo = damage; if( source.getKeyword().contains("Infect") ) { addPoisonCounters(damageToDo); @@ -289,6 +296,21 @@ public abstract class Player extends MyObservable{ int restDamage = damage; + if( AllZoneUtil.isCardInPlay("Furnace of Rath")) { + + restDamage += restDamage; + } + + if( AllZoneUtil.isCardInPlay("Divine Presence") && restDamage > 3) { + + restDamage = 3; + } + + if( AllZoneUtil.isCardInPlay("Forethought Amulet",this) && (source.isInstant() || source.isSorcery()) && restDamage > 2) { + + restDamage = 2; + } + if( AllZoneUtil.isCardInPlay("Crumbling Sanctuary")) { for(int i = 0; i < restDamage; i++) { CardList lib = AllZoneUtil.getPlayerCardsInLibrary(this); @@ -339,7 +361,7 @@ public abstract class Player extends MyObservable{ damageToDo = replaceDamage(damageToDo, source, true); damageToDo = preventDamage(damageToDo, source, true); - addDamageWithoutPrevention(damageToDo, source); //damage prevention is already checked + addDamageAfterPrevention(damageToDo, source); //damage prevention is already checked if ( damageToDo > 0 ) { GameActionUtil.executeCombatDamageToPlayerEffects(source, damageToDo);