diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index bfbf60bfa51..ad0eeb19c50 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -9137,6 +9137,15 @@ public class Card extends GameEntity implements Comparable { } public void setRules(CardRules r) { cardRules = r; - } + } + + /** + * TODO: Write javadoc for this method. + * @return + */ + public boolean isEdhGeneral() { + // TODO - have a field + return false; + } } // end Card class diff --git a/src/main/java/forge/game/GameLossReason.java b/src/main/java/forge/game/GameLossReason.java index 652ccc90b70..05700eb0f1f 100644 --- a/src/main/java/forge/game/GameLossReason.java +++ b/src/main/java/forge/game/GameLossReason.java @@ -33,6 +33,8 @@ public enum GameLossReason { // 104.3e and others /** The Spell effect. */ SpellEffect, + + EdhGeneralDamage, OpponentWon diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index a382ed932c1..4f9538a2fde 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -88,6 +88,8 @@ public abstract class Player extends GameEntity implements Comparable { /** The poison counters. */ private int poisonCounters = 0; + private int edhGeneralDamage = 0; + /** The life. */ private int life = 20; @@ -641,7 +643,10 @@ public abstract class Player extends GameEntity implements Comparable { } } - this.addAssignedDamage(damageToDo, source); + this.assignedDamage.put(source, damageToDo); + if(source.isEdhGeneral()) + this.edhGeneralDamage+= damageToDo; + GameActionUtil.executeDamageDealingEffects(source, damageToDo); GameActionUtil.executeDamageToPlayerEffects(this, source, damageToDo); @@ -916,20 +921,6 @@ public abstract class Player extends GameEntity implements Comparable { this.assignedDamage.clear(); } - /** - *

- * addAssignedDamage. - *

- * - * @param n - * a int. - * @param source - * a {@link forge.Card} object. - */ - public final void addAssignedDamage(final int n, final Card source) { - this.assignedDamage.put(source, n); - } - /** *

* Getter for the field assignedDamage. @@ -2162,6 +2153,10 @@ public abstract class Player extends GameEntity implements Comparable { if (hasNoLife && !this.cantLoseForZeroOrLessLife()) { return this.loseConditionMet(GameLossReason.LifeReachedZero, null); } + + if(this.edhGeneralDamage >= 21) { + return this.loseConditionMet(GameLossReason.EdhGeneralDamage, null); + } return false; } diff --git a/src/main/java/forge/game/player/PlayerOutcome.java b/src/main/java/forge/game/player/PlayerOutcome.java index 05ce59e09f0..73a6926c2b1 100644 --- a/src/main/java/forge/game/player/PlayerOutcome.java +++ b/src/main/java/forge/game/player/PlayerOutcome.java @@ -72,6 +72,7 @@ public class PlayerOutcome { case Poisoned: return "lost because of obtaining 10 poison counters"; case OpponentWon: return "lost because an opponent has won by spell '" + loseConditionSpell + "'"; case SpellEffect: return "lost due to effect of spell '" + loseConditionSpell + "'"; + case EdhGeneralDamage: return "lost due to accumulation of 21 damage from generals"; } return "lost for unknown reason (this is a bug)"; }