- 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.
This commit is contained in:
marcins78@gmail.com
2011-10-31 18:30:18 +00:00
parent e53ec88ed1
commit e58f9e092c
13 changed files with 78 additions and 22 deletions

View File

@@ -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;
}
}

View File

@@ -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()));

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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<String, Map<Zone, Integer>> _zoneSizes = new HashMap<String, Map<Zone, Integer>>();
private Map<Integer, Integer> _charStrengths = new HashMap<Integer, Integer>();
private Map<Integer, Integer> _charVitalities = new HashMap<Integer, Integer>();
@@ -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<String, Map<Zone, Integer>> newZoneSizes = new HashMap<String, Map<Zone, Integer>>();
PlayerOrder playerOrder = game.getGameState().getPlayerOrder();
if (playerOrder != null) {
@@ -129,6 +147,10 @@ public class GameStats {
return _shadowSkirmishStrength;
}
public boolean isFpOverwhelmed() {
return _fpOverwhelmed;
}
public Map<String, Map<Zone, Integer>> 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;

View File

@@ -87,7 +87,9 @@ public class ResolveSkirmishAction implements Action {
final List<PhysicalCard> 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)));

View File

@@ -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;

View File

@@ -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%;
}

View File

@@ -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.
<b>30 Oct. 2011</b>
- Added two new pseudo card types "Items" (Possessions and Artifacts) and "Characters" (Companions, Allies and Minions).

View File

@@ -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"));