diff --git a/res/cards.txt b/res/cards.txt index a34a89dbd20..b2aecd662b8 100644 --- a/res/cards.txt +++ b/res/cards.txt @@ -7428,7 +7428,7 @@ Prodigal Sorcerer Creature Human Wizard no text 1/1 -abDamageCP T:1 +abDamageTgtCP T:1 Kamahl, Pit Fighter 4 R R diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index c732c4eaa47..38dee75e673 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -9134,7 +9134,7 @@ public class CardFactory implements NewConstants { all = all.filter(new CardListFilter(){ public boolean addCard(Card c) { - return c.isCreature() && !c.getName().equals("Ball Lightning"); + return c.isCreature() && !c.getName().equals("Ball Lightning") && !c.getName().equals("Groundbreaker"); } }); diff --git a/src/forge/Combat.java b/src/forge/Combat.java index 1127044583f..bd34b0e4a8d 100644 --- a/src/forge/Combat.java +++ b/src/forge/Combat.java @@ -91,7 +91,7 @@ public class Combat CardList att = new CardList(getAttackers()); //sum unblocked attackers' power for(int i = 0; i < att.size(); i++) { - if(! isBlocked(att.get(i))) { + if(! isBlocked(att.get(i)) || (getBlockers(att.get(i)).size() == 0 && att.get(i).getKeyword().contains("Trample")) ){ int damageDealt = att.get(i).getNetAttack(); if (CombatUtil.isDoranInPlay()) damageDealt = att.get(i).getNetDefense(); @@ -401,6 +401,7 @@ public class Combat this.addDefendingDamage(trample, attacking.get(i)); } }//1 blocker + else if(getAttackingPlayer().equals(Constant.Player.Computer)) { int damageDealt = attacking.get(i).getNetAttack(); diff --git a/src/forge/CombatUtil.java b/src/forge/CombatUtil.java index 896a59fdc1e..72b9a107cf6 100644 --- a/src/forge/CombatUtil.java +++ b/src/forge/CombatUtil.java @@ -600,52 +600,52 @@ public class CombatUtil { //if (AllZone.Phase.getPhase().equals(Constant.Phase.Combat_Declare_Attackers)) if( /*AllZone.Phase.getPhase().equals("Declare Blockers") || */ AllZone.Phase.getPhase().equals(Constant.Phase.Combat_Declare_Attackers_InstantAbility)) { - //if (!c.getCreatureAttackedThisTurn()) - //{ - String cost = CardFactoryUtil.getPropagandaCost(c); - if(!cost.equals("0")) { - final Ability ability = new Ability(c, cost) { - @Override - public void resolve() { - canAttack[0] = true; - } - }; - - final Command unpaidCommand = new Command() { - - private static final long serialVersionUID = -6483405139208343935L; - - public void execute() { - canAttack[0] = false; - AllZone.Combat.removeFromCombat(crd); - crd.untap(); - } - }; - - final Command paidCommand = new Command() { - private static final long serialVersionUID = -8303368287601871955L; - - public void execute() { - canAttack[0] = true; - } - }; - - if(c.getController().equals(Constant.Player.Human)) { - AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Propaganda " + c + "\r\n", - ability.getManaCost(), paidCommand, unpaidCommand)); - } else //computer - { - if(ComputerUtil.canPayCost(ability)) ComputerUtil.playNoStack(ability); - else { - canAttack[0] = false; - AllZone.Combat.removeFromCombat(crd); - crd.untap(); - } - } - } + if (!c.getCreatureAttackedThisTurn()) + { + String cost = CardFactoryUtil.getPropagandaCost(c); + if(!cost.equals("0")) { + final Ability ability = new Ability(c, cost) { + @Override + public void resolve() { + canAttack[0] = true; + } + }; + + final Command unpaidCommand = new Command() { + + private static final long serialVersionUID = -6483405139208343935L; + + public void execute() { + canAttack[0] = false; + AllZone.Combat.removeFromCombat(crd); + crd.untap(); + } + }; + + final Command paidCommand = new Command() { + private static final long serialVersionUID = -8303368287601871955L; + + public void execute() { + canAttack[0] = true; + } + }; + + if(c.getController().equals(Constant.Player.Human)) { + AllZone.InputControl.setInput(new Input_PayManaCost_Ability("Propaganda " + c + "\r\n", + ability.getManaCost(), paidCommand, unpaidCommand)); + } else //computer + { + if(ComputerUtil.canPayCost(ability)) ComputerUtil.playNoStack(ability); + else { + canAttack[0] = false; + AllZone.Combat.removeFromCombat(crd); + crd.untap(); + } + } + } + } + c.setCreatureAttackedThisTurn(true); } - //c.setCreatureAttackedThisTurn(true); - //} return canAttack[0]; } diff --git a/src/forge/Input_CombatDamage.java b/src/forge/Input_CombatDamage.java index 0fb739eb1c4..3b79425163e 100644 --- a/src/forge/Input_CombatDamage.java +++ b/src/forge/Input_CombatDamage.java @@ -56,7 +56,7 @@ public class Input_CombatDamage extends Input { public void damageCreatureAndPlayer() { String player = AllZone.Combat.getDefendingPlayer(); if(player.equals("")) //this is a really bad hack, to allow raging goblin to attack on turn 1 - player = Constant.Player.Computer; + player = Constant.Player.Computer; PlayerLife life = AllZone.GameAction.getPlayerLife(player); life.subtractLife(AllZone.Combat.getTotalDefendingDamage());