diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index f40edc9a59c..71523856828 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -19745,6 +19745,7 @@ public class CardFactory implements NewConstants { CardList computer = AllZoneUtil.getPlayerCardsInPlay(Constant.Player.Computer); computer = computer.filter(colorless); + System.out.println("Current phase:" + AllZone.Phase.getPhase()); // the computer will at least destroy 2 more human permanents return AllZone.Phase.getPhase().equals(Constant.Phase.Main2) && (computer.size() < human.size() - 1 diff --git a/src/forge/ComputerAI_Input.java b/src/forge/ComputerAI_Input.java index b2bb33f1174..699d774bb5c 100644 --- a/src/forge/ComputerAI_Input.java +++ b/src/forge/ComputerAI_Input.java @@ -35,7 +35,8 @@ public class ComputerAI_Input extends Input { final String phase = AllZone.Phase.getPhase(); if(phase.equals(Constant.Phase.Main1)) { - computer.main1(); + System.out.println("Computer main1"); + computer.main1(); } else if(phase.equals(Constant.Phase.Combat_Declare_Attackers_InstantAbility)) { @@ -50,6 +51,7 @@ public class ComputerAI_Input extends Input { { computer.after_declare_blockers(); } else if(phase.equals(Constant.Phase.Main2)) { + System.out.println("Computer main2"); computer.main2(); } else if(phase.equals(Constant.Phase.At_End_Of_Turn)) { AllZone.EndOfTurn.executeAt(); diff --git a/src/forge/GameActionUtil.java b/src/forge/GameActionUtil.java index 71ef7f0c1ee..598bbbbddae 100644 --- a/src/forge/GameActionUtil.java +++ b/src/forge/GameActionUtil.java @@ -3491,6 +3491,7 @@ public class GameActionUtil { } AllZone.GameInfo.setAssignedFirstStrikeDamageThisCombat(false); + AllZone.GameInfo.setResolvedFirstStrikeDamageThisCombat(false); } diff --git a/src/forge/GameInfo.java b/src/forge/GameInfo.java index 7f963802c63..c05da10f009 100644 --- a/src/forge/GameInfo.java +++ b/src/forge/GameInfo.java @@ -12,7 +12,7 @@ public class GameInfo { private boolean preventCombatDamageThisTurn; private boolean assignedFirstStrikeDamageThisCombat; - + private boolean resolvedFirstStrikeDamageThisCombat; public void setComputerCanPlayNumberOfLands(int n) { computerCanPlayNumberOfLands = n; @@ -97,6 +97,15 @@ public class GameInfo { public boolean getAssignedFirstStrikeDamageThisCombat() { return assignedFirstStrikeDamageThisCombat; } + + public void setResolvedFirstStrikeDamageThisCombat(boolean b) + { + resolvedFirstStrikeDamageThisCombat = b; + } + + public boolean getResolvedFirstStrikeDamageThisCombat() { + return resolvedFirstStrikeDamageThisCombat; + } diff --git a/src/forge/Input_FirstStrikeDamage.java b/src/forge/Input_FirstStrikeDamage.java index 10aa6c5fef3..8342039509f 100644 --- a/src/forge/Input_FirstStrikeDamage.java +++ b/src/forge/Input_FirstStrikeDamage.java @@ -28,7 +28,7 @@ public class Input_FirstStrikeDamage extends Input { @Override public void selectButtonOK() { - if (!AllZone.GameInfo.isPreventCombatDamageThisTurn()) + if (!AllZone.GameInfo.isPreventCombatDamageThisTurn() && !AllZone.GameInfo.getResolvedFirstStrikeDamageThisCombat()) damageCreatureAndPlayer(); AllZone.GameAction.checkStateEffects(); @@ -61,6 +61,8 @@ public class Input_FirstStrikeDamage extends Input { //moves assigned damage to damage for all creatures //deals damage to player if needed private void damageCreatureAndPlayer() { + AllZone.GameInfo.setResolvedFirstStrikeDamageThisCombat(true); + 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; @@ -100,6 +102,7 @@ public class Input_FirstStrikeDamage extends Input { if((attackers.getCard(i).hasFirstStrike() || attackers.getCard(i).hasDoubleStrike())) { + CombatUtil.executeCombatDamageEffects(attackers.getCard(i)); /* diff --git a/src/forge/Phase.java b/src/forge/Phase.java index 6250ef0113e..42454c92d1c 100644 --- a/src/forge/Phase.java +++ b/src/forge/Phase.java @@ -336,6 +336,7 @@ public class Phase extends MyObservable if(c.getCreatureGotBlockedThisCombat()) c.setCreatureGotBlockedThisCombat(false); AllZone.GameInfo.setAssignedFirstStrikeDamageThisCombat(false); + AllZone.GameInfo.setResolvedFirstStrikeDamageThisCombat(false); } }