diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java index 249b04baf..ca8ea0ec1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java @@ -62,6 +62,9 @@ public class EventSerializer { eventElem.setAttribute("fellowshipStrength", String.valueOf(gameStats.getFellowshipSkirmishStrength())); eventElem.setAttribute("shadowStrength", String.valueOf(gameStats.getShadowSkirmishStrength())); + eventElem.setAttribute("fellowshipDamageBonus", String.valueOf(gameStats.getFellowshipSkirmishDamageBonus())); + eventElem.setAttribute("shadowDamageBonus", String.valueOf(gameStats.getShadowSkirmishDamageBonus())); + eventElem.setAttribute("fpOverwhelmed", String.valueOf(gameStats.isFpOverwhelmed())); eventElem.setAttribute("moveLimit", String.valueOf(gameStats.getMoveLimit())); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java index 4b1f513e6..d5b3f7160 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java @@ -22,6 +22,9 @@ public class GameStats { private int _fellowshipSkirmishStrength; private int _shadowSkirmishStrength; + private int _fellowshipSkirmishDamageBonus; + private int _shadowSkirmishDamageBonus; + private boolean _fpOverwhelmed; private Map> _zoneSizes = new HashMap>(); @@ -70,6 +73,18 @@ public class GameStats { _shadowSkirmishStrength = newShadowStrength; } + int newFellowshipDamageBonus = RuleUtils.getFellowshipSkirmishDamageBonus(game); + if (newFellowshipDamageBonus != _fellowshipSkirmishDamageBonus) { + changed = true; + _fellowshipSkirmishDamageBonus = newFellowshipDamageBonus; + } + + int newShadowDamageBonus = RuleUtils.getShadowSkirmishDamageBonus(game); + if (newShadowDamageBonus != _shadowSkirmishDamageBonus) { + changed = true; + _shadowSkirmishDamageBonus = newShadowDamageBonus; + } + boolean newFpOverwhelmed = false; Skirmish skirmish = game.getGameState().getSkirmish(); if (skirmish != null) { @@ -147,6 +162,14 @@ public class GameStats { return _shadowSkirmishStrength; } + public int getFellowshipSkirmishDamageBonus() { + return _fellowshipSkirmishDamageBonus; + } + + public int getShadowSkirmishDamageBonus() { + return _shadowSkirmishDamageBonus; + } + public boolean isFpOverwhelmed() { return _fpOverwhelmed; } @@ -167,10 +190,12 @@ public class GameStats { GameStats copy = new GameStats(); copy._fellowshipArchery = _fellowshipArchery; copy._fellowshipSkirmishStrength = _fellowshipSkirmishStrength; + copy._fellowshipSkirmishDamageBonus = _fellowshipSkirmishDamageBonus; copy._moveCount = _moveCount; copy._moveLimit = _moveLimit; copy._shadowArchery = _shadowArchery; copy._shadowSkirmishStrength = _shadowSkirmishStrength; + copy._shadowSkirmishDamageBonus = _shadowSkirmishDamageBonus; copy._fpOverwhelmed = _fpOverwhelmed; copy._zoneSizes = _zoneSizes; copy._charStrengths = _charStrengths; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java index 6189fbc7a..f1a972e94 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleUtils.java @@ -84,4 +84,27 @@ public class RuleUtils { return totalStrength; } + + public static int getFellowshipSkirmishDamageBonus(LotroGame game) { + if (game.getGameState().getSkirmish() == null) + return 0; + + PhysicalCard fpChar = game.getGameState().getSkirmish().getFellowshipCharacter(); + if (fpChar == null) + return 0; + + return game.getModifiersQuerying().getKeywordCount(game.getGameState(), fpChar, Keyword.DAMAGE); + } + + public static int getShadowSkirmishDamageBonus(LotroGame game) { + if (game.getGameState().getSkirmish() == null) + return 0; + + int totalBonus = 0; + + for (PhysicalCard physicalCard : game.getGameState().getSkirmish().getShadowCharacters()) + totalBonus += game.getModifiersQuerying().getKeywordCount(game.getGameState(), physicalCard, Keyword.DAMAGE); + + return totalBonus; + } } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html index e6aceae16..b3c6e85b0 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html @@ -7,203 +7,213 @@ diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index 601d787ae..69d44a217 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -4,6 +4,7 @@ against Nazgul. - "Orc Pillager" now correctly gives -1 for each attached card to the character in skirmish against it, rather than +1 strength to itself for each such card. +- User interface now displays damage bonuses in current skirmish (if any). 1 Nov. 2011 - Fixed "Theoden" (4P365) to not crash game due to testing if you can attach hides (also a possession, right?) to it. diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js index 6cb41a605..ffbbd775c 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js @@ -526,12 +526,16 @@ var GameAnimations = Class.extend({ }); that.game.fpStrengthDiv = $("
"); + that.game.fpDamageBonusDiv = $("
"); that.game.shadowStrengthDiv = $("
"); + that.game.shadowDamageBonusDiv = $("
"); that.game.skirmishGroupDiv = $("
"); that.game.skirmishGroupDiv.css({"border-radius": "7px", "border-color": "#ff0000"}); that.game.skirmishGroupDiv.append(that.game.fpStrengthDiv); + that.game.skirmishGroupDiv.append(that.game.fpDamageBonusDiv); that.game.skirmishGroupDiv.append(that.game.shadowStrengthDiv); + that.game.skirmishGroupDiv.append(that.game.shadowDamageBonusDiv); $("#main").append(that.game.skirmishGroupDiv); next(); @@ -734,10 +738,29 @@ var GameAnimations = Class.extend({ that.game.fpStrengthDiv.removeClass("overwhelmed"); } } + + var damageBonus = element.getAttribute("fellowshipDamageBonus"); + if (damageBonus != null) { + that.game.fpDamageBonusDiv.text("+" + damageBonus); + if (damageBonus == 0) + that.game.fpDamageBonusDiv.css({visibility: "hidden"}); + else + that.game.fpDamageBonusDiv.css({visibility: "visible"}); + } } - if (that.game.shadowStrengthDiv != null) + if (that.game.shadowStrengthDiv != null) { that.game.shadowStrengthDiv.text(element.getAttribute("shadowStrength")); + var damageBonus = element.getAttribute("shadowDamageBonus"); + if (damageBonus != null) { + that.game.shadowDamageBonusDiv.text("+" + damageBonus); + if (damageBonus == 0) + that.game.shadowDamageBonusDiv.css({visibility: "hidden"}); + else + that.game.shadowDamageBonusDiv.css({visibility: "visible"}); + } + } + next(); }); }, diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js index 916d868cd..0910b98ff 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js @@ -35,7 +35,9 @@ var GempLotrGameUI = Class.extend({ skirmishGroupDiv: null, fpStrengthDiv: null, + fpDamageBonusDiv: null, shadowStrengthDiv: null, + shadowDamageBonusDiv: null, skirmishShadowGroup: null, skirmishFellowshipGroup: null, @@ -488,16 +490,21 @@ var GempLotrGameUI = Class.extend({ var y = currentPlayerTurn ? (padding * 3 + yScales[2] * heightPerScale) : (padding * 2 + yScales[1] * heightPerScale); this.skirmishGroupDiv.css({left:x + "px", top:y + "px", width: groupWidth, height: groupHeight, position: "absolute"}); var strengthBoxSize = 40; + var dmgBoxSize = 30; if (currentPlayerTurn) { this.skirmishShadowGroup.setBounds(x + 3, y + 3, groupWidth - 6, heightScales[2] * heightPerScale - 6); this.skirmishFellowshipGroup.setBounds(x + 3, y + heightScales[2] * heightPerScale + padding + 3, groupWidth - 6, heightScales[3] * heightPerScale - 6); this.fpStrengthDiv.css({position: "absolute", left: groupWidth - strengthBoxSize - 2 + "px", top: groupHeight - strengthBoxSize - 2 + "px", width: strengthBoxSize, height: strengthBoxSize, "z-index": 50}); + this.fpDamageBonusDiv.css({position: "absolute", left: groupWidth - strengthBoxSize - dmgBoxSize - 2 + "px", top: groupHeight - dmgBoxSize - 2 + "px", width: dmgBoxSize, height: dmgBoxSize, "z-index": 50}); this.shadowStrengthDiv.css({position: "absolute", left: groupWidth - strengthBoxSize - 2 + "px", top: 2 + "px", width: strengthBoxSize, height: strengthBoxSize, "z-index": 50}); + this.shadowDamageBonusDiv.css({position: "absolute", left: groupWidth - strengthBoxSize - dmgBoxSize - 2 + "px", top: 2 + "px", width: dmgBoxSize, height: dmgBoxSize, "z-index": 50}); } else { this.skirmishFellowshipGroup.setBounds(x + 3, y + 3, groupWidth - 6, heightScales[1] * heightPerScale - 6); this.skirmishShadowGroup.setBounds(x + 3, y + heightScales[1] * heightPerScale + padding + 3, groupWidth - 6, heightScales[2] * heightPerScale - 6); this.shadowStrengthDiv.css({position: "absolute", left: groupWidth - strengthBoxSize - 2 + "px", top: groupHeight - strengthBoxSize - 2 + "px", width: strengthBoxSize, height: strengthBoxSize, "z-index": 50}); + this.shadowDamageBonusDiv.css({position: "absolute", left: groupWidth - strengthBoxSize - dmgBoxSize - 2 + "px", top: groupHeight - dmgBoxSize - 2 + "px", width: dmgBoxSize, height: dmgBoxSize, "z-index": 50}); this.fpStrengthDiv.css({position: "absolute", left: groupWidth - strengthBoxSize - 2 + "px", top: 2 + "px", width: strengthBoxSize, height: strengthBoxSize, "z-index": 50}); + this.fpDamageBonusDiv.css({position: "absolute", left: groupWidth - strengthBoxSize - dmgBoxSize - 2 + "px", top: 2 + "px", width: dmgBoxSize, height: dmgBoxSize, "z-index": 50}); } i++; }