diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-fp.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-fp.json
index 5c32ffd1b..cc30b432a 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-fp.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-fp.json
@@ -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,
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json
index 436620cd9..1d8e953d2 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-shadow.json
@@ -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",
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-sites.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-sites.json
index edeacc09b..f0d996da4 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-sites.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set33/set33-sites.json
@@ -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)"
+ }
+ }
+ ]
}
]
}
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cardFilter.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cardFilter.js
index 784afeaa1..70af73f92 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cardFilter.js
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cardFilter.js
@@ -109,7 +109,7 @@ var CardFilter = Class.extend({
this.setSelect = $("");
combos.append("