diff --git a/worlds/sc2/item_descriptions.py b/worlds/sc2/item_descriptions.py index 1acd48b35641..bd2ecbb069d5 100644 --- a/worlds/sc2/item_descriptions.py +++ b/worlds/sc2/item_descriptions.py @@ -157,6 +157,7 @@ def _ability_desc(unit_name_plural: str, ability_name: str, ability_description: Durable Royal Guard support flyer. Loaded with strong anti-capital air missiles. Can switch into Assault Mode to attack ground units. """), + item_names.SHOCK_DIVISION: "Royal Guard Heavy tank. Long-range artillery in Siege Mode.", 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 7c5d947897cf..ec7f902304dd 100644 --- a/worlds/sc2/item_groups.py +++ b/worlds/sc2/item_groups.py @@ -1,6 +1,7 @@ import typing from . import item_names, items from .mission_tables import campaign_mission_table, SC2Campaign, SC2Mission, SC2Race +from ..hk import item_table """ Item name groups, given to Archipelago and used in YAMLs and /received filtering. @@ -193,7 +194,7 @@ def get_all_group_names(cls) -> typing.Set[str]: item_name_groups[ItemGroupNames.FACTORY_UNITS] = factory_units = [ item_names.HELLION, item_names.VULTURE, item_names.GOLIATH, item_names.DIAMONDBACK, item_names.SIEGE_TANK, item_names.THOR, item_names.PREDATOR, item_names.WIDOW_MINE, - item_names.CYCLONE, item_names.WARHOUND, + item_names.CYCLONE, item_names.WARHOUND, item_names.SHOCK_DIVISION, ] item_name_groups[ItemGroupNames.STARPORT_UNITS] = starport_units = [ item_names.MEDIVAC, item_names.WRAITH, item_names.VIKING, item_names.BANSHEE, @@ -375,7 +376,7 @@ def get_all_group_names(cls) -> typing.Set[str]: if item_data.type in (items.TerranItemType.Progressive, items.TerranItemType.Progressive_2) ] item_name_groups[ItemGroupNames.MENGSK_UNITS] = [ - item_names.PRIDE_OF_AUGUSTRGRAD, item_names.SKY_FURY, + item_names.PRIDE_OF_AUGUSTRGRAD, item_names.SKY_FURY, item_names.SHOCK_DIVISION, ] 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 1186a65540e6..f2eef902b52c 100644 --- a/worlds/sc2/item_names.py +++ b/worlds/sc2/item_names.py @@ -38,6 +38,7 @@ # Elites PRIDE_OF_AUGUSTRGRAD = "Pride of Augustgrad" SKY_FURY = "Sky Fury" +SHOCK_DIVISION = "Shock Division" # Terran Buildings BUNKER = "Bunker" diff --git a/worlds/sc2/items.py b/worlds/sc2/items.py index 1c4c00d92c3c..af1802062539 100644 --- a/worlds/sc2/items.py +++ b/worlds/sc2/items.py @@ -42,6 +42,7 @@ class TerranItemType(ItemTypeEnum): Mercenary = "Mercenary", 12 Nova_Gear = "Nova Gear", 13 Progressive_2 = "Progressive Upgrade", 14 + Unit_2 = "Unit", 15 class ZergItemType(ItemTypeEnum): @@ -218,6 +219,9 @@ def get_full_item_list(): item_names.SKY_FURY: ItemData(51 + SC2WOL_ITEM_ID_OFFSET, TerranItemType.Unit, 29, SC2Race.TERRAN, classification=ItemClassification.progression, origin={"ext"}), + item_names.SHOCK_DIVISION: + ItemData(52 + SC2WOL_ITEM_ID_OFFSET, TerranItemType.Unit2, 0, SC2Race.TERRAN, + classification=ItemClassification.progression, origin={"ext"}), # 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 a71dbf6a483f..7e9eee3bacd6 100644 --- a/worlds/sc2/rules.py +++ b/worlds/sc2/rules.py @@ -146,7 +146,8 @@ def terran_basic_anti_air(self, state: CollectionState) -> bool: item_names.PRIDE_OF_AUGUSTRGRAD, ), self.player) or ( - state.has_all((item_names.SIEGE_TANK, item_names.MEDIVAC), self.player) + state.has(item_names.MEDIVAC, self.player) + and state.has_any((item_names.SIEGE_TANK, item_names.SHOCK_DIVISION), self.player) and state.count(item_names.SIEGE_TANK_PROGRESSIVE_TRANSPORT_HOOK, self.player) >= 2 ) )