- Moved the damage prevention of Protection to staticDamagePrevention.

- Removed the canDamage function.
This commit is contained in:
jendave
2011-08-06 14:58:38 +00:00
parent 198a9ce49b
commit 930ca4e34a
12 changed files with 51 additions and 81 deletions

View File

@@ -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());
}
};

View File

@@ -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);

View File

@@ -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<Card, Integer> m = new HashMap<Card, Integer>();
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());
}
};

View File

@@ -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;

View File

@@ -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);
}
});

View File

@@ -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());
}
};

View File

@@ -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

View File

@@ -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());
}
};

View File

@@ -239,6 +239,7 @@ public class CardList implements Iterable<Card> {
});
}
/*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<Card> {
}
});
}
*/
public CardList filter(CardListFilter f) {
CardList c = new CardList();

View File

@@ -594,8 +594,7 @@ public class Combat {
for(Entry<Card, Integer> 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);

View File

@@ -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(

View File

@@ -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);
}
}