From a6aa40addefb98c2b2c480c5eeec6c79d2d2e52e Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Mon, 20 Dec 2021 14:02:55 -0600 Subject: [PATCH 1/7] Updated Gaze of the Eye to be unique. Fixed missing site keywords. Fixed Faithful Stone removing 1 instead of 3 tokens, and the unassign effect not lasting until regroup. --- .../src/main/web/cards/errata/set18-errata-playtest.json | 5 +++-- .../src/main/web/cards/set101/set101_sauron_playtest.json | 4 ++-- .../src/main/web/cards/set101/set101_sites_playtest.json | 5 +++++ .../gemp-lotr-async/src/main/web/includes/changeLog.html | 6 ++++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set18-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set18-errata-playtest.json index b66f79527..a28c3cbd4 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set18-errata-playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set18-errata-playtest.json @@ -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)" } } }, diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sauron_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sauron_playtest.json index d9d97117b..5bf650cd3 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sauron_playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sauron_playtest.json @@ -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", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sites_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sites_playtest.json index 5d1682b4c..f3b3f5e20 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sites_playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_sites_playtest.json @@ -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": [ { diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html index bd2004e9b..c122bd491 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html @@ -1,6 +1,12 @@
 Most recent update
 
+2021 December 21 - A
+- 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 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.
+
 2021 December 20 - B
 - Fixed a game crash regarding new functionality added for Crebain Flock (V1_25).
 

From 1866592b62456f8f4441a4f4abe97ea4534a2e80 Mon Sep 17 00:00:00 2001
From: Christian 'ketura' McCarty 
Date: Mon, 20 Dec 2021 20:46:00 -0600
Subject: [PATCH 2/7] Fixed Cirdan errata having the old -4 limit.

---
 .../src/main/web/cards/errata/set10-errata-playtest.json         | 1 -
 gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html   | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set10-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set10-errata-playtest.json
index 92c2725d0..3d62d35cd 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set10-errata-playtest.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set10-errata-playtest.json
@@ -30,7 +30,6 @@
             "amount": {
               "type": "forEachInDiscard",
               "filter": "culture(elven),event",
-              "limit": 4,
               "multiplier": -1
             }
           },
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
index c122bd491..9c0c52275 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
@@ -4,6 +4,7 @@
 2021 December 21 - A
 - 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.
 

From 735dba98b897c76e9e3755e6c57a9f8bfa8dd774 Mon Sep 17 00:00:00 2001
From: Christian 'ketura' McCarty 
Date: Mon, 20 Dec 2021 23:22:30 -0600
Subject: [PATCH 3/7] Added Great Hill Troll errata.

---
 .../cards/errata/set08-errata-playtest.json   | 46 +++++++++++++++++++
 .../src/main/web/includes/changeLog.html      |  6 +++
 .../src/main/web/js/gemp-022/PC_Cards.js      |  1 +
 .../src/main/resources/lotrFormats.json       |  4 +-
 4 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set08-errata-playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set08-errata-playtest.json
index a370d5435..0448e2cad 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set08-errata-playtest.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/errata/set08-errata-playtest.json
@@ -229,4 +229,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))"
+        }
+      }
+    ]
+  },
 }
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
index 9c0c52275..473525ef1 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
@@ -2,6 +2,12 @@
 Most recent update
 
 2021 December 21 - A
+- 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).
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
index 39c891753..1e7a34199 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
@@ -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',
diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json
index f093c6924..ce277d27a 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json
+++ b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json
@@ -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"}
     }
 ]

From ca647787ea6df6dec5b571543c259696936ad490 Mon Sep 17 00:00:00 2001
From: Christian 'ketura' McCarty 
Date: Mon, 20 Dec 2021 23:44:32 -0600
Subject: [PATCH 4/7] Fixing uncommited YHMS fix.  Fixing Walks in Twilight not
 being optional

---
 .../src/main/web/cards/set101/set101_gondor_playtest.json     | 4 ++++
 .../src/main/web/cards/set101/set101_ringwraith_playtest.json | 1 +
 .../gemp-lotr-async/src/main/web/includes/changeLog.html      | 1 +
 3 files changed, 6 insertions(+)

diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_gondor_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_gondor_playtest.json
index 235593bc1..e8028d0d0 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_gondor_playtest.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_gondor_playtest.json
@@ -230,6 +230,10 @@
     "type": "condition",
     "target": "companion,signet(aragorn),not(name(Aragorn))",
     "strength": 2,
+    "condition": {
+      "type": "canSpot",
+      "filter": "name(aragorn)"
+    },
     "effects": {
       "type": "trigger",
       "trigger": {
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_ringwraith_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_ringwraith_playtest.json
index fbdea24bf..3a33cd075 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_ringwraith_playtest.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_ringwraith_playtest.json
@@ -179,6 +179,7 @@
 		"effects": [
 			{
         "type": "trigger",
+        "optional": true,
         "trigger": {
           "type": "winsSkirmish",
           "filter": "and(twilight,nazgul)"
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
index 473525ef1..7c6151840 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
@@ -13,6 +13,7 @@
 - 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.
 
 2021 December 20 - B
 - Fixed a game crash regarding new functionality added for Crebain Flock (V1_25).

From 4142acfb6fa0d51185253aac962ed206ec5de13e Mon Sep 17 00:00:00 2001
From: Christian 'ketura' McCarty 
Date: Tue, 21 Dec 2021 01:54:27 -0600
Subject: [PATCH 5/7] Adding 2021 Holiday Promos

---
 .../src/main/web/js/gemp-022/PC_Cards.js      | 25 +++++++++++++++++++
 .../src/main/resources/blueprintMapping.txt   | 23 +++++++++++++++++
 .../collection/CollectionSerializer.java      | 14 +++++++++++
 3 files changed, 62 insertions(+)

diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
index 1e7a34199..4d3351976 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
@@ -237,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',
 
 }
 
diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt b/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt
index 1790bae1d..0136134ab 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt
+++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt
@@ -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
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java
index 404e81897..5b571ca9a 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java
@@ -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 {

From dbefa9c42f5a7e41f47e6927c5fdd77fa38dc7d9 Mon Sep 17 00:00:00 2001
From: Christian 'ketura' McCarty 
Date: Wed, 22 Dec 2021 01:12:57 -0600
Subject: [PATCH 6/7] Fixed Would Have Gone affecting any stacked cards instead
 of just its own

---
 .../src/main/web/cards/set101/set101_gondor_playtest.json        | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_gondor_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_gondor_playtest.json
index e8028d0d0..b9f355ae7 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_gondor_playtest.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_gondor_playtest.json
@@ -201,6 +201,7 @@
         ],
         "cost": {
           "type": "discardStackedCards",
+          "on": "self",
           "count": {
             "type": "range",
             "from": 1,

From 8637cd20be56219cd2ce280bafcb2ce4d1f33184 Mon Sep 17 00:00:00 2001
From: Christian 'ketura' McCarty 
Date: Wed, 22 Dec 2021 01:16:35 -0600
Subject: [PATCH 7/7] AssignedToSkirmish json hook split into AssignedAgainst

Properly created a json hook for AssignedAgainst, which is what AssignedToSkirmish was actually invoking.
Updated all cards that used AssignedToSkirmish; cards which only cared about one side use AssignedToSkirmish, while cards that want to know both sides are changed to AssignedAgainst
---
 .../src/main/web/cards/set16.json             |  6 +--
 .../src/main/web/cards/set19.json             |  2 +-
 .../main/web/cards/set40/set40-sauron.json    |  2 +-
 .../main/web/cards/set40/set40-wraith.json    |  2 +-
 .../src/main/web/includes/changeLog.html      | 10 +++-
 .../field/effect/trigger/AssignedAgainst.java | 52 +++++++++++++++++++
 .../effect/trigger/AssignedToSkirmish.java    | 19 ++-----
 .../effect/trigger/TriggerCheckerFactory.java |  1 +
 8 files changed, 73 insertions(+), 21 deletions(-)
 create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AssignedAgainst.java

diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set16.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set16.json
index 17bc5fabc..6d314def3 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set16.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set16.json
@@ -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"
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set19.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set19.json
index e3729a02a..a3927bbd0 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set19.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set19.json
@@ -1459,7 +1459,7 @@
       {
         "type": "trigger",
         "trigger": {
-          "type": "assignedToSkirmish",
+          "type": "assignedAgainst",
           "filter": "self",
           "memorizeAgainst": "against"
         },
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-sauron.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-sauron.json
index 8146c868b..8a9c922dd 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-sauron.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-sauron.json
@@ -800,7 +800,7 @@
     "effects": {
       "type": "trigger",
       "trigger": {
-        "type": "assignedToSkirmish",
+        "type": "assignedAgainst",
         "filter": "self",
         "against": "companion",
         "memorizeAgainst": "assignedAgainst"
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-wraith.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-wraith.json
index d3a26435b..7c61d17aa 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-wraith.json
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set40/set40-wraith.json
@@ -554,7 +554,7 @@
     "effects": {
       "type": "responseEvent",
       "trigger": {
-        "type": "assignedToSkirmish",
+        "type": "assignedAgainst",
         "side": "free people",
         "filter": "hobbit",
         "against": "nazgul",
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
index 7c6151840..681a4780b 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html
@@ -1,7 +1,15 @@
 
 Most recent update
 
-2021 December 21 - A
+2021 December 22 - A
+- 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!
+
+
+2021 December 21
 - NEW ERRATA: Great Hill Troll (8C102).  
    Twilight Cost: 9 -> 10
    Game Text:
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AssignedAgainst.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AssignedAgainst.java
new file mode 100644
index 000000000..776d54ae9
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AssignedAgainst.java
@@ -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;
+            }
+        };
+    }
+}
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AssignedToSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AssignedToSkirmish.java
index c7c93e25d..8c1c82135 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AssignedToSkirmish.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/AssignedToSkirmish.java
@@ -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;
             }
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java
index 21b9f00ac..25772ff94 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/trigger/TriggerCheckerFactory.java
@@ -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());