Finished the rest of the 2022 Yuletide Errata
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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: {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user