From dd91470e19ddfe31943cfb696891a1e38ca91047 Mon Sep 17 00:00:00 2001
From: Ziktofel <ziktofel@gmail.com>
Date: Mon, 7 Oct 2024 18:31:31 +0200
Subject: [PATCH] Add Son of Korhal unit

---
 worlds/sc2/item_descriptions.py | 1 +
 worlds/sc2/item_groups.py       | 3 ++-
 worlds/sc2/item_names.py        | 1 +
 worlds/sc2/items.py             | 3 +++
 worlds/sc2/rules.py             | 2 +-
 5 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/worlds/sc2/item_descriptions.py b/worlds/sc2/item_descriptions.py
index 62d4b5ea1061..c4c2a41ffbf8 100644
--- a/worlds/sc2/item_descriptions.py
+++ b/worlds/sc2/item_descriptions.py
@@ -165,6 +165,7 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description:
     item_names.BLACKHAMMER: "Royal Guard heavy assault mech.",
     item_names.AEGIS_GUARD: "Royal Guard heavy assault infantry.",
     item_names.EMPERORS_SHADOW: "Royal Guard specialist. Can use Pyrokinetic Immolation and EMP Blast abilities. Can call down Tactical missiles.",
+    item_names.SON_OF_KORHAL: "Royal Guard general-purpose indantry.",
     item_names.PROGRESSIVE_TERRAN_INFANTRY_WEAPON: GENERIC_UPGRADE_TEMPLATE.format("damage", TERRAN, "infantry"),
     item_names.PROGRESSIVE_TERRAN_INFANTRY_ARMOR: GENERIC_UPGRADE_TEMPLATE.format("armor", TERRAN, "infantry"),
     item_names.PROGRESSIVE_TERRAN_VEHICLE_WEAPON: GENERIC_UPGRADE_TEMPLATE.format("damage", TERRAN, "vehicles"),
diff --git a/worlds/sc2/item_groups.py b/worlds/sc2/item_groups.py
index b7b4404e09aa..53ee130d1ae4 100644
--- a/worlds/sc2/item_groups.py
+++ b/worlds/sc2/item_groups.py
@@ -190,7 +190,7 @@ def get_all_group_names(cls) -> typing.Set[str]:
 item_name_groups[ItemGroupNames.BARRACKS_UNITS] = barracks_units = [
     item_names.MARINE, item_names.MEDIC, item_names.FIREBAT, item_names.MARAUDER,
     item_names.REAPER, item_names.GHOST, item_names.SPECTRE, item_names.HERC, item_names.AEGIS_GUARD,
-    item_names.EMPERORS_SHADOW, item_names.DOMINION_TROOPER,
+    item_names.EMPERORS_SHADOW, item_names.DOMINION_TROOPER, item_names.SON_OF_KORHAL,
 ]
 item_name_groups[ItemGroupNames.FACTORY_UNITS] = factory_units = [
     item_names.HELLION, item_names.VULTURE, item_names.GOLIATH, item_names.DIAMONDBACK,
@@ -380,6 +380,7 @@ def get_all_group_names(cls) -> typing.Set[str]:
     item_names.AEGIS_GUARD, item_names.EMPERORS_SHADOW,
     item_names.SHOCK_DIVISION, item_names.BLACKHAMMER,
     item_names.PRIDE_OF_AUGUSTRGRAD, item_names.SKY_FURY,
+    item_names.DOMINION_TROOPER,
 ]
 item_name_groups[ItemGroupNames.WOL_ITEMS] = vanilla_wol_items = (
     wol_units
diff --git a/worlds/sc2/item_names.py b/worlds/sc2/item_names.py
index 29fcf45e6937..ce94dc6fb3a5 100644
--- a/worlds/sc2/item_names.py
+++ b/worlds/sc2/item_names.py
@@ -43,6 +43,7 @@
 BLACKHAMMER          = "Blackhammer"
 AEGIS_GUARD          = "Aegis Guard"
 EMPERORS_SHADOW      = "Emperor's Shadow"
+SON_OF_KORHAL        = "Son Of Korhal"
 
 # Terran Buildings
 BUNKER                              = "Bunker"
diff --git a/worlds/sc2/items.py b/worlds/sc2/items.py
index 8789d6cbc179..9704413d8484 100644
--- a/worlds/sc2/items.py
+++ b/worlds/sc2/items.py
@@ -235,6 +235,9 @@ def get_full_item_list():
     item_names.EMPERORS_SHADOW:
         ItemData(55 + SC2WOL_ITEM_ID_OFFSET, TerranItemType.Unit_2, 3, SC2Race.TERRAN,
                  classification=ItemClassification.progression),
+    item_names.SON_OF_KORHAL:
+        ItemData(56 + SC2WOL_ITEM_ID_OFFSET, TerranItemType.Unit_2, 5, SC2Race.TERRAN,
+                 classification=ItemClassification.progression),
 
     # Some other items are moved to Upgrade group because of the way how the bot message is parsed
     item_names.PROGRESSIVE_TERRAN_INFANTRY_WEAPON: ItemData(100 + SC2WOL_ITEM_ID_OFFSET, TerranItemType.Upgrade, 0, SC2Race.TERRAN, quantity=WEAPON_ARMOR_UPGRADE_MAX_LEVEL),
diff --git a/worlds/sc2/rules.py b/worlds/sc2/rules.py
index 05c36ae6518a..a9ec7938a501 100644
--- a/worlds/sc2/rules.py
+++ b/worlds/sc2/rules.py
@@ -140,7 +140,7 @@ def terran_basic_anti_air(self, state: CollectionState) -> bool:
                 item_names.MISSILE_TURRET, item_names.THOR, item_names.WAR_PIGS, item_names.SPARTAN_COMPANY,
                 item_names.HELS_ANGELS, item_names.BATTLECRUISER, item_names.MARINE, item_names.WRAITH,
                 item_names.VALKYRIE, item_names.CYCLONE, item_names.WINGED_NIGHTMARES, item_names.BRYNHILDS,
-                item_names.SKY_FURY, item_names.DOMINION_TROOPER
+                item_names.SKY_FURY, item_names.DOMINION_TROOPER, item_names.SON_OF_KORHAL,
             ), self.player)
             or self.terran_competent_anti_air(state)
             or self.advanced_tactics and (