forked from Ziktofel/Archipelago
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request Ziktofel#159 from Salzkorn/sc2-next
Item name group refactor & /received filtering rework
- Loading branch information
Showing
5 changed files
with
173 additions
and
73 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
import typing | ||
from . import Items, ItemNames | ||
from .MissionTables import campaign_mission_table, SC2Campaign, SC2Mission | ||
|
||
""" | ||
Item name groups, given to Archipelago and used in YAMLs and /received filtering. | ||
For non-developers the following will be useful: | ||
* Items with a bracket get groups named after the unbracketed part | ||
* eg. "Advanced Healing AI (Medivac)" is accessible as "Advanced Healing AI" | ||
* The exception to this are item names that would be ambiguous (eg. "Resource Efficiency") | ||
* Item flaggroups get unique groups as well as combined groups for numbered flaggroups | ||
* eg. "Unit" contains all units, "Armory" contains "Armory 1" through "Armory 6" | ||
* The best place to look these up is at the bottom of Items.py | ||
* Items that have a parent are grouped together | ||
* eg. "Zergling Items" contains all items that have "Zergling" as a parent | ||
* These groups do NOT contain the parent item | ||
* This currently does not include items with multiple potential parents, like some LotV unit upgrades | ||
* All items are grouped by their race ("Terran", "Protoss", "Zerg", "Any") | ||
* Hand-crafted item groups can be found at the bottom of this file | ||
""" | ||
|
||
item_name_groups: typing.Dict[str, typing.List[str]] = {} | ||
|
||
# Groups for use in world logic | ||
item_name_groups["Missions"] = ["Beat " + mission.mission_name for mission in SC2Mission] | ||
item_name_groups["WoL Missions"] = ["Beat " + mission.mission_name for mission in campaign_mission_table[SC2Campaign.WOL]] + \ | ||
["Beat " + mission.mission_name for mission in campaign_mission_table[SC2Campaign.PROPHECY]] | ||
|
||
# These item name groups should not show up in documentation | ||
unlisted_item_name_groups = { | ||
"Missions", "WoL Missions" | ||
} | ||
|
||
# Some item names only differ in bracketed parts | ||
# These items are ambiguous for short-hand name groups | ||
bracketless_duplicates: typing.Set[str] | ||
# This is a list of names in ItemNames with bracketed parts removed, for internal use | ||
_shortened_names = [(name[:name.find(' (')] if '(' in name else name) | ||
for name in [ItemNames.__dict__[name] for name in ItemNames.__dir__() if not name.startswith('_')]] | ||
# Remove the first instance of every short-name from the full item list | ||
bracketless_duplicates = set(_shortened_names) | ||
for name in bracketless_duplicates: | ||
_shortened_names.remove(name) | ||
# The remaining short-names are the duplicates | ||
bracketless_duplicates = set(_shortened_names) | ||
del _shortened_names | ||
|
||
# All items get sorted into their data type | ||
for item, data in Items.get_full_item_list().items(): | ||
# Items get assigned to their flaggroup's type | ||
item_name_groups.setdefault(data.type, []).append(item) | ||
# Numbered flaggroups get sorted into an unnumbered group | ||
# Currently supports numbers of one or two digits | ||
if data.type[-2:].strip().isnumeric: | ||
type_group = data.type[:-2].strip() | ||
item_name_groups.setdefault(type_group, []).append(item) | ||
# Flaggroups with numbers are unlisted | ||
unlisted_item_name_groups.add(data.type) | ||
# Items with a bracket get a short-hand name group for ease of use in YAMLs | ||
if '(' in item: | ||
short_name = item[:item.find(' (')] | ||
# Ambiguous short-names are dropped | ||
if short_name in bracketless_duplicates: | ||
continue | ||
item_name_groups[short_name] = [item] | ||
# Short-name groups are unlisted | ||
unlisted_item_name_groups.add(short_name) | ||
# Items with a parent get assigned to their parent's group | ||
if data.parent_item: | ||
# The parent groups need a special name, otherwise they are ambiguous with the parent | ||
parent_group = f"{data.parent_item} Items" | ||
item_name_groups.setdefault(parent_group, []).append(item) | ||
# Parent groups are unlisted | ||
unlisted_item_name_groups.add(parent_group) | ||
# All items get assigned to their race's group | ||
race_group = data.race.name.capitalize() | ||
item_name_groups.setdefault(race_group, []).append(item) | ||
|
||
|
||
# Hand-made groups | ||
item_name_groups["Aiur"] = [ | ||
ItemNames.ZEALOT, ItemNames.DRAGOON, ItemNames.SENTRY, ItemNames.AVENGER, ItemNames.HIGH_TEMPLAR, | ||
ItemNames.IMMORTAL, ItemNames.REAVER, | ||
ItemNames.PHOENIX, ItemNames.SCOUT, ItemNames.ARBITER, ItemNames.CARRIER, | ||
] | ||
item_name_groups["Nerazim"] = [ | ||
ItemNames.CENTURION, ItemNames.STALKER, ItemNames.DARK_TEMPLAR, ItemNames.SIGNIFIER, ItemNames.DARK_ARCHON, | ||
ItemNames.ANNIHILATOR, | ||
ItemNames.CORSAIR, ItemNames.ORACLE, ItemNames.VOID_RAY, | ||
] | ||
item_name_groups["Tal'Darim"] = [ | ||
ItemNames.SUPPLICANT, ItemNames.SLAYER, ItemNames.HAVOC, ItemNames.BLOOD_HUNTER, ItemNames.ASCENDANT, | ||
ItemNames.VANGUARD, ItemNames.WRATHWALKER, | ||
ItemNames.DESTROYER, ItemNames.MOTHERSHIP, | ||
ItemNames.WARP_PRISM_PHASE_BLASTER, | ||
] | ||
item_name_groups["Purifier"] = [ | ||
ItemNames.SENTINEL, ItemNames.ADEPT, ItemNames.INSTIGATOR, ItemNames.ENERGIZER, | ||
ItemNames.COLOSSUS, ItemNames.DISRUPTOR, | ||
ItemNames.MIRAGE, ItemNames.TEMPEST, | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters