Merge pull request #50 from PhallenCassidy/hobbit-errata

Hobbit errata
This commit is contained in:
Marcin Sciesinski
2019-02-18 13:44:10 -08:00
committed by GitHub
15 changed files with 245 additions and 186 deletions

View File

@@ -1,15 +1,21 @@
<pre style="font-size:80%">
<b>Most recent update</b>
- "Drawn to Its Power" can no longer adds burden if The Ring-Bearer was killed
- Fixed an error in which the deck builder would not check for format legality after adding a site
- Players may now kill characters if the cost of an action is to wound
- "Drawn to Its Power" can no longer add a burden if The Ring-Bearer was killed
- "The Witch-king, Deathless Lord" can now wound an ally twice if all Free Peoples characters are exhausted
- "Nine-fingered Frodo and the Ring of Doom" can now remove one threat if there is one threat and no burdens
- "Saved from the Fire" can no longer target the Ring-Bearer
- "Throne of the Golden Hall" no longer allows a character to prevent its own wound by exerting
- "Tower Troll" now has the correct prevention pop-up text
- "Uruk Guard" and "Uruk-hai Guard" now announce the selected companion in chat
- "Shelob, Her Ladyship" now announces the seclected companion in chat
- "Shelob, Her Ladyship" now announces the selected companion in chat
- "Safe Passage" now announces the selected keyword in chat
- "Saruman, Of Many Colours" now announces the selected culture in chat
- The Hobbit Draft League should no longer disappear from users' collections each server day
- The Hobbit's "Goblin Song," "Great Goblin's Power," and "Azog, The Defiler" have errata text added
- The Hobbit's "Gandalf, Leader of Dwarves," "Emeralds of Girion," "Better Than Nothing," and "Caught in a Sack" have been changed
<b>21 June 2018</b>
- Added Draft for Fellowship block, The Two Towers block, and The Hobbit
@@ -38,12 +44,13 @@
- "Brought Down from Inside" now properly allows the Free Peoples to transfer this condition at the start of each skirmish.
- "Hope Comes" no longer triggers if a multi-phase event is played outside of a skirmish phase.
- "Eye of Barad-Dur" can now use its response action.
- "Above the Battlement" no longer allows players to play a stacked Besieger to play a [Sauron] Orc from discard.
- "Above the Battlement" no longer allows players to play a stacked Besieger to play a SAURON Orc from discard.
- "Eomer, Keeper of Oaths" no longer shuffles the deck twice.
- The Hobbit's "Dawn Take You All" may now be used if all minions have only 1 vitality.
- The Hobbit's "Gandalf, Leader of Dwarves" now properly discards 2 Dwarf followers to be played from discard.
- The Hobbit's "Gandalf, Leader of Dwarves" and "Gandalf, Leader of the Company" are now properly wise.
- The Hobbit's "He Gives Me Courage" no longer gives the Free Peoples the option to exert Gandalf if that player cannot exert a Wise ELVEN ally.
- The Hobbit's "He Gives Me Courage" no longer gives the Free Peoples the option to exert Gandalf if that player cannot
exert a Wise ELVEN ally.
- The Hobbit's "Beorn, Skin-Changer" now properly prevents a Shadow player from discarding him while borne.
- The Hobbit's "The Eagles Are Coming" now properly attaches a follower.
- The Hobbit's "Trollshaw Forest" now always gives each player the opportunity to play a hand weapon.

View File

@@ -104,7 +104,7 @@ var CardFilter = Class.extend({
this.fullFilterDiv = $("<div></div>");
this.setSelect = $("<select style='width: 130px; font-size: 80%;'>"
+ "<option value=''>All Sets</option>"
+ "<option value='lotr'>All Sets</option>"
+ "<option value='fotr_block'>Fellowship Block</option>"
+ "<option value='ttt_block'>Towers Block</option>"
+ "<option value='king_block'>King Block</option>"
@@ -136,11 +136,11 @@ var CardFilter = Class.extend({
+ "<option value='18'>18 - Treachery & Deceit</option>"
+ "<option value='19'>19 - Ages End</option>"
+ "<option value='20'>20 - Second Edition</option>"
//Additional Hobbit Draft blocks
+ "<option value='30'> The Hobbit: Main Deck</option>"
+ "<option value='hobbit_tsr'> The Hobbit: The Short Rest</option>"
//Additional Hobbit Draft blocks
+ "<option value='30'> The Hobbit: Main Deck</option>"
+ "<option value='hobbit_tsr'> The Hobbit: The Short Rest</option>"
+ "</select>");
this.nameInput = $("<input type='text' value='Card name' style='width: 130px; font-size: 70%;'>");
this.nameInput = $("<input type='text' value='Card name' style='width: 110px; font-size: 70%;'>");
this.sortSelect = $("<select style='width: 80px; font-size: 80%;'>"
+ "<option value=''>Sort by:</option>"
+ "<option value='name'>Name</option>"
@@ -179,8 +179,6 @@ var CardFilter = Class.extend({
+ "<input type='checkbox' id='ROHAN'/><label for='ROHAN' id='labelROHAN'><img src='images/cultures/rohan.png'/></label>"
+ "<input type='checkbox' id='SHIRE'/><label for='SHIRE' id='labelSHIRE'><img src='images/cultures/shire.png'/></label>"
+ "<input type='checkbox' id='GOLLUM'/><label for='GOLLUM' id='labelGOLLUM'><img src='images/cultures/gollum.png'/></label>"
//Additional Hobbit Draft Free Peoples culture
+ "<input type='checkbox' id='ESGAROTH'/><label for='ESGAROTH' id='labelESGAROTH'><img src='images/cultures/esgaroth.png'/></label>"
+ "</div>");
this.filterDiv.append("<div id='culture2'>"
+ "<input type='checkbox' id='DUNLAND'/><label for='DUNLAND' id='labelDUNLAND'><img src='images/cultures/dunland.png'/></label>"
@@ -192,7 +190,8 @@ var CardFilter = Class.extend({
+ "<input type='checkbox' id='SAURON'/><label for='SAURON' id='labelSAURON'><img src='images/cultures/sauron.png'/></label>"
+ "<input type='checkbox' id='URUK_HAI'/><label for='URUK_HAI' id='labelURUK_HAI'><img src='images/cultures/uruk_hai.png'/></label>"
+ "<input type='checkbox' id='WRAITH'/><label for='WRAITH' id='labelWRAITH'><img src='images/cultures/wraith.png'/></label>"
//Additional Hobbit Draft Shadow cultures
//Additional Hobbit Draft cultures
+ "<input type='checkbox' id='ESGAROTH'/><label for='ESGAROTH' id='labelESGAROTH'><img src='images/cultures/esgaroth.png'/></label>"
+ "<input type='checkbox' id='GUNDABAD'/><label for='GUNDABAD' id='labelGUNDABAD'><img src='images/cultures/gundabad.png'/></label>"
//+ "<input type='checkbox' id='MIRKWOOD'/><label for='MIRKWOOD' id='labelMIRKWOOD'><img src='images/cultures/mirkwood.png'/></label>"
//+ "<input type='checkbox' id='SMAUG'/><label for='SMAUG' id='labelSMAUG'><img src='images/cultures/smaug.png'/></label>"
@@ -295,15 +294,15 @@ var CardFilter = Class.extend({
$("#keyword").change(filterOut);
$("#type").change(filterOut);
//Additional Hobbit Draft labels
//Additional Hobbit Draft labels
$("#labelDWARVEN,#labelELVEN,#labelGANDALF,#labelGONDOR,#labelROHAN,#labelSHIRE,#labelGOLLUM,#labelDUNLAND,#labelISENGARD,#labelMEN,#labelMORIA,#labelORC,#labelRAIDER,#labelSAURON,#labelURUK_HAI,#labelWRAITH,#labelESGAROTH,#labelGUNDABAD").click(filterOut);
},
layoutUi:function (x, y, width, height) {
this.pageDiv.css({ position:"absolute", left:x, top:y, width:width, height:50 });
this.pageDiv.css({ position:"absolute", left:x, top:y, width:width, height:34 });
this.countSlider.css({width:width - 100});
this.fullFilterDiv.css({position:"absolute", left:x, top:y + 50, width:width, height:30});
this.filterDiv.css({ position:"absolute", left:x, top:y + 80, width:width, height:80 });
this.fullFilterDiv.css({position:"absolute", left:x, top:y + 34, width:width, height:34});
this.filterDiv.css({ position:"absolute", left:x, top:y + 68, width:width, height:80 });
},
layoutPageUi: function(x, y, width) {

View File

@@ -573,6 +573,7 @@ var GempLotrDeckBuildingUI = Class.extend({
var cardDiv = createCardDiv(card.imageUrl, null, card.isFoil(), tokens, card.isPack(), card.hasErrata());
cardDiv.data("card", card);
container.append(cardDiv);
this.deckDirty = true;
return cardDiv;
},
@@ -587,7 +588,6 @@ var GempLotrDeckBuildingUI = Class.extend({
cardDiv.addClass("cardInDeck");
that.showNormalFilter();
that.layoutSpecialGroups();
that.deckDirty = true;
that.deckModified(true);
};
},

View File

@@ -23,7 +23,7 @@ var hobbit = {
'30_22': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Bard.png',
'30_23': 'http://hobbitdraftgame.free.fr/Cards_Good_def/A_wizard_is_never_late.png',
'30_24': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Dawn_take_you_all.png',
'30_25': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Gandalf.png',
'30_25': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Gandalf.png',
'30_26': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Gandalf2.png',
'30_27': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Gandalf3.png',
'30_28': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Gandalf4.png',
@@ -59,7 +59,7 @@ var hobbit = {
'30_58': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Smaug.png',
'31_1': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Dwarven_Axe.png',
'31_2': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Dwarven_Song.png',
'31_3': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Emeralds_of_Girion.png',
'31_3': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Emeralds_of_Girion.png',
'31_4': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Great_Barricade.png',
'31_5': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Mithril_Coat.png',
'31_6': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Oakenshield.png',
@@ -75,11 +75,11 @@ var hobbit = {
'31_16': 'http://hobbitdraftgame.free.fr/Cards_Good_def/His_Wrath_Was_Redoubled.png',
'31_17': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Radagast.png',
'31_18': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Wizard_Staff.png',
'31_19': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Gollum_Better_Than_Nothing.png',
'31_19': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Gollum_Better_Than_Nothing.png',
'31_20': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Gollum_Gollum.png',
'31_21': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Gollum_If_He_Loses.png',
'31_22': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Riddles_in_the_Dark.png',
'31_23': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Wargs_Azog.png',
'31_23': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Wargs_Azog.png',
'31_24': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Wargs_Bolg.png',
'31_25': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Savage_Warg.png',
'31_26': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Wargs_Threatening_Warg.png',
@@ -89,9 +89,9 @@ var hobbit = {
'31_30': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Goblin_Goblin_Runner.png',
'31_31': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Goblin_Goblin_Scimitar.png',
'31_32': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Goblin_Goblin_Sneak.png',
'31_33': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Goblin_Song.png',
'31_33': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Goblin_Song.png',
'31_34': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Goblin_Goblin_Swarms.png',
'31_35': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Goblin_Great_Goblin_s_power.png',
'31_35': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Goblin_Great_Goblin_s_power.png',
'31_36': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Goblin_The_Great_Goblin.png',
'31_37': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Bolg_Servant.png',
'31_38': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Acorn.png',
@@ -121,7 +121,7 @@ var hobbit = {
'31_62': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Spider_Spider_Nest.png',
'31_63': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Spider_Wicked_Spider.png',
'31_64': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Troll_Bert.png',
'31_65': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Caught_In_A_Sack.png',
'31_65': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Caught_In_A_Sack.png',
'31_66': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Troll_Tom.png',
'31_67': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Troll_Troll_Campfire.png',
'31_68': 'http://hobbitdraftgame.free.fr/Cards_Good_def/Troll_Troll_Knife.png',

View File

@@ -278,7 +278,7 @@ public class PlayConditions {
@Override
public boolean visitPhysicalCard(PhysicalCard physicalCard) {
if (filter.accepts(gameState, modifiersQuerying, physicalCard)
&& modifiersQuerying.getVitality(gameState, physicalCard) > times
&& modifiersQuerying.getVitality(gameState, physicalCard) >= times
&& modifiersQuerying.canTakeWounds(gameState, (source != null)?Collections.singleton(source):Collections.<PhysicalCard>emptySet(), physicalCard, times))
_woundableCount++;
return _woundableCount >= count;

View File

@@ -3,12 +3,14 @@ package com.gempukku.lotro.cards.set17.rohan;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.cards.effects.PreventCardEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPreventCardEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.GameUtils;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
@@ -16,7 +18,8 @@ import com.gempukku.lotro.logic.modifiers.CantBeAssignedToSkirmishModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.timing.Effect;
import java.util.Collections;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
/**
@@ -49,14 +52,24 @@ public class Card17_098 extends AbstractPermanent {
public List<? extends ActivateCardAction> getOptionalInPlayBeforeActions(String playerId, LotroGame game, Effect effect, PhysicalCard self) {
if (TriggerConditions.isGettingWounded(effect, game, Culture.ROHAN, Race.MAN)
&& PlayConditions.canExert(self, game, Culture.ROHAN, Race.MAN)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new AddTwilightEffect(self, 2));
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.ROHAN, Race.MAN));
action.appendEffect(
new ChooseAndPreventCardEffect(self, (WoundCharactersEffect) effect, playerId, "Choose character to prevent wound to", Culture.ROHAN, Race.MAN));
return Collections.singletonList(action);
final WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect;
Collection<PhysicalCard> woundedCharacters = Filters.filter(woundEffect.getAffectedCardsMinusPrevented(game), game.getGameState(), game.getModifiersQuerying(), Culture.ROHAN, Race.MAN);
List<ActivateCardAction> actions = new LinkedList<ActivateCardAction>();
for (PhysicalCard woundedCharacter : woundedCharacters) {
if (PlayConditions.canExert(self, game, Culture.ROHAN, Race.MAN, Filters.not(woundedCharacter))) {
ActivateCardAction action = new ActivateCardAction(self);
action.setText("Prevent to " + GameUtils.getFullName(woundedCharacter));
action.appendCost(
new AddTwilightEffect(self, 2));
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Culture.ROHAN, Race.MAN, Filters.not(woundedCharacter)));
action.appendEffect(
new PreventCardEffect(woundEffect, woundedCharacter));
actions.add(action);
}
}
return actions;
}
return null;
}

View File

@@ -3,23 +3,24 @@ package com.gempukku.lotro.cards.set30.gandalf;
import com.gempukku.lotro.cards.AbstractCompanion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddBurdenEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.cards.effects.SelfExertEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromDeckEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromHandEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.effects.DrawCardsEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.Action;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
@@ -31,39 +32,49 @@ import java.util.List;
* Strength: 7
* Vitality: 4
* Resistance: 6
* Game Text: Wise. At the start of each of your turns, you may exert Gandalf to play a Dwarf companion
* from your draw deck. Maneuver: Discard 2 Dwarf followers to play Gandalf from your discard pile.
* Game Text: Wise. Each time you reconcile, you may draw 2 cards. Skirmish: Play a [GANDALF] skirmish
* event and add a doubt to play a Dwarf from your draw deck. Skirmish: Play a [DWARVEN] skirmish
* event to make an Orc skirmishing Bilbo strength -2.
*/
public class Card30_025 extends AbstractCompanion {
public Card30_025() {
super(4, 7, 4, 6, Culture.GANDALF, Race.WIZARD, null, "Gandalf", "Leader of Dwarves", true);
super(2, 7, 4, 6, Culture.GANDALF, Race.WIZARD, null, "Gandalf", "Leader of Dwarves", true);
addKeyword(Keyword.WISE);
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(final String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.startOfTurn(game, effectResult)) {
final OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new SelfExertEffect(action, self));
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.reconciles(game, effectResult, playerId)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndPlayCardFromDeckEffect(self.getOwner(), Race.DWARF, CardType.COMPANION));
new DrawCardsEffect(action, playerId, 2));
return Collections.singletonList(action);
}
return null;
}
@Override
public List<? extends Action> getPhaseActionsFromDiscard(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.isPhase(game, Phase.MANEUVER)
&& (PlayConditions.canDiscardFromPlay(self, game, 2, Race.DWARF, CardType.FOLLOWER))
&& (PlayConditions.canPlayFromDiscard(playerId, game, self))) {
ActivateCardAction replayGandalf = new ActivateCardAction(self);
replayGandalf.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(replayGandalf, playerId, 2, 2, Race.DWARF, CardType.FOLLOWER));
replayGandalf.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, self));
return Collections.singletonList(replayGandalf);
protected List<ActivateCardAction> getExtraInPlayPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
List<ActivateCardAction> actions = new LinkedList<ActivateCardAction>();
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)) {
if (PlayConditions.canPlayFromHand(playerId, game, Culture.GANDALF, CardType.EVENT, Keyword.SKIRMISH)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.setText("Play a [GANDALF] event");
action.appendCost(new ChooseAndPlayCardFromHandEffect(playerId, game, Culture.GANDALF, CardType.EVENT, Keyword.SKIRMISH));
action.appendCost(new AddBurdenEffect(playerId, self, 1));
action.appendEffect(new ChooseAndPlayCardFromDeckEffect(self.getOwner(), Race.DWARF));
actions.add(action);
}
if (PlayConditions.canPlayFromHand(playerId, game, Culture.DWARVEN, CardType.EVENT, Keyword.SKIRMISH)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.setText("Play a [DWARVEN] event");
action.appendCost(new ChooseAndPlayCardFromHandEffect(playerId, game, Culture.DWARVEN, CardType.EVENT, Keyword.SKIRMISH));
action.appendEffect(new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, -2,
CardType.MINION, Race.ORC, Filters.inSkirmishAgainst(Filters.name("Bilbo"))));
actions.add(action);
}
return actions;
}
return null;
}

View File

@@ -2,20 +2,21 @@ package com.gempukku.lotro.cards.set31.dwarven;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.cards.effects.PutCardFromStackedIntoHandEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndStackCardsFromHandEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
import com.gempukku.lotro.logic.effects.ChooseArbitraryCardsEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.TwilightCostModifier;
import com.gempukku.lotro.logic.timing.Action;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -26,54 +27,48 @@ import java.util.List;
* Culture: Dwarven
* Twilight Cost: 2
* Type: Artifact • Support Area
* Game Text: Fellowship: Exert an Elf to heal a Man. Regroup: Exert a Man and discard this artifact to play an Elf from
* your draw deck or discard pile.
* Game Text: Fellowship: Add (1) to take a card stacked here into hand. Regroup: Exert an ally to stack a [DWARVEN]
* event from hand on Emeralds of Girion.
*/
public class Card31_003 extends AbstractPermanent {
public Card31_003() {
super(Side.FREE_PEOPLE, 2, CardType.ARTIFACT, Culture.DWARVEN, Zone.SUPPORT, "Emeralds of Girion", null, true);
}
}
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)
&& PlayConditions.canExert(self, game, Race.ELF)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.ELF));
action.appendEffect(
new ChooseAndHealCharactersEffect(action, playerId, 1, 1, Race.MAN));
return Collections.singletonList(action);
}
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.REGROUP, self)
&& PlayConditions.canExert(self, game, Race.MAN)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Race.MAN));
action.appendCost(
new SelfDiscardEffect(self));
List<Effect> possibleEffects = new LinkedList<Effect>();
possibleEffects.add(
new ChooseAndPlayCardFromDeckEffect(playerId, Race.ELF) {
@Override
public String getText(LotroGame game) {
return "Play an Elf from your draw deck";
}
});
if (PlayConditions.canPlayFromDiscard(playerId, game, Race.ELF)) {
possibleEffects.add(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Race.ELF) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)) {
List<PhysicalCard> stackedCards = game.getGameState().getStackedCards(self);
if (stackedCards.size() > 0) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new AddTwilightEffect(self, 1));
action.appendEffect(
new ChooseArbitraryCardsEffect(playerId, "Choose card", stackedCards, 1, 1) {
@Override
public String getText(LotroGame game) {
return "Play an Elf from your discard pile";
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
for (PhysicalCard selectedCard : selectedCards) {
action.appendEffect(
new PutCardFromStackedIntoHandEffect(selectedCard));
}
}
});
return Collections.singletonList(action);
}
action.appendEffect(
new ChoiceEffect(action, playerId, possibleEffects));
return Collections.singletonList(action);
}
return null;
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.REGROUP, self)
&& PlayConditions.canExert(self, game, CardType.ALLY)) {
if (Filters.filter(game.getGameState().getHand(playerId), game.getGameState(), game.getModifiersQuerying(),
Culture.DWARVEN, CardType.EVENT).size() > 0) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.ALLY));
action.appendEffect(
new ChooseAndStackCardsFromHandEffect(action, playerId, 1, 1, self, Culture.DWARVEN));
return Collections.singletonList(action);
}
}
return null;
}
}

View File

@@ -1,8 +1,9 @@
package com.gempukku.lotro.cards.set31.gollum;
import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddBurdenEffect;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect;
@@ -10,9 +11,15 @@ import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffec
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -21,44 +28,53 @@ import java.util.List;
* Side: Shadow
* Culture: Gollum
* Twilight Cost: 0
* Type: Event • Shadow
* Game Text: Discard an orc to play Gollum from your draw deck or discard pile.
* Type: Condition • Support Area
* Game Text: While you can spot Gollum, each [GANDALF] event gains this cost: "add a doubt." At the end of
* your Shadow phase, you may discard an Orc from play to play Gollum from your draw deck or discard pile.
*/
public class Card31_019 extends AbstractEvent {
public class Card31_019 extends AbstractPermanent {
public Card31_019() {
super(Side.SHADOW, 0, Culture.GOLLUM, "Better Than Nothing", Phase.SHADOW);
super(Side.SHADOW, 0, CardType.CONDITION, Culture.GOLLUM, Zone.SUPPORT, "Better Than Nothing", null, true);
}
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& PlayConditions.canDiscardFromPlay(self, game, Race.ORC);
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Filters.owner(game.getGameState().getCurrentPlayerId()), Culture.GANDALF, CardType.EVENT)) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(new AddBurdenEffect(self.getOwner(), self, 1));
return Collections.singletonList(action);
}
return null;
}
@Override
public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
PlayEventAction action = new PlayEventAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Race.ORC));
List<Effect> possibleEffects = new LinkedList<Effect>();
possibleEffects.add(
new ChooseAndPlayCardFromDeckEffect(playerId, Filters.gollum) {
public List<OptionalTriggerAction> getOptionalAfterTriggers(final String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.endOfPhase(game, effectResult, Phase.SHADOW)
&& PlayConditions.canDiscardFromPlay(self, game, Race.ORC)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Race.ORC));
List<Effect> possibleEffects = new LinkedList<Effect>();
possibleEffects.add(
new ChooseAndPlayCardFromDeckEffect(playerId, Filters.gollum) {
@Override
public String getText(LotroGame game) {
return "Play Gollum from your draw deck";
}
});
if (PlayConditions.canPlayFromDiscard(playerId, game, Filters.gollum)) {
possibleEffects.add(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Filters.gollum) {
@Override
public String getText(LotroGame game) {
return "Play Gollum from your draw deck";
return "Play Gollum from your discard pile";
}
});
if (PlayConditions.canPlayFromDiscard(playerId, game, Filters.gollum)) {
possibleEffects.add(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Filters.gollum) {
@Override
public String getText(LotroGame game) {
return "Play Gollum from your discard pile";
}
});
}
action.appendEffect(
new ChoiceEffect(action, playerId, possibleEffects));
return Collections.singletonList(action);
}
action.appendEffect(
new ChoiceEffect(action, playerId, possibleEffects));
return action;
return null;
}
}

View File

@@ -24,8 +24,9 @@ import java.util.List;
* Strength: 9
* Vitality: 3
* Site: 3
* Game Text: Damage +1. Each time you play a mount, you may make the Free Peoples player exert a companion.
* Game Text: Damage +1. Each time you play a mount, you may make the Free Peoples player exert a [DWARVEN] companion.
*/
public class Card31_023 extends AbstractMinion {
public Card31_023() {
super(4, 9, 3, 3, Race.ORC, Culture.GUNDABAD, "Azog", "The Defiler", true);
@@ -38,7 +39,7 @@ public class Card31_023 extends AbstractMinion {
if (TriggerConditions.played(game, effectResult, PossessionClass.MOUNT)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION));
new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION, Culture.DWARVEN));
return Collections.singletonList(action);
}
return null;

View File

@@ -24,7 +24,7 @@ import java.util.List;
* Twilight Cost: 1
* Type: Event
* Game Text: You may exert The Great Goblin twice to play this event from your discard pile. Exert 2 Orcs
* to discard a possession or artifact borne by a [DWARVEN] companion.
* to discard a [DWARVEN] possession or [DWARVEN] artifact borne by a companion.
*/
public class Card31_033 extends AbstractEvent {
public Card31_033() {
@@ -43,7 +43,7 @@ public class Card31_033 extends AbstractEvent {
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 2, 2, Race.ORC));
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.or(CardType.POSSESSION, CardType.ARTIFACT), Filters.attachedTo(Filters.and(CardType.COMPANION, Race.DWARF))));
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.and(Culture.DWARVEN, Filters.or(CardType.POSSESSION, CardType.ARTIFACT)), Filters.attachedTo(CardType.COMPANION)));
return action;
}
@@ -60,7 +60,7 @@ public class Card31_033 extends AbstractEvent {
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 2, 2, Race.ORC));
action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.or(CardType.POSSESSION, CardType.ARTIFACT), Filters.attachedTo(Filters.and(CardType.COMPANION, Race.DWARF))));
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Filters.and(Culture.DWARVEN, Filters.or(CardType.POSSESSION, CardType.ARTIFACT)), Filters.attachedTo(CardType.COMPANION)));
return Collections.singletonList(action);
}
return null;

View File

@@ -3,7 +3,9 @@ package com.gempukku.lotro.cards.set31.moria;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.PreventCardEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
@@ -19,6 +21,7 @@ import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
@@ -28,8 +31,9 @@ import java.util.List;
* Twilight Cost: 0
* Type: Condition
* Game Text: To play, spot a [MORIA] card. Each time you play a weapon, add (1). Response: If an Orc is
* about to take a wound, discard this condition to prevent that wound.
* about to take a wound, discard this condition or remove (3) to prevent that wound.
*/
public class Card31_035 extends AbstractPermanent {
public Card31_035() {
super(Side.SHADOW, 0, CardType.CONDITION, Culture.MORIA, Zone.SUPPORT, "Great Goblin's Power");
@@ -52,23 +56,30 @@ public class Card31_035 extends AbstractPermanent {
}
@Override
public List<? extends ActivateCardAction> getOptionalInPlayBeforeActions(String playerId, LotroGame game, final Effect effect, final PhysicalCard self) {
public List<? extends ActivateCardAction> getOptionalInPlayBeforeActions(String playerId, LotroGame game, Effect effect, PhysicalCard self) {
if (TriggerConditions.isGettingWounded(effect, game, Race.ORC)) {
final WoundCharactersEffect woundEffect = (WoundCharactersEffect) effect;
final Collection<PhysicalCard> cardsToBeWounded = woundEffect.getAffectedCardsMinusPrevented(game);
Collection<PhysicalCard> woundedCharacters = woundEffect.getAffectedCardsMinusPrevented(game);
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
List<Effect> possibleCosts = new LinkedList<Effect>();
possibleCosts.add(
new RemoveTwilightEffect(3));
possibleCosts.add(
new SelfDiscardEffect(self));
action.appendCost(
new ChoiceEffect(action, playerId, possibleCosts));
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose an Orc", Race.ORC, Filters.in(cardsToBeWounded)) {
new ChooseActiveCardEffect(self, playerId, "Choose an Orc", Filters.in(woundedCharacters), Race.ORC) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard woundedOrc) {
action.appendEffect(
new PreventCardEffect(woundEffect, woundedOrc));
protected void cardSelected(LotroGame game, PhysicalCard card) {
action.insertEffect(
new PreventCardEffect(woundEffect, card));
}
});
return Collections.singletonList(action);
}
return null;
}
}
}

View File

@@ -3,20 +3,21 @@ package com.gempukku.lotro.cards.set31.troll;
import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.ChoiceEffect;
import com.gempukku.lotro.cards.effects.PreventableEffect;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.cards.effects.TransferPermanentEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.modifiers.ResistanceModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.OptionalTriggerAction;
import com.gempukku.lotro.logic.actions.SubAction;
import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.CantBeAssignedToSkirmishModifier;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.timing.Action;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.EffectResult;
@@ -30,26 +31,43 @@ import java.util.List;
* Culture: Troll
* Twilight Cost: 2
* Type: Condition • Support Area
* Game Text: At the start of each assignment phase, you may discard a minion (or exert
* a [TROLL] Troll) to spot a [DWARVEN] or [SHIRE] companion. That companion cannot be
* assigned to a skirmish. Bilbo may exert twice to prevent this.
* Game Text: Discard this condition if Bilbo wins a skirmish. Regroup: Discard a
* minion (or exert a Troll) to transfer this condition to a [DWARVEN] companion.
* Bearer cannot be assigned to a skirmish by any player.
*/
public class Card31_065 extends AbstractPermanent {
public Card31_065() {
super(Side.SHADOW, 2, CardType.CONDITION, Culture.GUNDABAD, Zone.SUPPORT, "Caught in a Sack", null, true);
super(Side.SHADOW, 0, CardType.CONDITION, Culture.GUNDABAD, Zone.SUPPORT, "Caught in a Sack");
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.ASSIGNMENT)
&& (PlayConditions.canExert(self, game, 1, Culture.GUNDABAD, Race.TROLL) || PlayConditions.canDiscardFromPlay(self, game, CardType.MINION))) {
final OptionalTriggerAction action = new OptionalTriggerAction(self);
List<Effect> possibleCosts = new LinkedList<Effect>();
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, Filters.name("Bilbo"))) {
RequiredTriggerAction action = new RequiredTriggerAction(self);
action.appendEffect(
new SelfDiscardEffect(self));
return Collections.singletonList(action);
}
return null;
}
@Override
public Modifier getAlwaysOnModifier(LotroGame game, PhysicalCard self) {
return new CantBeAssignedToSkirmishModifier(self, Filters.hasAttached(self));
}
@Override
public List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.REGROUP, self, 0)
&& (PlayConditions.canExert(self, game, CardType.MINION, Race.TROLL)
|| PlayConditions.canSpot(game, CardType.MINION))) {
final ActivateCardAction action = new ActivateCardAction(self);
List<Effect> possibleCosts = new LinkedList<Effect>();
possibleCosts.add(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 1, Culture.GUNDABAD, Race.TROLL) {
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 1, Race.TROLL) {
@Override
public String getText(LotroGame game) {
return "Exert a [TROLL] Troll";
return "Exert a Troll";
}
});
possibleCosts.add(
@@ -59,36 +77,17 @@ public class Card31_065 extends AbstractPermanent {
return "Discard a minion";
}
});
action.appendCost(
new ChoiceEffect(action, playerId, possibleCosts));
action.appendCost(new ChoiceEffect(action, playerId, possibleCosts));
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose a [DWARVEN] or [SHIRE] companion", CardType.COMPANION, Filters.or(Culture.DWARVEN, Culture.SHIRE)) {
@Override
protected void cardSelected(LotroGame game, final PhysicalCard card) {
action.appendEffect(new PreventableEffect(
action,
new AddUntilEndOfPhaseModifierEffect(new CantBeAssignedToSkirmishModifier(self, card)) {
@Override
public String getText(LotroGame game) {
return "prevent that";
}
},
Collections.singletonList(game.getGameState().getCurrentPlayerId()),
new PreventableEffect.PreventionCost() {
@Override
public Effect createPreventionCostForPlayer(SubAction subAction, String playerId) {
return new ChooseAndExertCharactersEffect(action, playerId, 1, 1, 2, Filters.name("Bilbo")) {
@Override
public String getText(LotroGame game) {
return "exert Bilbo twice";
}
};
}
}));
}
new ChooseActiveCardEffect(self, playerId, "Choose a [DWARVEN] companion", Culture.DWARVEN, CardType.COMPANION, Filters.not(Filters.hasAttached(self))) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard card) {
action.appendEffect(
new TransferPermanentEffect(self, card));
}
});
return Collections.singletonList(action);
}
return null;
}
}
}

View File

@@ -33,7 +33,7 @@ import java.util.List;
*/
public class Card8_033 extends AbstractResponseEvent {
public Card8_033() {
super(Side.FREE_PEOPLE, 1, Culture.GONDOR, "Ellesar's Edict");
super(Side.FREE_PEOPLE, 1, Culture.GONDOR, "Elessar's Edict");
}
@Override

View File

@@ -352,5 +352,12 @@
"limited":true,
"set":[30, 31],
"hall":false
},
{
"name":"LotR Cards",
"code":"lotr",
"sites":"SPECIAL",
"set":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],
"hall":false
}
]