diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ResolveSkirmishEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ResolveSkirmishEffect.java
index 7eccd708f..00cff5641 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ResolveSkirmishEffect.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ResolveSkirmishEffect.java
@@ -3,6 +3,7 @@ package com.gempukku.lotro.logic.effects;
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.modifiers.CantBeOverwhelmedModifier;
import com.gempukku.lotro.logic.timing.AbstractEffect;
import com.gempukku.lotro.logic.timing.RuleUtils;
import com.gempukku.lotro.logic.timing.results.*;
@@ -45,12 +46,14 @@ public class ResolveSkirmishEffect extends AbstractEffect {
final PhysicalCard fellowshipCharacter = skirmish.getFellowshipCharacter();
int multiplier = 2;
- if (fellowshipCharacter != null)
+ if (fellowshipCharacter != null) {
multiplier = game.getModifiersQuerying().getOverwhelmMultiplier(game, fellowshipCharacter);
+ }
- if (fpStrength == 0 && shadowStrength == 0)
+ if (fpStrength == 0 && shadowStrength == 0) {
return Result.FELLOWSHIP_LOSES;
- else if (fpStrength * multiplier <= shadowStrength) {
+ } else if (multiplier < CantBeOverwhelmedModifier.ImmuneToOverwhelmThreshold
+ && fpStrength * multiplier <= shadowStrength) {
return Result.FELLOWSHIP_OVERWHELMED;
} else if (fpStrength <= shadowStrength) {
return Result.FELLOWSHIP_LOSES;
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CantBeOverwhelmedModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CantBeOverwhelmedModifier.java
index ca94cbcab..8b93291f1 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CantBeOverwhelmedModifier.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CantBeOverwhelmedModifier.java
@@ -6,12 +6,14 @@ import com.gempukku.lotro.game.state.LotroGame;
public class CantBeOverwhelmedModifier extends AbstractModifier {
+ public static int ImmuneToOverwhelmThreshold = 10_000;
+
public CantBeOverwhelmedModifier(PhysicalCard source, Filterable affectFilter, Condition condition) {
super(source, "Cannot be overwhelmed", affectFilter, condition, ModifierEffect.OVERWHELM_MODIFIER);
}
@Override
public int getOverwhelmMultiplier(LotroGame game, PhysicalCard physicalCard) {
- return 10000;
+ return ImmuneToOverwhelmThreshold;
}
}
diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_116_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_116_Tests.java
index b5c2c07b6..f0fbe3de3 100644
--- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_116_Tests.java
+++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_116_Tests.java
@@ -17,12 +17,18 @@ public class Card_10_116_Tests
return new GenericCardTestHelper(
new HashMap<>()
{{
- put("card", "10_116");
- // put other cards in here as needed for the test case
+ put("totgr", "10_116");
+ put("sam", "1_311");
+
+ put("sauron", "9_48");
+ put("evil", "1_246"); //skirmish event
+ put("spies", "2_91"); //response event
+ put("frost1", "1_135");
+ put("frost2", "1_135");
}},
GenericCardTestHelper.FellowshipSites,
GenericCardTestHelper.FOTRFrodo,
- GenericCardTestHelper.RulingRing
+ GenericCardTestHelper.ATARRing
);
}
@@ -38,12 +44,14 @@ public class Card_10_116_Tests
* Twilight Cost: 0
* Type: Condition
* Subtype: Support area
- * Game Text: Tale.
Skirmish: Prevent a Hobbit from being overwhelmed unless a Shadow event is (or was) played during this skirmish. Discard this condition.
+ * Game Text: Tale.
+ * Skirmish: Prevent a Hobbit from being overwhelmed unless a
+ * Shadow event is (or was) played during this skirmish. Discard this condition.
*/
var scn = GetScenario();
- var card = scn.GetFreepsCard("card");
+ var card = scn.GetFreepsCard("totgr");
assertEquals("The Tale of the Great Ring", card.getBlueprint().getTitle());
assertNull(card.getBlueprint().getSubtitle());
@@ -56,18 +64,154 @@ public class Card_10_116_Tests
assertEquals(0, card.getBlueprint().getTwilightCost());
}
- // Uncomment any @Test markers below once this is ready to be used
- //@Test
- public void TheTaleoftheGreatRingTest1() throws DecisionResultInvalidException, CardNotFoundException {
+ @Test
+ public void TOTGRPreventsOverwhelmWithNoEvents() throws DecisionResultInvalidException, CardNotFoundException {
//Pre-game setup
var scn = GetScenario();
- var card = scn.GetFreepsCard("card");
- scn.FreepsMoveCardToHand(card);
+ var sam = scn.GetFreepsCard("sam");
+ var totgr = scn.GetFreepsCard("totgr");
+ scn.FreepsMoveCardToSupportArea(totgr);
+ scn.FreepsMoveCharToTable(sam);
+
+ var sauron = scn.GetShadowCard("sauron");
+ scn.ShadowMoveCharToTable(sauron);
scn.StartGame();
- scn.FreepsPlayCard(card);
- assertEquals(0, scn.GetTwilight());
+ scn.SkipToAssignments();
+ scn.FreepsAssignToMinions(sam, sauron);
+ scn.FreepsResolveSkirmish(sam);
+
+ assertTrue(scn.FreepsActionAvailable(totgr));
+ scn.FreepsUseCardAction(totgr);
+ scn.FreepsChooseCard(sam);
+ assertEquals(3, scn.GetStrength(sam));
+ assertEquals(24, scn.GetStrength(sauron));
+
+ scn.ShadowPassCurrentPhaseAction();
+ scn.FreepsPassCurrentPhaseAction();
+
+ //Sam survived skirmish and now we're in the fierce assignment phase
+ assertEquals(Zone.FREE_CHARACTERS, sam.getZone());
+ assertEquals(Phase.ASSIGNMENT, scn.GetCurrentPhase());
+ }
+
+ @Test
+ public void TOTGRDoesNotPreventOverwhelmWithShadowSkirmishEvent() throws DecisionResultInvalidException, CardNotFoundException {
+ //Pre-game setup
+ var scn = GetScenario();
+
+ var sam = scn.GetFreepsCard("sam");
+ var totgr = scn.GetFreepsCard("totgr");
+ scn.FreepsMoveCardToSupportArea(totgr);
+ scn.FreepsMoveCharToTable(sam);
+
+ var sauron = scn.GetShadowCard("sauron");
+ var evil = scn.GetShadowCard("evil");
+ scn.ShadowMoveCharToTable(sauron);
+ scn.ShadowMoveCardToHand(evil);
+
+ scn.StartGame();
+
+ scn.SkipToAssignments();
+ scn.FreepsAssignToMinions(sam, sauron);
+ scn.FreepsResolveSkirmish(sam);
+
+ assertTrue(scn.FreepsActionAvailable(totgr));
+ scn.FreepsUseCardAction(totgr);
+ scn.FreepsChooseCard(sam);
+ assertEquals(3, scn.GetStrength(sam));
+ assertEquals(24, scn.GetStrength(sauron));
+
+ assertTrue(scn.ShadowPlayAvailable(evil));
+ scn.ShadowPlayCard(evil);
+ scn.ShadowChoose("1");
+
+ scn.PassCurrentPhaseActions();
+
+ //Sam got overwhelmed and now we're in the fierce assignment phase
+ assertEquals(Zone.DEAD, sam.getZone());
+ assertEquals(Phase.ASSIGNMENT, scn.GetCurrentPhase());
+ }
+
+ @Test
+ public void TOTGRDoesNotPreventOverwhelmWithShadowResponseEvent() throws DecisionResultInvalidException, CardNotFoundException {
+ //Pre-game setup
+ var scn = GetScenario();
+
+ var ring = scn.GetFreepsRing();
+ var sam = scn.GetFreepsCard("sam");
+ var totgr = scn.GetFreepsCard("totgr");
+ scn.FreepsMoveCardToSupportArea(totgr);
+ scn.FreepsMoveCharToTable(sam);
+
+ var sauron = scn.GetShadowCard("sauron");
+ var spies = scn.GetShadowCard("spies");
+ scn.ShadowMoveCharToTable(sauron);
+ scn.ShadowMoveCardToHand(spies);
+
+ scn.StartGame();
+
+ scn.SkipToAssignments();
+ scn.FreepsAssignToMinions(sam, sauron);
+ scn.FreepsResolveSkirmish(sam);
+
+ assertTrue(scn.FreepsActionAvailable(totgr));
+ scn.FreepsUseCardAction(totgr);
+ scn.FreepsChooseCard(sam);
+ assertEquals(3, scn.GetStrength(sam));
+ assertEquals(24, scn.GetStrength(sauron));
+
+ scn.ShadowPassCurrentPhaseAction();
+ scn.FreepsUseCardAction(ring);
+ assertTrue(scn.ShadowPlayAvailable(spies));
+ scn.ShadowPlayCard(spies);
+
+ scn.ShadowPassCurrentPhaseAction();
+ scn.FreepsPassCurrentPhaseAction();
+
+ //Sam got overwhelmed and now we're in the fierce assignment phase
+ assertEquals(Zone.DEAD, sam.getZone());
+ assertEquals(Phase.ASSIGNMENT, scn.GetCurrentPhase());
+ }
+
+ @Test
+ public void TOTGRPreventsOverwhelmEvenWhenStrengthReducedToZero() throws DecisionResultInvalidException, CardNotFoundException {
+ //Pre-game setup
+ var scn = GetScenario();
+
+ var sam = scn.GetFreepsCard("sam");
+ var totgr = scn.GetFreepsCard("totgr");
+ scn.FreepsMoveCardToSupportArea(totgr);
+ scn.FreepsMoveCharToTable(sam);
+
+ var sauron = scn.GetShadowCard("sauron");
+ var frost1 = scn.GetShadowCard("frost1");
+ var frost2 = scn.GetShadowCard("frost2");
+ scn.ShadowMoveCharToTable(sauron);
+
+ scn.StartGame();
+
+ scn.FreepsPassCurrentPhaseAction();
+ var site2 = scn.GetCurrentSite();
+ scn.ShadowAttachCardsTo(site2, frost1, frost2);
+
+ scn.SkipToAssignments();
+ scn.FreepsAssignToMinions(sam, sauron);
+ scn.FreepsResolveSkirmish(sam);
+
+ assertTrue(scn.FreepsActionAvailable(totgr));
+ scn.FreepsUseCardAction(totgr);
+ scn.FreepsChooseCard(sam);
+ assertEquals(0, scn.GetStrength(sam));
+ assertEquals(24, scn.GetStrength(sauron));
+
+ scn.ShadowPassCurrentPhaseAction();
+ scn.FreepsPassCurrentPhaseAction();
+
+ //Sam survived skirmish even with 0 strength and now we're in the fierce assignment phase
+ assertEquals(Zone.FREE_CHARACTERS, sam.getZone());
+ assertEquals(Phase.ASSIGNMENT, scn.GetCurrentPhase());
}
}