diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OverwhelmedByMultiplierModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OverwhelmedByMultiplierModifier.java index 2ad0eba3f..16d9222db 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OverwhelmedByMultiplierModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/OverwhelmedByMultiplierModifier.java @@ -21,8 +21,7 @@ public class OverwhelmedByMultiplierModifier extends AbstractModifier { } @Override - public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard physicalCard, int strength, int opposingStrength) { - return (opposingStrength >= strength * _multiplier) && (opposingStrength != 0); + public int getOverwhelmMultiplier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return _multiplier; } - } 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 6c2e1bca1..249b04baf 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,8 @@ public class EventSerializer { eventElem.setAttribute("fellowshipStrength", String.valueOf(gameStats.getFellowshipSkirmishStrength())); eventElem.setAttribute("shadowStrength", String.valueOf(gameStats.getShadowSkirmishStrength())); + eventElem.setAttribute("fpOverwhelmed", String.valueOf(gameStats.isFpOverwhelmed())); + eventElem.setAttribute("moveLimit", String.valueOf(gameStats.getMoveLimit())); eventElem.setAttribute("moveCount", String.valueOf(gameStats.getMoveCount())); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseActiveCardsEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseActiveCardsEffect.java index b499cb16c..b576ae5e2 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseActiveCardsEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseActiveCardsEffect.java @@ -21,6 +21,8 @@ public abstract class ChooseActiveCardsEffect extends AbstractEffect { private final int _maximum; private final Filterable[] _filters; + private boolean _shortcut = true; + public ChooseActiveCardsEffect(PhysicalCard source, String playerId, String choiceText, int minimum, int maximum, Filterable... filters) { _source = source; _playerId = playerId; @@ -30,6 +32,10 @@ public abstract class ChooseActiveCardsEffect extends AbstractEffect { _filters = filters; } + public void setShortcut(boolean shortcut) { + _shortcut = shortcut; + } + public void setChoiceText(String choiceText) { _choiceText = choiceText; } @@ -61,7 +67,7 @@ public abstract class ChooseActiveCardsEffect extends AbstractEffect { if (matchingCards.size() < minimum) minimum = matchingCards.size(); - if (matchingCards.size() == minimum) { + if (_shortcut && matchingCards.size() == minimum) { if (_source != null && matchingCards.size() > 0) game.getGameState().cardAffectsCard(_playerId, _source, matchingCards); cardsSelected(game, matchingCards); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java index 14ed06364..a77d92e89 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java @@ -109,8 +109,8 @@ public abstract class AbstractModifier implements Modifier { } @Override - public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int strength, int opposingStrength) { - return true; + public int getOverwhelmMultiplier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return 0; } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java index 6075ecf15..2cbc4a2de 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java @@ -45,7 +45,7 @@ public interface Modifier { public int getRoamingPenaltyModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard); - public boolean isOverwhelmedByStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int strength, int opposingStrength); + public int getOverwhelmMultiplier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard); public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int woundsAlreadyTakenInPhase); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index 731cd1d8f..493dc7fe7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -314,13 +314,13 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { } @Override - public boolean isOverwhelmedByStrength(GameState gameState, PhysicalCard card, int strength, int opposingStrength) { + public int getOverwhelmMultiplier(GameState gameState, PhysicalCard card) { + int overwhelmMultiplier = 2; for (Modifier modifier : getModifiers(ModifierEffect.OVERWHELM_MODIFIER)) { if (affectsCardWithSkipSet(gameState, card, modifier)) - if (!modifier.isOverwhelmedByStrength(gameState, this, card, strength, opposingStrength)) - return false; + overwhelmMultiplier = Math.max(overwhelmMultiplier, modifier.getOverwhelmMultiplier(gameState, this, card)); } - return (opposingStrength >= strength * 2) && (opposingStrength != 0); + return overwhelmMultiplier; } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java index 78f397b99..8bb3cfbee 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java @@ -45,7 +45,7 @@ public interface ModifiersQuerying { public int getMinionSiteNumber(GameState gameState, PhysicalCard physicalCard); - public boolean isOverwhelmedByStrength(GameState gameState, PhysicalCard card, int strength, int opposingStrength); + public int getOverwhelmMultiplier(GameState gameState, PhysicalCard card); // Wounds/exertions public boolean canTakeWound(GameState gameState, PhysicalCard card); 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 1940c2733..4b1f513e6 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 @@ -5,6 +5,7 @@ import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.game.state.Skirmish; import com.gempukku.lotro.logic.PlayerOrder; import java.util.Collections; @@ -21,6 +22,8 @@ public class GameStats { private int _fellowshipSkirmishStrength; private int _shadowSkirmishStrength; + private boolean _fpOverwhelmed; + private Map> _zoneSizes = new HashMap>(); private Map _charStrengths = new HashMap(); private Map _charVitalities = new HashMap(); @@ -67,6 +70,21 @@ public class GameStats { _shadowSkirmishStrength = newShadowStrength; } + boolean newFpOverwhelmed = false; + Skirmish skirmish = game.getGameState().getSkirmish(); + if (skirmish != null) { + PhysicalCard fpChar = skirmish.getFellowshipCharacter(); + if (fpChar != null) { + int multiplier = game.getModifiersQuerying().getOverwhelmMultiplier(game.getGameState(), fpChar); + if (newFellowshipStrength * multiplier <= newShadowStrength && newShadowStrength != 0) + newFpOverwhelmed = true; + } + } + if (newFpOverwhelmed != _fpOverwhelmed) { + changed = true; + _fpOverwhelmed = newFpOverwhelmed; + } + Map> newZoneSizes = new HashMap>(); PlayerOrder playerOrder = game.getGameState().getPlayerOrder(); if (playerOrder != null) { @@ -129,6 +147,10 @@ public class GameStats { return _shadowSkirmishStrength; } + public boolean isFpOverwhelmed() { + return _fpOverwhelmed; + } + public Map> getZoneSizes() { return Collections.unmodifiableMap(_zoneSizes); } @@ -149,6 +171,7 @@ public class GameStats { copy._moveLimit = _moveLimit; copy._shadowArchery = _shadowArchery; copy._shadowSkirmishStrength = _shadowSkirmishStrength; + copy._fpOverwhelmed = _fpOverwhelmed; copy._zoneSizes = _zoneSizes; copy._charStrengths = _charStrengths; copy._charVitalities = _charVitalities; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/actions/ResolveSkirmishAction.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/actions/ResolveSkirmishAction.java index 67813e77b..e2bcf0152 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/actions/ResolveSkirmishAction.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/actions/ResolveSkirmishAction.java @@ -87,7 +87,9 @@ public class ResolveSkirmishAction implements Action { final List shadowCharacters = _skirmish.getShadowCharacters(); - if (_game.getModifiersQuerying().isOverwhelmedByStrength(gameState, fellowshipCharacter, fpStrength, shadowStrength)) + int multiplier = _game.getModifiersQuerying().getOverwhelmMultiplier(gameState, fellowshipCharacter); + + if (fpStrength * multiplier <= shadowStrength && shadowStrength != 0) effects.add(new OverwhelmedEffect(shadowCharacters, fpList(fellowshipCharacter))); else if (shadowStrength >= fpStrength) effects.add(new SkirmishResolvedEffect(shadowCharacters, fpList(fellowshipCharacter))); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/PlayoutSkirmishesGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/PlayoutSkirmishesGameProcess.java index 084c5326a..6c08d05e9 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/PlayoutSkirmishesGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/skirmish/PlayoutSkirmishesGameProcess.java @@ -40,15 +40,18 @@ public class PlayoutSkirmishesGameProcess implements GameProcess { fps.add(assignment.getFellowshipCharacter()); SystemQueueAction chooseNextSkirmishAction = new SystemQueueAction(); - chooseNextSkirmishAction.appendEffect( - new ChooseActiveCardEffect(null, gameState.getCurrentPlayerId(), "Choose next skirmish to resolve", Filters.in(fps)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard card) { - gameState.startSkirmish(card); + ChooseActiveCardEffect chooseNextSkirmish = new ChooseActiveCardEffect(null, gameState.getCurrentPlayerId(), "Choose next skirmish to resolve", Filters.in(fps)) { + @Override + protected void cardSelected(LotroGame game, PhysicalCard card) { + gameState.startSkirmish(card); + + _nextProcess = new SkirmishGameProcess(_game, new PlayoutSkirmishesGameProcess(_game, _followingGameProcess)); + } + }; + chooseNextSkirmish.setShortcut(false); + + chooseNextSkirmishAction.appendEffect(chooseNextSkirmish); - _nextProcess = new SkirmishGameProcess(_game, new PlayoutSkirmishesGameProcess(_game, _followingGameProcess)); - } - }); _game.getActionsEnvironment().addActionToStack(chooseNextSkirmishAction); } else { _nextProcess = _followingGameProcess; 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 9e3372151..e6aceae16 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html @@ -157,6 +157,16 @@ font-size: 300%; } + .fpStrength.overwhelmed { + border-radius: 6px; + text-align: center; + vertical-align: middle; + background-color: #ff3333; + opacity: 0.7; + color: #000000; + font-size: 300%; + } + #chatBox { font-size: 90%; } 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 810c3be5c..4923c2158 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,8 @@ - "Sharku's Warg" now correctly adds +5 strength, rather than just only +4. - "Drawn to It's Power" no longer triggers for allies dying in skirmish, only companions. - Checking for character death anytime after anything happened. +- If a Free-People character would be overwhelmed in skirmish, the fp-char strength box in skirmish turns red. +- Game always requires to click on a character to start a skirmish, even if there is only one character to choose from. 30 Oct. 2011 - Added two new pseudo card types "Items" (Possessions and Artifacts) and "Characters" (Companions, Allies and Minions). 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 6ba443a66..6cb41a605 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 @@ -724,8 +724,17 @@ var GameAnimations = Class.extend({ $("#deadPile" + that.game.getPlayerIndex(playerId)).text("Dead pile: " + dead); $("#deck" + that.game.getPlayerIndex(playerId)).text("Deck: " + deck); } - if (that.game.fpStrengthDiv != null) + if (that.game.fpStrengthDiv != null) { that.game.fpStrengthDiv.text(element.getAttribute("fellowshipStrength")); + var fpOverwhelmed = element.getAttribute("fpOverwhelmed"); + if (fpOverwhelmed != null) { + if (fpOverwhelmed == "true") { + that.game.fpStrengthDiv.addClass("overwhelmed"); + } else { + that.game.fpStrengthDiv.removeClass("overwhelmed"); + } + } + } if (that.game.shadowStrengthDiv != null) that.game.shadowStrengthDiv.text(element.getAttribute("shadowStrength"));