mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
- Major combat code rewrite, added Swans of Bryn Argoll and Dromad Purebred.
- Exploration / Fastbond effects shouldn't carry over anymore. - Vendilion Clique CIP ability should work now. - AI playing Flight or Launch shouldn't target creatures with flying anymore. - Small fix to Dovescape. - Needlestorm, Oros, the Avenger, Incendiary Command and Spitting Spider shouldn't be able to damage creatures with protection anymore. - Timber Protector should work correctly now.
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -120,6 +120,7 @@ src/forge/DeckIO.java svneol=native#text/plain
|
||||
src/forge/DefaultPlayerZone.java svneol=native#text/plain
|
||||
src/forge/Display.java svneol=native#text/plain
|
||||
src/forge/DownloadDeck.java -text svneol=native#text/plain
|
||||
src/forge/EndOfCombat.java -text svneol=native#text/plain
|
||||
src/forge/EndOfTurn.java svneol=native#text/plain
|
||||
src/forge/ExternalPanel.java svneol=native#text/plain
|
||||
src/forge/FileUtil.java -text svneol=native#text/plain
|
||||
|
||||
@@ -18,6 +18,8 @@ forest.jpg http://resources.wizards.com/magic/cards/unh/en-us/card73946.jpg
|
||||
forest1.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=2748
|
||||
forest2.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=587
|
||||
forest3.jpg http://gatherer.wizards.com/handlers/image.ashx?type=card&multiverseid=586
|
||||
dromad_purebred.jpg http://www.wizards.com/global/images/magic/general/dromad_purebred.jpg
|
||||
swans_of_bryn_argoll.jpg http://www.wizards.com/global/images/magic/general/swans_of_bryn_argoll.jpg
|
||||
earthbind.jpg http://www.wizards.com/global/images/magic/general/earthbind.jpg
|
||||
honden_of_cleansing_fire.jpg http://www.wizards.com/global/images/magic/general/honden_of_cleansing_fire.jpg
|
||||
honden_of_infinite_rage.jpg http://www.wizards.com/global/images/magic/general/honden_of_infinite_rage.jpg
|
||||
|
||||
@@ -1,3 +1,16 @@
|
||||
Dromad Purebred
|
||||
4 W
|
||||
Creature Camel Beast
|
||||
Whenever Dromad Purebred is dealt damage, you gain 1 life.
|
||||
1/5
|
||||
|
||||
Swans of Bryn Argoll
|
||||
2 WU WU
|
||||
Creature Bird Spirit
|
||||
If a source would deal damage to Swans of Bryn Argoll, prevent that damage. The source's controller draws cards equal to the damage prevented this way.
|
||||
4/3
|
||||
Flying
|
||||
|
||||
Honden of Infinite Rage
|
||||
2 R
|
||||
Legendary Enchantment Shrine
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<int>0</int>
|
||||
<int>0</int>
|
||||
<int>244</int>
|
||||
<int>140</int>
|
||||
<int>138</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
@@ -47,7 +47,7 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>140</int>
|
||||
<int>138</int>
|
||||
<int>244</int>
|
||||
<int>10</int>
|
||||
</object>
|
||||
@@ -62,9 +62,9 @@
|
||||
<void property="bounds">
|
||||
<object class="java.awt.Rectangle">
|
||||
<int>0</int>
|
||||
<int>150</int>
|
||||
<int>148</int>
|
||||
<int>244</int>
|
||||
<int>179</int>
|
||||
<int>181</int>
|
||||
</object>
|
||||
</void>
|
||||
<void property="name">
|
||||
|
||||
@@ -17,6 +17,7 @@ public class AllZone implements NewConstants {
|
||||
public static final NameChanger NameChanger = new NameChanger();
|
||||
|
||||
public static EndOfTurn EndOfTurn = new EndOfTurn();
|
||||
public static EndOfCombat EndOfCombat = new EndOfCombat();
|
||||
public static final CardFactory CardFactory = new CardFactory(ForgeProps.getFile(CARDS));
|
||||
|
||||
public static final Phase Phase = new Phase();
|
||||
|
||||
@@ -29,6 +29,7 @@ public class Card extends MyObservable
|
||||
private ArrayList<Ability_Mana> manaAbility = new ArrayList<Ability_Mana>();
|
||||
|
||||
private HashMap<Card, Integer> receivedDamageFromThisTurn = new HashMap<Card, Integer>();
|
||||
private HashMap<Card, Integer> assignedDamageHashMap = new HashMap<Card, Integer>();
|
||||
|
||||
private boolean unCastable;
|
||||
private boolean tapped;
|
||||
@@ -55,7 +56,7 @@ public class Card extends MyObservable
|
||||
private int baseDefense;
|
||||
|
||||
private int damage;
|
||||
private int assignedDamage;
|
||||
|
||||
private int nShield;
|
||||
private int turnInZone;
|
||||
|
||||
@@ -483,7 +484,14 @@ public class Card extends MyObservable
|
||||
public void setRarity(String s) {rarity = s;}
|
||||
public String getRarity() {return rarity;}
|
||||
|
||||
public void addDamage(int n)
|
||||
|
||||
public void addDamage(int n, CardList sources)
|
||||
{
|
||||
for(Card source : sources)
|
||||
this.addDamage(n, source);
|
||||
}
|
||||
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
if (this.getName().equals("Cho-Manno, Revolutionary"))
|
||||
n = 0;
|
||||
@@ -497,8 +505,42 @@ public class Card extends MyObservable
|
||||
}
|
||||
public int getDamage() {return damage;}
|
||||
|
||||
public void setAssignedDamage(int n) {assignedDamage = n;}
|
||||
public int getAssignedDamage() {return assignedDamage;}
|
||||
/*public void setAssignedDamage(int n)
|
||||
{
|
||||
assignedDamage = n;
|
||||
}*/
|
||||
|
||||
public void addAssignedDamage(int n, Card source)
|
||||
{
|
||||
System.out.println(this + " - was assigned " + n +" damage, by " +source);
|
||||
if (!assignedDamageHashMap.containsKey(source))
|
||||
assignedDamageHashMap.put(source, n);
|
||||
else
|
||||
{
|
||||
assignedDamageHashMap.put(source, assignedDamageHashMap.get(source)+n);
|
||||
}
|
||||
}
|
||||
//public void setAssignedDamage(int n) {assignedDamage = n;}
|
||||
public void clearAssignedDamage()
|
||||
{
|
||||
assignedDamageHashMap.clear();
|
||||
}
|
||||
public int getTotalAssignedDamage()
|
||||
{
|
||||
int total = 0;
|
||||
|
||||
Collection<Integer> c = assignedDamageHashMap.values();
|
||||
|
||||
Iterator<Integer> itr = c.iterator();
|
||||
while(itr.hasNext())
|
||||
total+=itr.next();
|
||||
|
||||
return total;
|
||||
}
|
||||
public HashMap<Card, Integer> getAssignedDamageHashMap()
|
||||
{
|
||||
return assignedDamageHashMap;
|
||||
}
|
||||
|
||||
public void setImageName(String s) { imageName = s; }
|
||||
public String getImageName()
|
||||
|
||||
@@ -32,7 +32,7 @@ public class CardDetailUtil
|
||||
}
|
||||
|
||||
if(card.isCreature())
|
||||
label[3].setText("Damage: " +card.getDamage() +" Assigned Damage: " +card.getAssignedDamage());
|
||||
label[3].setText("Damage: " +card.getDamage() +" Assigned Damage: " +card.getTotalAssignedDamage());
|
||||
|
||||
String uniqueID = card.getUniqueNumber() +" ";
|
||||
label[4].setText("Card ID " +uniqueID);
|
||||
|
||||
@@ -1033,7 +1033,7 @@ public class CardFactory implements NewConstants {
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
//c.addDamage(damage);
|
||||
AllZone.GameAction.addDamage(c, damage);
|
||||
AllZone.GameAction.addDamage(c, card, damage);
|
||||
tgtP = c.getController();
|
||||
}
|
||||
}
|
||||
@@ -1184,19 +1184,27 @@ public class CardFactory implements NewConstants {
|
||||
if (card.getKeyword().contains("Wither"))
|
||||
getTargetCard().addCounter(Counters.M1M1, dmg[0]);
|
||||
else
|
||||
getTargetCard().addDamage(dmg[0]);
|
||||
getTargetCard().addDamage(dmg[0], card);
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, dmg[0]);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, dmg[0]);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, c, dmg[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(dmg[0]);
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, dmg[0]);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, dmg[0]);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, c, dmg[0]);
|
||||
}
|
||||
}
|
||||
}//resolve()
|
||||
};//Ability_Activated
|
||||
@@ -1232,11 +1240,15 @@ public class CardFactory implements NewConstants {
|
||||
if (card.getKeyword().contains("Wither"))
|
||||
getTargetCard().addCounter(Counters.M1M1, dmg[0]);
|
||||
else
|
||||
getTargetCard().addDamage(dmg[0]);
|
||||
getTargetCard().addDamage(dmg[0], card);
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, dmg[0]);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, dmg[0]);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, c, dmg[0]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1244,8 +1256,13 @@ public class CardFactory implements NewConstants {
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(dmg[0]);
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, dmg[0]);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, dmg[0]);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, c, dmg[0]);
|
||||
}
|
||||
|
||||
|
||||
card.setDealtDmgToOppThisTurn(true);
|
||||
}
|
||||
@@ -1282,19 +1299,28 @@ public class CardFactory implements NewConstants {
|
||||
if (card.getKeyword().contains("Wither"))
|
||||
getTargetCard().addCounter(Counters.M1M1, dmg[0]);
|
||||
else
|
||||
getTargetCard().addDamage(dmg[0]);
|
||||
getTargetCard().addDamage(dmg[0], card);
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, dmg[0]);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, dmg[0]);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, c, dmg[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(dmg[0]);
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, dmg[0]);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, dmg[0]);
|
||||
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, c, dmg[0]);
|
||||
}
|
||||
|
||||
card.setDealtDmgToOppThisTurn(true);
|
||||
}
|
||||
@@ -1975,7 +2001,7 @@ public class CardFactory implements NewConstants {
|
||||
{
|
||||
Card crd = creatures.get(i);
|
||||
if (CardFactoryUtil.canDamage(card, crd))
|
||||
crd.addDamage(3);
|
||||
crd.addDamage(3, card);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2912,7 +2938,7 @@ public class CardFactory implements NewConstants {
|
||||
|
||||
for(int i = 0; i < list.size(); i++){
|
||||
if (CardFactoryUtil.canDamage(card, list.get(i)))
|
||||
list.get(i).addDamage(1);
|
||||
list.get(i).addDamage(1, card);
|
||||
}
|
||||
|
||||
AllZone.Human_Life.subtractLife(1);
|
||||
@@ -2969,7 +2995,7 @@ public class CardFactory implements NewConstants {
|
||||
|
||||
for(int i = 0; i < list.size(); i++) {
|
||||
if (CardFactoryUtil.canDamage(card, list.get(i)))
|
||||
list.get(i).addDamage(1);
|
||||
list.get(i).addDamage(1, card);
|
||||
}
|
||||
|
||||
AllZone.Human_Life.subtractLife(1);
|
||||
@@ -4260,7 +4286,7 @@ public class CardFactory implements NewConstants {
|
||||
list = list.getType("Creature");
|
||||
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
list.get(i).addDamage(2);
|
||||
list.get(i).addDamage(2, card);
|
||||
}//resolve()
|
||||
};
|
||||
card.clearSpellAbility();
|
||||
@@ -5191,7 +5217,7 @@ public class CardFactory implements NewConstants {
|
||||
|
||||
for(int i = 0; i < all.size(); i++)
|
||||
if(! all.get(i).getKeyword().contains("Flying") && CardFactoryUtil.canDamage(card,all.get(i)))
|
||||
all.get(i).addDamage(1);
|
||||
all.get(i).addDamage(1, card);
|
||||
}
|
||||
};
|
||||
card.clearSpellAbility();
|
||||
@@ -5573,7 +5599,7 @@ public class CardFactory implements NewConstants {
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
getTargetCard().addDamage(5);
|
||||
getTargetCard().addDamage(5, card);
|
||||
done();
|
||||
}
|
||||
else
|
||||
@@ -6655,7 +6681,7 @@ public class CardFactory implements NewConstants {
|
||||
for(int i = 0; i < all.size(); i++)
|
||||
{
|
||||
if (CardFactoryUtil.canDamage(card,all.get(i)))
|
||||
all.get(i).addDamage(2);
|
||||
all.get(i).addDamage(2, card);
|
||||
}
|
||||
}
|
||||
public boolean canPlayAI()
|
||||
@@ -6693,7 +6719,7 @@ public class CardFactory implements NewConstants {
|
||||
for(int i = 0; i < all.size(); i++)
|
||||
{
|
||||
if (CardFactoryUtil.canDamage(card,all.get(i)))
|
||||
all.get(i).addDamage(2);
|
||||
all.get(i).addDamage(2, card);
|
||||
}
|
||||
|
||||
PlayerLife compLife = AllZone.GameAction.getPlayerLife(Constant.Player.Computer);
|
||||
@@ -6750,7 +6776,7 @@ public class CardFactory implements NewConstants {
|
||||
if (CardFactoryUtil.canDamage(card, all.get(i)))
|
||||
{
|
||||
all.get(i).setShield(0);
|
||||
all.get(i).addDamage(3);
|
||||
all.get(i).addDamage(3, card);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7263,7 +7289,7 @@ public class CardFactory implements NewConstants {
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
getTargetCard().addDamage(2);
|
||||
getTargetCard().addDamage(2, card);
|
||||
AllZone.GameAction.getPlayerLife(card.getController()).addLife(2);
|
||||
}
|
||||
}//resolve()
|
||||
@@ -7508,7 +7534,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()))
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
}
|
||||
}//resolve()
|
||||
};//SpellAbility
|
||||
@@ -7674,7 +7700,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()))
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -7744,7 +7770,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()))
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -7793,7 +7819,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(1);
|
||||
c.addDamage(1, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -7862,7 +7888,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -8010,7 +8036,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -8098,7 +8124,7 @@ public class CardFactory implements NewConstants {
|
||||
javax.swing.JOptionPane.showMessageDialog(null, "Erratic Explosion causes " +damage +" to " +getTargetCard());
|
||||
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -8203,7 +8229,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
AllZone.GameAction.getPlayerLife(card.getController()).subtractLife(2);
|
||||
}
|
||||
}
|
||||
@@ -8313,7 +8339,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()))
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
AllZone.GameAction.getPlayerLife(card.getController()).subtractLife(2);
|
||||
}
|
||||
}
|
||||
@@ -8726,10 +8752,13 @@ public class CardFactory implements NewConstants {
|
||||
list.addAll(AllZone.Computer_Play.getCards());
|
||||
list = list.getType("Creature");
|
||||
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
list.get(i).addDamage(2);
|
||||
for(int i = 0; i < list.size(); i++) {
|
||||
if (CardFactoryUtil.canDamage(card, list.get(i)))
|
||||
list.get(i).addDamage(2, card);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//"Destroy target nonbasic land",
|
||||
if(userChoice.contains(cardChoice[2]))
|
||||
AllZone.GameAction.destroy(m_land[0]);
|
||||
@@ -9983,12 +10012,12 @@ public class CardFactory implements NewConstants {
|
||||
{
|
||||
public boolean addCard(Card c)
|
||||
{
|
||||
return c.isCreature() && c.getKeyword().contains("Flying");
|
||||
return c.isCreature() && c.getKeyword().contains("Flying") && CardFactoryUtil.canDamage(card, c);
|
||||
}
|
||||
});
|
||||
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
list.get(i).addDamage(4);
|
||||
list.get(i).addDamage(4, card);
|
||||
}//resolve()
|
||||
|
||||
public boolean canPlayAI() {return CardFactoryUtil.AI_getHumanCreature("Flying", card, false).size() != 0;}
|
||||
@@ -10923,7 +10952,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
int n = countSwamps();
|
||||
getTargetCard().addDamage(n);
|
||||
getTargetCard().addDamage(n, card);
|
||||
|
||||
PlayerLife life = AllZone.GameAction.getPlayerLife(card.getController());
|
||||
life.addLife(n);
|
||||
@@ -12694,7 +12723,7 @@ public class CardFactory implements NewConstants {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()))
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -13410,7 +13439,7 @@ public class CardFactory implements NewConstants {
|
||||
if(getTargetCard() != null)
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
getTargetCard().addDamage(2);
|
||||
getTargetCard().addDamage(2, card);
|
||||
}
|
||||
else
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(2);
|
||||
@@ -15880,7 +15909,7 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
//c.addDamage(damage);
|
||||
AllZone.GameAction.addDamage(c, 5);
|
||||
AllZone.GameAction.addDamage(c, card, 5);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -16297,7 +16326,7 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
|
||||
if(getTargetCard() != null)
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
getTargetCard().addDamage(2);
|
||||
getTargetCard().addDamage(2, card);
|
||||
}
|
||||
else
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(2);
|
||||
@@ -16591,7 +16620,7 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
AllZone.GameAction.getPlayerLife(card.getController()).addLife(damage);
|
||||
}
|
||||
}
|
||||
@@ -16742,7 +16771,7 @@ return land.size() > 1 && CardFactoryUtil.AI_isMainPhase();
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()))
|
||||
{
|
||||
getTargetCard().addDamage(damage);
|
||||
getTargetCard().addDamage(damage, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -1915,6 +1915,27 @@ public class CardFactoryUtil
|
||||
|
||||
}
|
||||
|
||||
//returns a CardList of all auras named e enchanting Card c
|
||||
public static CardList getAurasEnchanting(Card c, String e)
|
||||
{
|
||||
CardList list = new CardList();
|
||||
if (!c.isEnchanted())
|
||||
return list;
|
||||
|
||||
final String enchantmentName = e;
|
||||
CardList cl = new CardList(c.getEnchantedBy().toArray());
|
||||
cl = cl.filter(new CardListFilter()
|
||||
{
|
||||
public boolean addCard(Card c) {
|
||||
return c.getName().equals(enchantmentName);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return cl;
|
||||
|
||||
}
|
||||
|
||||
//returns the number of equipments named "e" card c is equipped by
|
||||
public static int hasNumberEquipments(Card c, String e)
|
||||
{
|
||||
|
||||
@@ -2736,7 +2736,12 @@ class CardFactory_Auras {
|
||||
public boolean canPlayAI()
|
||||
{
|
||||
CardList list = new CardList(AllZone.Computer_Play.getCards());
|
||||
list = list.getType("Creature");
|
||||
list = list.filter(new CardListFilter(){
|
||||
public boolean addCard(Card c)
|
||||
{
|
||||
return c.isCreature() && c.getKeyword().contains("Flying");
|
||||
}
|
||||
});
|
||||
|
||||
if(list.isEmpty())
|
||||
return false;
|
||||
@@ -5661,7 +5666,6 @@ class CardFactory_Auras {
|
||||
final SpellAbility spell = new Spell(card)
|
||||
{
|
||||
|
||||
|
||||
private static final long serialVersionUID = 142389375702113977L;
|
||||
|
||||
public boolean canPlayAI()
|
||||
@@ -5720,7 +5724,7 @@ class CardFactory_Auras {
|
||||
if(crd.getKeyword().contains("Flying"))
|
||||
{
|
||||
badTarget[0] = false;
|
||||
AllZone.GameAction.addDamage(crd, 2);
|
||||
AllZone.GameAction.addDamage(crd, card, 2);
|
||||
crd.removeIntrinsicKeyword("Flying");
|
||||
crd.removeExtrinsicKeyword("Flying");
|
||||
}
|
||||
|
||||
@@ -19,15 +19,14 @@ public class CardFactory_Creatures {
|
||||
public static Card getCard(final Card card, String cardName, String owner, CardFactory cf)
|
||||
{
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
if(cardName.equals("Filthy Cur"))
|
||||
{
|
||||
final Card newCard = new Card()
|
||||
{
|
||||
public void addDamage(final int n)
|
||||
public void addDamage(final int n, Card source)
|
||||
{
|
||||
super.addDamage(n);
|
||||
super.addDamage(n, source);
|
||||
SpellAbility ability = new Ability(card, "0")
|
||||
{
|
||||
public void resolve()
|
||||
@@ -56,7 +55,7 @@ public class CardFactory_Creatures {
|
||||
return newCard;
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
//*************** START *********** START **************************
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Belligerent Hatchling") || cardName.equals("Noxious Hatchling")
|
||||
||cardName.equals("Shrewd Hatchling") ||cardName.equals("Sturdy Hatchling")
|
||||
|| cardName.equals("Voracious Hatchling"))
|
||||
@@ -152,9 +151,9 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
final Card newCard = new Card()
|
||||
{
|
||||
public void addDamage(final int n)
|
||||
public void addDamage(final int n, Card source)
|
||||
{
|
||||
super.addDamage(n);
|
||||
super.addDamage(n, source);
|
||||
SpellAbility ability = new Ability(card, "0")
|
||||
{
|
||||
public void resolve()
|
||||
@@ -185,17 +184,14 @@ public class CardFactory_Creatures {
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Jackal Pup"))
|
||||
{
|
||||
final Card newCard = new Card()
|
||||
{
|
||||
public void addDamage(final int n)
|
||||
public void addDamage(final int n, final Card source)
|
||||
{
|
||||
super.addDamage(n);
|
||||
super.addDamage(n, source);
|
||||
SpellAbility ability = new Ability(card, "0")
|
||||
{
|
||||
public void resolve()
|
||||
@@ -226,17 +222,15 @@ public class CardFactory_Creatures {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Stuffy Doll"))
|
||||
{
|
||||
final Card newCard = new Card()
|
||||
{
|
||||
Card c = this;
|
||||
public void addDamage(final int n)
|
||||
public void addDamage(final int n, final Card source)
|
||||
{
|
||||
super.addDamage(n);
|
||||
super.addDamage(n, source);
|
||||
final String opponent = AllZone.GameAction.getOpponent(card.getOwner());
|
||||
|
||||
SpellAbility ability = new Ability(card, "0")
|
||||
@@ -247,8 +241,13 @@ public class CardFactory_Creatures {
|
||||
|
||||
if (c.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(c,n);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(c, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(c, n);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card crd : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(c, crd, n);
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
ability.setStackDescription("Stuffy Doll - causes " +n +" damage to " +opponent);
|
||||
@@ -276,12 +275,16 @@ public class CardFactory_Creatures {
|
||||
|
||||
public void resolve()
|
||||
{
|
||||
newCard.addDamage(1);
|
||||
newCard.addDamage(1, newCard);
|
||||
|
||||
if (newCard.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(newCard, 1);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(newCard, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(newCard, 1);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(newCard, "Guilty Conscience");
|
||||
for (Card crd : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(newCard, crd, 1);
|
||||
}
|
||||
}
|
||||
};//SpellAbility
|
||||
ability.setDescription("tap: Stuffy Doll deals 1 damage to itself.");
|
||||
@@ -380,8 +383,6 @@ public class CardFactory_Creatures {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Caller of the Claw"))
|
||||
{
|
||||
@@ -1982,7 +1983,7 @@ public class CardFactory_Creatures {
|
||||
public void resolve()
|
||||
{
|
||||
if(getTargetCard() != null && CardFactoryUtil.canDamage(card, getTargetCard()) && CardFactoryUtil.canTarget(card,getTargetCard()) )
|
||||
getTargetCard().addDamage(3);
|
||||
getTargetCard().addDamage(3, card);
|
||||
else
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(3);
|
||||
}
|
||||
@@ -3105,7 +3106,7 @@ public class CardFactory_Creatures {
|
||||
list = list.getType("Creature");
|
||||
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);
|
||||
list.get(i).addDamage(5, card);
|
||||
}
|
||||
};
|
||||
Command destroy = new Command()
|
||||
@@ -3199,7 +3200,7 @@ public class CardFactory_Creatures {
|
||||
public void resolve()
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canDamage(card, getTargetCard()) && CardFactoryUtil.canTarget(card,getTargetCard()) )
|
||||
AllZone.GameAction.addDamage(getTargetCard(), 4);
|
||||
AllZone.GameAction.addDamage(getTargetCard(), card, 4);
|
||||
}
|
||||
};
|
||||
Command intoPlay = new Command()
|
||||
@@ -3640,7 +3641,7 @@ public class CardFactory_Creatures {
|
||||
public void resolve()
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canDamage(card, getTargetCard()) && CardFactoryUtil.canTarget(card,getTargetCard()) )
|
||||
getTargetCard().addDamage(3);
|
||||
getTargetCard().addDamage(3, card);
|
||||
}
|
||||
};
|
||||
Command destroy = new Command()
|
||||
@@ -3702,7 +3703,7 @@ public class CardFactory_Creatures {
|
||||
public void resolve()
|
||||
{
|
||||
card.setDamage(0);
|
||||
card.setAssignedDamage(0);
|
||||
card.clearAssignedDamage();
|
||||
card.untap();
|
||||
|
||||
//moves card to top of library
|
||||
@@ -3740,7 +3741,7 @@ public class CardFactory_Creatures {
|
||||
public void resolve()
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canDamage(card, getTargetCard()) && CardFactoryUtil.canTarget(card,getTargetCard()) )
|
||||
getTargetCard().addDamage(2);
|
||||
getTargetCard().addDamage(2, card);
|
||||
}
|
||||
};
|
||||
Command intoPlay = new Command()
|
||||
@@ -5474,7 +5475,7 @@ public class CardFactory_Creatures {
|
||||
&& CardFactoryUtil.canTarget(card,getTargetCard()) )
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -5498,7 +5499,7 @@ public class CardFactory_Creatures {
|
||||
if((card.isCreature() || card.isPlaneswalker()) && zone.is(Constant.Zone.Play))
|
||||
{
|
||||
int damage = ((Integer)countZubera.execute()).intValue();
|
||||
card.addDamage(damage);
|
||||
card.addDamage(damage, card);
|
||||
|
||||
//have to do this since state effects aren't checked
|
||||
//after this "Input" class is done
|
||||
@@ -6264,7 +6265,7 @@ public class CardFactory_Creatures {
|
||||
if(getTargetCard() != null)
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
getTargetCard().addDamage(1);
|
||||
getTargetCard().addDamage(1, card);
|
||||
}
|
||||
else
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(1);
|
||||
@@ -6306,14 +6307,18 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
getTargetCard().addDamage(2);
|
||||
getTargetCard().addDamage(2, card);
|
||||
//3 damage to self
|
||||
AllZone.GameAction.getPlayerLife(card.getController()).subtractLife(3);
|
||||
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, 5);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, 5);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card crd : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, crd, 5);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -6325,8 +6330,12 @@ public class CardFactory_Creatures {
|
||||
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, 5);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, 5);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card crd : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, crd, 5);
|
||||
}
|
||||
}
|
||||
|
||||
}//resolve()
|
||||
@@ -6365,12 +6374,16 @@ public class CardFactory_Creatures {
|
||||
PlayerLife life = AllZone.GameAction.getPlayerLife(card.getController());
|
||||
life.subtractLife(countGoblins());
|
||||
|
||||
getTargetCard().addDamage(countGoblins());
|
||||
getTargetCard().addDamage(countGoblins(), card);
|
||||
|
||||
if (card.getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(card, 2*countGoblins());
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, 2*countGoblins());
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card crd : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, crd, 2*countGoblins());
|
||||
}
|
||||
}
|
||||
}//resolve()
|
||||
int countGoblins()
|
||||
@@ -6899,7 +6912,7 @@ public class CardFactory_Creatures {
|
||||
CardList list = getRadiance(getTargetCard());
|
||||
for(int i = 0; i < list.size(); i++) {
|
||||
if (CardFactoryUtil.canDamage(card, list.get(i)))
|
||||
list.get(i).addDamage(1);
|
||||
list.get(i).addDamage(1, card);
|
||||
}
|
||||
}
|
||||
}//resolve()
|
||||
@@ -7200,7 +7213,7 @@ public class CardFactory_Creatures {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) &&
|
||||
(attackers.contains(getTargetCard()) || blockers.contains(getTargetCard()) ) )
|
||||
{
|
||||
getTargetCard().addDamage(2);
|
||||
getTargetCard().addDamage(2, card);
|
||||
}
|
||||
}//resolve()
|
||||
public boolean canPlayAI()
|
||||
@@ -7257,7 +7270,7 @@ public class CardFactory_Creatures {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) &&
|
||||
(attackers.contains(getTargetCard()) || blockers.contains(getTargetCard()) ) )
|
||||
{
|
||||
getTargetCard().addDamage(3);
|
||||
getTargetCard().addDamage(3, card);
|
||||
}
|
||||
}//resolve()
|
||||
public boolean canPlayAI()
|
||||
@@ -7311,7 +7324,7 @@ public class CardFactory_Creatures {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) &&
|
||||
attackers.contains(getTargetCard()) && getTargetCard().getKeyword().contains("Flying"))
|
||||
{
|
||||
getTargetCard().addDamage(4);
|
||||
getTargetCard().addDamage(4, card);
|
||||
}
|
||||
}//resolve()
|
||||
public boolean canPlayAI()
|
||||
@@ -7816,7 +7829,7 @@ public class CardFactory_Creatures {
|
||||
card.setIntrinsicKeyword(new ArrayList<String>());
|
||||
card.addIntrinsicKeyword("Flying");
|
||||
|
||||
card.setAssignedDamage(0);
|
||||
card.clearAssignedDamage();
|
||||
card.setDamage(0);
|
||||
card.untap();
|
||||
AllZone.getZone(card).remove(card);
|
||||
@@ -7952,7 +7965,8 @@ public class CardFactory_Creatures {
|
||||
});
|
||||
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
list.get(i).addDamage(1);
|
||||
if (CardFactoryUtil.canDamage(card, list.get(i)))
|
||||
list.get(i).addDamage(1, card);
|
||||
}//resolve()
|
||||
};//SpellAbility
|
||||
|
||||
@@ -8686,7 +8700,7 @@ public class CardFactory_Creatures {
|
||||
public void resolve()
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
getTargetCard().addDamage(1);
|
||||
getTargetCard().addDamage(1, card);
|
||||
}//resolve()
|
||||
};//SpellAbility
|
||||
|
||||
@@ -8785,7 +8799,7 @@ public class CardFactory_Creatures {
|
||||
if(getTargetCard() != null)
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
getTargetCard().addDamage(1);
|
||||
getTargetCard().addDamage(1, card);
|
||||
}
|
||||
else
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(1);
|
||||
@@ -8838,7 +8852,7 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
{
|
||||
getTargetCard().addDamage(2);
|
||||
getTargetCard().addDamage(2, card);
|
||||
getTargetCard().removeIntrinsicKeyword("Flying");
|
||||
getTargetCard().removeExtrinsicKeyword("Flying");
|
||||
}
|
||||
@@ -9378,7 +9392,7 @@ public class CardFactory_Creatures {
|
||||
}
|
||||
});
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
list.get(i).addDamage(4);
|
||||
list.get(i).addDamage(4, card);
|
||||
|
||||
AllZone.Human_Life.subtractLife(4);
|
||||
AllZone.Computer_Life.subtractLife(4);
|
||||
@@ -11015,7 +11029,7 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
Card crd = getTargetCard();
|
||||
//c.addDamage(damage);
|
||||
AllZone.GameAction.addDamage(crd, 2);
|
||||
AllZone.GameAction.addDamage(crd, card, 2);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -11107,8 +11121,12 @@ public class CardFactory_Creatures {
|
||||
life.subtractLife(power);
|
||||
|
||||
GameActionUtil.executeLifeLinkEffects(card, power);
|
||||
for(int i=0; i < CardFactoryUtil.hasNumberEnchantments(card, "Guilty Conscience"); i++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, power);
|
||||
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(card, "Guilty Conscience");
|
||||
for (Card crd : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(card, crd, power);
|
||||
}
|
||||
|
||||
card.setDealtDmgToOppThisTurn(true);
|
||||
}
|
||||
@@ -12053,9 +12071,10 @@ public class CardFactory_Creatures {
|
||||
|
||||
for (int i=0;i<cards.size(); i++)
|
||||
{
|
||||
if (!CardUtil.getColors(cards.get(i)).contains(Constant.Color.White))
|
||||
if (!CardUtil.getColors(cards.get(i)).contains(Constant.Color.White)
|
||||
&& CardFactoryUtil.canDamage(card, cards.get(i)))
|
||||
{
|
||||
cards.get(i).addDamage(3);
|
||||
cards.get(i).addDamage(3, card);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12626,7 +12645,7 @@ public class CardFactory_Creatures {
|
||||
card.setBaseAttack(5);
|
||||
card.setBaseDefense(5);
|
||||
|
||||
card.setAssignedDamage(0);
|
||||
card.clearAssignedDamage();
|
||||
card.setDamage(0);
|
||||
card.untap();
|
||||
AllZone.getZone(card).remove(card);
|
||||
@@ -16474,7 +16493,7 @@ public class CardFactory_Creatures {
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Vendillion Clique"))
|
||||
else if(cardName.equals("Vendilion Clique"))
|
||||
{
|
||||
final SpellAbility ability = new Ability(card, "0")
|
||||
{
|
||||
@@ -17349,7 +17368,7 @@ public class CardFactory_Creatures {
|
||||
if(getTargetCard() != null)
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card, getTargetCard()) )
|
||||
getTargetCard().addDamage(1);
|
||||
getTargetCard().addDamage(1, card);
|
||||
}
|
||||
else
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(1);
|
||||
@@ -17852,7 +17871,7 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
final Card newCard = new Card()
|
||||
{
|
||||
public void addDamage(final int n)
|
||||
public void addDamage(final int n, Card source)
|
||||
{
|
||||
this.subtractCounter(Counters.P1P1, 1);
|
||||
}
|
||||
@@ -17896,7 +17915,7 @@ public class CardFactory_Creatures {
|
||||
{
|
||||
final Card newCard = new Card()
|
||||
{
|
||||
public void addDamage(final int n)
|
||||
public void addDamage(final int n, Card source)
|
||||
{
|
||||
this.subtractCounter(Counters.P1P1, 1);
|
||||
}
|
||||
@@ -18033,7 +18052,84 @@ public class CardFactory_Creatures {
|
||||
card.addLeavesPlayCommand(leavesPlay);
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if (cardName.equals("Swans of Bryn Argoll"))
|
||||
{
|
||||
final Card newCard = new Card()
|
||||
{
|
||||
public void addDamage(final int n, final Card source)
|
||||
{
|
||||
final Ability ability = new Ability(card, "0")
|
||||
{
|
||||
public void resolve(){
|
||||
String player = source.getController();
|
||||
for (int i=0;i<n;i++)
|
||||
AllZone.GameAction.drawCard(player);
|
||||
}
|
||||
};
|
||||
ability.setStackDescription("Swans of Bryn Argoll - " +source.getController() + " draws " + n +" cards.");
|
||||
AllZone.Stack.add(ability);
|
||||
}
|
||||
};
|
||||
|
||||
newCard.setOwner(card.getOwner());
|
||||
newCard.setController(card.getController());
|
||||
|
||||
newCard.setManaCost(card.getManaCost());
|
||||
newCard.setName(card.getName());
|
||||
newCard.addType("Creature");
|
||||
newCard.addType("Bird");
|
||||
newCard.addType("Spirit");
|
||||
newCard.setText(card.getSpellText());
|
||||
newCard.setBaseAttack(card.getBaseAttack());
|
||||
newCard.setBaseDefense(card.getBaseDefense());
|
||||
|
||||
newCard.addIntrinsicKeyword("Flying");
|
||||
|
||||
newCard.addSpellAbility(new Spell_Permanent(newCard));
|
||||
|
||||
return newCard;
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if (cardName.equals("Dromad Purebred"))
|
||||
{
|
||||
final Card newCard = new Card()
|
||||
{
|
||||
public void addDamage(final int n, CardList sources)
|
||||
{
|
||||
final Ability ability = new Ability(card, "0")
|
||||
{
|
||||
public void resolve(){
|
||||
String player = card.getController();
|
||||
AllZone.GameAction.getPlayerLife(player).addLife(1);
|
||||
}
|
||||
};
|
||||
ability.setStackDescription(card.getName() + " - " +card.getController() + " gains 1 life.");
|
||||
AllZone.Stack.add(ability);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
newCard.setOwner(card.getOwner());
|
||||
newCard.setController(card.getController());
|
||||
|
||||
newCard.setManaCost(card.getManaCost());
|
||||
newCard.setName(card.getName());
|
||||
newCard.addType("Creature");
|
||||
newCard.addType("Camel");
|
||||
newCard.addType("Beast");
|
||||
newCard.setText(card.getSpellText());
|
||||
newCard.setBaseAttack(card.getBaseAttack());
|
||||
newCard.setBaseDefense(card.getBaseDefense());
|
||||
|
||||
newCard.addSpellAbility(new Spell_Permanent(newCard));
|
||||
|
||||
return newCard;
|
||||
}//*************** END ************ END **************************
|
||||
|
||||
//*************** START *********** START **************************
|
||||
else if(cardName.equals("Thoughtcutter Agent"))
|
||||
{
|
||||
final SpellAbility ability = new Ability_Tap(card, "U B")
|
||||
|
||||
@@ -14,7 +14,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY, n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -265,7 +265,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY, n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -518,7 +518,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY, n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -866,7 +866,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage (int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY,n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -1107,7 +1107,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY,n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -1357,7 +1357,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY, n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -1387,7 +1387,7 @@ class CardFactory_Planeswalkers {
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
if (CardFactoryUtil.canDamage(card2, c))
|
||||
c.addDamage(1);
|
||||
c.addDamage(1, card2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1462,7 +1462,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
card2.subtractCounter(Counters.LOYALTY, damage2[0]);
|
||||
if (CardFactoryUtil.canDamage(card2, getTargetCard()))
|
||||
getTargetCard().addDamage(damage2[0]);
|
||||
getTargetCard().addDamage(damage2[0], card2);
|
||||
|
||||
damage2[0] = 0;
|
||||
}//resolve()
|
||||
@@ -1554,8 +1554,8 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
{
|
||||
if (CardFactoryUtil.canDamage(card, list.get(i)))
|
||||
list.get(i).addDamage(10);
|
||||
if (CardFactoryUtil.canDamage(card2, list.get(i)))
|
||||
list.get(i).addDamage(10, card2);
|
||||
}
|
||||
}//resolve()
|
||||
public boolean canPlay()
|
||||
@@ -1625,7 +1625,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY,n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -1896,7 +1896,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY,n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -2036,7 +2036,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY,n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -2162,7 +2162,7 @@ class CardFactory_Planeswalkers {
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(card2, getTargetCard()))
|
||||
{
|
||||
Card c = getTargetCard();
|
||||
c.addDamage(damage);
|
||||
c.addDamage(damage, card2);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2260,7 +2260,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY,n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
@@ -2572,7 +2572,7 @@ class CardFactory_Planeswalkers {
|
||||
|
||||
final Card card2 = new Card()
|
||||
{
|
||||
public void addDamage(int n)
|
||||
public void addDamage(int n, Card source)
|
||||
{
|
||||
subtractCounter(Counters.LOYALTY,n);
|
||||
AllZone.GameAction.checkStateEffects();
|
||||
|
||||
@@ -9,10 +9,13 @@ public class Combat
|
||||
private Set<Card> blocked = new HashSet<Card>();
|
||||
|
||||
private HashMap<Card,CardList> unblockedMap = new HashMap<Card,CardList>();
|
||||
private HashMap<Card, Integer> defendingFirstStrikeDamageMap = new HashMap<Card, Integer>();
|
||||
private HashMap<Card, Integer> defendingDamageMap = new HashMap<Card, Integer>();
|
||||
|
||||
private int attackingDamage;
|
||||
private int defendingDamage;
|
||||
private int defendingFirstStrikeDamage;
|
||||
//private int defendingDamage;
|
||||
|
||||
//private int defendingFirstStrikeDamage;
|
||||
//private int trampleDamage;
|
||||
//private int trampleFirstStrikeDamage;
|
||||
|
||||
@@ -35,8 +38,8 @@ public class Combat
|
||||
unblockedMap.clear();
|
||||
|
||||
attackingDamage = 0;
|
||||
defendingDamage = 0;
|
||||
defendingFirstStrikeDamage = 0;
|
||||
defendingDamageMap.clear();
|
||||
defendingFirstStrikeDamageMap.clear();
|
||||
|
||||
declaredAttackers = 0;
|
||||
attackingPlayer = "";
|
||||
@@ -54,11 +57,37 @@ public class Combat
|
||||
public String getDefendingPlayer() {return defendingPlayer;}
|
||||
|
||||
//relates to defending player damage
|
||||
public int getDefendingDamage() {return defendingDamage;}
|
||||
public int getDefendingFirstStrikeDamage() {return defendingFirstStrikeDamage;}
|
||||
public void setDefendingDamage()
|
||||
//public int getDefendingDamage() {return defendingDamage;}
|
||||
|
||||
public int getTotalDefendingDamage()
|
||||
{
|
||||
defendingDamage = 0;
|
||||
int total = 0;
|
||||
|
||||
Collection<Integer> c = defendingDamageMap.values();
|
||||
|
||||
Iterator<Integer> itr = c.iterator();
|
||||
while(itr.hasNext())
|
||||
total+=itr.next();
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
public int getTotalFirstStrikeDefendingDamage()
|
||||
{
|
||||
int total = 0;
|
||||
|
||||
Collection<Integer> c = defendingFirstStrikeDamageMap.values();
|
||||
|
||||
Iterator<Integer> itr = c.iterator();
|
||||
while(itr.hasNext())
|
||||
total+=itr.next();
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
public void setDefendingDamage()
|
||||
{
|
||||
defendingDamageMap.clear();
|
||||
CardList att = new CardList(getAttackers());
|
||||
//sum unblocked attackers' power
|
||||
for(int i = 0; i < att.size(); i++) {
|
||||
@@ -70,13 +99,13 @@ public class Combat
|
||||
//if the creature has first strike do not do damage in the normal combat phase
|
||||
//if(att.get(i).hasSecondStrike())
|
||||
if(!att.get(i).hasFirstStrike() || (att.get(i).hasFirstStrike() && att.get(i).hasDoubleStrike()) )
|
||||
defendingDamage += damageDealt;
|
||||
addDefendingDamage(damageDealt, att.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
public void setDefendingFirstStrikeDamage()
|
||||
{
|
||||
defendingFirstStrikeDamage = 0;
|
||||
defendingFirstStrikeDamageMap.clear();
|
||||
CardList att = new CardList(getAttackers());
|
||||
//sum unblocked attackers' power
|
||||
for(int i = 0; i < att.size(); i++) {
|
||||
@@ -88,13 +117,30 @@ public class Combat
|
||||
//if the creature has first strike or double strike do damage in the first strike combat phase
|
||||
|
||||
if(att.get(i).hasFirstStrike() || att.get(i).hasDoubleStrike()){
|
||||
defendingFirstStrikeDamage += damageDealt;
|
||||
addDefendingFirstStrikeDamage(damageDealt, att.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public void addDefendingDamage(int n) {defendingDamage += n;}
|
||||
public void addDefendingFirstStrikeDamage(int n) {defendingFirstStrikeDamage += n;}
|
||||
public void addDefendingDamage(int n, Card source)
|
||||
{
|
||||
if (!defendingDamageMap.containsKey(source))
|
||||
defendingDamageMap.put(source, n);
|
||||
else
|
||||
{
|
||||
defendingDamageMap.put(source, defendingDamageMap.get(source)+n);
|
||||
}
|
||||
}
|
||||
|
||||
public void addDefendingFirstStrikeDamage(int n, Card source)
|
||||
{
|
||||
if (!defendingFirstStrikeDamageMap.containsKey(source))
|
||||
defendingFirstStrikeDamageMap.put(source, n);
|
||||
else
|
||||
{
|
||||
defendingFirstStrikeDamageMap.put(source, defendingFirstStrikeDamageMap.get(source)+n);
|
||||
}
|
||||
}
|
||||
|
||||
public void addAttackingDamage(int n) {attackingDamage += n;}
|
||||
public int getAttackingDamage() {return attackingDamage;}
|
||||
@@ -140,8 +186,7 @@ public class Combat
|
||||
return block;
|
||||
}//getAllBlockers()
|
||||
|
||||
public CardList getBlockers(Card attacker) {return new CardList(getList(attacker).toArray());
|
||||
}
|
||||
public CardList getBlockers(Card attacker) {return new CardList(getList(attacker).toArray());}
|
||||
private CardList getList(Card attacker) {return (CardList)map.get(attacker);}
|
||||
|
||||
public void removeFromCombat(Card c)
|
||||
@@ -178,88 +223,117 @@ public class Combat
|
||||
CardList attacking = new CardList(getAttackers());
|
||||
for(int i = 0; i < attacking.size(); i++)
|
||||
{
|
||||
if(attacking.get(i).hasFirstStrike() || (attacking.get(i).hasDoubleStrike() )){
|
||||
block = getBlockers(attacking.get(i));
|
||||
|
||||
block = getBlockers(attacking.get(i));
|
||||
//attacker always gets all blockers' attack
|
||||
//AllZone.GameAction.setAssignedDamage(attacking.get(i), block, CardListUtil.sumFirstStrikeAttack(block));
|
||||
|
||||
//attacker always gets all blockers' attack
|
||||
AllZone.GameAction.setAssignedDamage(attacking.get(i), block, CardListUtil.sumFirstStrikeAttack(block));
|
||||
//attacking.get(i).setAssignedDamage(CardListUtil.sumFirstStrikeAttack(block));
|
||||
if(block.size() == 0)//this damage is assigned to a player by setPlayerDamage()
|
||||
{
|
||||
//GameActionUtil.executePlayerCombatDamageEffects(attacking.get(i));
|
||||
addUnblockedAttacker(attacking.get(i));
|
||||
}
|
||||
else if(block.size() == 1)
|
||||
{
|
||||
if(attacking.get(i).hasFirstStrike() || attacking.get(i).hasDoubleStrike()){
|
||||
int damageDealt = attacking.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
for (Card b : block)
|
||||
{
|
||||
if (b.hasFirstStrike() || b.hasDoubleStrike()) {
|
||||
int attack = b.getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
attack = b.getNetDefense();
|
||||
AllZone.GameAction.addAssignedDamage(attacking.get(i), b, attack);
|
||||
}
|
||||
}
|
||||
|
||||
//block.get(0).setAssignedDamage(damageDealt);
|
||||
CardList cl = new CardList();
|
||||
cl.add(attacking.get(i));
|
||||
AllZone.GameAction.setAssignedDamage(block.get(0), cl , damageDealt);
|
||||
//attacking.get(i).setAssignedDamage(CardListUtil.sumFirstStrikeAttack(block));
|
||||
if(block.size() == 0)//this damage is assigned to a player by setPlayerDamage()
|
||||
{
|
||||
//GameActionUtil.executePlayerCombatDamageEffects(attacking.get(i));
|
||||
addUnblockedAttacker(attacking.get(i));
|
||||
}
|
||||
else if(block.size() == 1)
|
||||
{
|
||||
if(attacking.get(i).hasFirstStrike() || attacking.get(i).hasDoubleStrike()){
|
||||
int damageDealt = attacking.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
|
||||
//trample
|
||||
int trample = damageDealt - block.get(0).getNetDefense();
|
||||
if(attacking.get(i).getKeyword().contains("Trample") && 0 < trample)
|
||||
{
|
||||
this.addDefendingFirstStrikeDamage(trample);
|
||||
//System.out.println("First Strike trample damage: " + trample);
|
||||
}
|
||||
}
|
||||
}//1 blocker
|
||||
else if(getAttackingPlayer().equals(Constant.Player.Computer))
|
||||
{
|
||||
if(attacking.get(i).hasFirstStrike() || attacking.get(i).hasDoubleStrike()){
|
||||
int damageDealt = attacking.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
setAssignedFirstStrikeDamage(attacking.get(i), block, damageDealt);
|
||||
}
|
||||
}
|
||||
else//human
|
||||
{
|
||||
if(attacking.get(i).hasFirstStrike() || attacking.get(i).hasDoubleStrike()){
|
||||
//GuiDisplay2 gui = (GuiDisplay2) AllZone.Display;
|
||||
int damageDealt = attacking.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
AllZone.Display.assignDamage(attacking.get(i),block, damageDealt);
|
||||
//System.out.println("setAssignedFirstStrikeDmg called for:" + damageDealt + " damage.");
|
||||
}
|
||||
}
|
||||
CardList cl = new CardList();
|
||||
cl.add(attacking.get(i));
|
||||
|
||||
AllZone.GameAction.addAssignedDamage(block.get(0), attacking.get(i), damageDealt);
|
||||
|
||||
|
||||
//trample
|
||||
int trample = damageDealt - block.get(0).getNetDefense();
|
||||
if(attacking.get(i).getKeyword().contains("Trample") && 0 < trample)
|
||||
{
|
||||
this.addDefendingFirstStrikeDamage(trample, attacking.get(i));
|
||||
//System.out.println("First Strike trample damage: " + trample);
|
||||
}
|
||||
}
|
||||
}//1 blocker
|
||||
else if(getAttackingPlayer().equals(Constant.Player.Computer))
|
||||
{
|
||||
if(attacking.get(i).hasFirstStrike() || attacking.get(i).hasDoubleStrike()){
|
||||
int damageDealt = attacking.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
addAssignedFirstStrikeDamage(attacking.get(i), block, damageDealt);
|
||||
}
|
||||
}
|
||||
else//human
|
||||
{
|
||||
if(attacking.get(i).hasFirstStrike() || attacking.get(i).hasDoubleStrike()){
|
||||
//GuiDisplay2 gui = (GuiDisplay2) AllZone.Display;
|
||||
int damageDealt = attacking.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
AllZone.Display.assignDamage(attacking.get(i),block, damageDealt);
|
||||
|
||||
/*
|
||||
for (Card b : block)
|
||||
{
|
||||
AllZone.Display.assignDamage(attacking.get(i), b, damageDealt);
|
||||
//System.out.println("setAssignedFirstStrikeDmg called for:" + damageDealt + " damage.");
|
||||
}
|
||||
AllZone.Display.addAssignDamage(attacking.get(i),damageDealt);
|
||||
*/
|
||||
}
|
||||
}//if(hasFirstStrike || doubleStrike)
|
||||
}//for
|
||||
|
||||
//should first strike affect the following?
|
||||
if(getPlaneswalker() != null)
|
||||
{
|
||||
//System.out.println("defendingDmg (setAssignedFirstStrikeDamage) :" +defendingFirstStrikeDamage);
|
||||
planeswalker.setAssignedDamage(defendingFirstStrikeDamage);
|
||||
defendingFirstStrikeDamage = 0;
|
||||
//
|
||||
|
||||
Iterator<Card> iter = defendingFirstStrikeDamageMap.keySet().iterator();
|
||||
while(iter.hasNext()) {
|
||||
Card crd = iter.next();
|
||||
planeswalker.addAssignedDamage(defendingFirstStrikeDamageMap.get(crd), crd);
|
||||
}
|
||||
|
||||
defendingFirstStrikeDamageMap.clear();
|
||||
}
|
||||
|
||||
}
|
||||
}//setAssignedFirstStrikeDamage()
|
||||
private void setAssignedFirstStrikeDamage(Card attacker, CardList list, int damage)
|
||||
{
|
||||
CardListUtil.sortAttack(list);
|
||||
Card c;
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
{
|
||||
c = list.get(i);
|
||||
if(c.getKillDamage() <= damage)
|
||||
{
|
||||
damage -= c.getKillDamage();
|
||||
CardList cl = new CardList();
|
||||
cl.add(attacker);
|
||||
|
||||
AllZone.GameAction.setAssignedDamage(c, cl, c.getKillDamage());
|
||||
//c.setAssignedDamage(c.getKillDamage());
|
||||
}
|
||||
private void addAssignedFirstStrikeDamage (Card attacker, CardList block, int damage)
|
||||
{
|
||||
|
||||
Card c = attacker;
|
||||
for (Card b:block) {
|
||||
if(c.getKillDamage() <= damage)
|
||||
{
|
||||
damage -= c.getKillDamage();
|
||||
CardList cl = new CardList();
|
||||
cl.add(attacker);
|
||||
|
||||
AllZone.GameAction.addAssignedDamage(b, c, c.getKillDamage());
|
||||
//c.setAssignedDamage(c.getKillDamage());
|
||||
}
|
||||
}//for
|
||||
}//setAssignedFirstStrikeDamage()
|
||||
|
||||
//set Card.setAssignedDamage() for all creatures in combat
|
||||
|
||||
//set Card.setAssignedDamage() for all creatures in combat
|
||||
//also assigns player damage by setPlayerDamage()
|
||||
public void setAssignedDamage()
|
||||
{
|
||||
@@ -275,7 +349,16 @@ public class Combat
|
||||
|
||||
//attacker always gets all blockers' attack
|
||||
//attacking.get(i).setAssignedDamage(CardListUtil.sumAttack(block));
|
||||
AllZone.GameAction.setAssignedDamage(attacking.get(i), block, CardListUtil.sumAttack(block));
|
||||
//AllZone.GameAction.setAssignedDamage(attacking.get(i), block, CardListUtil.sumAttack(block));
|
||||
|
||||
for (Card b : block)
|
||||
{
|
||||
int attack = b.getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
attack = b.getNetDefense();
|
||||
AllZone.GameAction.addAssignedDamage(attacking.get(i), b, attack );
|
||||
}
|
||||
|
||||
if(block.size() == 0)//this damage is assigned to a player by setPlayerDamage()
|
||||
{
|
||||
//GameActionUtil.executePlayerCombatDamageEffects(attacking.get(i));
|
||||
@@ -287,17 +370,13 @@ public class Combat
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
|
||||
//block.get(0).setAssignedDamage(damageDealt);
|
||||
CardList cl = new CardList();
|
||||
cl.add(attacking.get(i));
|
||||
AllZone.GameAction.setAssignedDamage(block.get(0), cl , damageDealt);
|
||||
|
||||
AllZone.GameAction.addAssignedDamage(block.get(0), attacking.get(i), damageDealt);
|
||||
|
||||
//trample
|
||||
int trample = damageDealt - block.get(0).getNetDefense();
|
||||
if(attacking.get(i).getKeyword().contains("Trample") && 0 < trample) {
|
||||
this.addDefendingDamage(trample);
|
||||
//System.out.println("Reg trample damage: " + trample);
|
||||
if(attacking.get(i).getKeyword().contains("Trample") && 0 < trample)
|
||||
{
|
||||
this.addDefendingDamage(trample, attacking.get(i));
|
||||
}
|
||||
}//1 blocker
|
||||
else if(getAttackingPlayer().equals(Constant.Player.Computer))
|
||||
@@ -305,7 +384,7 @@ public class Combat
|
||||
int damageDealt = attacking.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
setAssignedDamage(attacking.get(i),block, damageDealt);
|
||||
addAssignedDamage(attacking.get(i),block , damageDealt);
|
||||
|
||||
}
|
||||
else//human
|
||||
@@ -314,8 +393,17 @@ public class Combat
|
||||
int damageDealt = attacking.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = attacking.get(i).getNetDefense();
|
||||
AllZone.Display.assignDamage(attacking.get(i), block, damageDealt);
|
||||
|
||||
AllZone.Display.assignDamage(attacking.get(i), block, damageDealt);
|
||||
|
||||
/*
|
||||
*
|
||||
*
|
||||
for (Card b :block)
|
||||
AllZone.Display.addAssignDamage(attacking.get(i), b, damageDealt);
|
||||
//System.out.println("setAssignedDmg called for:" + damageDealt + " damage.");
|
||||
*
|
||||
*/
|
||||
}
|
||||
}//if !hasFirstStrike ...
|
||||
//hacky code, to ensure surviving non-first-strike blockers will hit first strike attackers:
|
||||
@@ -324,13 +412,16 @@ public class Combat
|
||||
//System.out.println("block size: " + block.size());
|
||||
if( (attacking.get(i).hasFirstStrike() || attacking.get(i).hasDoubleStrike()) )
|
||||
{
|
||||
int blockerDamage = 0;
|
||||
for(int j=0; j < block.size(); j++)
|
||||
{
|
||||
blockerDamage += block.get(j).getNetAttack();
|
||||
//blockerDamage += block.get(j).getNetAttack();
|
||||
int damage = block.get(j).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damage = block.get(j).getNetDefense();
|
||||
AllZone.GameAction.addAssignedDamage(attacking.get(i), block.get(j), damage);
|
||||
}
|
||||
//attacking.get(i).setAssignedDamage(blockerDamage);
|
||||
AllZone.GameAction.setAssignedDamage(attacking.get(i), block , blockerDamage);
|
||||
//AllZone.GameAction.setAssignedDamage(attacking.get(i), block , blockerDamage);
|
||||
}
|
||||
}
|
||||
}//for
|
||||
@@ -339,10 +430,16 @@ public class Combat
|
||||
if(getPlaneswalker() != null)
|
||||
{
|
||||
//System.out.println("defendingDmg (setAssignedDamage): " + defendingDamage);
|
||||
planeswalker.setAssignedDamage(defendingDamage);
|
||||
defendingDamage = 0;
|
||||
Iterator<Card> iter = defendingDamageMap.keySet().iterator();
|
||||
while(iter.hasNext()) {
|
||||
Card crd = iter.next();
|
||||
planeswalker.addAssignedDamage(defendingDamageMap.get(crd), crd);
|
||||
}
|
||||
defendingDamageMap.clear();
|
||||
}
|
||||
}//assignDamage()
|
||||
|
||||
/*
|
||||
private void setAssignedDamage(Card attacker, CardList list, int damage)
|
||||
{
|
||||
CardListUtil.sortAttack(list);
|
||||
@@ -356,13 +453,29 @@ public class Combat
|
||||
damage -= c.getKillDamage();
|
||||
CardList cl = new CardList();
|
||||
cl.add(attacker);
|
||||
AllZone.GameAction.setAssignedDamage(c, cl, c.getKillDamage());
|
||||
AllZone.GameAction.addAssignedDamage(c, cl, c.getKillDamage());
|
||||
//c.setAssignedDamage(c.getKillDamage());
|
||||
}
|
||||
//}
|
||||
}//for
|
||||
}//assignDamage()
|
||||
*/
|
||||
|
||||
private void addAssignedDamage (Card attacker, CardList block, int damage)
|
||||
{
|
||||
Card c = attacker;
|
||||
for (Card b:block) {
|
||||
if(c.getKillDamage() <= damage)
|
||||
{
|
||||
damage -= c.getKillDamage();
|
||||
CardList cl = new CardList();
|
||||
cl.add(attacker);
|
||||
|
||||
AllZone.GameAction.addAssignedDamage(b, c, c.getKillDamage());
|
||||
//c.setAssignedDamage(c.getKillDamage());
|
||||
}
|
||||
}//for
|
||||
}//setAssignedDamage()
|
||||
|
||||
public Card[] getUnblockedAttackers()
|
||||
{
|
||||
|
||||
@@ -7,9 +7,11 @@ public class CombatPlaneswalker
|
||||
//value is CardList of blockers
|
||||
private Map<Card,CardList> map = new HashMap<Card,CardList>();
|
||||
private Set<Card> blocked = new HashSet<Card>();
|
||||
private HashMap<Card, Integer> defendingFirstStrikeDamageMap = new HashMap<Card, Integer>();
|
||||
private HashMap<Card, Integer> defendingDamageMap = new HashMap<Card, Integer>();
|
||||
|
||||
private int attackingDamage;
|
||||
private int defendingDamage;
|
||||
//private int attackingDamage;
|
||||
//private int defendingDamage;
|
||||
|
||||
private String attackingPlayer;
|
||||
private String defendingPlayer;
|
||||
@@ -25,8 +27,8 @@ public class CombatPlaneswalker
|
||||
map.clear();
|
||||
blocked.clear();
|
||||
|
||||
attackingDamage = 0;
|
||||
defendingDamage = 0;
|
||||
defendingFirstStrikeDamageMap.clear();
|
||||
defendingDamageMap.clear();
|
||||
|
||||
attackingPlayer = "";
|
||||
defendingPlayer = "";
|
||||
@@ -41,20 +43,51 @@ public class CombatPlaneswalker
|
||||
public String getDefendingPlayer() {return defendingPlayer;}
|
||||
|
||||
//relates to defending player damage
|
||||
public int getDefendingDamage() {return defendingDamage;}
|
||||
public int getTotalDefendingDamage()
|
||||
{
|
||||
int total = 0;
|
||||
|
||||
Collection<Integer> c = defendingDamageMap.values();
|
||||
|
||||
Iterator<Integer> itr = c.iterator();
|
||||
while(itr.hasNext())
|
||||
total+=itr.next();
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
public void setDefendingDamage()
|
||||
{
|
||||
defendingDamage = 0;
|
||||
CardList att = new CardList(getAttackers());
|
||||
//sum unblocked attackers' power
|
||||
for(int i = 0; i < att.size(); i++)
|
||||
if(! isBlocked(att.get(i)))
|
||||
defendingDamage += att.get(i).getNetAttack();
|
||||
}
|
||||
public void addDefendingDamage(int n) {defendingDamage += n;}
|
||||
defendingDamageMap.clear();
|
||||
CardList att = new CardList(getAttackers());
|
||||
//sum unblocked attackers' power
|
||||
for(int i = 0; i < att.size(); i++) {
|
||||
if(! isBlocked(att.get(i))) {
|
||||
int damageDealt = att.get(i).getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
damageDealt = att.get(i).getNetDefense();
|
||||
|
||||
//if the creature has first strike do not do damage in the normal combat phase
|
||||
//if(att.get(i).hasSecondStrike())
|
||||
addDefendingDamage(damageDealt, att.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addDefendingDamage(int n, Card source)
|
||||
{
|
||||
if (!defendingDamageMap.containsKey(source))
|
||||
defendingDamageMap.put(source, n);
|
||||
else
|
||||
{
|
||||
defendingDamageMap.put(source, defendingDamageMap.get(source)+n);
|
||||
}
|
||||
}
|
||||
|
||||
/*//Needed ??
|
||||
public void addAttackingDamage(int n) {attackingDamage += n;}
|
||||
public int getAttackingDamage() {return attackingDamage;}
|
||||
*/
|
||||
|
||||
public void addAttacker(Card c) {map.put(c, new CardList());}
|
||||
public void resetAttackers() {map.clear();}
|
||||
@@ -132,42 +165,63 @@ public class CombatPlaneswalker
|
||||
{
|
||||
block = getBlockers(attacking.get(i));
|
||||
|
||||
|
||||
//attacker always gets all blockers' attack
|
||||
AllZone.GameAction.setAssignedDamage(attacking.get(i), block, CardListUtil.sumAttack(block));
|
||||
for (Card b : block) {
|
||||
int attack = b.getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
attack = b.getNetDefense();
|
||||
AllZone.GameAction.addAssignedDamage(attacking.get(i), b, attack);
|
||||
}
|
||||
//attacking.get(i).setAssignedDamage(CardListUtil.sumAttack(block));
|
||||
if(block.size() == 0)//this damage is assigned to a player by setPlayerDamage()
|
||||
;
|
||||
else if(block.size() == 1)
|
||||
{
|
||||
block.get(0).setAssignedDamage(attacking.get(i).getNetAttack());
|
||||
block.get(0).addAssignedDamage(attacking.get(i).getNetAttack(), attacking.get(i));
|
||||
|
||||
//trample
|
||||
int trample = attacking.get(i).getNetAttack() - block.get(0).getNetDefense();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
{
|
||||
trample = attacking.get(i).getNetDefense() - block.get(0).getNetDefense();
|
||||
}
|
||||
if(attacking.get(i).getKeyword().contains("Trample") && 0 < trample)
|
||||
this.addDefendingDamage(trample);
|
||||
this.addDefendingDamage(trample, attacking.get(i));
|
||||
|
||||
/*
|
||||
trample = block.get(0).getNetAttack() - attacking.get(i).getNetDefense();
|
||||
if(block.get(0).getKeyword().contains("Trample") && 0 < trample)
|
||||
this.addAttackingDamage(trample);
|
||||
*/
|
||||
|
||||
}//1 blocker
|
||||
else if(getAttackingPlayer().equals(Constant.Player.Computer))
|
||||
{
|
||||
setAssignedDamage(block, attacking.get(i).getNetAttack());
|
||||
for (Card b : block)
|
||||
addAssignedDamage(b, attacking.get(i), attacking.get(i).getNetAttack());
|
||||
}
|
||||
else//human
|
||||
{
|
||||
GuiDisplay2 gui = (GuiDisplay2) AllZone.Display;
|
||||
//gui.assignDamage(attacking.get(i), block.get(0), attacking.get(i).getNetAttack());
|
||||
gui.assignDamage(attacking.get(i), block, attacking.get(i).getNetAttack());
|
||||
}
|
||||
}//for
|
||||
|
||||
planeswalker.setAssignedDamage(defendingDamage);
|
||||
defendingDamage = 0;
|
||||
Iterator<Card> iter = defendingDamageMap.keySet().iterator();
|
||||
while(iter.hasNext()) {
|
||||
Card crd = iter.next();
|
||||
planeswalker.addAssignedDamage(defendingDamageMap.get(crd), crd);
|
||||
}
|
||||
|
||||
defendingDamageMap.clear();
|
||||
|
||||
|
||||
}//assignDamage()
|
||||
private void setAssignedDamage(CardList list, int damage)
|
||||
private void addAssignedDamage(Card b, Card a, int damage)
|
||||
{
|
||||
/*
|
||||
CardListUtil.sortAttack(list);
|
||||
Card c;
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
@@ -179,6 +233,16 @@ public class CombatPlaneswalker
|
||||
c.setAssignedDamage(c.getKillDamage());
|
||||
}
|
||||
}//for
|
||||
*/
|
||||
if (b.getKillDamage() <= damage)
|
||||
{
|
||||
damage -= b.getKillDamage();
|
||||
b.addAssignedDamage(b.getKillDamage(), a);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}//assignDamage()
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ public interface Computer
|
||||
public void end_of_turn();//end of Human's turn
|
||||
|
||||
public void addNumberPlayLands(int n);
|
||||
public void setNumberPlayLands(int n);
|
||||
|
||||
public void stack_not_empty();
|
||||
}
|
||||
|
||||
@@ -132,6 +132,11 @@ public class ComputerAI_Burn implements Computer {
|
||||
numberPlayLand += n;
|
||||
}
|
||||
|
||||
public void setNumberPlayLands(int n)
|
||||
{
|
||||
numberPlayLand = n;
|
||||
}
|
||||
|
||||
public void stack_not_empty() {
|
||||
//same as Input.stop() method
|
||||
//ends the method
|
||||
|
||||
@@ -174,6 +174,11 @@ public class ComputerAI_Burn2 implements Computer {
|
||||
numberPlayLand += n;
|
||||
}
|
||||
|
||||
public void setNumberPlayLands(int n)
|
||||
{
|
||||
numberPlayLand = n;
|
||||
}
|
||||
|
||||
public void stack_not_empty() {
|
||||
//same as Input.stop() method
|
||||
//ends the method
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.TreeSet;
|
||||
public class ComputerAI_General implements Computer {
|
||||
//private boolean playLand = true;
|
||||
//private int numberPlayLand = 1;
|
||||
private int numberPlayLand = CardFactoryUtil.getCanPlayNumberOfLands(Constant.Player.Computer);
|
||||
public int numberPlayLand = CardFactoryUtil.getCanPlayNumberOfLands(Constant.Player.Computer);
|
||||
private Collection<Card> playMain1Cards;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -313,6 +313,11 @@ public class ComputerAI_General implements Computer {
|
||||
numberPlayLand += n;
|
||||
}
|
||||
|
||||
public void setNumberPlayLands(int n)
|
||||
{
|
||||
numberPlayLand = n;
|
||||
}
|
||||
|
||||
public void stack_not_empty() {
|
||||
//same as Input.stop() method
|
||||
//ends the method
|
||||
|
||||
@@ -139,6 +139,11 @@ public class ComputerAI_Rats2 implements Computer
|
||||
numberPlayLand += n;
|
||||
}
|
||||
|
||||
public void setNumberPlayLands(int n)
|
||||
{
|
||||
numberPlayLand = n;
|
||||
}
|
||||
|
||||
public void stack_not_empty()
|
||||
{
|
||||
AllZone.InputControl.resetInput();
|
||||
|
||||
@@ -64,4 +64,9 @@ public class ComputerAI_Testing implements Computer
|
||||
{
|
||||
numberPlayLand += n;
|
||||
}
|
||||
|
||||
public void setNumberPlayLands(int n)
|
||||
{
|
||||
numberPlayLand = n;
|
||||
}
|
||||
}
|
||||
@@ -246,22 +246,6 @@ import java.util.*;
|
||||
return list.size();
|
||||
}
|
||||
|
||||
public void assignDamage(CardList list, int damage)
|
||||
{
|
||||
CardListUtil.sortAttack(list);
|
||||
|
||||
int kill;
|
||||
for(int i = 0; i < list.size(); i++)
|
||||
{
|
||||
kill = list.get(i).getKillDamage();
|
||||
if(kill <= damage)
|
||||
{
|
||||
damage -= kill;
|
||||
list.get(i).setAssignedDamage(kill);
|
||||
}
|
||||
}
|
||||
}//assignDamage()
|
||||
|
||||
public int getAttack(Card c)
|
||||
{
|
||||
int n = c.getNetAttack();
|
||||
|
||||
@@ -16,4 +16,6 @@ public interface Display {
|
||||
|
||||
//assigns combat damage, used by Combat.setAssignedDamage()
|
||||
public void assignDamage(Card attacker, CardList blockers, int damage);
|
||||
//public void addAssignDamage(Card attacker, Card blocker, int damage);
|
||||
//public void addAssignDamage(Card attacker, int damage);
|
||||
}
|
||||
|
||||
37
src/forge/EndOfCombat.java
Normal file
37
src/forge/EndOfCombat.java
Normal file
@@ -0,0 +1,37 @@
|
||||
package forge;
|
||||
//import java.util.*;
|
||||
|
||||
//handles "until end of turn" and "at end of turn" commands from cards
|
||||
public class EndOfCombat implements java.io.Serializable
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 3035250030566186842L;
|
||||
|
||||
private CommandList at = new CommandList();
|
||||
private CommandList until = new CommandList();
|
||||
|
||||
public void addAt(Command c) {at.add(c);}
|
||||
public void addUntil(Command c) {until.add(c);}
|
||||
|
||||
public void executeAt()
|
||||
{
|
||||
//AllZone.StateBasedEffects.rePopulateStateBasedList();
|
||||
execute(at);
|
||||
}//executeAt()
|
||||
|
||||
|
||||
public void executeUntil() {
|
||||
execute(until);
|
||||
}
|
||||
|
||||
public int sizeAt() {return at.size();}
|
||||
public int sizeUntil() {return until.size();}
|
||||
|
||||
private void execute(CommandList c)
|
||||
{
|
||||
int length = c.size();
|
||||
|
||||
for(int i = 0; i < length; i++)
|
||||
c.remove(0).execute();
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package forge;
|
||||
import java.util.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
|
||||
@@ -813,6 +814,9 @@ private Card getCurrentCard(int ID)
|
||||
System.gc(); //garbage collection... does it make a difference though?
|
||||
lastPlayerToDraw = Constant.Player.Human;
|
||||
|
||||
Input_Main.canPlayNumberOfLands = 1;
|
||||
AllZone.Computer.getComputer().setNumberPlayLands(1);
|
||||
|
||||
AllZone.Computer_Life.setLife(20);
|
||||
AllZone.Human_Life.setLife(20);
|
||||
|
||||
@@ -1214,55 +1218,45 @@ private int getDifferentLand(CardList list, String land)
|
||||
|
||||
}
|
||||
|
||||
public void setAssignedDamage(Card card, CardList sourceCards, int damage)
|
||||
public void addAssignedDamage(Card card, Card sourceCard, int damage)
|
||||
{
|
||||
if (damage < 0)
|
||||
damage = 0;
|
||||
|
||||
int assignedDamage = damage;
|
||||
if (sourceCards.size() == 1)
|
||||
{
|
||||
Card sourceCard = sourceCards.get(0);
|
||||
card.addReceivedDamageFromThisTurn(sourceCard, damage);
|
||||
if (card.getKeyword().contains("Protection from white") && CardUtil.getColors(sourceCard).contains(Constant.Color.White))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from blue") && CardUtil.getColors(sourceCard).contains(Constant.Color.Blue))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from black") && CardUtil.getColors(sourceCard).contains(Constant.Color.Black))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from red") && CardUtil.getColors(sourceCard).contains(Constant.Color.Red))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from green") && CardUtil.getColors(sourceCard).contains(Constant.Color.Green))
|
||||
assignedDamage = 0;
|
||||
card.addReceivedDamageFromThisTurn(sourceCard, damage);
|
||||
if (card.getKeyword().contains("Protection from white") && CardUtil.getColors(sourceCard).contains(Constant.Color.White))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from blue") && CardUtil.getColors(sourceCard).contains(Constant.Color.Blue))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from black") && CardUtil.getColors(sourceCard).contains(Constant.Color.Black))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from red") && CardUtil.getColors(sourceCard).contains(Constant.Color.Red))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from green") && CardUtil.getColors(sourceCard).contains(Constant.Color.Green))
|
||||
assignedDamage = 0;
|
||||
|
||||
if (card.getKeyword().contains("Protection from creatures") && sourceCard.isCreature())
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from everything"))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from artifacts") && sourceCard.isArtifact())
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from creatures") && sourceCard.isCreature())
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from everything"))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from artifacts") && sourceCard.isArtifact())
|
||||
assignedDamage = 0;
|
||||
|
||||
if (card.getKeyword().contains("Protection from Dragons") && sourceCard.getType().contains("Dragon"))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from Demons") && sourceCard.getType().contains("Demon"))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from Goblins") && sourceCard.getType().contains("Goblin"))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from Dragons") && sourceCard.getType().contains("Dragon"))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from Demons") && sourceCard.getType().contains("Demon"))
|
||||
assignedDamage = 0;
|
||||
if (card.getKeyword().contains("Protection from Goblins") && sourceCard.getType().contains("Goblin"))
|
||||
assignedDamage = 0;
|
||||
|
||||
if (card.getKeyword().contains("Protection from enchantments") && sourceCard.getType().contains("Enchantment"))
|
||||
assignedDamage = 0;
|
||||
}
|
||||
else //got blocked by multiple blockers
|
||||
{
|
||||
for(int i=0;i<sourceCards.size();i++)
|
||||
{
|
||||
Card sourceCard = sourceCards.get(i); //blocker number i
|
||||
card.addReceivedDamageFromThisTurn(sourceCard, sourceCard.getNetAttack());
|
||||
}
|
||||
}
|
||||
card.setAssignedDamage(assignedDamage);
|
||||
if (card.getKeyword().contains("Protection from enchantments") && sourceCard.getType().contains("Enchantment"))
|
||||
assignedDamage = 0;
|
||||
|
||||
card.addAssignedDamage(assignedDamage, sourceCard);
|
||||
|
||||
System.out.println("***");
|
||||
/*
|
||||
if(sourceCards.size() > 1)
|
||||
System.out.println("(MULTIPLE blockers):");
|
||||
System.out.println("Assigned " + damage + " damage to " + card);
|
||||
@@ -1270,12 +1264,85 @@ private int getDifferentLand(CardList list, String land)
|
||||
System.out.println(sourceCards.get(i).getName() + " assigned damage to " + card.getName());
|
||||
}
|
||||
System.out.println("***");
|
||||
*/
|
||||
}
|
||||
|
||||
public void addDamage(Card card, int damage)
|
||||
public void addDamage(Card card, HashMap<Card,Integer> map)
|
||||
{
|
||||
int totalDamage = 0;
|
||||
CardList list = new CardList();
|
||||
|
||||
Iterator<Card> iter = map.keySet().iterator();
|
||||
while(iter.hasNext()) {
|
||||
Card source = iter.next();
|
||||
list.add(source);
|
||||
int damage = map.get(source);
|
||||
int damageToAdd = damage;
|
||||
//AllZone.GameAction.addDamage(c, crd , assignedDamageMap.get(crd));
|
||||
|
||||
if (source.getKeyword().contains("Wither"))
|
||||
{
|
||||
damageToAdd = 0;
|
||||
card.addCounter(Counters.M1M1, damage);
|
||||
}
|
||||
if (source.getName().equals("Spiritmonger") || source.getName().equals("Mirri the Cursed"))
|
||||
{
|
||||
final Card thisCard = source;
|
||||
Ability ability2 = new Ability(source, "0")
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
thisCard.addCounter(Counters.P1P1, 1);
|
||||
}
|
||||
}; // ability2
|
||||
|
||||
ability2.setStackDescription(source.getName() + " - gets a +1/+1 counter");
|
||||
AllZone.Stack.add(ability2);
|
||||
}
|
||||
if (source.getKeyword().contains("Deathtouch"))
|
||||
{
|
||||
AllZone.GameAction.destroy(card);
|
||||
AllZone.Combat.removeFromCombat(card);
|
||||
}
|
||||
|
||||
totalDamage += damageToAdd;
|
||||
}
|
||||
|
||||
if (isCardInPlay(card))
|
||||
card.addDamage(totalDamage, list);
|
||||
|
||||
}
|
||||
|
||||
public void addDamage(Card card, Card source, int damage)
|
||||
{
|
||||
int damageToAdd = damage;
|
||||
if (source.getKeyword().contains("Wither"))
|
||||
{
|
||||
damageToAdd = 0;
|
||||
card.addCounter(Counters.M1M1, damage);
|
||||
}
|
||||
if (source.getName().equals("Spiritmonger") || source.getName().equals("Mirri the Cursed"))
|
||||
{
|
||||
final Card thisCard = source;
|
||||
Ability ability2 = new Ability(source, "0")
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
thisCard.addCounter(Counters.P1P1, 1);
|
||||
}
|
||||
}; // ability2
|
||||
|
||||
ability2.setStackDescription(source.getName() + " - gets a +1/+1 counter");
|
||||
AllZone.Stack.add(ability2);
|
||||
}
|
||||
if (source.getKeyword().contains("Deathtouch"))
|
||||
{
|
||||
AllZone.GameAction.destroy(card);
|
||||
AllZone.Combat.removeFromCombat(card);
|
||||
}
|
||||
|
||||
//System.out.println("size of sources: " + card.getReceivedDamageFromThisTurn().size());
|
||||
/*
|
||||
if (card.getReceivedDamageFromThisTurn().size() >= 1)
|
||||
{
|
||||
for (Card c : card.getReceivedDamageFromThisTurn().keySet() ) {
|
||||
@@ -1311,10 +1378,12 @@ private int getDifferentLand(CardList list, String land)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
System.out.println("Adding " + damageToAdd + " damage to " + card.getName());
|
||||
if (isCardInPlay(card))
|
||||
card.addDamage(damageToAdd);
|
||||
card.addDamage(damageToAdd, source);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -88,6 +88,8 @@ public class GameActionUtil
|
||||
// card gets played
|
||||
// (called in MagicStack.java)
|
||||
Card c = sa.getSourceCard();
|
||||
|
||||
playCard_Dovescape(c); //keep this one top
|
||||
playCard_Emberstrike_Duo(c);
|
||||
playCard_Gravelgill_Duo(c);
|
||||
playCard_Safehold_Duo(c);
|
||||
@@ -98,7 +100,6 @@ public class GameActionUtil
|
||||
playCard_Riverfall_Mimic(c);
|
||||
playCard_Shorecrasher_Mimic(c);
|
||||
playCard_Woodlurker_Mimic(c);
|
||||
playCard_Dovescape(c);
|
||||
playCard_Belligerent_Hatchling(c);
|
||||
playCard_Voracious_Hatchling(c);
|
||||
playCard_Sturdy_Hatchling(c);
|
||||
@@ -831,8 +832,11 @@ public class GameActionUtil
|
||||
}
|
||||
|
||||
}//Woodlurker Mimic
|
||||
|
||||
|
||||
public static void playCard_Dovescape(Card c)
|
||||
{
|
||||
final Card crd1 = c;
|
||||
PlayerZone hplay = AllZone.getZone(Constant.Zone.Play,
|
||||
Constant.Player.Human);
|
||||
PlayerZone cplay = AllZone.getZone(Constant.Zone.Play,
|
||||
@@ -841,8 +845,9 @@ public class GameActionUtil
|
||||
CardList list = new CardList();
|
||||
list.addAll(hplay.getCards());
|
||||
list.addAll(cplay.getCards());
|
||||
int cmc = CardUtil.getConvertedManaCost(c.getManaCost());
|
||||
final int cmc = CardUtil.getConvertedManaCost(c.getManaCost());
|
||||
list = list.getName("Dovescape");
|
||||
final CardList cl = list;
|
||||
if ( ! c.getType().contains("Creature") && list.size()>0 ) {
|
||||
|
||||
|
||||
@@ -852,9 +857,51 @@ public class GameActionUtil
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
SpellAbility sa = AllZone.Stack.pop();
|
||||
|
||||
AllZone.GameAction.moveToGraveyard(sa.getSourceCard());
|
||||
SpellAbility sa = AllZone.Stack.peek();
|
||||
|
||||
if (sa.getSourceCard().equals(crd1)) {
|
||||
sa = AllZone.Stack.pop();
|
||||
|
||||
AllZone.GameAction.moveToGraveyard(sa.getSourceCard());
|
||||
|
||||
for (int j = 0; j < cl.size()*cmc; j++)
|
||||
{
|
||||
Card crd = new Card();
|
||||
String controller = crd1.getController();
|
||||
crd.setOwner(controller);
|
||||
crd.setController(controller);
|
||||
|
||||
crd.setName("Bird");
|
||||
crd.setImageName("WU 1 1 Bird");
|
||||
crd.setManaCost("WU");
|
||||
crd.setToken(true);
|
||||
|
||||
crd.addType("Creature");
|
||||
crd.addType("Bird");
|
||||
crd.addIntrinsicKeyword("Flying");
|
||||
|
||||
crd.setBaseAttack(1);
|
||||
crd.setBaseDefense(1);
|
||||
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, controller);
|
||||
play.add(crd);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
SpellAbility sa = AllZone.Stack.peek
|
||||
if (!sa.getSourceCard().isCreature() && sa.isSpell())
|
||||
{
|
||||
|
||||
}
|
||||
*/
|
||||
}
|
||||
else //TODO
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}; // ability2
|
||||
@@ -862,31 +909,11 @@ public class GameActionUtil
|
||||
ability2.setStackDescription("Dovescape Ability");
|
||||
AllZone.Stack.add(ability2);
|
||||
|
||||
for (int j = 0; j < list.size()*cmc; j++)
|
||||
{
|
||||
Card crd = new Card();
|
||||
String controller = c.getController();
|
||||
crd.setOwner(controller);
|
||||
crd.setController(controller);
|
||||
|
||||
crd.setName("Bird");
|
||||
crd.setImageName("WU 1 1 Bird");
|
||||
crd.setManaCost("WU");
|
||||
crd.setToken(true);
|
||||
|
||||
crd.addType("Creature");
|
||||
crd.addType("Bird");
|
||||
crd.addIntrinsicKeyword("Flying");
|
||||
|
||||
crd.setBaseAttack(1);
|
||||
crd.setBaseDefense(1);
|
||||
|
||||
PlayerZone play = AllZone.getZone(Constant.Zone.Play, controller);
|
||||
play.add(crd);
|
||||
}
|
||||
}
|
||||
} // Dovescape
|
||||
|
||||
|
||||
public static void playCard_Belligerent_Hatchling(Card c)
|
||||
{
|
||||
final String controller = c.getController();
|
||||
@@ -1819,7 +1846,7 @@ public class GameActionUtil
|
||||
CardList oppCreatures = new CardList();
|
||||
for (int i=0;i<cards.size();i++)
|
||||
{
|
||||
if (cards.get(i).isPlaneswalker() || cards.get(i).isCreature())
|
||||
if (cards.get(i).isPlaneswalker() || cards.get(i).isCreature() && CardFactoryUtil.canTarget(crd, cards.get(i)))
|
||||
{
|
||||
oppCreatures.add(cards.get(i));
|
||||
}
|
||||
@@ -1829,7 +1856,7 @@ public class GameActionUtil
|
||||
{
|
||||
Object o = AllZone.Display.getChoiceOptional("Pick target creature", oppCreatures.toArray());
|
||||
Card c = (Card)o;
|
||||
c.addDamage(1);
|
||||
c.addDamage(1, crd);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1839,8 +1866,8 @@ public class GameActionUtil
|
||||
|
||||
if(getTargetCard() != null)
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()))
|
||||
getTargetCard().addDamage(1);
|
||||
if(AllZone.GameAction.isCardInPlay(getTargetCard()) && CardFactoryUtil.canTarget(crd, getTargetCard()))
|
||||
getTargetCard().addDamage(1, crd);
|
||||
}
|
||||
else
|
||||
AllZone.GameAction.getPlayerLife(getTargetPlayer()).subtractLife(1);
|
||||
@@ -2878,19 +2905,20 @@ public class GameActionUtil
|
||||
AllZone.Stack.add(ability2);
|
||||
}
|
||||
|
||||
public static void executeGuiltyConscienceEffects(Card c)
|
||||
public static void executeGuiltyConscienceEffects(Card c, Card source)
|
||||
{
|
||||
int pwr = c.getNetAttack();
|
||||
if (CombatUtil.isDoranInPlay())
|
||||
pwr = c.getNetDefense();
|
||||
final int damage = pwr;
|
||||
final Card src = source;
|
||||
|
||||
final Card crd = c;
|
||||
Ability ability2 = new Ability(c, "0")
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
crd.addDamage(damage);
|
||||
crd.addDamage(damage, src);
|
||||
}
|
||||
}; // ability2
|
||||
|
||||
@@ -2898,15 +2926,16 @@ public class GameActionUtil
|
||||
AllZone.Stack.add(ability2);
|
||||
}
|
||||
|
||||
public static void executeGuiltyConscienceEffects(Card c, int n)
|
||||
public static void executeGuiltyConscienceEffects(Card c, Card source, int n)
|
||||
{
|
||||
final int damage = n;
|
||||
final Card crd = c;
|
||||
final Card src = source;
|
||||
Ability ability2 = new Ability(c, "0")
|
||||
{
|
||||
public void resolve()
|
||||
{
|
||||
crd.addDamage(damage);
|
||||
crd.addDamage(damage, src);
|
||||
}
|
||||
}; // ability2
|
||||
|
||||
@@ -6198,7 +6227,7 @@ public class GameActionUtil
|
||||
|
||||
Object o = AllZone.Display.getChoiceOptional("Pick target creature", oppCreatures.toArray());
|
||||
Card c = (Card)o;
|
||||
c.addDamage(hondlist.size());
|
||||
c.addDamage(hondlist.size(), card);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6215,7 +6244,7 @@ public class GameActionUtil
|
||||
if(targetc != null)
|
||||
{
|
||||
if(AllZone.GameAction.isCardInPlay(targetc))
|
||||
targetc.addDamage(hondlist.size());
|
||||
targetc.addDamage(hondlist.size(), card);
|
||||
}
|
||||
else
|
||||
AllZone.GameAction.getPlayerLife(Constant.Player.Human).subtractLife(hondlist.size());
|
||||
@@ -10393,14 +10422,13 @@ public class GameActionUtil
|
||||
// for each zone found add +1/+1 to each card
|
||||
for (int outer = 0; outer < zone.length; outer++)
|
||||
{
|
||||
CardList creature = new CardList();
|
||||
creature.addAll(AllZone.Human_Play.getCards());
|
||||
creature.addAll(AllZone.Computer_Play.getCards());
|
||||
CardList creature = new CardList(zone[outer].getCards());
|
||||
|
||||
creature = creature.filter(new CardListFilter()
|
||||
{
|
||||
public boolean addCard(Card c)
|
||||
{
|
||||
return c.getType().equals("Treefolk") || c.getType().equals("Forest") || c.getKeyword().contains("Changeling");
|
||||
return c.getType().contains("Treefolk") || c.getType().contains("Forest") || c.getKeyword().contains("Changeling");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -10415,7 +10443,7 @@ public class GameActionUtil
|
||||
c.addExtrinsicKeyword("Indestructible");
|
||||
gloriousAnthemList.add(c);
|
||||
}
|
||||
else if (c.getKeyword().contains("Forest"))
|
||||
else if (c.getType().contains("Forest"))
|
||||
{
|
||||
c.addExtrinsicKeyword("Indestructible");
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ import forge.properties.NewConstants;
|
||||
public class GuiDisplay2 extends javax.swing.JFrame implements Display, NewConstants {
|
||||
private static final long serialVersionUID = 8974795337536720207L;
|
||||
|
||||
//private CardList multiBlockers = new CardList();
|
||||
|
||||
private GuiInput inputControl;
|
||||
public static JCheckBoxMenuItem eotCheckboxForMenu = new JCheckBoxMenuItem("Stop at End of Turn", false);
|
||||
|
||||
@@ -61,6 +63,15 @@ public class GuiDisplay2 extends javax.swing.JFrame implements Display, NewConst
|
||||
}
|
||||
super.setVisible(visible);
|
||||
}
|
||||
/*
|
||||
public void addAssignDamage(Card attacker, Card blocker, int damage) {
|
||||
multiBlockers.add(blocker);
|
||||
}
|
||||
|
||||
public void addAssignDamage(Card attacker, int damage) {
|
||||
new Gui_MultipleBlockers(attacker, multiBlockers, damage, this);
|
||||
}
|
||||
*/
|
||||
|
||||
public void assignDamage(Card attacker, CardList blockers, int damage) {
|
||||
new Gui_MultipleBlockers(attacker, blockers, damage, this);
|
||||
@@ -331,9 +342,9 @@ public class GuiDisplay2 extends javax.swing.JFrame implements Display, NewConst
|
||||
}
|
||||
|
||||
if(c.isCreature()) cdLabel4.setText("Damage: " + c.getDamage() + " Assigned Damage: "
|
||||
+ c.getAssignedDamage());
|
||||
+ c.getTotalAssignedDamage());
|
||||
|
||||
if(c.isPlaneswalker()) cdLabel4.setText("Assigned Damage: " + c.getAssignedDamage());
|
||||
if(c.isPlaneswalker()) cdLabel4.setText("Assigned Damage: " + c.getTotalAssignedDamage());
|
||||
|
||||
String uniqueID = c.getUniqueNumber() + " ";
|
||||
cdLabel5.setText("Card ID " + uniqueID);
|
||||
|
||||
@@ -94,6 +94,8 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
|
||||
private Action CONCEDE_ACTION;
|
||||
public Card cCardHQ;
|
||||
|
||||
//private CardList multiBlockers = new CardList();
|
||||
|
||||
public GuiDisplay3() {
|
||||
setupActions();
|
||||
initComponents();
|
||||
@@ -123,6 +125,18 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
|
||||
new Gui_MultipleBlockers3(attacker, blockers, damage, this);
|
||||
}
|
||||
|
||||
/*
|
||||
public void addAssignDamage(Card attacker, Card blocker, int damage)
|
||||
{
|
||||
multiBlockers.add(blocker);
|
||||
}
|
||||
|
||||
public void addAssignDamage(Card attacker, int damage) {
|
||||
//new Gui_MultipleBlockers3(attacker, blockers, damage, this);
|
||||
new Gui_MultipleBlockers3(attacker, multiBlockers, damage, this);
|
||||
}
|
||||
*/
|
||||
|
||||
private void setupActions() {
|
||||
HUMAN_GRAVEYARD_ACTION = new ZoneAction(AllZone.Human_Graveyard, HUMAN_GRAVEYARD);
|
||||
HUMAN_REMOVED_ACTION = new ZoneAction(AllZone.Human_Removed, HUMAN_REMOVED);
|
||||
@@ -416,9 +430,9 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
|
||||
}
|
||||
|
||||
if(c.isCreature()) cdLabel4.setText("Damage: " + c.getDamage() + " Assigned Damage: "
|
||||
+ c.getAssignedDamage());
|
||||
+ c.getTotalAssignedDamage());
|
||||
|
||||
if(c.isPlaneswalker()) cdLabel4.setText("Assigned Damage: " + c.getAssignedDamage());
|
||||
if(c.isPlaneswalker()) cdLabel4.setText("Assigned Damage: " + c.getTotalAssignedDamage());
|
||||
|
||||
String uniqueID = c.getUniqueNumber() + " ";
|
||||
cdLabel5.setText("Card ID " + uniqueID);
|
||||
@@ -1328,7 +1342,8 @@ class Gui_MultipleBlockers3 extends JFrame {
|
||||
//c.setAssignedDamage(c.getAssignedDamage() + 1);
|
||||
CardList cl = new CardList();
|
||||
cl.add(att);
|
||||
AllZone.GameAction.setAssignedDamage(c, cl, c.getAssignedDamage() + 1);
|
||||
|
||||
AllZone.GameAction.addAssignedDamage(c, att, /*c.getTotalAssignedDamage() +*/ 1);
|
||||
|
||||
if(guiDisplay != null) guiDisplay.updateCardDetail(c);
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ public class Gui_MultipleBlockers extends JFrame
|
||||
|
||||
CardList cl = new CardList();
|
||||
cl.add(att);
|
||||
AllZone.GameAction.setAssignedDamage(c, cl, c.getAssignedDamage() + 1);
|
||||
AllZone.GameAction.addAssignedDamage(c, att, 1);
|
||||
//c.setAssignedDamage(c.getAssignedDamage() + 1);
|
||||
|
||||
if(guiDisplay != null)
|
||||
|
||||
@@ -247,7 +247,7 @@ package forge;
|
||||
all.addAll(AllZone.Human_Play.getCards());
|
||||
all = all.filter(new CardListFilter(){
|
||||
public boolean addCard(Card c) {
|
||||
return c.isCreature() && c.getAssignedDamage() > 0;
|
||||
return c.isCreature() && c.getTotalAssignedDamage() > 0;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Input_CombatDamage extends Input
|
||||
{
|
||||
@@ -52,7 +54,9 @@ private void playerDamage(PlayerLife p)
|
||||
if (player.equals("")) //this is a really bad hack, to allow raging goblin to attack on turn 1
|
||||
player = Constant.Player.Computer;
|
||||
PlayerLife life = AllZone.GameAction.getPlayerLife(player);
|
||||
life.subtractLife(AllZone.Combat.getDefendingDamage());
|
||||
|
||||
life.subtractLife(AllZone.Combat.getTotalDefendingDamage());
|
||||
|
||||
|
||||
//why???
|
||||
/*
|
||||
@@ -117,8 +121,11 @@ private void playerDamage(PlayerLife p)
|
||||
if (list.contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(attackers.getCard(i));
|
||||
|
||||
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(attackers.getCard(i), "Guilty Conscience"); j++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(attackers.getCard(i));
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(attackers.getCard(i), "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(attackers.getCard(i), c);
|
||||
}
|
||||
|
||||
if(CardFactoryUtil.hasNumberEquipments(attackers.getCard(i), "Umezawa's Jitte") == 1 && attackers.get(i).getNetAttack() > 0)
|
||||
{
|
||||
@@ -167,8 +174,11 @@ private void playerDamage(PlayerLife p)
|
||||
GameActionUtil.executeLifeLinkEffects(blockers.getCard(i));
|
||||
}
|
||||
|
||||
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(blockers.getCard(i), "Guilty Conscience"); j++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(blockers.getCard(i));
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(blockers.getCard(i), "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(blockers.getCard(i), c);
|
||||
}
|
||||
|
||||
/*
|
||||
ArrayList<String> list = blockers.getCard(i).getKeyword();
|
||||
@@ -205,8 +215,11 @@ private void playerDamage(PlayerLife p)
|
||||
if (pwAttackers.getCard(i).getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(pwAttackers.getCard(i));
|
||||
|
||||
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(pwAttackers.getCard(i), "Guilty Conscience"); j++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(pwAttackers.getCard(i));
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(pwAttackers.getCard(i), "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(pwAttackers.getCard(i), c);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -219,8 +232,11 @@ private void playerDamage(PlayerLife p)
|
||||
if (pwBlockers.getCard(i).getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(pwBlockers.getCard(i));
|
||||
|
||||
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(pwBlockers.getCard(i), "Guilty Conscience"); j++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(pwBlockers.getCard(i));
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(pwBlockers.getCard(i), "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(pwBlockers.getCard(i), c);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -242,12 +258,31 @@ private void playerDamage(PlayerLife p)
|
||||
c = all.get(i);
|
||||
//because this sets off Jackal Pup, and Filthly Cur damage ability
|
||||
//and the stack says "Jack Pup causes 0 damage to the Computer"
|
||||
if(c.getAssignedDamage() != 0)
|
||||
if(c.getTotalAssignedDamage() != 0)
|
||||
{
|
||||
/*
|
||||
//c.addDamage(c.getAssignedDamage());
|
||||
System.out.println("Calling addDamage for card " + c.getName());
|
||||
AllZone.GameAction.addDamage(c, c.getAssignedDamage());
|
||||
c.setAssignedDamage(0);
|
||||
|
||||
*/
|
||||
//AllZone.GameAction.addDamage(c, c.getTotalAssignedDamage());
|
||||
|
||||
HashMap<Card, Integer> assignedDamageMap = c.getAssignedDamageHashMap();
|
||||
HashMap<Card, Integer> damageMap = new HashMap<Card, Integer>();
|
||||
|
||||
Iterator<Card> iter = assignedDamageMap.keySet().iterator();
|
||||
while(iter.hasNext()) {
|
||||
Card crd = iter.next();
|
||||
//AllZone.GameAction.addDamage(c, crd , assignedDamageMap.get(crd));
|
||||
damageMap.put(crd, assignedDamageMap.get(crd));
|
||||
}
|
||||
|
||||
AllZone.GameAction.addDamage(c, damageMap);
|
||||
|
||||
damageMap.clear();
|
||||
c.clearAssignedDamage();
|
||||
}
|
||||
}
|
||||
}//moveDamage()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
//import java.util.ArrayList; //unused
|
||||
|
||||
@@ -57,7 +59,8 @@ private void playerDamage(PlayerLife p)
|
||||
if (player.equals("")) //this is a really bad hack, to allow raging goblin to attack on turn 1
|
||||
player = Constant.Player.Computer;
|
||||
PlayerLife life = AllZone.GameAction.getPlayerLife(player);
|
||||
life.subtractLife(AllZone.Combat.getDefendingFirstStrikeDamage());
|
||||
life.subtractLife(AllZone.Combat.getTotalFirstStrikeDefendingDamage());
|
||||
System.out.println("getTotalFirstStrikeDefendingDamage: " + AllZone.Combat.getTotalFirstStrikeDefendingDamage());
|
||||
|
||||
//What is this even for? doesn't look like it's used.
|
||||
/*
|
||||
@@ -96,8 +99,16 @@ private void playerDamage(PlayerLife p)
|
||||
GameActionUtil.executeLifeLinkEffects(attackers.getCard(i));
|
||||
}
|
||||
|
||||
/*
|
||||
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(attackers.getCard(i), "Guilty Conscience"); j++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(attackers.getCard(i));
|
||||
*/
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(attackers.getCard(i), "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(attackers.getCard(i), c);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(CardFactoryUtil.hasNumberEquipments(attackers.getCard(i), "Umezawa's Jitte") == 1 && attackers.get(i).getNetAttack() > 0)
|
||||
@@ -141,8 +152,11 @@ private void playerDamage(PlayerLife p)
|
||||
if (blockers.getCard(i).getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(blockers.getCard(i));
|
||||
|
||||
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(blockers.getCard(i), "Guilty Conscience"); j++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(blockers.getCard(i));
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(blockers.getCard(i), "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(blockers.getCard(i), c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,8 +172,11 @@ private void playerDamage(PlayerLife p)
|
||||
if (pwAttackers.getCard(i).getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(pwAttackers.getCard(i));
|
||||
|
||||
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(pwAttackers.getCard(i), "Guilty Conscience"); j++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(pwAttackers.getCard(i));
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(pwAttackers.getCard(i), "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(pwAttackers.getCard(i), c);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i=0; i < pwBlockers.size(); i++){
|
||||
@@ -169,8 +186,11 @@ private void playerDamage(PlayerLife p)
|
||||
if ( pwAttackers.getCard(i).getKeyword().contains("Lifelink"))
|
||||
GameActionUtil.executeLifeLinkEffects(pwBlockers.getCard(i));
|
||||
|
||||
for(int j=0; j < CardFactoryUtil.hasNumberEnchantments(pwBlockers.getCard(i), "Guilty Conscience"); j++)
|
||||
GameActionUtil.executeGuiltyConscienceEffects(pwBlockers.getCard(i));
|
||||
CardList cl = CardFactoryUtil.getAurasEnchanting(pwBlockers.getCard(i), "Guilty Conscience");
|
||||
for (Card c : cl)
|
||||
{
|
||||
GameActionUtil.executeGuiltyConscienceEffects(pwBlockers.getCard(i), c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,11 +210,23 @@ private void playerDamage(PlayerLife p)
|
||||
c = all.get(i);
|
||||
//because this sets off Jackal Pup, and Filthly Cur damage ability
|
||||
//and the stack says "Jack Pup causes 0 damage to the Computer"
|
||||
if(c.getAssignedDamage() != 0)
|
||||
if(c.getTotalAssignedDamage() != 0)
|
||||
{
|
||||
//c.addDamage(c.getAssignedDamage());
|
||||
AllZone.GameAction.addDamage(c, c.getAssignedDamage());
|
||||
c.setAssignedDamage(0);
|
||||
HashMap<Card, Integer> assignedDamageMap = c.getAssignedDamageHashMap();
|
||||
HashMap<Card, Integer> damageMap = new HashMap<Card, Integer>();
|
||||
|
||||
Iterator<Card> iter = assignedDamageMap.keySet().iterator();
|
||||
while(iter.hasNext()) {
|
||||
Card crd = iter.next();
|
||||
//AllZone.GameAction.addDamage(c, crd , assignedDamageMap.get(crd));
|
||||
damageMap.put(crd, assignedDamageMap.get(crd));
|
||||
}
|
||||
|
||||
AllZone.GameAction.addDamage(c, damageMap);
|
||||
|
||||
damageMap.clear();
|
||||
c.clearAssignedDamage();
|
||||
}
|
||||
}
|
||||
}//moveDamage()
|
||||
|
||||
Reference in New Issue
Block a user