Fixed Morgul Balde
This commit is contained in:
@@ -0,0 +1,282 @@
|
||||
{
|
||||
"2_49": {
|
||||
"side": "shadow",
|
||||
"site": 4,
|
||||
"cost": 4,
|
||||
"race": "Orc",
|
||||
"strength": 8,
|
||||
"culture": "Moria",
|
||||
"vitality": 2,
|
||||
"title": "*Archer Commander",
|
||||
"type": "minion",
|
||||
"keyword": "Archer",
|
||||
"effects": {
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "another,culture(moria),archer",
|
||||
"amount": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"2_50": {
|
||||
"side": "shadow",
|
||||
"cost": 1,
|
||||
"strength": 3,
|
||||
"culture": "Moria",
|
||||
"possession": "Hand Weapon",
|
||||
"title": "*The Balrog's Sword",
|
||||
"type": "artifact",
|
||||
"target": "name(The Balrog)",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "addKeyword",
|
||||
"filter": "bearer",
|
||||
"keyword": "damage+1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "extraPossessionClass"
|
||||
}
|
||||
]
|
||||
},
|
||||
"2_51": {
|
||||
"side": "shadow",
|
||||
"site": 4,
|
||||
"cost": 12,
|
||||
"race": "Balrog",
|
||||
"strength": 17,
|
||||
"culture": "Moria",
|
||||
"vitality": 5,
|
||||
"subtitle": "Durin's Bane",
|
||||
"title": "*The Balrog",
|
||||
"type": "minion",
|
||||
"keyword": [
|
||||
"Damage",
|
||||
"Fierce"
|
||||
],
|
||||
"effects": [
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "condition",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "another,minion"
|
||||
}
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "all(another,minion)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "skipPhase",
|
||||
"phase": "archery"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "condition",
|
||||
"condition": {
|
||||
"type": "not",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "underground"
|
||||
}
|
||||
}
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"2_52": {
|
||||
"side": "shadow",
|
||||
"site": 4,
|
||||
"cost": 14,
|
||||
"race": "Balrog",
|
||||
"strength": 17,
|
||||
"culture": "Moria",
|
||||
"vitality": 5,
|
||||
"subtitle": "Flame of Udun",
|
||||
"title": "*The Balrog",
|
||||
"type": "minion",
|
||||
"keyword": [
|
||||
"Damage",
|
||||
"Fierce"
|
||||
],
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(moria),orc"
|
||||
},
|
||||
"effects": [
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "condition",
|
||||
"condition": {
|
||||
"type": "not",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "underground"
|
||||
}
|
||||
}
|
||||
},
|
||||
"effect": {
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
"phase": "shadow",
|
||||
"cost": [
|
||||
{
|
||||
"type": "exert",
|
||||
"filter": "self"
|
||||
},
|
||||
{
|
||||
"type": "removeTwilight",
|
||||
"amount": 2
|
||||
}
|
||||
],
|
||||
"effect": {
|
||||
"type": "playCardFromDiscard",
|
||||
"filter": "choose(culture(moria),orc)"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"2_53": {
|
||||
"side": "shadow",
|
||||
"cost": 1,
|
||||
"strength": 2,
|
||||
"culture": "Moria",
|
||||
"title": "*Cave Troll's Chain",
|
||||
"type": "possession",
|
||||
"target": "name(Cave Troll of Moria)",
|
||||
"effects": [
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "endOfPhase",
|
||||
"phase": "maneuver"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "chooseYesOrNo",
|
||||
"player": "fp",
|
||||
"text": "Would you like to skip the Archery phase?",
|
||||
"memorize": "choice"
|
||||
},
|
||||
{
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "memoryIs",
|
||||
"memory": "choice",
|
||||
"value": "yes"
|
||||
},
|
||||
"effect": {
|
||||
"type": "addModifier",
|
||||
"until": "start(regroup)",
|
||||
"modifier": {
|
||||
"type": "skipPhase",
|
||||
"phase": "archery"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "takesWound",
|
||||
"filter": "bearer"
|
||||
},
|
||||
"condition": {
|
||||
"type": "phase",
|
||||
"phase": "archery"
|
||||
},
|
||||
"optional": true,
|
||||
"effect": {
|
||||
"type": "wound",
|
||||
"filter": "choose(archer,companion)"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"2_54": {
|
||||
"side": "shadow",
|
||||
"cost": 1,
|
||||
"strength": -2,
|
||||
"culture": "Moria",
|
||||
"title": "Dark Fire",
|
||||
"type": "condition",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "name(The Balrog)"
|
||||
},
|
||||
"target": "name(Gandalf)",
|
||||
"effects": {
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "moves"
|
||||
},
|
||||
"effect": {
|
||||
"type": "exert",
|
||||
"filter": "all(name(Gandalf))"
|
||||
}
|
||||
}
|
||||
},
|
||||
"2_55": {
|
||||
"side": "shadow",
|
||||
"cost": 1,
|
||||
"culture": "Moria",
|
||||
"title": "Dark Places",
|
||||
"type": "condition",
|
||||
"keyword": "Support Area",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "modifyStrength",
|
||||
"filter": "unique,culture(moria),minion",
|
||||
"amount": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
"phase": "shadow",
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "not(your),site"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "chooseActiveCards",
|
||||
"text": "Choose opponent's site",
|
||||
"filter": "choose(not(your),site)",
|
||||
"memorize": "chosenSite"
|
||||
},
|
||||
{
|
||||
"type": "playSite",
|
||||
"block": "fellowship",
|
||||
"number": {
|
||||
"type": "siteNumberInMemory",
|
||||
"memory": "chosenSite"
|
||||
},
|
||||
"filter": "or(marsh,underground)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -2,12 +2,16 @@ package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
|
||||
import com.gempukku.lotro.cards.build.ActionContext;
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.FilterableSource;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.effects.TransferPermanentEffect;
|
||||
@@ -31,7 +35,7 @@ public class Transfer implements EffectAppenderProducer {
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCard(filter, "_temp1", "you", "Choose card to transfer", environment));
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCard(where,
|
||||
CardResolver.resolveCards(where,
|
||||
actionContext -> (Filter) (game, physicalCard) -> {
|
||||
final Collection<? extends PhysicalCard> transferCard = actionContext.getCardsFromMemory("_temp1");
|
||||
if (transferCard.isEmpty())
|
||||
@@ -41,7 +45,8 @@ public class Transfer implements EffectAppenderProducer {
|
||||
if (transferredCard.getAttachedTo() == physicalCard)
|
||||
return false;
|
||||
return actionContext.getGame().getModifiersQuerying().canHaveTransferredOn(game, transferredCard, physicalCard);
|
||||
}, "_temp2", "you", "Choose cards to transfer to", environment));
|
||||
}, actionContext -> Filters.any,
|
||||
ValueResolver.resolveEvaluator(1, environment), "_temp2", "you", "Choose cards to transfer to", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
|
||||
@@ -2,12 +2,16 @@ package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
|
||||
import com.gempukku.lotro.cards.build.ActionContext;
|
||||
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
|
||||
import com.gempukku.lotro.cards.build.FilterableSource;
|
||||
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.CardResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.effects.TransferPermanentNotFromPlayEffect;
|
||||
@@ -32,7 +36,7 @@ public class TransferFromDiscard implements EffectAppenderProducer {
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCardsInDiscard(filter, new ConstantEvaluator(1), "_temp1", "you", "Choose card to transfer", environment));
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCard(where,
|
||||
CardResolver.resolveCards(where,
|
||||
actionContext -> (Filter) (game, physicalCard) -> {
|
||||
final Collection<? extends PhysicalCard> transferCard = actionContext.getCardsFromMemory("_temp1");
|
||||
if (transferCard.isEmpty())
|
||||
@@ -42,7 +46,8 @@ public class TransferFromDiscard implements EffectAppenderProducer {
|
||||
if (transferredCard.getAttachedTo() == physicalCard)
|
||||
return false;
|
||||
return actionContext.getGame().getModifiersQuerying().canHaveTransferredOn(game, transferredCard, physicalCard);
|
||||
}, "_temp2", "you", "Choose cards to transfer to", environment));
|
||||
}, actionContext -> Filters.any,
|
||||
ValueResolver.resolveEvaluator(1, environment), "_temp2", "you", "Choose cards to transfer to", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
|
||||
@@ -1308,4 +1308,106 @@ public class IndividualCardAtTest extends AbstractAtTest {
|
||||
|
||||
assertEquals(burdens, _game.getGameState().getBurdens());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void morgulBladeTransferFromSupportArea() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
initializeSimplestGame();
|
||||
|
||||
PhysicalCardImpl nelya = createCard(P2, "2_84");
|
||||
PhysicalCardImpl morgulBlade = createCard(P2, "1_216");
|
||||
PhysicalCardImpl bladeTip = createCard(P2, "1_209");
|
||||
|
||||
_game.getGameState().addCardToZone(_game, nelya, Zone.SHADOW_CHARACTERS);
|
||||
_game.getGameState().addCardToZone(_game, bladeTip, Zone.SUPPORT);
|
||||
_game.getGameState().attachCard(_game, morgulBlade, nelya);
|
||||
|
||||
skipMulligans();
|
||||
|
||||
// End fellowship phase
|
||||
playerDecided(P1, "");
|
||||
|
||||
// End shadow phase
|
||||
playerDecided(P2, "");
|
||||
|
||||
// End maneuver phase
|
||||
playerDecided(P1, "");
|
||||
playerDecided(P2, "");
|
||||
|
||||
// End archery phase
|
||||
playerDecided(P1, "");
|
||||
playerDecided(P2, "");
|
||||
|
||||
// End assignment phase
|
||||
playerDecided(P1, "");
|
||||
playerDecided(P2, "");
|
||||
|
||||
// Assign Frodo to Nelya
|
||||
PhysicalCard frodo = _game.getGameState().getRingBearer(P1);
|
||||
playerDecided(P1, frodo.getCardId() + " " + nelya.getCardId());
|
||||
|
||||
// Start skirmish
|
||||
playerDecided(P1, String.valueOf(frodo.getCardId()));
|
||||
|
||||
// P1 Passes
|
||||
playerDecided(P1, "");
|
||||
|
||||
// Use Morgul Blade
|
||||
playerDecided(P2, "0");
|
||||
|
||||
assertEquals(Zone.DISCARD, morgulBlade.getZone());
|
||||
assertEquals(Zone.ATTACHED, bladeTip.getZone());
|
||||
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void morgulBladeTransferFromDiscard() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
initializeSimplestGame();
|
||||
|
||||
PhysicalCardImpl nelya = createCard(P2, "2_84");
|
||||
PhysicalCardImpl morgulBlade = createCard(P2, "1_216");
|
||||
PhysicalCardImpl bladeTip = createCard(P2, "1_209");
|
||||
|
||||
_game.getGameState().addCardToZone(_game, nelya, Zone.SHADOW_CHARACTERS);
|
||||
_game.getGameState().addCardToZone(_game, bladeTip, Zone.DISCARD);
|
||||
_game.getGameState().attachCard(_game, morgulBlade, nelya);
|
||||
|
||||
skipMulligans();
|
||||
|
||||
// End fellowship phase
|
||||
playerDecided(P1, "");
|
||||
|
||||
// End shadow phase
|
||||
playerDecided(P2, "");
|
||||
|
||||
// End maneuver phase
|
||||
playerDecided(P1, "");
|
||||
playerDecided(P2, "");
|
||||
|
||||
// End archery phase
|
||||
playerDecided(P1, "");
|
||||
playerDecided(P2, "");
|
||||
|
||||
// End assignment phase
|
||||
playerDecided(P1, "");
|
||||
playerDecided(P2, "");
|
||||
|
||||
// Assign Frodo to Nelya
|
||||
PhysicalCard frodo = _game.getGameState().getRingBearer(P1);
|
||||
playerDecided(P1, frodo.getCardId() + " " + nelya.getCardId());
|
||||
|
||||
// Start skirmish
|
||||
playerDecided(P1, String.valueOf(frodo.getCardId()));
|
||||
|
||||
// P1 Passes
|
||||
playerDecided(P1, "");
|
||||
|
||||
// Use Morgul Blade
|
||||
playerDecided(P2, "0");
|
||||
|
||||
assertEquals(Zone.DISCARD, morgulBlade.getZone());
|
||||
assertEquals(Zone.ATTACHED, bladeTip.getZone());
|
||||
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user