Some FotR cards in new system

This commit is contained in:
marcin.sciesinski
2019-10-04 01:49:52 -07:00
parent 155ab94a6d
commit 2ff82525c0
10 changed files with 180 additions and 319 deletions

View File

@@ -1,4 +1,148 @@
{
"1_284": {
"title": "*Bilbo",
"subtitle": "Retired Adventurer",
"culture": "shire",
"cost": 2,
"type": "ally",
"allyHome": "fellowship,3",
"race": "hobbit",
"strength": 2,
"vitality": 3,
"effects": {
"type": "activated",
"phase": "fellowship",
"cost": {
"type": "exert",
"filter": "self"
},
"effect": {
"type": "shuffleCardsFromDiscardIntoDrawDeck",
"filter": "choose(culture(shire))"
}
}
},
"1_285": {
"title": "*Bilbo's Pipe",
"culture": "shire",
"cost": 1,
"type": "possession",
"possession": "pipe",
"target": "hobbit",
"effects": {
"type": "activated",
"phase": "fellowship",
"cost": [
{
"type": "discard",
"filter": "choose(pipeweed,possession)"
},
{
"type": "chooseHowManyToSpot",
"filter": "pipe",
"memorize": "numberOfPipes"
}
],
"effect": {
"type": "shuffleCardsFromDiscardIntoDrawDeck",
"count": {
"type": "fromMemory",
"memory": "numberOfPipes"
},
"filter": "choose(tale)"
}
}
},
"1_286": {
"title": "Bounder",
"culture": "shire",
"cost": 1,
"type": "ally",
"allyHome": "fellowship,2",
"race": "hobbit",
"strength": 2,
"vitality": 2,
"effects": {
"type": "activated",
"phase": "skirmish",
"cost": {
"type": "exert",
"filter": "self"
},
"effect": {
"type": "cantBeOverwhelmedMultiplier",
"filter": "choose(hobbit)"
}
}
},
"1_287": {
"title": "Extraordinary Resilience",
"culture": "shire",
"cost": 0,
"type": "event",
"keyword": "response",
"effects": {
"type": "responseEvent",
"trigger": {
"type": "aboutToHeal",
"filter": "ring bearer"
},
"cost": {
"type": "preventHeal",
"filter": "choose(ring bearer)"
},
"effect": {
"type": "removeBurdens"
}
}
},
"1_288": {
"title": "*Farmer Maggot",
"subtitle": "Chaser of Rascals",
"culture": "shire",
"cost": 1,
"type": "ally",
"allyHome": "fellowship,1",
"race": "hobbit",
"strength": 2,
"vitality": 3,
"effects": {
"type": "activated",
"phase": "fellowship",
"cost": {
"type": "exert",
"filter": "self"
},
"effect": {
"type": "heal",
"filter": "choose(or(name(Merry),name(Pippin)))"
}
}
},
"1_289": {
"title": "*Frodo",
"subtitle": "Old Bilbo's Heir",
"culture": "shire",
"cost": 0,
"type": "companion",
"race": "hobbit",
"strength": 3,
"vitality": 4,
"resistance": 10,
"signet": "gandalf",
"keyword": "can start with ring",
"effects": {
"type": "trigger",
"optional": true,
"trigger": {
"type": "startOfTurn"
},
"effect": {
"type": "heal",
"filter": "choose(hobbit,ally)"
}
}
},
"1_297": {
"title": "Hobbit Party Guest",
"culture": "shire",

View File

@@ -1,55 +0,0 @@
package com.gempukku.lotro.cards.set1.shire;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.SitesBlock;
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.cardtype.AbstractAlly;
import com.gempukku.lotro.logic.effects.ChooseArbitraryCardsEffect;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.effects.ShuffleCardsFromDiscardIntoDeckEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Free
* Culture: Shire
* Twilight Cost: 2
* Type: Ally • Home 3 • Hobbit
* Strength: 2
* Vitality: 3
* Site: 3
* Game Text: Fellowship: Exert Bilbo to shuffle a [SHIRE] card from your discard pile into your draw deck.
*/
public class Card1_284 extends AbstractAlly {
public Card1_284() {
super(2, SitesBlock.FELLOWSHIP, 3, 2, 3, Race.HOBBIT, Culture.SHIRE, "Bilbo", "Retired Adventurer", true);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(final String playerId, final LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)
&& PlayConditions.canExert(self, game, self)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(new SelfExertEffect(action, self));
action.appendEffect(
new ChooseArbitraryCardsEffect(playerId, "Choose SHIRE card", game.getGameState().getDiscard(playerId), Culture.SHIRE, 1, 1) {
@Override
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
action.insertEffect(
new ShuffleCardsFromDiscardIntoDeckEffect(self, playerId, selectedCards));
}
}
);
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,71 +0,0 @@
package com.gempukku.lotro.cards.set1.shire;
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.cardtype.AbstractAttachableFPPossession;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import com.gempukku.lotro.logic.decisions.ForEachYouSpotDecision;
import com.gempukku.lotro.logic.effects.ChooseArbitraryCardsEffect;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.effects.ShuffleCardsFromDiscardIntoDeckEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Possession • Pipe
* Game Text: Bearer must be a Hobbit. Fellowship: Discard a pipeweed possession and spot X pipes to shuffle X tales
* from your discard pile into your draw deck.
*/
public class Card1_285 extends AbstractAttachableFPPossession {
public Card1_285() {
super(1, 0, 0, Culture.SHIRE, PossessionClass.PIPE, "Bilbo's Pipe", null, true);
}
@Override
public Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return Race.HOBBIT;
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(final String playerId, final LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)
&& Filters.canSpot(game, Keyword.PIPEWEED, CardType.POSSESSION)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Keyword.PIPEWEED, CardType.POSSESSION));
action.appendEffect(
new PlayoutDecisionEffect(playerId,
new ForEachYouSpotDecision(1, "Choose number of pipes you wish to spot", game, PossessionClass.PIPE) {
@Override
public void decisionMade(String result) throws DecisionResultInvalidException {
int spotCount = getValidatedResult(result);
Collection<PhysicalCard> talesInDiscard = Filters.filter(game.getGameState().getDiscard(playerId), game, Keyword.TALE);
int shufflableTales = Math.min(spotCount, talesInDiscard.size());
action.appendEffect(
new ChooseArbitraryCardsEffect(playerId, "Choose tales", new LinkedList<PhysicalCard>(talesInDiscard), shufflableTales, shufflableTales) {
@Override
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
action.insertEffect(
new ShuffleCardsFromDiscardIntoDeckEffect(self, playerId, selectedCards));
}
});
}
}));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,58 +0,0 @@
package com.gempukku.lotro.cards.set1.shire;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.SitesBlock;
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.cardtype.AbstractAlly;
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.modifiers.OverwhelmedByMultiplierModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Ally • Home 2 • Hobbit
* Strength: 2
* Vitality: 2
* Site: 2
* Game Text: Skirmish: Exert this ally to prevent a Hobbit from being overwhelmed unless that Hobbit's strength is
* tripled.
*/
public class Card1_286 extends AbstractAlly {
public Card1_286() {
super(1, SitesBlock.FELLOWSHIP, 2, 2, 2, Race.HOBBIT, Culture.SHIRE, "Bounder");
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
&& PlayConditions.canExert(self, game, self)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(new SelfExertEffect(action, self));
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose a Hobbit", Race.HOBBIT) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard hobbit) {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new OverwhelmedByMultiplierModifier(self, Filters.sameCard(hobbit), 3)));
}
}
);
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,44 +0,0 @@
package com.gempukku.lotro.cards.set1.shire;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Side;
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.PlayEventAction;
import com.gempukku.lotro.logic.cardtype.AbstractResponseEvent;
import com.gempukku.lotro.logic.effects.PreventCardEffect;
import com.gempukku.lotro.logic.effects.PreventableCardEffect;
import com.gempukku.lotro.logic.effects.RemoveBurdenEffect;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Free
* Culture: Shire
* Twilight Cost: 0
* Type: Event
* Game Text: Response: If the Ring-bearer is about to heal, remove a burden instead.
*/
public class Card1_287 extends AbstractResponseEvent {
public Card1_287() {
super(Side.FREE_PEOPLE, 0, Culture.SHIRE, "Extraordinary Resilience");
}
@Override
public List<PlayEventAction> getPlayResponseEventBeforeActions(String playerId, LotroGame game, Effect effect, final PhysicalCard self) {
if (TriggerConditions.isGettingHealed(effect, game, Filters.ringBearer)) {
final PlayEventAction action = new PlayEventAction(self);
action.appendCost(
new PreventCardEffect((PreventableCardEffect) effect, Filters.findFirstActive(game, Filters.ringBearer)));
action.appendEffect(
new RemoveBurdenEffect(playerId, self));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,48 +0,0 @@
package com.gempukku.lotro.cards.set1.shire;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.SitesBlock;
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.cardtype.AbstractAlly;
import com.gempukku.lotro.logic.effects.ChooseAndHealCharactersEffect;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Ally • Home 1 • Hobbit
* Strength: 2
* Vitality: 3
* Site: 1
* Game Text: Fellowship: Exert Farmer Maggot to heal Merry or Pippin.
*/
public class Card1_288 extends AbstractAlly {
public Card1_288() {
super(1, SitesBlock.FELLOWSHIP, 1, 2, 3, Race.HOBBIT, Culture.SHIRE, "Farmer Maggot", "Chaser of Rascals", true);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)
&& PlayConditions.canExert(self, game, self)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(action, self));
action.appendEffect(
new ChooseAndHealCharactersEffect(action, playerId, Filters.or(Filters.name("Merry"), Filters.name("Pippin"))));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,43 +0,0 @@
package com.gempukku.lotro.cards.set1.shire;
import com.gempukku.lotro.logic.cardtype.AbstractCompanion;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.common.*;
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.effects.ChooseAndHealCharactersEffect;
import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.List;
/**
* Set: The Fellowship of the Ring
* Side: Free
* Culture: Shire
* Twilight Cost: 0
* Type: Companion • Hobbit
* Strength: 3
* Vitality: 4
* Resistance: 10
* Signet: Gandalf
* Game Text: Ring-bearer (resistance 10). At the start of each of your turns, you may heal a Hobbit ally.
*/
public class Card1_289 extends AbstractCompanion {
public Card1_289() {
super(0, 3, 4, 10, Culture.SHIRE, Race.HOBBIT, Signet.GANDALF, "Frodo", "Old Bilbo's Heir", true);
addKeyword(Keyword.CAN_START_WITH_RING);
}
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(final String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfTurn(game, effectResult)) {
final OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndHealCharactersEffect(action, playerId, CardType.ALLY, Race.HOBBIT));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -17,6 +17,7 @@ public class EffectAppenderFactory {
effectAppenderProducers.put("discard", new DiscardFromPlay());
effectAppenderProducers.put("removefromthegame", new RemoveFromTheGame());
effectAppenderProducers.put("preventdiscard", new PreventCardEffectAppender());
effectAppenderProducers.put("preventheal", new PreventCardEffectAppender());
effectAppenderProducers.put("exert", new Exert());
effectAppenderProducers.put("exhaust", new Exhaust());
effectAppenderProducers.put("modifystrength", new ModifyStrength());

View File

@@ -0,0 +1,34 @@
package com.gempukku.lotro.cards.build.field.effect.trigger;
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.common.Filterable;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import org.json.simple.JSONObject;
public class AboutToHeal implements TriggerCheckerProducer {
@Override
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "filter");
String filter = FieldUtils.getString(value.get("filter"), "filter");
final FilterableSource affectedFilter = environment.getFilterFactory().generateFilter(filter, environment);
return new TriggerChecker() {
@Override
public boolean accepts(ActionContext actionContext) {
final Filterable affected = affectedFilter.getFilterable(actionContext);
return TriggerConditions.isGettingHealed(actionContext.getEffect(), actionContext.getGame(), affected);
}
@Override
public boolean isBefore() {
return true;
}
};
}
}

View File

@@ -15,6 +15,7 @@ public class TriggerCheckerFactory {
triggerCheckers.put("played", new PlayedTriggerCheckerProducer());
triggerCheckers.put("playedfromstacked", new PlayedFromStacked());
triggerCheckers.put("abouttodiscard", new AboutToDiscardFromPlay());
triggerCheckers.put("abouttoheal", new AboutToHeal());
triggerCheckers.put("losesskirmish", new LosesSkirmish());
triggerCheckers.put("winsskirmish", new WinsSkirmish());
triggerCheckers.put("cancelledskirmish", new CancelledSkirmish());