Migrated Shire cards in set 17 to hjson

This commit is contained in:
MarcinSc
2024-05-26 17:22:09 +07:00
parent a5e38db7ff
commit 5aec24553e
9 changed files with 164 additions and 337 deletions

View File

@@ -1,49 +0,0 @@
package com.gempukku.lotro.cards.set17.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.AbstractPermanent;
import com.gempukku.lotro.logic.effects.CancelSkirmishEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Rise of Saruman
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Condition • Support Area
* Game Text: Pipeweed. To play, spot a Hobbit. Skirmish: Discard a pipeweed from play to cancel a skirmish involving
* an unbound Hobbit.
*/
public class Card17_106 extends AbstractPermanent {
public Card17_106() {
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.SHIRE, "Halfling Leaf");
addKeyword(Keyword.PIPEWEED);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canSpot(game, Race.HOBBIT);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
&& PlayConditions.canDiscardFromPlay(self, game, Keyword.PIPEWEED)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Keyword.PIPEWEED));
action.appendEffect(
new CancelSkirmishEffect(Filters.unboundCompanion, Race.HOBBIT));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,55 +0,0 @@
package com.gempukku.lotro.cards.set17.shire;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
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.AbstractCompanion;
import com.gempukku.lotro.logic.effects.SelfExertEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndPutCardFromDiscardOnBottomOfDeckEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.RaceSpotModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Rise of Saruman
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Companion • Hobbit
* Strength: 3
* Vitality: 4
* Resistance: 8
* Game Text: Add 1 to the number of Ents you can spot. Regroup: Exert Merry to place a pipeweed from your discard pile
* beneath your draw deck.
*/
public class Card17_107 extends AbstractCompanion {
public Card17_107() {
super(1, 3, 4, 8, Culture.SHIRE, Race.HOBBIT, null, "Merry", "In the Bloom of Health", true);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new RaceSpotModifier(self, Race.ENT));
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.REGROUP, self)
&& PlayConditions.canSelfExert(self, game)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(action, self));
action.appendEffect(
new ChooseAndPutCardFromDiscardOnBottomOfDeckEffect(action, playerId, 1, 1, Keyword.PIPEWEED));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,60 +0,0 @@
package com.gempukku.lotro.cards.set17.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.AbstractPermanent;
import com.gempukku.lotro.logic.effects.RemoveThreatsEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.LinkedList;
import java.util.List;
/**
* Set: Rise of Saruman
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Condition • Support Area
* Game Text: Pipeweed. To play, spot an unbound Hobbit. Regroup: Discard a pipeweed from play to remove a threat.
* Regroup: Discard a pipeweed from play to discard a minion.
*/
public class Card17_108 extends AbstractPermanent {
public Card17_108() {
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.SHIRE, "Hornblower Leaf");
addKeyword(Keyword.PIPEWEED);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canSpot(game, Filters.unboundCompanion, Race.HOBBIT);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.REGROUP, self)
&& PlayConditions.canDiscardFromPlay(self, game, Keyword.PIPEWEED)) {
List<ActivateCardAction> actions = new LinkedList<>();
ActivateCardAction action1 = new ActivateCardAction(self);
action1.setText("Remove a threat");
action1.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action1, playerId, 1, 1, Keyword.PIPEWEED));
action1.appendEffect(
new RemoveThreatsEffect(self, 1));
actions.add(action1);
ActivateCardAction action2 = new ActivateCardAction(self);
action2.setText("Discard a minion");
action2.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action2, playerId, 1, 1, Keyword.PIPEWEED));
action2.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action2, playerId, 1, 1, CardType.MINION));
actions.add(action2);
return actions;
}
return null;
}
}

View File

@@ -1,54 +0,0 @@
package com.gempukku.lotro.cards.set17.shire;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race;
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.AbstractCompanion;
import com.gempukku.lotro.logic.effects.RemoveBurdenEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.RaceSpotModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Rise of Saruman
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Companion • Hobbit
* Strength: 3
* Vitality: 4
* Resistance: 8
* Game Text: Add 1 to the number of Ents you can spot. Maneuver: Discard 2 pipeweed cards from play to remove a burden.
*/
public class Card17_109 extends AbstractCompanion {
public Card17_109() {
super(1, 3, 4, 8, Culture.SHIRE, Race.HOBBIT, null, "Pippin", "In the Bloom of Health", true);
}
@Override
public List<? extends Modifier> getInPlayModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(new RaceSpotModifier(self, Race.ENT));
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.MANEUVER, self)
&& PlayConditions.canDiscardFromPlay(self, game, 2, Keyword.PIPEWEED)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 2, 2, Keyword.PIPEWEED));
action.appendEffect(
new RemoveBurdenEffect(playerId, self));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,61 +0,0 @@
package com.gempukku.lotro.cards.set17.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.AbstractPermanent;
import com.gempukku.lotro.logic.effects.SelfDiscardEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndAddUntilEOPStrengthBonusEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndPlayCardFromDeckEffect;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Rise of Saruman
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Condition • Support Area
* Game Text: Pipeweed. To play, spot an unbound Hobbit. Skirmish: Discard a pipeweed from play to make an unbound
* Hobbit strength +2. Regroup: Discard this pipeweed from play to play a pipeweed from your draw deck. Reshuffle your
* draw deck.
*/
public class Card17_110 extends AbstractPermanent {
public Card17_110() {
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.SHIRE, "Southfarthing Leaf");
addKeyword(Keyword.PIPEWEED);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canSpot(game, Filters.unboundCompanion, Race.HOBBIT);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
&& PlayConditions.canDiscardFromPlay(self, game, Keyword.PIPEWEED)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Keyword.PIPEWEED));
action.appendEffect(
new ChooseAndAddUntilEOPStrengthBonusEffect(action, self, playerId, 2, Filters.unboundCompanion, Race.HOBBIT));
return Collections.singletonList(action);
}
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.REGROUP, self)
&& PlayConditions.canSelfDiscard(self, game)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfDiscardEffect(self));
action.appendEffect(
new ChooseAndPlayCardFromDeckEffect(playerId, Keyword.PIPEWEED));
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -1,58 +0,0 @@
package com.gempukku.lotro.cards.set17.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.AbstractPermanent;
import com.gempukku.lotro.logic.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.effects.choose.ChooseAndDiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.modifiers.OverwhelmedByMultiplierModifier;
import com.gempukku.lotro.logic.timing.PlayConditions;
import java.util.Collections;
import java.util.List;
/**
* Set: Rise of Saruman
* Side: Free
* Culture: Shire
* Twilight Cost: 1
* Type: Condition • Support Area
* Game Text: Pipeweed. To play, spot a Hobbit. Skirmish: Discard a pipeweed from play to prevent an unbound Hobbit from
* being overwhelmed unless that Hobbit's strength is tripled.
*/
public class Card17_111 extends AbstractPermanent {
public Card17_111() {
super(Side.FREE_PEOPLE, 1, CardType.CONDITION, Culture.SHIRE, "Southlinch Leaf");
addKeyword(Keyword.PIPEWEED);
}
@Override
public boolean checkPlayRequirements(LotroGame game, PhysicalCard self) {
return PlayConditions.canSpot(game, Race.HOBBIT);
}
@Override
public List<? extends ActivateCardAction> getPhaseActionsInPlay(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self)
&& PlayConditions.canDiscardFromPlay(self, game, Keyword.PIPEWEED)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, Keyword.PIPEWEED));
action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose a Hobbit", Filters.unboundCompanion, Race.HOBBIT) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard card) {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new OverwhelmedByMultiplierModifier(self, card, 3)));
}
});
return Collections.singletonList(action);
}
return null;
}
}

View File

@@ -26,6 +26,25 @@
Support Area
]
effects: [
{
type: toPlay
requires: {
type: canSpot
filter: hobbit
}
}
{
type: activated
phase: skirmish
cost: {
type: discard
filter: choose(pipeweed)
}
effect: {
type: cancelSkirmish
filter: unbound,hobbit
}
}
]
gametext: <b>Pipeweed</b>. To play, spot a Hobbit.<br><b>Skirmish:</b> Discard a pipeweed from play to cancel a skirmish involving an unbound Hobbit.
lore: It feels good, and it smells good.'
@@ -65,6 +84,25 @@
vitality: 4
resistance: 8
effects: [
{
type: modifier
modifier: {
type: modifyRaceSpotCount
race: ent
}
}
{
type: activated
phase: regroup
cost: {
type: exert
filter: self
}
effect: {
type: putCardsFromDiscardOnBottomOfDeck
filter: choose(pipeweed)
}
}
]
gametext: Add 1 to the number of Ents you can spot.<br><b>Regroup:</b> Exert Merry to place a pipeweed from your discard pile beneath your draw deck.
lore: I think we may have made a mistake leaving the Shire, Pippin.'
@@ -103,6 +141,38 @@
Support Area
]
effects: [
{
type: toPlay
requires: {
type: canSpot
filter: unbound,hobbit
}
}
{
type: activated
phase: regroup
text: Remove a threat
cost: {
type: discard
filter: choose(pipeweed)
}
effect: {
type: removeThreats
}
}
{
type: activated
phase: regroup
text: Discard a minion
cost: {
type: discard
filter: choose(pipeweed)
}
effect: {
type: discard
filter: choose(minion)
}
}
]
gametext: <b>Pipeweed</b>. To play, spot an unbound Hobbit.<br><b>Regroup:</b> Discard a pipeweed from play to remove a threat.<br><b>Regroup:</b> Discard a pipeweed from play to discard a minion.
lore: These are the Hornblower brandmarks....'
@@ -142,6 +212,25 @@
vitality: 4
resistance: 8
effects: [
{
type: modifier
modifier: {
type: modifyRaceSpotCount
race: ent
}
}
{
type: activated
phase: maneuver
cost: {
type: discard
filter: choose(pipeweed)
count: 2
}
effect: {
type: removeBurdens
}
}
]
gametext: Add 1 to the number of Ents you can spot.<br><b>Maneuver:</b> Discard 2 pipeweed cards from play to remove a burden.
lore: Ents are well Ents are all different for one thing.
@@ -180,6 +269,38 @@
Support Area
]
effects: [
{
type: toPlay
requires: {
type: canSpot
filter: unbound,hobbit
}
}
{
type: activated
phase: skirmish
cost: {
type: discard
filter: choose(pipeweed)
}
effect: {
type: modifyStrength
filter: choose(unbound,hobbit)
amount: 2
}
}
{
type: activated
phase: regroup
cost: {
type: discard
filter: self
}
effect: {
type: playCardFromDrawDeck
filter: choose(pipeweed)
}
}
]
gametext: <b>Pipeweed</b>. To play, spot an unbound Hobbit.<br><b>Skirmish:</b> Discard a pipeweed from play to make an unbound Hobbit strength +2.<br><b>Regroup:</b> Discard this pipeweed from play to play a pipeweed from your draw deck. Reshuffle your draw deck.
lore: ""
@@ -218,6 +339,26 @@
Support Area
]
effects: [
{
type: toPlay
requires: {
type: canSpot
filter: hobbit
}
}
{
type: activated
phase: skirmish
cost: {
type: discard
filter: choose(pipeweed)
}
effect: {
type: alterOverwhelmMultiplier
filter: choose(unbound,hobbit)
multiplier: 3
}
}
]
gametext: <b>Pipeweed</b>. To play, spot a Hobbit.<br><b>Skirmish:</b> Discard a pipeweed from play to prevent an unbound Hobbit from being overwhelmed unless that Hobbit's strength is tripled.
lore: How it came here, I can't imagine. For Saruman's private use, I fancy.'

View File

@@ -71,6 +71,7 @@ public class ModifierSourceFactory {
modifierProducers.put("modifyinitiativehandsize", new ModifyInitiativeHandSize());
modifierProducers.put("modifymovelimit", new ModifyMoveLimit());
modifierProducers.put("modifyplayoncost", new ModifyPlayOnCost());
modifierProducers.put("modifyracespotcount", new ModifyRaceSpotCount());
modifierProducers.put("modifyresistance", new ModifyResistance());
modifierProducers.put("modifyroamingpenalty", new ModifyRoamingPenalty());
modifierProducers.put("modifysanctuaryheal", new ModifySanctuaryHeal());

View File

@@ -0,0 +1,22 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
import com.gempukku.lotro.cards.build.ModifierSource;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.logic.modifiers.RaceSpotModifier;
import org.json.simple.JSONObject;
public class ModifyRaceSpotCount implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "race");
Race race = FieldUtils.getEnum(Race.class, object.get("race"), "race");
if (race == null)
throw new InvalidCardDefinitionException("Race is required for \"modify race spot count\"");
return (actionContext) -> new RaceSpotModifier(actionContext.getSource(), race);
}
}