From 930ca4e34a97a1a42a0e0152a47a7f51753a459b Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 14:58:38 +0000 Subject: [PATCH] - Moved the damage prevention of Protection to staticDamagePrevention. - Removed the canDamage function. --- src/forge/AbilityFactory_DealDamage.java | 4 +-- src/forge/Card.java | 17 ++++++----- src/forge/CardFactory.java | 10 +++---- src/forge/CardFactoryUtil.java | 2 ++ src/forge/CardFactory_Creatures.java | 37 +++++++++--------------- src/forge/CardFactory_Instants.java | 10 ++----- src/forge/CardFactory_Planeswalkers.java | 10 +++---- src/forge/CardFactory_Sorceries.java | 28 +++++++----------- src/forge/CardList.java | 2 ++ src/forge/Combat.java | 3 +- src/forge/CombatUtil.java | 6 ---- src/forge/GameActionUtil.java | 3 -- 12 files changed, 51 insertions(+), 81 deletions(-) diff --git a/src/forge/AbilityFactory_DealDamage.java b/src/forge/AbilityFactory_DealDamage.java index 070fe2b382d..74d0ea2e8fd 100644 --- a/src/forge/AbilityFactory_DealDamage.java +++ b/src/forge/AbilityFactory_DealDamage.java @@ -546,14 +546,14 @@ public class AbilityFactory_DealDamage { CardListFilter filterX = new CardListFilter(){ public boolean addCard(Card c) { - return CardFactoryUtil.canDamage(source, c) && c.predictDamage(maxX, source, false) >= c.getKillDamage(); + return (c.predictDamage(maxX, source, false) >= c.getKillDamage()); } }; CardListFilter filter = new CardListFilter(){ public boolean addCard(Card c) { - return CardFactoryUtil.canDamage(source, c) && c.predictDamage(dmg, source, false) >= c.getKillDamage(); + return (c.predictDamage(dmg, source, false) >= c.getKillDamage()); } }; diff --git a/src/forge/Card.java b/src/forge/Card.java index ff1087d9909..a59baaf688f 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -2832,7 +2832,7 @@ public class Card extends MyObservable { receivedDamageFromThisTurn.clear(); } - //the amount of damage needed to kill the creature + //the amount of damage needed to kill the creature (for AI) public int getKillDamage() { int killDamage = getNetDefense() + preventNextDamage - getDamage(); if(killDamage > preventNextDamage && hasStartOfKeyword("When CARDNAME is dealt damage, destroy it.")) killDamage = 1 + preventNextDamage; @@ -2840,6 +2840,13 @@ public class Card extends MyObservable { return killDamage; } + //this is the minimal damage a trampling creature has to assign to a blocker + public int getLethalDamage() { + int lethalDamage = getNetDefense() - getDamage(); + + return lethalDamage; + } + public void setDamage(int n) { //if(this.getKeyword().contains("Prevent all damage that would be dealt to CARDNAME.")) n = 0; damage = n; @@ -2853,8 +2860,6 @@ public class Card extends MyObservable { if(damage < 0) damage = 0; int assignedDamage = damage; - - if(!CardFactoryUtil.canDamage(sourceCard, this)) assignedDamage = 0; Log.debug(this + " - was assigned " + assignedDamage + " damage, by " + sourceCard); if(!assignedDamageHashMap.containsKey(sourceCard)) assignedDamageHashMap.put(sourceCard, assignedDamage); @@ -2937,6 +2942,8 @@ public class Card extends MyObservable { int restDamage = damage; Player player = getController(); + if(CardFactoryUtil.hasProtectionFrom(source,this)) return 0; + if(isCombat) { if(getKeyword().contains("Prevent all combat damage that would be dealt to and dealt by CARDNAME."))return 0; if(getKeyword().contains("Prevent all combat damage that would be dealt to CARDNAME."))return 0; @@ -3111,8 +3118,6 @@ public class Card extends MyObservable { public void addDamage(final int damageIn, final Card source) { int damageToAdd = damageIn; - if(!CardFactoryUtil.canDamage(source, this)) return; - damageToAdd = replaceDamage(damageToAdd, source, false); damageToAdd = preventDamage(damageToAdd, source, false); @@ -3123,8 +3128,6 @@ public class Card extends MyObservable { 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); diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index 2ba2d849bd7..60b0b41aacc 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -2159,7 +2159,7 @@ public class CardFactory implements NewConstants { all = all.getValidCards(Tgts,card.getController(),card); for(int i = 0; i < all.size(); i++) { - if(CardFactoryUtil.canDamage(card, all.get(i))) all.get(i).addDamage(ndam, card); + all.get(i).addDamage(ndam, card); } if (DmgPlayer[0] == true) { AllZone.ComputerPlayer.addDamage(ndam, card); @@ -4261,7 +4261,7 @@ public class CardFactory implements NewConstants { for(int i = 0; i < creatures.size(); i++) { Card crd = creatures.get(i); - if(CardFactoryUtil.canDamage(card, crd)) crd.addDamage(3, card); + crd.addDamage(3, card); } } @@ -4992,7 +4992,7 @@ public class CardFactory implements NewConstants { CardList list = AllZoneUtil.getCreaturesInPlay(); for(int i = 0; i < list.size(); i++) { - if(CardFactoryUtil.canDamage(card, list.get(i))) list.get(i).addDamage(1, card); + list.get(i).addDamage(1, card); } AllZone.HumanPlayer.addDamage(1, card); @@ -5048,11 +5048,9 @@ public class CardFactory implements NewConstants { list = list.getType("Creature"); for(int i = 0; i < list.size(); i++) { - if(CardFactoryUtil.canDamage(card, list.get(i))){ HashMap m = new HashMap(); m.put(card, 1); list.get(i).addDamage(m); - } } AllZone.HumanPlayer.addDamage(1, card); @@ -7845,7 +7843,7 @@ public class CardFactory implements NewConstants { CardListFilter filter = new CardListFilter() { public boolean addCard(Card c) { - return c.isCreature() && CardFactoryUtil.canDamage(card, c) && damage >= (c.getNetDefense() + c.getDamage()); + return c.isCreature() && damage >= (c.getNetDefense() + c.getDamage()); } }; diff --git a/src/forge/CardFactoryUtil.java b/src/forge/CardFactoryUtil.java index 918133a6d94..4b609d6cdea 100644 --- a/src/forge/CardFactoryUtil.java +++ b/src/forge/CardFactoryUtil.java @@ -3205,6 +3205,7 @@ public class CardFactoryUtil { return false; } + /*no longer needed public static boolean canDamage(Card spell, Card receiver) { //this is for untargeted damage spells, such as Pestilence, Pyroclasm, Tremor, etc. //and also combat damage? @@ -3214,6 +3215,7 @@ public class CardFactoryUtil { return true; } + */ public static boolean isCounterable(Card c) { if(!c.getKeyword().contains("CARDNAME can't be countered.")) return true; diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index d695919484d..f09521c9d70 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -572,7 +572,7 @@ public class CardFactory_Creatures { final SpellAbility ability = new Ability(card, "0") { @Override public void resolve() { - if(getTargetCard() != null && CardFactoryUtil.canDamage(card, getTargetCard()) + if(getTargetCard() != null && CardFactoryUtil.canTarget(card, getTargetCard())) getTargetCard().addDamage(3, card); else getTargetPlayer().addDamage(3, card); } @@ -611,7 +611,7 @@ public class CardFactory_Creatures { for(int i = 0; i < creatures.size(); i++) { Card crd = creatures.get(i); - if(CardFactoryUtil.canDamage(card, crd) && !crd.equals(card)) crd.addDamage(4, card); + if(!crd.equals(card)) crd.addDamage(4, card); } } @@ -642,7 +642,7 @@ public class CardFactory_Creatures { for(int i = 0; i < creatures.size(); i++) { Card crd = creatures.get(i); - if(CardFactoryUtil.canDamage(card, crd)) crd.addDamage(2, card); + crd.addDamage(2, card); } AllZone.ComputerPlayer.addDamage(2, card); AllZone.HumanPlayer.addDamage(2, card); @@ -700,8 +700,7 @@ public class CardFactory_Creatures { { public boolean addCard(Card c) { - return !c.getKeyword().contains("Flying") && - CardFactoryUtil.canDamage(card, c); + return !c.getKeyword().contains("Flying"); } }); @@ -737,8 +736,7 @@ public class CardFactory_Creatures { { public boolean addCard(Card c) { - return c.getKeyword().contains("Flying") && - CardFactoryUtil.canDamage(card, c); + return c.getKeyword().contains("Flying"); } }); @@ -1830,8 +1828,7 @@ public class CardFactory_Creatures { public void resolve() { CardList list = AllZoneUtil.getCreaturesInPlay(); for(int i = 0; i < list.size(); i++) - if(!list.get(i).getKeyword().contains("Flying") - && CardFactoryUtil.canDamage(card, list.get(i))) list.get(i).addDamage(5, card); + if(!list.get(i).getKeyword().contains("Flying")) list.get(i).addDamage(5, card); } }; Command destroy = new Command() { @@ -1911,7 +1908,6 @@ public class CardFactory_Creatures { @Override public void resolve() { if(AllZone.GameAction.isCardInPlay(getTargetCard()) - && CardFactoryUtil.canDamage(card, getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard())) { getTargetCard().addDamage(4, card); } @@ -2360,7 +2356,6 @@ public class CardFactory_Creatures { @Override public void resolve() { if(AllZone.GameAction.isCardInPlay(getTargetCard()) - && CardFactoryUtil.canDamage(card, getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard())) getTargetCard().addDamage(3, card); } }; @@ -2442,7 +2437,6 @@ public class CardFactory_Creatures { @Override public void resolve() { if(AllZone.GameAction.isCardInPlay(getTargetCard()) - && CardFactoryUtil.canDamage(card, getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard())) getTargetCard().addDamage(2, card); } }; @@ -3414,7 +3408,6 @@ public class CardFactory_Creatures { if(getTargetCard() != null) { if(AllZone.GameAction.isCardInPlay(getTargetCard()) - && CardFactoryUtil.canDamage(card, getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard())) { Card c = getTargetCard(); c.addDamage(damage, card); @@ -4408,7 +4401,7 @@ public class CardFactory_Creatures { && CardFactoryUtil.canTarget(card, getTargetCard())) { CardList list = getRadiance(getTargetCard()); for(int i = 0; i < list.size(); i++) { - if(CardFactoryUtil.canDamage(card, list.get(i))) list.get(i).addDamage(1, card); + list.get(i).addDamage(1, card); } } }//resolve() @@ -4681,7 +4674,7 @@ public class CardFactory_Creatures { CardList list = AllZoneUtil.getCreaturesInPlayWithKeyword("Flying"); for(int i = 0; i < list.size(); i++) - if(CardFactoryUtil.canDamage(card, list.get(i))) list.get(i).addDamage(1, card); + list.get(i).addDamage(1, card); }//resolve() };//SpellAbility @@ -4749,8 +4742,7 @@ public class CardFactory_Creatures { { public boolean addCard(Card c) { - return !c.getKeyword().contains("Flying") && - CardFactoryUtil.canDamage(card, c); + return !c.getKeyword().contains("Flying"); } }); @@ -4782,8 +4774,7 @@ public class CardFactory_Creatures { { public boolean addCard(Card c) { - return !c.getKeyword().contains("Flying") && - CardFactoryUtil.canDamage(card, c); + return !c.getKeyword().contains("Flying"); } }); @@ -4810,8 +4801,7 @@ public class CardFactory_Creatures { { public boolean addCard(Card c) { - return c.getKeyword().contains("Flying") && - !c.equals(card) && CardFactoryUtil.canDamage(card, c); + return c.getKeyword().contains("Flying"); } }); @@ -6712,8 +6702,7 @@ public class CardFactory_Creatures { CardList cards = AllZoneUtil.getCreaturesInPlay(); for(int i = 0; i < cards.size(); i++) { - if(!(cards.get(i)).isWhite() - && CardFactoryUtil.canDamage(card, cards.get(i))) { + if(!(cards.get(i)).isWhite()) { cards.get(i).addDamage(3, card); } } @@ -7998,7 +7987,7 @@ public class CardFactory_Creatures { else { // AI Choose spread Damage CardList damageableWolves = wolves.filter(new CardListFilter() { public boolean addCard(Card c) { - return CardFactoryUtil.canDamage(target, c); + return (c.predictDamage(target.getNetAttack(), target, false) > 0); } }); diff --git a/src/forge/CardFactory_Instants.java b/src/forge/CardFactory_Instants.java index cdf13b257c6..95085e5f7a8 100644 --- a/src/forge/CardFactory_Instants.java +++ b/src/forge/CardFactory_Instants.java @@ -2699,7 +2699,7 @@ public class CardFactory_Instants { { public boolean addCard(Card c) { - return c.getKeyword().contains("Flying") && CardFactoryUtil.canDamage(card, c); + return c.getKeyword().contains("Flying"); } }); @@ -2715,8 +2715,7 @@ public class CardFactory_Instants { CardListFilter filter = new CardListFilter(){ public boolean addCard(Card c) { - return c.isCreature() && c.getKeyword().contains("Flying") && - CardFactoryUtil.canDamage(card, c) && maxX >= (c.getNetDefense() + c.getDamage()); + return c.isCreature() && c.getKeyword().contains("Flying") && maxX >= (c.getKillDamage()); } }; @@ -2886,9 +2885,7 @@ public class CardFactory_Instants { CardList all = AllZoneUtil.getCreaturesInPlay(); for(int i = 0; i < all.size(); i++) { - if(CardFactoryUtil.canDamage(card, all.get(i))) { all.get(i).addDamage(card.getXManaCostPaid(), card); - } } card.setXManaCostPaid(0); @@ -2900,8 +2897,7 @@ public class CardFactory_Instants { CardListFilter filter = new CardListFilter(){ public boolean addCard(Card c) { - return c.isCreature() && CardFactoryUtil.canDamage(card, c) && - maxX >= (c.getNetDefense() + c.getDamage()); + return c.isCreature() && maxX >= (c.getKillDamage()); } }; diff --git a/src/forge/CardFactory_Planeswalkers.java b/src/forge/CardFactory_Planeswalkers.java index b199551d8db..7254657142a 100644 --- a/src/forge/CardFactory_Planeswalkers.java +++ b/src/forge/CardFactory_Planeswalkers.java @@ -949,7 +949,7 @@ class CardFactory_Planeswalkers { if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard())) { Card c = getTargetCard(); - if(CardFactoryUtil.canDamage(card, c)) c.addDamage(1, card); + c.addDamage(1, card); } } @@ -1026,8 +1026,7 @@ class CardFactory_Planeswalkers { turn[0] = AllZone.Phase.getTurn(); card.subtractCounter(Counters.LOYALTY, damage2[0]); - if(CardFactoryUtil.canDamage(card, getTargetCard())) getTargetCard().addDamage(damage2[0], - card); + getTargetCard().addDamage(damage2[0], card); damage2[0] = 0; }//resolve() @@ -1113,9 +1112,8 @@ class CardFactory_Planeswalkers { CardList list = new CardList(play.getCards()); list = list.getType("Creature"); - for(int i = 0; i < list.size(); i++) { - if(CardFactoryUtil.canDamage(card, list.get(i))) list.get(i).addDamage(10, card); - } + for(int i = 0; i < list.size(); i++) + list.get(i).addDamage(10, card); }//resolve() @Override diff --git a/src/forge/CardFactory_Sorceries.java b/src/forge/CardFactory_Sorceries.java index 7a5bca8e147..d1a8dff17ed 100644 --- a/src/forge/CardFactory_Sorceries.java +++ b/src/forge/CardFactory_Sorceries.java @@ -1451,7 +1451,7 @@ public class CardFactory_Sorceries { CardListFilter filter = new CardListFilter(){ public boolean addCard(Card c) { - return c.isCreature() && CardFactoryUtil.canDamage(card, c) && (c.getNetDefense() - c.getDamage())< 4; + return c.isCreature() && (c.getNetDefense() - c.getDamage())< 4; } }; @@ -1471,10 +1471,8 @@ public class CardFactory_Sorceries { for(int i = 0; i < all.size(); i++) if(!all.get(i).getKeyword().contains("Flying")) { - if(CardFactoryUtil.canDamage(card, all.get(i))) { all.get(i).setShield(0); all.get(i).addDamage(3, card); - } } AllZone.HumanPlayer.addDamage(3, card); AllZone.ComputerPlayer.addDamage(3, card); @@ -2141,7 +2139,7 @@ public class CardFactory_Sorceries { for(int i = 0; i < list.size(); i++) { - if(CardFactoryUtil.canDamage(card, list.get(i))) list.get(i).addDamage(2, card); + list.get(i).addDamage(2, card); } } @@ -4304,8 +4302,7 @@ public class CardFactory_Sorceries { { public boolean addCard(Card c) { - return c.isCreature() && c.getKeyword().contains("Flying") && - CardFactoryUtil.canDamage(card, c); + return c.isCreature() && c.getKeyword().contains("Flying"); } }); @@ -4327,8 +4324,7 @@ public class CardFactory_Sorceries { CardListFilter filter = new CardListFilter(){ public boolean addCard(Card c) { - return c.isCreature() && c.getKeyword().contains("Flying") && - CardFactoryUtil.canDamage(card, c) && maxX >= (c.getNetDefense() + c.getDamage()); + return c.isCreature() && c.getKeyword().contains("Flying") && maxX >= (c.getNetDefense() + c.getDamage()); } }; @@ -4378,8 +4374,7 @@ public class CardFactory_Sorceries { { public boolean addCard(Card c) { - return c.isCreature() && !c.getKeyword().contains(keyword[0]) && - CardFactoryUtil.canDamage(card, c); + return c.isCreature() && !c.getKeyword().contains(keyword[0]); } }); @@ -4401,8 +4396,7 @@ public class CardFactory_Sorceries { CardListFilter filter = new CardListFilter(){ public boolean addCard(Card c) { - return c.isCreature() && !c.getKeyword().contains(keyword) && - CardFactoryUtil.canDamage(card, c) && maxX >= (c.getNetDefense() + c.getDamage()); + return c.isCreature() && !c.getKeyword().contains(keyword) && maxX >= (c.getNetDefense() + c.getDamage()); } }; @@ -4480,7 +4474,7 @@ public class CardFactory_Sorceries { { public boolean addCard(Card c) { - return c.isCreature() && CardFactoryUtil.canDamage(card, c); + return c.isCreature(); } }); @@ -4496,8 +4490,7 @@ public class CardFactory_Sorceries { CardListFilter filter = new CardListFilter(){ public boolean addCard(Card c) { - return c.isCreature() && CardFactoryUtil.canDamage(card, c) && - maxX >= (c.getNetDefense() + c.getDamage()); + return c.isCreature() && maxX >= (c.getNetDefense() + c.getDamage()); } }; @@ -4573,7 +4566,7 @@ public class CardFactory_Sorceries { { public boolean addCard(Card c) { - return c.isCreature() && CardFactoryUtil.canDamage(card, c); + return c.isCreature(); } }); @@ -4594,8 +4587,7 @@ public class CardFactory_Sorceries { CardListFilter filter = new CardListFilter(){ public boolean addCard(Card c) { - return c.isCreature() && CardFactoryUtil.canDamage(card, c) && - maxX >= (c.getNetDefense() + c.getDamage()); + return c.isCreature() && maxX >= (c.getNetDefense() + c.getDamage()); } }; diff --git a/src/forge/CardList.java b/src/forge/CardList.java index d86e15bb1fc..393f39b70fc 100644 --- a/src/forge/CardList.java +++ b/src/forge/CardList.java @@ -239,6 +239,7 @@ public class CardList implements Iterable { }); } + /*no longer needed public CardList canBeDamagedBy(final Card card) { return this.filter(new CardListFilter() { public boolean addCard(Card c) { @@ -246,6 +247,7 @@ public class CardList implements Iterable { } }); } + */ public CardList filter(CardListFilter f) { CardList c = new CardList(); diff --git a/src/forge/Combat.java b/src/forge/Combat.java index 536a0621a92..3587ff20f68 100644 --- a/src/forge/Combat.java +++ b/src/forge/Combat.java @@ -594,8 +594,7 @@ public class Combat { for(Entry entry : assignedDamageMap.entrySet()){ Card crd = entry.getKey(); - if(CardFactoryUtil.canDamage(crd, c)) - damageMap.put(crd, entry.getValue()); + damageMap.put(crd, entry.getValue()); } c.addCombatDamage(damageMap); diff --git a/src/forge/CombatUtil.java b/src/forge/CombatUtil.java index fe05106f68e..6d08ee8b30b 100644 --- a/src/forge/CombatUtil.java +++ b/src/forge/CombatUtil.java @@ -585,8 +585,6 @@ public class CombatUtil { if(attacker.getKeyword().contains("Indestructible") && !(defender.getKeyword().contains("Wither") || defender.getKeyword().contains("Infect"))) return 0; - if(!CardFactoryUtil.canDamage(defender, attacker)) return 0; - int defBushidoMagnitude = defender.getKeywordMagnitude("Bushido"); int defenderDamage = defender.getNetCombatDamage() - flankingMagnitude + defBushidoMagnitude; @@ -660,8 +658,6 @@ public class CombatUtil { if(attacker.getKeyword().contains("Indestructible") && !(defender.getKeyword().contains("Wither") || defender.getKeyword().contains("Infect"))) return false; - if(!CardFactoryUtil.canDamage(defender, attacker)) return false; - int defBushidoMagnitude = defender.getKeywordMagnitude("Bushido"); int attBushidoMagnitude = attacker.getKeywordMagnitude("Bushido"); attBushidoMagnitude += attacker.getAmountOfKeyword("Whenever CARDNAME becomes blocked, it gets +1/+1 until end of turn for each creature blocking it."); @@ -738,8 +734,6 @@ public class CombatUtil { return true; } - if(!CardFactoryUtil.canDamage(attacker,defender)) return false; - int defBushidoMagnitude = defender.getKeywordMagnitude("Bushido"); int attBushidoMagnitude = attacker.getKeywordMagnitude("Bushido"); attBushidoMagnitude += attacker.getAmountOfKeyword( diff --git a/src/forge/GameActionUtil.java b/src/forge/GameActionUtil.java index 658dd559b84..9537722665e 100644 --- a/src/forge/GameActionUtil.java +++ b/src/forge/GameActionUtil.java @@ -8428,12 +8428,10 @@ public class GameActionUtil { CardList humanCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.HumanPlayer); humanCreatures = humanCreatures.getValidCards(smallCreatures,k.getController(),k); - humanCreatures = humanCreatures.canBeDamagedBy(k); humanCreatures = humanCreatures.getNotKeyword("Indestructible"); CardList computerCreatures = AllZoneUtil.getCreaturesInPlay(AllZone.ComputerPlayer); computerCreatures = computerCreatures.getValidCards(smallCreatures,k.getController(),k); - computerCreatures = computerCreatures.canBeDamagedBy(k); computerCreatures = computerCreatures.getNotKeyword("Indestructible"); // We assume that both players will want to peek, ask if they want to reveal. @@ -8465,7 +8463,6 @@ public class GameActionUtil { if (wantDamageCreatures) { CardList allCreatures = AllZoneUtil.getCreaturesInPlay(); for (final Card crd : allCreatures) { - if (CardFactoryUtil.canDamage(k, crd)) crd.addDamage(2, k); } }