Merge branch 'master' into card-dev

This commit is contained in:
Christian 'ketura' McCarty
2021-12-24 14:09:44 -06:00
19 changed files with 213 additions and 27 deletions

View File

@@ -225,4 +225,50 @@
}
]
},
"78_102": {
"side": "shadow",
"site": 5,
"cost": 9,
"race": "Troll",
"strength": 16,
"culture": "Sauron",
"vitality": 4,
"title": "Great Hill Troll",
"type": "minion",
"keyword": [
"Fierce",
"Besieger"
],
"effects": [
{
"type": "modifyOwnCost",
"amount": {
"type": "forEachYouCanSpot",
"filter": "controlledsite"
},
},
{
"type": "trigger",
"optional":true,
"trigger": {
"type": "played",
"filter": "self"
},
"condition": [
{
"type": "location",
"filter": "siteNumber(5-9),siteBlock(king)"
},
{
"type": "canspot",
"filter": "engine"
}
],
"effect": {
"type": "discard",
"filter": "choose(condition,side(free people))"
}
}
]
},
}

View File

@@ -30,7 +30,6 @@
"amount": {
"type": "forEachInDiscard",
"filter": "culture(elven),event",
"limit": 4,
"multiplier": -1
}
},

View File

@@ -103,7 +103,7 @@
"phase": "maneuver",
"cost": {
"type": "removetokens",
"count": 1,
"count": 3,
"culture": "gondor",
"filter": "self"
},
@@ -117,7 +117,8 @@
},
"effect": {
"type": "cantBeAssignedToSkirmish",
"filter": "choose(minion)"
"filter": "choose(minion)",
"until": "start(regroup)"
}
}
},

View File

@@ -201,6 +201,7 @@
],
"cost": {
"type": "discardStackedCards",
"on": "self",
"count": {
"type": "range",
"from": 1,
@@ -230,6 +231,10 @@
"type": "condition",
"target": "companion,signet(aragorn),not(name(Aragorn))",
"strength": 2,
"condition": {
"type": "canSpot",
"filter": "name(aragorn)"
},
"effects": {
"type": "trigger",
"trigger": {

View File

@@ -179,6 +179,7 @@
"effects": [
{
"type": "trigger",
"optional": true,
"trigger": {
"type": "winsSkirmish",
"filter": "and(twilight,nazgul)"

View File

@@ -32,7 +32,7 @@
"151_45": {
"title": "Gaze Of The Eye",
"title": "*Gaze Of The Eye",
"culture": "sauron",
"cost": 1,
"type": "condition",
@@ -42,7 +42,7 @@
"type": "activatedTrigger",
"trigger": {
"type": "abouttodiscard",
"filter": "culture(sauron),condition"
"filter": "another,culture(sauron),condition"
},
"cost": {
"type": "removeburdens",

View File

@@ -84,6 +84,7 @@
"type": "site",
"site": 4,
"block": "fellowship",
"keyword": "underground",
"direction": "left",
"effects": {
"type": "modifier",
@@ -102,6 +103,7 @@
"type": "site",
"site": 6,
"block": "fellowship",
"keyword": "forest",
"direction": "left",
"effects": {
"type": "trigger",
@@ -125,6 +127,7 @@
"type": "site",
"site": 7,
"block": "fellowship",
"keyword": "river",
"direction": "left",
"effects": {
"type": "modifier",
@@ -145,6 +148,7 @@
"type": "site",
"site": 8,
"block": "fellowship",
"keyword": "river",
"direction": "left",
"effects": {
"type": "trigger",
@@ -173,6 +177,7 @@
"type": "site",
"site": 9,
"block": "fellowship",
"keyword": "forest",
"direction": "left",
"effects": [
{

View File

@@ -52,7 +52,7 @@
"type": "trigger",
"optional": true,
"trigger": {
"type": "assignedToSkirmish",
"type": "assignedAgainst",
"side": "free people",
"filter": "self",
"against": "companion",
@@ -86,7 +86,7 @@
"type": "trigger",
"optional": true,
"trigger": {
"type": "assignedToSkirmish",
"type": "assignedAgainst",
"side": "free people",
"filter": "self",
"against": "companion"
@@ -118,7 +118,7 @@
"type": "trigger",
"optional": true,
"trigger": {
"type": "assignedToSkirmish",
"type": "assignedAgainst",
"side": "free people",
"filter": "self",
"against": "companion"

View File

@@ -1459,7 +1459,7 @@
{
"type": "trigger",
"trigger": {
"type": "assignedToSkirmish",
"type": "assignedAgainst",
"filter": "self",
"memorizeAgainst": "against"
},

View File

@@ -800,7 +800,7 @@
"effects": {
"type": "trigger",
"trigger": {
"type": "assignedToSkirmish",
"type": "assignedAgainst",
"filter": "self",
"against": "companion",
"memorizeAgainst": "assignedAgainst"

View File

@@ -554,7 +554,7 @@
"effects": {
"type": "responseEvent",
"trigger": {
"type": "assignedToSkirmish",
"type": "assignedAgainst",
"side": "free people",
"filter": "hobbit",
"against": "nazgul",

View File

@@ -1,6 +1,28 @@
<pre style="font-size:80%">
<b>Most recent update</b>
<b>2021 December 22 - A</b>
- Fixed I Would Have Gone With You to the End (V1_23) permitting the use of any stacked cards for its ability.
- Fixed Gaze of the Eye's image not showing the uniqueness dot.
- Fixed Desperate Defense of the Ring (1R244) triggering each time minions are added to that companion's skirmish, instead of once per total assignment.
- Due to the above fix, several other cards also had their underlying code for assignment triggers affected.
If you see any issues with cards that trigger upon being assigned (such as the set 16 wraiths), please let us know!
<b>2021 December 21</b>
- NEW ERRATA: Great Hill Troll (8C102).
Twilight Cost: 9 -> 10
Game Text:
Besieger. Fierce.
The twilight cost of this minion is -1 for each site you control
When you play this minion at sites 5K to 9K, you may spot an engine to discard a Free Peoples condition.
- Modified Gaze of the Eye(V1_45) to be unique.
- Fixed The Faithful Stone (18R50) errata pulling 1 instead of 3 tokens, and the unassign modifier not lasting until regroup.
- Fixed Cirdan, the Shipwright (10R8) errata limiting his effect to at most -4 (should be unlimited).
- Fixed all Set V1 site cards missing their keywords (most importantly, Moria Crossroads not having underground).
- Fixed You Have My Sword (V1_24) not spotting Aragorn as a requirement.
- Fixed Walks in Twilight not being optional.
<b>2021 December 20 - B</b>
- Fixed a game crash regarding new functionality added for Crebain Flock (V1_25).

View File

@@ -220,6 +220,7 @@ var PCCards = {
'78_51': 'https://i.lotrtcgpc.net/errata/balancing/78_051.jpg',
'78_57': 'https://i.lotrtcgpc.net/errata/balancing/78_057.jpg',
'78_59': 'https://i.lotrtcgpc.net/errata/balancing/78_059.jpg',
'78_102': 'https://i.lotrtcgpc.net/errata/balancing/78_102.jpg',
'78_103': 'https://i.lotrtcgpc.net/errata/balancing/78_103.jpg',
'80_8': 'https://i.lotrtcgpc.net/errata/balancing/80_008.jpg',
@@ -236,6 +237,31 @@ var PCCards = {
'88_112': 'https://i.lotrtcgpc.net/errata/balancing/88_112.jpg',
'89_38': 'https://i.lotrtcgpc.net/errata/balancing/89_038.jpg',
// Christmas 2021 Promos
//Holiday Boromir, Son of Denethor
'1_370':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_MW_01097.jpg',
//Holiday Aragorn, Ranger of the North
'1_371':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_MW_01089.jpg',
//Legolas, Greenleaf MW
'1_372':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_MW_01050.jpg',
//Goblin Armory MW
'1_373':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_MW_01173.jpg',
//Durin III, Dwarven Lord MW
'9_55':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_MW_09003.jpg',
//Eowyn, Lady of Ithilien MW
'10_124':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_MW_10072.jpg',
//Halbarad, Ranger of the North MW
'14_16':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_MW_14009.jpg',
//Gandalf, Leader of the Company MW
'11_269':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_MW_11033.jpg',
//Hobbit Sword FA
'1_374':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_FA_01299.jpg',
//Anduril, Flame of the West FA
'7_366':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_FA_07079.jpg',
//Pavice FA
'11_270':'https://i.lotrtcgpc.net/promos/2021/12/PCPROMO_FA_11094.jpg',
}

View File

@@ -249,3 +249,26 @@ gl_theOneRing,1_2
9_54,9_14
#Great Hill Troll - 2021/11
8_123,8_102
# Christmas 2021
#Holiday Boromir, Son of Denethor
1_370,1_97
#Holiday Aragorn, Ranger of the North
1_371,1_89
#Legolas, Greenleaf MW
1_372,1_50
#Goblin Armory MW
1_373,1_173
#Durin III, Dwarven Lord MW
9_55,9_3
#Eowyn, Lady of Ithilien MW
10_124,10_72
#Halbarad, Ranger of the North MW
14_16,14_9
#Gandalf, Leader of the Company MW
11_269,11_33
#Hobbit Sword FA
1_374,1_299
#Anduril, Flame of the West FA
7_366,7_79
#Pavice FA
11_270,11_94

View File

@@ -0,0 +1,52 @@
package com.gempukku.lotro.cards.build.field.effect.trigger;
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.common.Filterable;
import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.timing.results.AssignAgainstResult;
import org.json.simple.JSONObject;
public class AssignedAgainst implements TriggerCheckerProducer {
@Override
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "filter", "side", "against", "memorizeAgainst", "memorizeAssigned");
final String filter = FieldUtils.getString(value.get("filter"), "filter", "any");
final String against = FieldUtils.getString(value.get("against"), "against", "any");
final String memorizeAssigned = FieldUtils.getString(value.get("memorizeAssigned"), "memorizeAssigned");
final String memorizeAgainst = FieldUtils.getString(value.get("memorizeAgainst"), "memorizeAgainst");
final Side side = FieldUtils.getEnum(Side.class, value.get("side"), "side");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
final FilterableSource againstSource = environment.getFilterFactory().generateFilter(against, environment);
return new TriggerChecker() {
@Override
public boolean isBefore() {
return false;
}
@Override
public boolean accepts(ActionContext actionContext) {
final Filterable assignedFilterable = filterableSource.getFilterable(actionContext);
final Filterable againstFilterable = againstSource.getFilterable(actionContext);
final boolean result = TriggerConditions.assignedAgainst(actionContext.getGame(), actionContext.getEffectResult(), side,
againstFilterable, assignedFilterable);
if (result && memorizeAgainst != null) {
AssignAgainstResult assignmentResult = (AssignAgainstResult) actionContext.getEffectResult();
actionContext.setCardMemory(memorizeAgainst, assignmentResult.getAgainst());
}
if (result && memorizeAssigned != null) {
AssignAgainstResult assignmentResult = (AssignAgainstResult) actionContext.getEffectResult();
actionContext.setCardMemory(memorizeAssigned, assignmentResult.getAssignedCard());
}
return result;
}
};
}
}

View File

@@ -14,16 +14,13 @@ import org.json.simple.JSONObject;
public class AssignedToSkirmish implements TriggerCheckerProducer {
@Override
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "filter", "side", "against", "memorizeAgainst", "memorizeAssigned");
FieldUtils.validateAllowedFields(value, "filter", "side", "memorize");
final String filter = FieldUtils.getString(value.get("filter"), "filter", "any");
final String against = FieldUtils.getString(value.get("against"), "against", "any");
final String memorizeAssigned = FieldUtils.getString(value.get("memorizeAssigned"), "memorizeAssigned");
final String memorizeAgainst = FieldUtils.getString(value.get("memorizeAgainst"), "memorizeAgainst");
final String memorize = FieldUtils.getString(value.get("memorize"), "memorize");
final Side side = FieldUtils.getEnum(Side.class, value.get("side"), "side");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
final FilterableSource againstSource = environment.getFilterFactory().generateFilter(against, environment);
return new TriggerChecker() {
@Override
@@ -34,16 +31,10 @@ public class AssignedToSkirmish implements TriggerCheckerProducer {
@Override
public boolean accepts(ActionContext actionContext) {
final Filterable assignedFilterable = filterableSource.getFilterable(actionContext);
final Filterable againstFilterable = againstSource.getFilterable(actionContext);
final boolean result = TriggerConditions.assignedAgainst(actionContext.getGame(), actionContext.getEffectResult(), side,
againstFilterable, assignedFilterable);
if (result && memorizeAgainst != null) {
final boolean result = TriggerConditions.assignedToSkirmish(actionContext.getGame(), actionContext.getEffectResult(), side, assignedFilterable);
if (result && memorize != null) {
AssignAgainstResult assignmentResult = (AssignAgainstResult) actionContext.getEffectResult();
actionContext.setCardMemory(memorizeAgainst, assignmentResult.getAgainst());
}
if (result && memorizeAssigned != null) {
AssignAgainstResult assignmentResult = (AssignAgainstResult) actionContext.getEffectResult();
actionContext.setCardMemory(memorizeAssigned, assignmentResult.getAssignedCard());
actionContext.setCardMemory(memorize, assignmentResult.getAssignedCard());
}
return result;
}

View File

@@ -20,6 +20,7 @@ public class TriggerCheckerFactory {
triggerCheckers.put("activated", new ActivatedTriggerCheckerProducer());
triggerCheckers.put("addsburden", new AddsBurden());
triggerCheckers.put("addsthreat", new AddsThreat());
triggerCheckers.put("assignedagainst", new AssignedAgainst());
triggerCheckers.put("assignedtoskirmish", new AssignedToSkirmish());
triggerCheckers.put("cancelledskirmish", new CancelledSkirmish());
triggerCheckers.put("condition", new ConditionTrigger());

View File

@@ -86,6 +86,20 @@ public class CollectionSerializer {
_singleByteCountItems.add("9_54");
loadSet("33");
//Holiday 2021 Promos
_singleByteCountItems.add("1_370");
_singleByteCountItems.add("1_371");
_singleByteCountItems.add("1_372");
_singleByteCountItems.add("1_373");
_singleByteCountItems.add("9_55");
_singleByteCountItems.add("10_124");
_singleByteCountItems.add("14_16");
_singleByteCountItems.add("11_269");
_singleByteCountItems.add("1_374");
_singleByteCountItems.add("7_366");
_singleByteCountItems.add("11_270");
}
private void fillDoubleByteItems() throws IOException {

View File

@@ -472,7 +472,7 @@
"hall":true,
"playtest":true,
"set":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 151],
"errata":{"1_7":"71_7", "1_11":"71_11", "1_12":"71_12", "1_40":"51_40", "1_45":"51_45", "1_53":"71_53", "1_55":"71_55", "1_80":"51_80", "1_108":"51_108", "1_138":"51_138", "1_139":"51_139", "1_195":"51_195", "1_234":"51_234", "1_248":"51_248", "1_254":"71_254", "1_282":"71_282", "1_311":"51_311", "1_313":"51_313", "1_316":"51_316", "2_6":"72_6", "2_7":"72_7", "2_32":"52_32", "2_75":"52_75", "2_101":"52_101", "2_108":"52_108", "2_121":"52_121", "3_17":"53_17", "3_38":"53_38", "3_42":"53_42", "3_67":"53_67", "3_68":"53_68", "3_106":"53_106", "3_108":"53_108", "3_113":"53_113", "3_120":"73_120","4_73":"54_73", "4_192":"54_192", "4_276":"54_276", "4_304":"54_304", "7_49":"57_49", "7_96":"57_96", "7_359":"77_359", "8_1":"58_1", "8_24":"78_24", "8_51":"78_51", "8_57":"78_57", "8_59":"78_59", "8_103":"78_103", "10_2":"60_2", "10_8":"80_8", "10_11":"60_11", "10_17":"80_17", "10_91":"60_91"}
"errata":{"1_7":"71_7", "1_11":"71_11", "1_12":"71_12", "1_40":"51_40", "1_45":"51_45", "1_53":"71_53", "1_55":"71_55", "1_80":"51_80", "1_108":"51_108", "1_138":"51_138", "1_139":"51_139", "1_195":"51_195", "1_234":"51_234", "1_248":"51_248", "1_254":"71_254", "1_282":"71_282", "1_311":"51_311", "1_313":"51_313", "1_316":"51_316", "2_6":"72_6", "2_7":"72_7", "2_32":"52_32", "2_75":"52_75", "2_101":"52_101", "2_108":"52_108", "2_121":"52_121", "3_17":"53_17", "3_38":"53_38", "3_42":"53_42", "3_67":"53_67", "3_68":"53_68", "3_106":"53_106", "3_108":"53_108", "3_113":"53_113", "3_120":"73_120","4_73":"54_73", "4_192":"54_192", "4_276":"54_276", "4_304":"54_304", "7_49":"57_49", "7_96":"57_96", "7_359":"77_359", "8_1":"58_1", "8_24":"78_24", "8_51":"78_51", "8_57":"78_57", "8_59":"78_59", "8_102":"78_102", "8_103":"78_103", "10_2":"60_2", "10_8":"80_8", "10_11":"60_11", "10_17":"80_17", "10_91":"60_91"}
},
{
"name":"PLAYTEST - Expanded (PC)",
@@ -481,6 +481,6 @@
"hall":true,
"playtest":true,
"set":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 151],
"errata":{"1_7":"71_7", "1_11":"71_11", "1_12":"71_12", "1_40":"51_40", "1_45":"51_45", "1_53":"71_53", "1_55":"71_55", "1_80":"51_80", "1_108":"51_108", "1_138":"51_138", "1_139":"51_139", "1_195":"51_195", "1_234":"51_234", "1_248":"51_248", "1_254":"71_254", "1_282":"71_282", "1_311":"51_311", "1_313":"51_313", "1_316":"51_316", "2_6":"72_6", "2_7":"72_7", "2_32":"52_32", "2_75":"52_75", "2_101":"52_101", "2_108":"52_108", "2_121":"52_121", "3_17":"53_17", "3_38":"53_38", "3_42":"53_42", "3_67":"53_67", "3_68":"53_68", "3_106":"53_106", "3_108":"53_108", "3_113":"53_113", "3_120":"73_120","4_73":"54_73", "4_192":"54_192", "4_276":"54_276", "4_304":"54_304", "7_49":"57_49", "7_96":"57_96", "7_359":"77_359", "8_1":"58_1", "8_24":"78_24", "8_51":"78_51", "8_57":"78_57", "8_59":"78_59", "8_103":"78_103", "10_2":"60_2", "10_8":"80_8", "10_11":"60_11", "10_17":"80_17", "10_91":"60_91","11_31":"61_31", "11_100":"61_100", "11_114":"61_114", "11_132":"61_132", "13_188":"63_188", "15_15":"85_15", "15_62":"85_62", "15_64":"65_64", "18_12":"88_12", "18_29":"88_29", "18_50":"88_50", "18_79":"88_79", "18_96":"88_96", "18_112":"88_112", "19_38":"89_38"}
"errata":{"1_7":"71_7", "1_11":"71_11", "1_12":"71_12", "1_40":"51_40", "1_45":"51_45", "1_53":"71_53", "1_55":"71_55", "1_80":"51_80", "1_108":"51_108", "1_138":"51_138", "1_139":"51_139", "1_195":"51_195", "1_234":"51_234", "1_248":"51_248", "1_254":"71_254", "1_282":"71_282", "1_311":"51_311", "1_313":"51_313", "1_316":"51_316", "2_6":"72_6", "2_7":"72_7", "2_32":"52_32", "2_75":"52_75", "2_101":"52_101", "2_108":"52_108", "2_121":"52_121", "3_17":"53_17", "3_38":"53_38", "3_42":"53_42", "3_67":"53_67", "3_68":"53_68", "3_106":"53_106", "3_108":"53_108", "3_113":"53_113", "3_120":"73_120","4_73":"54_73", "4_192":"54_192", "4_276":"54_276", "4_304":"54_304", "7_49":"57_49", "7_96":"57_96", "7_359":"77_359", "8_1":"58_1", "8_24":"78_24", "8_51":"78_51", "8_57":"78_57", "8_59":"78_59", "8_102":"78_102", "8_103":"78_103", "10_2":"60_2", "10_8":"80_8", "10_11":"60_11", "10_17":"80_17", "10_91":"60_91","11_31":"61_31", "11_100":"61_100", "11_114":"61_114", "11_132":"61_132", "13_188":"63_188", "15_15":"85_15", "15_62":"85_62", "15_64":"65_64", "18_12":"88_12", "18_29":"88_29", "18_50":"88_50", "18_79":"88_79", "18_96":"88_96", "18_112":"88_112", "19_38":"89_38"}
}
]