Fixes for the last Hobbit Draft Game expansion
This commit is contained in:
@@ -175,14 +175,10 @@
|
||||
"culture": "dwarven",
|
||||
"filter": "self"
|
||||
},
|
||||
"limitPerPhase": 1,
|
||||
"effect": {
|
||||
"type": "putCardsFromDiscardIntoHand",
|
||||
"filter": "choose(culture(dwarven),event,maxTwilight(1),minTwilight(1))",
|
||||
"count": {
|
||||
"type": "cardPhaseLimit",
|
||||
"limit": 1,
|
||||
"amount": 1
|
||||
}
|
||||
"filter": "choose(culture(dwarven),event,minTwilight(1),maxTwilight(1))",
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -215,7 +211,8 @@
|
||||
},
|
||||
"effect": {
|
||||
"type": "putCardsFromHandOnBottomOfDeck"
|
||||
}
|
||||
},
|
||||
"limitPerTurn": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -821,7 +818,7 @@
|
||||
}
|
||||
},
|
||||
"33_53": {
|
||||
"title": "*Master Worryword",
|
||||
"title": "*Master Worrywort",
|
||||
"subtitle": "Hobbit Farmer",
|
||||
"culture": "shire",
|
||||
"cost": 1,
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
"type": "modifier",
|
||||
"modifier": {
|
||||
"type": "cancelStrengthBonusTo",
|
||||
"filter": "companion,culture(dwarven),inSkirmishAgainst(self)",
|
||||
"filter": "companion,culture(dwarven)",
|
||||
"from": "weapon"
|
||||
}
|
||||
}
|
||||
@@ -311,6 +311,10 @@
|
||||
"type": "endOfPhase",
|
||||
"phase": "shadow"
|
||||
},
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "culture(gundabad),orc"
|
||||
},
|
||||
"effect": {
|
||||
"type": "heal",
|
||||
"filter": "choose(culture(gundabad),orc)"
|
||||
@@ -319,28 +323,51 @@
|
||||
{
|
||||
"type": "activated",
|
||||
"phase": "assignment",
|
||||
"condition": {
|
||||
"type": "location",
|
||||
"filter": "forest"
|
||||
},
|
||||
"condition": [
|
||||
{
|
||||
"type": "location",
|
||||
"filter": "forest"
|
||||
},
|
||||
{
|
||||
"type": "canSpot",
|
||||
"filter": "culture(gundabad),orc"
|
||||
}
|
||||
],
|
||||
"effect": [
|
||||
{
|
||||
"type": "chooseActiveCards",
|
||||
"filter": "choose(culture(gundabad),orc,assignableToSkirmishAgainst(name(Bilbo)))",
|
||||
"text": "Choose minion to assign to Bilbo",
|
||||
"filter": "choose(culture(gundabad),orc,assignableToSkirmishAgainst(name(Bilbo)))",
|
||||
"memorize": "chosenMinion"
|
||||
},
|
||||
{
|
||||
"type": "optional",
|
||||
"player": "fp",
|
||||
"text": "Would you like to add a doubt to assign {chosenMinion} to a companion?",
|
||||
"effect": [
|
||||
{
|
||||
"type": "addBurdens"
|
||||
},
|
||||
{
|
||||
"type": "assignFpCharacterToSkirmish",
|
||||
"player": "fp",
|
||||
"fpCharacter": "choose(companion)",
|
||||
"against": "choose(memory(chosenMinion))"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "preventable",
|
||||
"player": "fp",
|
||||
"text": "Would you like to add a doubt to assign {chosenMinion} to a companion?",
|
||||
"text": "assignFpCharacterToSkirmish doesn't work here for some reason, so this cost registers as unable to be attempted and the effect assigns the minion if the FP passed on the optional above",
|
||||
"cost": [
|
||||
{
|
||||
"type": "addBurdens"
|
||||
},
|
||||
{
|
||||
"type": "assignFpCharacterToSkirmish",
|
||||
"fpCharacter": "choose(companion,notAssignedToSkirmish)",
|
||||
"player": "shadowPlayer",
|
||||
"fpCharacter": "choose(companion)",
|
||||
"against": "choose(memory(chosenMinion))"
|
||||
}
|
||||
],
|
||||
@@ -396,17 +423,6 @@
|
||||
"type": "condition",
|
||||
"keyword": "support area",
|
||||
"effects": [
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "aboutToDiscard",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": {
|
||||
"type": "putStackedCardsIntoHand",
|
||||
"on": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
"phase": "regroup",
|
||||
@@ -425,6 +441,46 @@
|
||||
"filter": "choose(lowestStrength(culture(dwarven),companion))",
|
||||
"where": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "trigger",
|
||||
"trigger": {
|
||||
"type": "aboutToDiscard",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "memorizeStacked",
|
||||
"on": "self",
|
||||
"memory": "jailedCards"
|
||||
},
|
||||
{
|
||||
"type": "addTrigger",
|
||||
"trigger": {
|
||||
"type": "discarded",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "choice",
|
||||
"player": "fp",
|
||||
"texts": [
|
||||
"The Free Peoples player takes stacked cards into hand"
|
||||
],
|
||||
"effects": [
|
||||
{
|
||||
"type": "putCardsFromDiscardIntoHand",
|
||||
"filter": "choose(memory(jailedCards))",
|
||||
"count": {
|
||||
"type": "forEachInMemory",
|
||||
"memory": "jailedCards"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -446,9 +502,13 @@
|
||||
"type": "modifyStrength",
|
||||
"filter": "choose(minion)",
|
||||
"amount": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "culture(elven)",
|
||||
"limit": 3
|
||||
"type": "cardAffectedLimitPerPhase",
|
||||
"limit": 3,
|
||||
"source": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "culture(elven)",
|
||||
"limit": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -515,6 +575,7 @@
|
||||
"trigger": {
|
||||
"type": "aboutToDiscard",
|
||||
"filter": "another,condition,or(culture(gundabad),culture(mirkwood))",
|
||||
"source": "side(free people)"
|
||||
},
|
||||
"cost": {
|
||||
"type": "discard",
|
||||
@@ -533,7 +594,41 @@
|
||||
"cost": 1,
|
||||
"type": "possession",
|
||||
"vitality": 1,
|
||||
"target": "or(troll,giant)"
|
||||
"target": "or(troll,giant)",
|
||||
"effects": {
|
||||
"type": "activated",
|
||||
"phase": "archery",
|
||||
"cost": {
|
||||
"type": "discard",
|
||||
"filter": "self"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "chooseANumber",
|
||||
"from": 0,
|
||||
"to": 3,
|
||||
"memorize": "chosenNumber"
|
||||
},
|
||||
{
|
||||
"type": "revealRandomCardsFromHand",
|
||||
"forced": false,
|
||||
"count": {
|
||||
"type": "fromMemory",
|
||||
"memory": "chosenNumber"
|
||||
},
|
||||
"memorize": "revealedCards"
|
||||
},
|
||||
{
|
||||
"type": "modifyArcheryTotal",
|
||||
"side": "shadow",
|
||||
"amount": {
|
||||
"type": "forEachMatchingInMemory",
|
||||
"memory": "revealedCards",
|
||||
"filter": "side(shadow)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"33_36": {
|
||||
"title": "Bridging Troll",
|
||||
@@ -587,10 +682,18 @@
|
||||
"count": 1,
|
||||
"memorize": "revealedCard"
|
||||
},
|
||||
{
|
||||
"type": "memorizeNumber",
|
||||
"memory": "cardTwilight",
|
||||
"amount": {
|
||||
"type": "twilightCostInMemory",
|
||||
"memory": "revealedCard"
|
||||
}
|
||||
}
|
||||
{
|
||||
"type": "discard",
|
||||
"player": "fp",
|
||||
"filter": "choose(side(free people),minTwilight(memory(revealedCard)),maxTwilight(memory(revealedCard)),not(companion))"
|
||||
"filter": "choose(side(free people),minTwilight(memory(cardTwilight)),maxTwilight(memory(cardTwilight)),not(companion))"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -667,11 +770,11 @@
|
||||
"33_40": {
|
||||
"title": "Goblin Bow",
|
||||
"culture": "moria",
|
||||
"cost": 1,
|
||||
"cost": 0,
|
||||
"type": "possession",
|
||||
"possession": "ranged weapon",
|
||||
"vitality": 1,
|
||||
"target": "orc",
|
||||
"target": "culture(moria),orc",
|
||||
"effects": [
|
||||
{
|
||||
"type": "modifier",
|
||||
@@ -703,10 +806,7 @@
|
||||
"type": "playCardFromDiscard",
|
||||
"filter": "choose(culture(moria),archer)"
|
||||
},
|
||||
"condition": {
|
||||
"type": "perTurnLimit",
|
||||
"limit": 1
|
||||
}
|
||||
"limitPerTurn": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -738,7 +838,7 @@
|
||||
"culture": "moria",
|
||||
"cost": 5,
|
||||
"type": "minion",
|
||||
"race": "dragon",
|
||||
"race": "giant",
|
||||
"strength": 11,
|
||||
"vitality": 3,
|
||||
"site": 4,
|
||||
@@ -807,7 +907,7 @@
|
||||
"culture": "moria",
|
||||
"cost": 7,
|
||||
"type": "minion",
|
||||
"race": "dragon",
|
||||
"race": "giant",
|
||||
"strength": 14,
|
||||
"vitality": 4,
|
||||
"site": 4,
|
||||
@@ -839,6 +939,7 @@
|
||||
{
|
||||
"type": "revealrandomcardsfromhand",
|
||||
"forced": false,
|
||||
"hand": "fp",
|
||||
"memorize": "revealedCard",
|
||||
},
|
||||
{
|
||||
@@ -909,7 +1010,7 @@
|
||||
"effect": {
|
||||
"type": "preventable",
|
||||
"player": "fp",
|
||||
"text": "Would you like to prevent adding a doubt to prevent wound to character skirmishing The Great Goblin?",
|
||||
"text": "Would you like to add a doubt to prevent a wound to the character skirmishing The Great Goblin?",
|
||||
"cost": {
|
||||
"type": "addBurdens"
|
||||
},
|
||||
@@ -965,7 +1066,7 @@
|
||||
"phase": "shadow"
|
||||
},
|
||||
"effect": {
|
||||
"type": "putCardsFromDeckIntoHand",
|
||||
"type": "putCardsFromDiscardIntoHand",
|
||||
"filter": "choose(or(culture(gundabad),culture(sauron)),event)"
|
||||
}
|
||||
}
|
||||
@@ -1002,9 +1103,12 @@
|
||||
"effect": {
|
||||
"type": "drawCards",
|
||||
"count": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "ally",
|
||||
"limit": 3
|
||||
"type": "cardPhaseLimit",
|
||||
"limit": 3,
|
||||
"amount": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "ally"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1042,9 +1146,13 @@
|
||||
"effect": {
|
||||
"type": "drawCards",
|
||||
"count": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "unique,minion",
|
||||
"limit": 3
|
||||
"type": "cardPhaseLimit",
|
||||
"limit": 3,
|
||||
"amount": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "unique,minion",
|
||||
"limit": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1180,6 +1288,7 @@
|
||||
},
|
||||
{
|
||||
"type": "optional",
|
||||
"player": "fp",
|
||||
"text": "Would you like to take a Dwarven or Shire event into hand from discard?",
|
||||
"effect": {
|
||||
"type": "putCardsFromDiscardIntoHand",
|
||||
|
||||
@@ -12,13 +12,17 @@
|
||||
"type": "startOfPhase",
|
||||
"phase": "fellowship"
|
||||
},
|
||||
"condition": {
|
||||
"type": "isSide",
|
||||
"side": "free people"
|
||||
},
|
||||
"cost": {
|
||||
"type": "addTwilight",
|
||||
"amount": 2
|
||||
},
|
||||
"effect": {
|
||||
"type": "putCardsFromDeckIntoHand",
|
||||
"filter": "choose(culture(shire))"
|
||||
"filter": "choose(or(culture(gandalf),culture(shire)))"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -36,6 +40,10 @@
|
||||
"type": "startOfPhase",
|
||||
"phase": "fellowship"
|
||||
},
|
||||
"condition": {
|
||||
"type": "isSide",
|
||||
"side": "free people"
|
||||
},
|
||||
"effect": {
|
||||
"type": "playCardFromDrawDeck",
|
||||
"filter": "choose(or(possession,artifact))"
|
||||
@@ -77,56 +85,82 @@
|
||||
"effect": [
|
||||
{
|
||||
"type": "chooseYesOrNo",
|
||||
"player": "fp",
|
||||
"text": "Would you like to transfer a Dwarven follower to a Dwarven companion for free?",
|
||||
"memorize": "choice"
|
||||
},
|
||||
{
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "memoryIs",
|
||||
"memory": "choice",
|
||||
"value": "yes"
|
||||
},
|
||||
"effect": [
|
||||
"type": "choice",
|
||||
"player": "fp",
|
||||
"texts": [
|
||||
"This is just a hack to allow this card to break the rules"
|
||||
],
|
||||
"effects": [
|
||||
{
|
||||
"type": "transfer",
|
||||
"filter": "choose(culture(dwarven),follower,zone(support))",
|
||||
"where": "choose(culture(dwarven),companion)"
|
||||
},
|
||||
{
|
||||
"type": "duplicate",
|
||||
"amount": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "follower,culture(dwarven),zone(support)",
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "memoryIs",
|
||||
"memory": "choice",
|
||||
"value": "yes"
|
||||
},
|
||||
"effect": {
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "memoryIs",
|
||||
"memory": "choice",
|
||||
"value": "yes"
|
||||
"effect": [
|
||||
{
|
||||
"type": "transfer",
|
||||
"filter": "choose(culture(dwarven),follower)",
|
||||
"where": "choose(culture(dwarven),companion)",
|
||||
"memorizeTransferred": "transferredFollowers"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "chooseYesOrNo",
|
||||
"text": "Would you like to transfer another follower for free?",
|
||||
"memorize": "choice"
|
||||
{
|
||||
"type": "duplicate",
|
||||
"amount": {
|
||||
"type": "forEachYouCanSpot",
|
||||
"filter": "follower,culture(dwarven),not(memory(transferredFollowers))",
|
||||
},
|
||||
{
|
||||
"effect": {
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "memoryIs",
|
||||
"memory": "choice",
|
||||
"value": "yes"
|
||||
},
|
||||
"effect": {
|
||||
"type": "transfer",
|
||||
"filter": "choose(culture(dwarven),follower,zone(support))",
|
||||
"where": "choose(culture(dwarven),companion)"
|
||||
}
|
||||
"effect": [
|
||||
{
|
||||
"type": "chooseYesOrNo",
|
||||
"text": "Would you like to transfer another follower for free?",
|
||||
"memorize": "choice"
|
||||
},
|
||||
{
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "memoryIs",
|
||||
"memory": "choice",
|
||||
"value": "yes"
|
||||
},
|
||||
"effect": [
|
||||
{
|
||||
"type": "transfer",
|
||||
"filter": "choose(culture(dwarven),follower,not(memory(transferredFollowers)))",
|
||||
"where": "choose(culture(dwarven),companion)",
|
||||
"memorizeTransferred": "anotherTransferredFollower"
|
||||
},
|
||||
{
|
||||
"type": "memorize",
|
||||
"filter": "or(memory(transferredFollowers),memory(anotherTransferredFollower))",
|
||||
"memory": "transferredFollowers"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "addModifier",
|
||||
"modifier": {
|
||||
"type": "cantBeTransferred",
|
||||
"filter": "memory(transferredFollowers)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ var CardFilter = Class.extend({
|
||||
this.setSelect = $("<select style='width: 130px; font-size: 80%;'>"
|
||||
+ "<option value='0-32'>All Sets</option>"
|
||||
+ "<option value='0-19'>Official Sets</option>"
|
||||
+ "<option value='30-32'>The Hobbit Sets</option>"
|
||||
+ "<option value='30-33'>The Hobbit Sets</option>"
|
||||
+ "<option value='50-69'>Player's Council Errata</option>"
|
||||
+ "<option value='101-150'>Player's Council VSets</option>"
|
||||
+ "<option value='50-69,101-150'>All Player's Council Cards</option>"
|
||||
@@ -167,6 +167,7 @@ var CardFilter = Class.extend({
|
||||
+ "<option value='30'>30 - The Hobbit: Main Deck</option>"
|
||||
+ "<option value='31'>31 - The Hobbit: Expansion 1</option>"
|
||||
+ "<option value='32'>32 - The Hobbit: Expansion 2</option>"
|
||||
+ "<option value='33'>33 - The Hobbit: Expansion 3</option>"
|
||||
+ "<option disabled>----------</option>"
|
||||
+ "<option value='71-73'>PLAYTEST - Fellowship Block (PC)</option>"
|
||||
+ "<option value='71-80'>PLAYTEST - Movie Block (PC)</option>"
|
||||
@@ -320,6 +321,7 @@ var CardFilter = Class.extend({
|
||||
+ "<option value='WRAITH'>Wraith</option>"
|
||||
+ "<option value='DRAGON'>Dragon</option>"
|
||||
+ "<option value='EAGLE'>Eagle</option>"
|
||||
+ "<option value='GIANT'>Giant</option>"
|
||||
+ "<option value='WARG'>Warg</option>"
|
||||
+ "</select>");
|
||||
combos.append(" <select id ='itemClass' style='font-size: 80%'>"
|
||||
|
||||
@@ -41,10 +41,10 @@ var hobbit = {
|
||||
'30_40': 'https://lotrtcgwiki.com/images/HDG30040.jpg',
|
||||
'30_41': 'https://lotrtcgwiki.com/images/HDG30041.jpg',
|
||||
'30_42': 'https://lotrtcgwiki.com/images/HDG30042.jpg',
|
||||
'30_43': 'https://lotrtcgwiki.com/images/HDG30043.jpg',
|
||||
'30_44': 'https://lotrtcgwiki.com/images/HDG30044.jpg',
|
||||
'30_45': 'https://lotrtcgwiki.com/images/HDG30045.jpg',
|
||||
'30_46': 'https://lotrtcgwiki.com/images/HDG30046.jpg',
|
||||
'30_43': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Bilbo.png',
|
||||
'30_44': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Bilbo_Collector_of_Treasures.png',
|
||||
'30_45': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Bilbo_Master_in_Riddles.png',
|
||||
'30_46': 'http://hobbitdraftgame.free.fr/Cards_Good_def/New_Bilbo_Reliable_Companion.png',
|
||||
'30_47': 'https://lotrtcgwiki.com/images/HDG30047.jpg',
|
||||
'30_48': 'https://lotrtcgwiki.com/images/HDG30048.jpg',
|
||||
'30_49': 'https://lotrtcgwiki.com/images/HDG30049.jpg',
|
||||
|
||||
@@ -1,61 +1,61 @@
|
||||
33S1
|
||||
33S2
|
||||
33S3
|
||||
33S4
|
||||
33S5
|
||||
33S6
|
||||
33S7
|
||||
33S8
|
||||
33S9
|
||||
33S10
|
||||
33S11
|
||||
33S12
|
||||
33S13
|
||||
33S14
|
||||
33S15
|
||||
33S16
|
||||
33S17
|
||||
33S18
|
||||
33S19
|
||||
33S20
|
||||
33S21
|
||||
33S22
|
||||
33S23
|
||||
33S24
|
||||
33S25
|
||||
33S26
|
||||
33S27
|
||||
33S28
|
||||
33S29
|
||||
33S30
|
||||
33S31
|
||||
33S32
|
||||
33S33
|
||||
33S34
|
||||
33S35
|
||||
33S36
|
||||
33S37
|
||||
33S38
|
||||
33S39
|
||||
33S40
|
||||
33S41
|
||||
33S42
|
||||
33S43
|
||||
33S44
|
||||
33S45
|
||||
33S46
|
||||
33S47
|
||||
33S48
|
||||
33S49
|
||||
33S50
|
||||
33S51
|
||||
33S52
|
||||
33S53
|
||||
33S54
|
||||
33S55
|
||||
33S56
|
||||
33S57
|
||||
33S58
|
||||
33S59
|
||||
33S60
|
||||
33S61
|
||||
33X1
|
||||
33X2
|
||||
33R3
|
||||
33X4
|
||||
33R5
|
||||
33R6
|
||||
33X7
|
||||
33X8
|
||||
33R9
|
||||
33R10
|
||||
33R11
|
||||
33X12
|
||||
33R13
|
||||
33R14
|
||||
33X15
|
||||
33X16
|
||||
33R17
|
||||
33X18
|
||||
33X19
|
||||
33X20
|
||||
33X21
|
||||
33X22
|
||||
33R23
|
||||
33U24
|
||||
33U25
|
||||
33U26
|
||||
33U27
|
||||
33U28
|
||||
33U29
|
||||
33U30
|
||||
33U31
|
||||
33U32
|
||||
33R33
|
||||
33U34
|
||||
33U35
|
||||
33R36
|
||||
33R37
|
||||
33C38
|
||||
33C39
|
||||
33U40
|
||||
33U41
|
||||
33C42
|
||||
33X43
|
||||
33U44
|
||||
33C45
|
||||
33U46
|
||||
33C47
|
||||
33U48
|
||||
33C49
|
||||
33U50
|
||||
33U51
|
||||
33R52
|
||||
33R53
|
||||
33R54
|
||||
33X55
|
||||
33X56
|
||||
33X57
|
||||
33X58
|
||||
33X59
|
||||
33X60
|
||||
33R61
|
||||
|
||||
@@ -34,10 +34,11 @@ public class EffectAppenderFactory {
|
||||
effectAppenderProducers.put("choice", new Choice());
|
||||
effectAppenderProducers.put("chooseactivecards", new ChooseActiveCards());
|
||||
effectAppenderProducers.put("chooseakeyword", new ChooseAKeyword());
|
||||
effectAppenderProducers.put("chooseanumber", new ChooseANumber());
|
||||
effectAppenderProducers.put("choosearace", new ChooseARace());
|
||||
effectAppenderProducers.put("chooseandaddtwilight", new ChooseAndAddTwilight());
|
||||
effectAppenderProducers.put("chooseandremovetokens", new ChooseAndRemoveTokens());
|
||||
effectAppenderProducers.put("chooseandremovetwilight", new ChooseAndRemoveTwilight());
|
||||
effectAppenderProducers.put("choosearace", new ChooseARace());
|
||||
effectAppenderProducers.put("choosecardsfromdiscard", new ChooseCardsFromDiscard());
|
||||
effectAppenderProducers.put("choosehowmanyburdenstospot", new ChooseHowManyBurdensToSpot());
|
||||
effectAppenderProducers.put("choosehowmanytospot", new ChooseHowManyToSpot());
|
||||
@@ -72,6 +73,7 @@ public class EffectAppenderFactory {
|
||||
effectAppenderProducers.put("makeselfringbearer", new MakeSelfRingBearer());
|
||||
effectAppenderProducers.put("memorize", new MemorizeActive());
|
||||
effectAppenderProducers.put("memorizenumber", new MemorizeNumber());
|
||||
effectAppenderProducers.put("memorizestacked", new MemorizeStacked());
|
||||
effectAppenderProducers.put("modifyarcherytotal", new ModifyArcheryTotal());
|
||||
effectAppenderProducers.put("modifysitenumber", new ModifySiteNumber());
|
||||
effectAppenderProducers.put("modifystrength", new ModifyStrength());
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
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.PlayerSource;
|
||||
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.cards.build.field.effect.appender.resolver.PlayerResolver;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
||||
import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision;
|
||||
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class ChooseANumber implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "player", "text", "from", "to", "memorize");
|
||||
|
||||
final String player = FieldUtils.getString(effectObject.get("player"), "player", "you");
|
||||
final String displayText = FieldUtils.getString(effectObject.get("text"), "text", "Choose a number");
|
||||
final int from = FieldUtils.getInteger(effectObject.get("from"), "from", 0);
|
||||
final int to = FieldUtils.getInteger(effectObject.get("to"), "to", 1);
|
||||
final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize");
|
||||
|
||||
final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment);
|
||||
|
||||
if (memorize == null)
|
||||
throw new InvalidCardDefinitionException("ChooseANumber requires a field to memorize the value");
|
||||
|
||||
return new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
|
||||
return new PlayoutDecisionEffect(actionContext.getPerformingPlayer(),
|
||||
new IntegerAwaitingDecision(1, displayText, from, to) {
|
||||
@Override
|
||||
public void decisionMade(String result) throws DecisionResultInvalidException {
|
||||
actionContext.setValueToMemory(memorize, String.valueOf(getValidatedResult(result)));
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
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.FilterableSource;
|
||||
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.common.Filterable;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class MemorizeStacked implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter", "on", "memory");
|
||||
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter", "any");
|
||||
final String on = FieldUtils.getString(effectObject.get("on"), "on");
|
||||
final String memory = FieldUtils.getString(effectObject.get("memory"), "memory");
|
||||
|
||||
final FilterableSource filterSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
final FilterableSource onFilterSource = environment.getFilterFactory().generateFilter(on, environment);
|
||||
|
||||
return new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
|
||||
return new UnrespondableEffect() {
|
||||
@Override
|
||||
protected void doPlayEffect(LotroGame game) {
|
||||
final Filterable filterable = filterSource.getFilterable(actionContext);
|
||||
final Filterable onFilterable = onFilterSource.getFilterable(actionContext);
|
||||
final Collection<PhysicalCard> cardsWithStack = Filters.filterActive(game, onFilterable);
|
||||
|
||||
List<PhysicalCard> cardsToMemorize = new LinkedList<PhysicalCard>();
|
||||
for (PhysicalCard cardWithStack : cardsWithStack)
|
||||
cardsToMemorize.addAll(Filters.filter(game.getGameState().getStackedCards(cardWithStack), game, filterable));
|
||||
actionContext.setCardMemory(memory, cardsToMemorize);
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -32,7 +32,7 @@ public class PutCardsFromPlayOnBottomOfDeck implements EffectAppenderProducer {
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCardsInHand(filter, valueSource, "_temp", player, player, "Choose cards in play", environment));
|
||||
CardResolver.resolveCards(filter, valueSource, "_temp", player, "Choose cards in play", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
|
||||
@@ -26,20 +26,22 @@ import java.util.List;
|
||||
public class Transfer implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter", "where", "checkTarget");
|
||||
FieldUtils.validateAllowedFields(effectObject, "filter", "where", "checkTarget", "memorizeTransferred", "memorizeTarget");
|
||||
|
||||
final String filter = FieldUtils.getString(effectObject.get("filter"), "filter");
|
||||
final String where = FieldUtils.getString(effectObject.get("where"), "where");
|
||||
final boolean checkTarget = FieldUtils.getBoolean(effectObject.get("checkTarget"), "checkTarget", false);
|
||||
final String memorizeTransferred = FieldUtils.getString(effectObject.get("memorizeTransferred"), "memorizeTransferred", "_temp1");
|
||||
final String memorizeTarget = FieldUtils.getString(effectObject.get("memorizeTarget"), "memorizeTarget", "_temp2");
|
||||
|
||||
MultiEffectAppender result = new MultiEffectAppender();
|
||||
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCard(filter, "_temp1", "you", "Choose card to transfer", environment));
|
||||
CardResolver.resolveCard(filter, memorizeTransferred, "you", "Choose card to transfer", environment));
|
||||
result.addEffectAppender(
|
||||
CardResolver.resolveCards(where,
|
||||
actionContext -> (Filter) (game, physicalCard) -> {
|
||||
final Collection<? extends PhysicalCard> transferCard = actionContext.getCardsFromMemory("_temp1");
|
||||
final Collection<? extends PhysicalCard> transferCard = actionContext.getCardsFromMemory(memorizeTransferred);
|
||||
if (transferCard.isEmpty())
|
||||
return false;
|
||||
final PhysicalCard transferredCard = transferCard.iterator().next();
|
||||
@@ -52,16 +54,16 @@ public class Transfer implements EffectAppenderProducer {
|
||||
|
||||
return actionContext.getGame().getModifiersQuerying().canHaveTransferredOn(game, transferredCard, physicalCard);
|
||||
}, actionContext -> Filters.any,
|
||||
ValueResolver.resolveEvaluator(1, environment), "_temp2", "you", "Choose cards to transfer to", environment));
|
||||
ValueResolver.resolveEvaluator(1, environment), memorizeTarget, "you", "Choose cards to transfer to", environment));
|
||||
result.addEffectAppender(
|
||||
new DelayedAppender() {
|
||||
@Override
|
||||
protected List<? extends Effect> createEffects(boolean cost, CostToEffectAction action, ActionContext actionContext) {
|
||||
final Collection<? extends PhysicalCard> transferCard = actionContext.getCardsFromMemory("_temp1");
|
||||
final Collection<? extends PhysicalCard> transferCard = actionContext.getCardsFromMemory(memorizeTransferred);
|
||||
if (transferCard.isEmpty())
|
||||
return null;
|
||||
|
||||
final Collection<? extends PhysicalCard> transferredToCard = actionContext.getCardsFromMemory("_temp2");
|
||||
final Collection<? extends PhysicalCard> transferredToCard = actionContext.getCardsFromMemory(memorizeTarget);
|
||||
if (transferredToCard.isEmpty())
|
||||
return null;
|
||||
|
||||
|
||||
@@ -178,9 +178,11 @@ public class FilterFactory {
|
||||
return actionContext -> {
|
||||
final Filterable sourceFilterable = filterableSource.getFilterable(actionContext);
|
||||
return (Filter) (game, physicalCard) -> {
|
||||
for (PhysicalCard cardToCompareTo : Filters.filterActive(game, sourceFilterable)) {
|
||||
if (cardToCompareTo.getBlueprint().getTitle().equals(physicalCard.getBlueprint().getTitle()))
|
||||
return true;
|
||||
for (PhysicalCard cardWithStack : Filters.filterActive(game, sourceFilterable)) {
|
||||
for (PhysicalCard stackedCard : game.getGameState().getStackedCards(cardWithStack)) {
|
||||
if (stackedCard.getBlueprint().getTitle().equals(physicalCard.getBlueprint().getTitle()))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
@@ -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.logic.modifiers.CantBeTransferredModifier;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
public class CantBeTransferred implements ModifierSourceProducer {
|
||||
@Override
|
||||
public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(object, "filter", "condition");
|
||||
|
||||
final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("condition"), "condition");
|
||||
final String filter = FieldUtils.getString(object.get("filter"), "filter");
|
||||
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
|
||||
final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment);
|
||||
|
||||
return (actionContext) -> {
|
||||
return new CantBeTransferredModifier(actionContext.getSource(), filterableSource.getFilterable(actionContext), new RequirementCondition(requirements, actionContext));
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@ public class ModifierSourceFactory {
|
||||
modifierProducers.put("cantbediscarded", new CantBeDiscarded());
|
||||
modifierProducers.put("cantbeexerted", new CantBeExerted());
|
||||
modifierProducers.put("cantbeoverwhelmedmultiplier", new CantBeOverwhelmedMultiplier());
|
||||
modifierProducers.put("cantbetransferred", new CantBeTransferred());
|
||||
modifierProducers.put("cantdiscardcardsfromhandortopofdrawdeck", new CantDiscardCardsFromHandOrTopOfDrawDeck());
|
||||
modifierProducers.put("cantheal", new CantHeal());
|
||||
modifierProducers.put("cantlookorrevealhand", new CantLookOrRevealHand());
|
||||
|
||||
Reference in New Issue
Block a user