From c584eec7b0104d7f854370a99e52d31c9b1132c0 Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 13:27:35 +0000 Subject: [PATCH] -add keyword: If CARDNAME would be put into a graveyard this turn, exile it instead. -tweak CARDNAME can't be regenerated. keyword with my changes (Sloth and I were adding the same keyword at the same time.) --- src/forge/AbilityFactory_Pump.java | 62 ++++++++++++------------ src/forge/AbilityFactory_Regenerate.java | 2 +- src/forge/Card.java | 4 ++ src/forge/GameAction.java | 7 ++- 4 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/forge/AbilityFactory_Pump.java b/src/forge/AbilityFactory_Pump.java index 297e6643149..3dde5ed7ab8 100644 --- a/src/forge/AbilityFactory_Pump.java +++ b/src/forge/AbilityFactory_Pump.java @@ -366,40 +366,42 @@ public class AbilityFactory_Pump { tgtCards = tgt.getTargetCards(); else tgtCards = AbilityFactory.getDefinedCards(sa.getSourceCard(), params.get("Defined"), sa); - - if (sa instanceof Ability_Sub) - sb.append(" "); - else - sb.append(name).append(" - "); - for(Card c : tgtCards) - sb.append(c.getName()).append(" "); + if(tgtCards.size() > 0) { - final int atk = getNumAttack(sa); - final int def = getNumDefense(sa); - - sb.append("gains "); - if (atk != 0 || def != 0){ - if (atk >= 0) - sb.append("+"); - sb.append(atk); - sb.append("/"); - if (def >= 0) - sb.append("+"); - sb.append(def); - sb.append(" "); - } + if (sa instanceof Ability_Sub) + sb.append(" "); + else + sb.append(name).append(" - "); - for (int i=0; i= 0) + sb.append("+"); + sb.append(atk); + sb.append("/"); + if (def >= 0) + sb.append("+"); + sb.append(def); + sb.append(" "); + } + + for (int i=0; i 0) return false; + if(!card.canBeShielded() || card.getShield() > 0) return false; if(CardFactoryUtil.AI_doesCreatureAttack(card)) { //"Fuzzy logic" to determine if using a regenerate ability might be helpful because //we can't wait to decide to play this ability during combat, like the human can diff --git a/src/forge/Card.java b/src/forge/Card.java index 74e8b09c184..00b109b2c6f 100644 --- a/src/forge/Card.java +++ b/src/forge/Card.java @@ -1181,6 +1181,10 @@ public class Card extends MyObservable { nShield = 0; } + public boolean canBeShielded() { + return !hasKeyword("CARDNAME can't be regenerated."); + } + //is this "Card" supposed to be a token? public void setToken(boolean b) { token = b; diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index 80cce198924..705cf4dde46 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -63,6 +63,11 @@ public class GameAction { return; } + if(c.hasKeyword("If CARDNAME would be put into a graveyard this turn, exile it instead.")) { + moveTo(AllZone.getZone(Constant.Zone.Exile, c.getOwner()), c); + return; + } + if (AllZoneUtil.isCardInPlay("Planar Void")) { CardList pVoids = AllZoneUtil.getCardsInPlay("Planar Void"); for(int i = 0; i < pVoids.size(); i++) { @@ -2187,7 +2192,7 @@ public class GameAction { if(!AllZone.GameAction.isCardInPlay(c) || (c.getKeyword().contains("Indestructible") && (!c.isCreature() || c.getNetDefense() > 0))) return false; - if(c.getShield() > 0 && !c.getKeyword().contains("CARDNAME can't be regenerated.")) { + if(c.canBeShielded() && c.getShield() > 0) { c.subtractShield(); c.setDamage(0); c.tap();