diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java
index 9d2cb212f..74da152b7 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java
@@ -1,5 +1,7 @@
package com.gempukku.lotro.cards.modifiers;
+import com.gempukku.lotro.cards.modifiers.evaluator.ConstantEvaluator;
+import com.gempukku.lotro.cards.modifiers.evaluator.Evaluator;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
@@ -9,19 +11,32 @@ import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class StrengthModifier extends AbstractModifier {
- private int _modifier;
+ private Evaluator _evaluator;
public StrengthModifier(PhysicalCard source, Filter affectFilter, int modifier) {
this(source, affectFilter, null, modifier);
}
public StrengthModifier(PhysicalCard source, Filter affectFilter, Condition condition, int modifier) {
- super(source, "Strength " + ((modifier < 0) ? modifier : ("+" + modifier)), affectFilter, condition, new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER});
- _modifier = modifier;
+ this(source, affectFilter, condition, new ConstantEvaluator(modifier));
+ }
+
+ public StrengthModifier(PhysicalCard source, Filter affectFilter, Condition condition, Evaluator evaluator) {
+ super(source, null, affectFilter, condition, new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER});
+ _evaluator = evaluator;
+ }
+
+ @Override
+ public String getText(GameState gameState, ModifiersQuerying modifiersQuerying) {
+ final int value = _evaluator.evaluateExpression(gameState, modifiersQuerying);
+ if (value >= 0)
+ return "Strength +" + value;
+ else
+ return "Strength " + value;
}
@Override
public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
- return result + _modifier;
+ return result + _evaluator.evaluateExpression(gameState, modifiersQuerying);
}
}
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/ConstantEvaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/ConstantEvaluator.java
new file mode 100644
index 000000000..05b810fed
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/ConstantEvaluator.java
@@ -0,0 +1,17 @@
+package com.gempukku.lotro.cards.modifiers.evaluator;
+
+import com.gempukku.lotro.game.state.GameState;
+import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
+
+public class ConstantEvaluator implements Evaluator {
+ private int _value;
+
+ public ConstantEvaluator(int value) {
+ _value = value;
+ }
+
+ @Override
+ public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying) {
+ return _value;
+ }
+}
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CountSpottableEvaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CountSpottableEvaluator.java
new file mode 100644
index 000000000..d37b642b0
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/CountSpottableEvaluator.java
@@ -0,0 +1,19 @@
+package com.gempukku.lotro.cards.modifiers.evaluator;
+
+import com.gempukku.lotro.filters.Filter;
+import com.gempukku.lotro.filters.Filters;
+import com.gempukku.lotro.game.state.GameState;
+import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
+
+public class CountSpottableEvaluator implements Evaluator {
+ private Filter _filter;
+
+ public CountSpottableEvaluator(Filter filter) {
+ _filter = filter;
+ }
+
+ @Override
+ public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying) {
+ return Filters.countSpottable(gameState, modifiersQuerying, _filter);
+ }
+}
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/Evaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/Evaluator.java
new file mode 100644
index 000000000..5417e3b9e
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/Evaluator.java
@@ -0,0 +1,8 @@
+package com.gempukku.lotro.cards.modifiers.evaluator;
+
+import com.gempukku.lotro.game.state.GameState;
+import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
+
+public interface Evaluator {
+ public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying);
+}
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_047.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_047.java
index 9cece854c..e2f9a8c74 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_047.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_047.java
@@ -34,7 +34,7 @@ public class Card4_047 extends AbstractPermanent {
}
@Override
- protected List extends Action> getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
+ protected List extends Action> getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.SKIRMISH, self)
&& PlayConditions.canExert(self, game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.DWARF))
&& Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(), Filters.side(Side.FREE_PEOPLE)).size() > 0) {
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_048.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_048.java
new file mode 100644
index 000000000..6661c1c1b
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_048.java
@@ -0,0 +1,41 @@
+package com.gempukku.lotro.cards.set4.dwarven;
+
+import com.gempukku.lotro.cards.AbstractCompanion;
+import com.gempukku.lotro.cards.modifiers.StrengthModifier;
+import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator;
+import com.gempukku.lotro.common.Culture;
+import com.gempukku.lotro.common.Keyword;
+import com.gempukku.lotro.common.Race;
+import com.gempukku.lotro.common.Signet;
+import com.gempukku.lotro.filters.Filters;
+import com.gempukku.lotro.game.PhysicalCard;
+import com.gempukku.lotro.logic.modifiers.Modifier;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Set: The Two Towers
+ * Side: Free
+ * Culture: Dwarven
+ * Twilight Cost: 2
+ * Type: Companion • Dwarf
+ * Strength: 6
+ * Vitality: 3
+ * Resistance: 6
+ * Signet: Aragorn
+ * Game Text: Damage +1. Gimli is strength +1 for each unbound Hobbit companion you can spot.
+ */
+public class Card4_048 extends AbstractCompanion {
+ public Card4_048() {
+ super(2, 6, 3, Culture.DWARVEN, Race.DWARF, Signet.ARAGORN, "Gimli", true);
+ addKeyword(Keyword.DAMAGE);
+ }
+
+ @Override
+ public List extends Modifier> getAlwaysOnModifiers(PhysicalCard self) {
+ return Collections.singletonList(
+ new StrengthModifier(self, Filters.sameCard(self), null,
+ new CountSpottableEvaluator(Filters.and(Filters.unboundCompanion(), Filters.race(Race.HOBBIT)))));
+ }
+}
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 236eefa47..f1f904fbc 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
@@ -36,7 +36,7 @@ public abstract class AbstractModifier implements Modifier {
}
@Override
- public String getText() {
+ public String getText(GameState gameState, ModifiersQuerying modifiersQuerying) {
return _text;
}
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 cf363051e..0257d4751 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
@@ -14,7 +14,7 @@ import java.util.Map;
public interface Modifier {
public PhysicalCard getSource();
- public String getText();
+ public String getText(GameState gameState, ModifiersQuerying modifiersQuerying);
public ModifierEffect[] getModifierEffects();
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java
index 64dd754b5..d078287a0 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java
@@ -73,9 +73,9 @@ public class LotroGameMediator {
for (Modifier modifier : modifiers) {
PhysicalCard source = modifier.getSource();
if (source != null)
- sb.append("
" + source.getBlueprint().getName() + ": " + modifier.getText());
+ sb.append("
" + source.getBlueprint().getName() + ": " + modifier.getText(_lotroGame.getGameState(), _lotroGame.getModifiersQuerying()));
else
- sb.append("
System: " + modifier.getText());
+ sb.append("
System: " + modifier.getText(_lotroGame.getGameState(), _lotroGame.getModifiersQuerying()));
}
if (modifiers.size() == 0)
sb.append("
nothing");