Finished the rest of the 2022 Yuletide Errata

This commit is contained in:
Christian 'ketura' McCarty
2022-12-11 11:38:05 -06:00
parent cacf3c9414
commit 775028e65f
26 changed files with 1432 additions and 13 deletions

View File

@@ -335,6 +335,74 @@
}
}
71_17: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN01E017.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 1_17
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 1U17
rarity: U
setNum: "1"
cardNum: 17
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Grimir
subtitle: Dwarven Elder
unique: true
culture: dwarven
twilight: 1
type: ally
allyHome: fellowship,3
race: dwarf
strength: 3
vitality: 3
effects: {
type: activated
phase: fellowship
cost: [
{
type: exert
filter: self
}
{
type: discardTopCardsFromDeck
deck: freeps
count: 1
forced: false
}
]
effect: {
type: PutCardsFromDiscardOnTopOfDeck
filter: choose(culture(dwarven),event)
count: 1
}
}
gametext: <b>Fellowship:</b> Exert Grimir and discard the top card of your draw deck to place a [dwarven] event from your discard pile on top of your draw deck.
lore: Old and grey after many years spent in exile before the Lonely Mountain was reclaimed, Grimir can still wield his axe with strength.
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
71_23: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server

View File

@@ -86,6 +86,67 @@
}
}
72_44: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN02E044.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 2_44
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 2C44
rarity: C
setNum: "2"
cardNum: 44
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
side: shadow
twilight: 3
culture: Isengard
title: No Business of Ours
type: condition
keyword: Support Area
effects: [
{
type: ModifyOwnCost
requires: {
type: canSpot
filter: culture(isengard),minion
}
amount: -3
}
{
type: modifier
modifier: {
type: cantLookOrRevealHand
player: fp
hand: shadowPlayer
}
}
]
gametext: While you can spot an [isengard] minion, this card is twilight cost -3.\The Free Peoples player may not look at or reveal cards in any Shadow player's hand.
lore: "'Goblins? Cobblers! Far-off tales and children's stories, that's all that is!'"
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
72_45: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server

View File

@@ -62,6 +62,68 @@
}
}
}
72_107: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN02E107.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 2_107
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 2U107
rarity: U
setNum: "2"
cardNum: 107
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Not Feared in Sunlight
unique: false
culture: shire
twilight: 1
type: condition
keyword: support area
requires: {
type: CanSpot
filter: Hobbit
count: 2
}
effects: {
type: activated
phase: fellowship
cost: {
type: discard
filter: self
}
effect: {
type: modifyStrength
filter: all(Nazgul)
amount: -4
until: start(regroup)
}
}
gametext: To play, spot 2 Hobbits.\Fellowship: Discard this condition to make each Nazgûl strength -4 until the regroup phase.
lore: "'...our shapes cast shadows in their minds, which only the noon sun destroys....'"
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
52_108: {
cardInfo: {

View File

@@ -0,0 +1,89 @@
{
73_4: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN03E004.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 3_4
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 3U4
rarity: U
setNum: "3"
cardNum: 4
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: A Royal Welcome
unique: false
culture: dwarven
twilight: 2
type: condition
keyword: support area
effects: [
{
type: activated
phase: fellowship
cost: {
type: exert
filter: choose(culture(dwarven),companion)
}
effect: {
type: heal
filter: choose(culture(dwarven),ally)
}
}
{
type: activated
phase: skirmish
requires: {
type: CanSpot
filter: culture(dwarven),companion,InSkirmishAgainst(minion,StrengthMoreThan(9))
}
cost: {
type: exert
filter: choose(culture(dwarven),ally)
}
effect: {
type: ModifyStrength
filter: choose(culture(dwarven),companion,InSkirmishAgainst(minion,StrengthMoreThan(9)))
amount: 2
}
}
{
type: activated
phase: regroup
cost: {
type: exert
filter: choose(culture(dwarven),ally)
}
effect: {
type: heal
filter: choose(culture(dwarven),companion)
}
}
]
gametext: Fellowship: Exert a [dwarven] companion to heal a [dwarven] ally.\Skirmish: Spot a [dwarven] companion skirmishing a minion of strength 10 or more and exert a [dwarven] ally to make that companion strength +2. \Regroup: Exert a [dwarven] ally to heal a [dwarven] companion.
lore: ""
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -0,0 +1,90 @@
{
3_79: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN03E079.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 3_79
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 3U79
rarity: U
setNum: "3"
cardNum: 79
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Malice
culture: moria
twilight: 0
type: event
keyword: archery
requires: [
{
type: CanSpot
filter: culture(moria),Orc
}
{
type: CanSpot
filter: culture(sauron),Orc
}
]
effects: {
type: event
effect: [
{
type: playCardFromDiscard
filter: choose(item,or(culture(sauron),culture(moria)))
memorize: item1
}
{
type: playCardFromDiscard
filter: choose(item,or(culture(sauron),culture(moria)))
memorize: item2
}
{
type: repeat
amount: {
type: sum
source: [
{
type: ForEachInMemory
memory: item1
}
{
type: ForEachInMemory
memory: item2
}
]
}
effect: {
type: wound
filter: choose(side(Free Peoples),archer)
}
}
]
}
gametext: Spot a [moria] Orc and a [sauron] Orc to play up to 2 [sauron] or [moria] items from your discard pile. Wound a Free Peoples archer for each item played.
lore: Fueled by Sauron's hatred of living things, Orcs searched for the Ring of Power.
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -0,0 +1,95 @@
{
3_82: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN03E082.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 3_82
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 3U82
rarity: U
setNum: "3"
cardNum: 82
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: News of Mordor
culture: wraith
twilight: 1
type: event
keyword: maneuver
effects: {
type: event
effect: [
{
type: choice
texts: [
Exert an ISENGARD minion to make a Nazgul damage +1 until the regroup phase
Exert a Nazgul to prevent all wounds to an ISENGARD minion until the regroup phase
]
effects: [
{
type: costToEffect
cost: {
type: Exert
filter: choose(culture(isengard),minion)
}
effect: {
type: addKeyword
filter: choose(Nazgul)
keyword: damage+1
}
}
{
type: costToEffect
cost: {
type: Exert
filter: choose(Nazgul)
}
effect: [
{
type: ChooseActiveCards
count: 1
filter: choose(culture(isengard),minion)
memorize: chosenMinion
text: Choose an ISENGARD minion to make unwoundable
}
{
type: AddModifier
until: start(regroup)
modifier: {
type: CantTakeWounds
filter: memory(chosenMinion)
}
}
]
}
]
}
]
}
gametext: Choose one: exert an [isengard] minion to make a Nazgul damage +1 until the regroup phase, or exert a Nazgul to prevent all wounds to an [isengard] minion until the regroup phase.
lore: "'Build me an army worthy of Mordor.'"
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -437,6 +437,130 @@
}
}
73_103: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN03E103.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 3_103
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 3R103
rarity: R
setNum: "3"
cardNum: 103
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Terrible as the Dawn
unique: false
culture: sauron
twilight: 0
type: event
keyword: [
maneuver
]
effects: {
type: event
effect: {
type: conditional
requires: [
{
type: CanSpot
filter: culture(Sauron),minion
}
]
effect: {
type: choice
texts: [
Ring-bound Galadriel
Unbound/Ally Galadriel
]
effects: [
{
type: conditional
requires: {
type: CanSpot
filter: title(Galadriel),Ring-bound
}
effect: {
type: preventable
player: freeps
cost: {
type: choice
texts: [
Discard 2 Elves
Add 2 burdens
]
effects: [
{
type: discard
filter: choose(Elf)
count: 2
}
{
type: AddBurdens
amount: 2
}
]
}
text: Discard 2 Elves or add 2 burdens to prevent wounding Galadriel 3 times
effect: {
type: wound
times: 3
filter: choose(title(Galadriel))
}
}
}
{
type: conditional
requires: {
type: CantSpot
filter: title(Galadriel),Ring-bound
}
effect: {
type: preventable
player: freeps
cost: {
type: discard
filter: choose(Elf)
count: 2
}
text: Discard 2 Elves to prevent wounding Galadriel 3 times
effect: {
type: wound
times: 3
filter: choose(title(Galadriel))
}
}
}
]
}
}
}
gametext: <b>Maneuver:</b> Spot a [sauron] minion to wound Galadriel 3 times. The Free Peoples player may discard 2 Elves to prevent this. If Galadriel is Ring-bound, 2 burdens may be added instead.
lore: "'In the place of the Dark Lord, you would have a Queen... All shall love me and despair!'"
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
73_104: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server

View File

@@ -1,4 +1,105 @@
{
54_146: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN04E146.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 4_146
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 4R146
rarity: R
setNum: "4"
cardNum: 146
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Come Down
culture: isengard
twilight: 0
type: condition
keyword: [
support area
]
effects: [
{
type: activated
phase: maneuver
effect: [
{
type: ChooseActiveCards
filter: choose(fortification)
memorize: targetFort
text: Select a fortification to assault
}
{
type: Repeat
amount: {
type: Sum
source: [
1
{
type: TwilightCostInMemory
memory: targetFort
}
]
}
effect: {
type: Wound
player: freeps
filter: choose(culture(isengard),minion)
}
}
]
}
{
type: activated
phase: archery
requires: {
type: CanSpot
filter: culture(Isengard),archer
count: 2
}
effect: [
{
type: AddModifier
modifier: {
type: AllyCanParticipateInArcheryFire
filter: Ally
}
}
{
type: AddModifier
modifier: {
type: CantTakeArcheryWounds
filter: Companion
}
}
]
}
]
gametext: Maneuver: Spot a fortification. Make the Free Peoples player distribute X + 1 wounds among your [isengard] minions to discard that fortification, where X is its twilight cost.\<b>Archery:</b> Spot 2 [isengard] archers to make allies take wounds from archery fire instead of companions.
lore: ""
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
54_192: {
cardInfo: {

View File

@@ -0,0 +1,88 @@
{
55_8: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN05E008.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 5_8
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 5U8
rarity: U
setNum: "5"
cardNum: 8
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Horn of Helm
unique: true
culture: dwarven
twilight: 2
type: possession
keyword: support area
effects: [
{
type: modifier
modifier: {
type: FPCultureSpot
requires: [
{
type: CanSpot
filter: your,Man
}
{
type: CanSpot
filter: your,Elf
}
{
type: CanSpot
filter: your,Dwarf
}
]
amount: -1
}
}
{
type: activated
phase: maneuver
cost: {
type: exert
filter: choose(Dwarf,companion)
}
effect: {
type: addModifier
modifier: {
type: RemoveKeyword
requires: {
type: location
filter: battleground
}
filter: minion
keyword: damage
}
}
}
]
gametext: While you can spot your Man, Elf, and Dwarf, the number of Free Peoples cultures that can be spotted is -1.\<b>Maneuver:</b> Exert a Dwarf companion to make each minion at a battleground lose all damage bonuses until the regroup phase.
lore: "...the sound of the great horn of Helm rang out."
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -0,0 +1,91 @@
{
55_57: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN05E057.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 5_57
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 5U57
rarity: U
setNum: "5"
cardNum: 57
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Scaling Ladder
unique: false
culture: isengard
twilight: 0
type: condition
keyword: [
support area
machine
]
effects: [
{
type: activated
phase: shadow
cost: {
type: exert
filter: choose(Uruk-hai)
}
effect: {
type: AddTokens
amount: 1
culture: isengard
filter: self
}
}
{
type: activated
phase: skirmish
cost: [
{
type: MemorizeNumber
amount: {
type: ForEachToken
filter: self
culture: isengard
}
memory: tokenCount
}
{
type: discard
filter: self
}
]
effect: {
type: Heal
count: {
type: FromMemory
memory: tokenCount
}
filter: choose(Uruk-hai)
}
}
]
gametext: Machine.\Shadow: Exert an Uruk-hai to place an [isengard] token on this card (limit 2).\Skirmish: Discard this condition to heal an Uruk-hai for each [isengard] token on this card.
lore: "Hundreds of long ladders were lifted up. Many were cast down in ruin, but many more replaced them...."
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -0,0 +1,82 @@
{
77_256: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN07E256.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 7_256
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 7C256
rarity: C
setNum: "7"
cardNum: 256
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: They Sang as They Slew
culture: rohan
twilight: 1
type: event
keyword: regroup
effects: {
type: event
cost: {
type: Exert
filter: choose(mounted,companion)
count: {
type: range
from: 0
to: {
type: max
first: {
type: ForEachBurden
}
second: {
type: ForEachYouCanSpot
filter: minion
}
}
}
memorize: exertedComps
}
effect: [
{
type: Wound
filter: choose(minion)
count: {
type: FromMemory
memory: exertedComps
}
}
{
type: RemoveBurdens
amount: {
type: FromMemory
memory: exertedComps
}
}
]
}
gametext: Exert X mounted companions to wound X minions and remove X burdens.
lore: "...for the joy of battle was on them, and the sound of their singing that was fair and terrible came even to the City."
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -0,0 +1,103 @@
{
78_48: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN08E048.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 8_48
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 8C48
rarity: C
setNum: "8"
cardNum: 48
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Swept Away
unique: false
culture: gondor
twilight: 0
type: condition
keyword: [
support area
]
effects: [
{
type: trigger
optional: true
trigger: {
type: moves
}
effect: {
type: choice
texts: [
Add a threat
Discard this condition
]
effects: [
{
type: AddThreats
amount: 1
}
{
type: discard
filter: self
}
]
}
}
{
type: Modifier
modifier: {
type: CantTakeWounds
filter: exhausted,culture(gondor),wraith
requires: {
type: HaveInitiative
side: freeps
}
}
}
{
type: ActivatedTrigger
trigger: {
type: AboutToDiscard
filter: self
source: side(Shadow)
}
cost: {
type: DiscardFromHand
count: 2
forced: false
}
effect: {
type: PreventDiscard
filter: self
}
}
]
gametext: Each time the fellowship moves, add a threat or discard this condition. <br>While you have initiative, exhausted [gondor] Wraiths cannot take wounds.\Response: If a Shadow card is about to discard this condition, discard 2 cards from hand to prevent that.
lore: ""
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -0,0 +1,69 @@
{
78_91: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN08E091.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 8_91
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 8R91
rarity: R
setNum: "8"
cardNum: 91
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Rohirrim Army
unique: true
culture: elven
twilight: 5
type: companion
race: man
strength: 9
vitality: 3
requires: {
type: CanSpot
filter: culture(Rohan),companion
count: 2
}
effects: [
{
type: PlayedInOtherPhase
phase: regroup
}
{
type: trigger
trigger: {
type: played
filter: self
}
effect: {
type: discard
filter: choose(minion)
count: 0-1
}
}
]
gametext: To play, spot 2 [rohan] companions. <br>You may play Rohirrim Army any time you could play a regroup event. <br> When you play Rohirrim Army, you may discard a minion.
lore: "'Begone, foul dwimmerlaik, lord of carrion!'"
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -103,7 +103,7 @@
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1?
version: 1
collInfo: 10R11
rarity: R
setNum: "10"
@@ -161,4 +161,77 @@
}
}
}
80_12: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN10E012.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 10_12
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 10U12
rarity: U
setNum: "10"
cardNum: 12
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Glimpse of Fate
unique: true
culture: elven
twilight: 0
type: condition
keyword: support area
requires: {
type: CanSpot
filter: Elf
count: 2
}
effects: {
type: trigger
trigger: {
type: losesInitiative
side: free peoples
}
requires: {
type: perTurnLimit
limit: 1
}
effect: [
{
type: incrementPerTurnLimit
limit: 1
}
{
type: modifyStrength
filter: choose(minion)
amount: -3
until: start(regroup)
}
]
}
gametext: To play, spot 2 Elves. <br>When you lose initiative, you may make a minion strength 3 until the regroup phase (limit once per turn).
lore: "'The uttermost choice is before you: to repent and go to the Havens... or else to abide the Doom of Men.'"
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -0,0 +1,93 @@
{
80_72: {
cardInfo: {
//Either a full URL, or a subpath for the PC image server
imagePath: errata/LOTR-EN10E072.1.jpg
//If this is true, then all gameplay-related info outside this cardInfo definition
// will be ignored and the java class loaded instead.
javaClass: false
//This instructs the blueprint generator to insert this card as an alt of the listed
// parent blueprint. Can of course be ommitted if not an errata or promo.
parent: 10_72
//This is the tree path to use within the alts structure on the parent.
// Can of course be ommitted if parent is null.
parentPath: errata/pc
//Versioning differentiates releases within a particular alt path, such as PC errata
// version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2.
//Top-level cards should always be version 0.
version: 1
collInfo: 10R72
rarity: R
setNum: "10"
cardNum: 72
// Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard.
style: Standard
}
title: Éowyn
subtitle: Lady of Ithilien
unique: true
culture: elven
twilight: 2
type: companion
race: man
strength: 6
vitality: 3
signet: gandalf
effects: [
{
type: activated
phase: skirmish
requires: {
type: or
requires: [
{
type: CanSpot
filter: another,culture(Rohan),man
}
{
type: perTurnLimit
limit: 1
}
]
}
cost: {
type: exert
filter: self
}
effect: [
{
type: ChooseOpponent
memorize: opp
}
{
type: Repeat
amount: {
type: ForEachVitality
filter: minion,InSkirmishAgainst(self)
}
effect: {
type: Wound
player: FromMemory(opp)
filter: choose(minion)
}
}
{
type: incrementPerTurnLimit
limit: 1
}
]
}
]
gametext: <b>Skirmish:</b> Exert Eowyn to choose an opponent. That opponent must wound a minion for each wound on each minion skirmishing Eowyn (limit once per turn unless you can spot another [rohan] Man).
lore: "'Yet now that I have leave to depart, I would remain. For this House has become to me of all dwellings the most blessed.'"
promotext: ""
alts: {
//These are just CardInfo objects
promos: {
}
//These are full card definitions, with redundant info that is the same as the original card ommitted
errata: {
}
}
}
}

View File

@@ -44,6 +44,7 @@ public class EffectAppenderFactory {
effectAppenderProducers.put("choosecardsfromdrawdeck", new ChooseCardsFromDrawDeck());
effectAppenderProducers.put("choosehowmanyburdenstospot", new ChooseHowManyBurdensToSpot());
effectAppenderProducers.put("choosehowmanytospot", new ChooseHowManyToSpot());
effectAppenderProducers.put("chooseopponent", new ChooseOpponent());
effectAppenderProducers.put("chooseyesorno", new ChooseYesOrNo());
effectAppenderProducers.put("conditional", new ConditionalEffect());
effectAppenderProducers.put("corruptringbearer", new CorruptRingBearer());

View File

@@ -0,0 +1,34 @@
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.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.logic.actions.CostToEffectAction;
import com.gempukku.lotro.logic.effects.choose.ChooseOpponentEffect;
import com.gempukku.lotro.logic.timing.Effect;
import org.json.simple.JSONObject;
public class ChooseOpponent implements EffectAppenderProducer {
@Override
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(effectObject, "memorize");
final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize");
return new DelayedAppender() {
@Override
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
return new ChooseOpponentEffect(actionContext.getPerformingPlayer()) {
@Override
protected void opponentChosen(String opponentId) {
actionContext.setValueToMemory(memorize, opponentId);
}
};
}
};
}
}

View File

@@ -33,6 +33,10 @@ public class PlayerResolver {
return actionContext.getPerformingPlayer();
};
}
else if (type.toLowerCase(Locale.ROOT).startsWith("frommemory(") && type.endsWith(")")) {
String memory = type.substring(type.indexOf("(") + 1, type.lastIndexOf(")"));
return (actionContext) -> actionContext.getValueFromMemory(memory);
}
throw new InvalidCardDefinitionException("Unable to resolve player resolver of type: " + type);
}
}

View File

@@ -423,6 +423,26 @@ public class ValueResolver {
return result;
};
} else if (type.equalsIgnoreCase("max")) {
FieldUtils.validateAllowedFields(object, "first", "second");
ValueSource first = resolveEvaluator(object.get("first"), environment);
ValueSource second = resolveEvaluator(object.get("second"), environment);
return actionContext -> (game, cardAffected) ->
Math.max(
first.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null),
second.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null)
);
} else if (type.equalsIgnoreCase("min")) {
FieldUtils.validateAllowedFields(object, "first", "second");
ValueSource first = resolveEvaluator(object.get("first"), environment);
ValueSource second = resolveEvaluator(object.get("second"), environment);
return actionContext -> (game, cardAffected) ->
Math.min(
first.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null),
second.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null)
);
} else if (type.equalsIgnoreCase("forEachToken")) {
FieldUtils.validateAllowedFields(object, "filter", "culture");

View File

@@ -0,0 +1,20 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.logic.modifiers.AllyParticipatesInArcheryFireModifier;
import org.json.simple.JSONObject;
public class AllyCanParticipateInArcheryFire implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "filter");
final String filter = FieldUtils.getString(object.get("filter"), "filter");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
return actionContext -> new AllyParticipatesInArcheryFireModifier(actionContext.getSource(),
filterableSource.getFilterable(actionContext));
}
}

View File

@@ -0,0 +1,23 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
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.ModifierSource;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.logic.modifiers.CantTakeArcheryWoundsModifier;
import org.json.simple.JSONObject;
public class CantTakeArcheryWounds implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "filter");
final String filter = FieldUtils.getString(object.get("filter"), "filter");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
return actionContext -> new CantTakeArcheryWoundsModifier(actionContext.getSource(),
filterableSource.getFilterable(actionContext));
}
}

View File

@@ -0,0 +1,23 @@
package com.gempukku.lotro.cards.build.field.effect.modifier;
import com.gempukku.lotro.cards.build.*;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
import com.gempukku.lotro.logic.modifiers.FPCulturesSpotCountModifier;
import org.json.simple.JSONObject;
public class FPCultureSpot implements ModifierSourceProducer {
@Override
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "requires", "amount");
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires");
final ValueSource amount = ValueResolver.resolveEvaluator(object.get("amount"), environment);
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
return actionContext -> new FPCulturesSpotCountModifier(actionContext.getSource(),
new RequirementCondition(requirements, actionContext),
amount.getEvaluator(actionContext));
}
}

View File

@@ -18,6 +18,7 @@ public class ModifierSourceFactory {
modifierProducers.put("addnotwilightforcompanionmove", new AddNoTwilightForCompanionMove());
modifierProducers.put("addsignet", new AddSignet());
modifierProducers.put("allycanparticipateinarcheryfireandskirmishes", new AllyCanParticipateInArcheryFireAndSkirmishes());
modifierProducers.put("allycanparticipateinarcheryfire", new AllyCanParticipateInArcheryFire());
modifierProducers.put("allycanparticipateinskirmishes", new AllyCanParticipateInSkirmishes());
modifierProducers.put("archerytotal", new ArcheryTotal());
modifierProducers.put("cancelkeywordbonusfrom", new CancelKeywordBonusFrom());
@@ -40,11 +41,13 @@ public class ModifierSourceFactory {
modifierProducers.put("cantpreventwounds", new CantPreventWounds());
modifierProducers.put("cantremoveburdens", new CantRemoveBurdens());
modifierProducers.put("cantreplacesite", new CantReplaceSite());
modifierProducers.put("canttakearcherywounds", new CantTakeArcheryWounds());
modifierProducers.put("canttakemorewoundsthan", new CantTakeMoreWoundsThan());
modifierProducers.put("canttakewounds", new CantTakeWounds());
modifierProducers.put("cantusespecialabilities", new CantUseSpecialAbilities());
modifierProducers.put("classspot", new ClassSpot());
modifierProducers.put("extracosttoplay", new ExtraCostToPlay());
modifierProducers.put("fpculturespot", new FPCultureSpot());
modifierProducers.put("fpusesresinsteadofstr", new FPUsesResInsteadOfStr());
modifierProducers.put("fpusesvitinsteadofstr", new FPUsesVitInsteadOfStr());
modifierProducers.put("hastomoveifable", new HasToMoveIfAble());

View File

@@ -13,7 +13,7 @@ public class HaveInitiative implements RequirementProducer {
public Requirement getPlayRequirement(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(object, "side");
Side side = FieldUtils.getEnum(Side.class, object.get("side"), "side");
Side side = FieldUtils.getSide(object.get("side"), "side");
return (actionContext) -> PlayConditions.hasInitiative(actionContext.getGame(), side);
}

View File

@@ -12,7 +12,7 @@ public class LosesInitiative implements TriggerCheckerProducer {
@Override
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "side");
final Side side = FieldUtils.getEnum(Side.class, value.get("side"), "side");
final Side side = FieldUtils.getSide(value.get("side"), "side");
return new TriggerChecker() {
@Override

View File

@@ -2,25 +2,27 @@ package com.gempukku.lotro.logic.modifiers;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator;
public class FPCulturesSpotCountModifier extends AbstractModifier {
private final String _playerId;
private final int _modifier;
private final Evaluator _valueEvaluator;
public FPCulturesSpotCountModifier(PhysicalCard source, String playerId, int modifier) {
this(source, playerId, null, modifier);
public FPCulturesSpotCountModifier(PhysicalCard source, int value) {
this(source, null, new ConstantEvaluator(value));
}
public FPCulturesSpotCountModifier(PhysicalCard source, String playerId, Condition condition, int modifier) {
public FPCulturesSpotCountModifier(PhysicalCard source, Condition condition, int value) {
this(source, condition, new ConstantEvaluator(value));
}
public FPCulturesSpotCountModifier(PhysicalCard source, Condition condition, Evaluator value) {
super(source, "Modifies FP culture count", null, condition, ModifierEffect.SPOT_MODIFIER);
_playerId = playerId;
_modifier = modifier;
_valueEvaluator = value;
}
@Override
public int getFPCulturesSpotCountModifier(LotroGame game, String playerId) {
if (playerId.equals(_playerId))
return _modifier;
return 0;
return _valueEvaluator.evaluateExpression(game, null);
}
}