diff --git a/worlds/doom_1993/Events.py b/worlds/doom_1993/Events.py deleted file mode 100644 index 0c451138..00000000 --- a/worlds/doom_1993/Events.py +++ /dev/null @@ -1,34 +0,0 @@ -# This file is auto generated. More info: https://github.com/Daivuk/apdoom - -from typing import List - - -events: List[str] = [ - 'Hangar (E1M1) - Complete', - 'Nuclear Plant (E1M2) - Complete', - 'Toxin Refinery (E1M3) - Complete', - 'Command Control (E1M4) - Complete', - 'Phobos Lab (E1M5) - Complete', - 'Central Processing (E1M6) - Complete', - 'Computer Station (E1M7) - Complete', - 'Phobos Anomaly (E1M8) - Complete', - 'Military Base (E1M9) - Complete', - 'Deimos Anomaly (E2M1) - Complete', - 'Containment Area (E2M2) - Complete', - 'Refinery (E2M3) - Complete', - 'Deimos Lab (E2M4) - Complete', - 'Command Center (E2M5) - Complete', - 'Halls of the Damned (E2M6) - Complete', - 'Spawning Vats (E2M7) - Complete', - 'Tower of Babel (E2M8) - Complete', - 'Fortress of Mystery (E2M9) - Complete', - 'Hell Keep (E3M1) - Complete', - 'Slough of Despair (E3M2) - Complete', - 'Pandemonium (E3M3) - Complete', - 'House of Pain (E3M4) - Complete', - 'Unholy Cathedral (E3M5) - Complete', - 'Mt. Erebus (E3M6) - Complete', - 'Limbo (E3M7) - Complete', - 'Dis (E3M8) - Complete', - 'Warrens (E3M9) - Complete', -] diff --git a/worlds/doom_1993/Items.py b/worlds/doom_1993/Items.py index fe662aee..55fc6f03 100644 --- a/worlds/doom_1993/Items.py +++ b/worlds/doom_1993/Items.py @@ -8,7 +8,7 @@ class ItemDict(TypedDict, total=False): classification: ItemClassification count: int name: str - doom_type: int # Unique numerical id used to spawn the item. + doom_type: int # Unique numerical id used to spawn the item. -1 is level item, -2 is level complete item. episode: int # Relevant if that item targets a specific level, like keycard or map reveal pickup. map: int @@ -722,6 +722,168 @@ item_table: Dict[int, ItemDict] = { 'doom_type': 17, 'episode': -1, 'map': -1}, + 350118: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Hangar (E1M1) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 1}, + 350119: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Nuclear Plant (E1M2) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 2}, + 350120: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Toxin Refinery (E1M3) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 3}, + 350121: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Command Control (E1M4) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 4}, + 350122: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Phobos Lab (E1M5) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 5}, + 350123: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Central Processing (E1M6) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 6}, + 350124: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Computer Station (E1M7) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 7}, + 350125: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Phobos Anomaly (E1M8) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 8}, + 350126: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Military Base (E1M9) - Complete', + 'doom_type': -2, + 'episode': 1, + 'map': 9}, + 350127: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Deimos Anomaly (E2M1) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 1}, + 350128: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Containment Area (E2M2) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 2}, + 350129: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Refinery (E2M3) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 3}, + 350130: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Deimos Lab (E2M4) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 4}, + 350131: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Command Center (E2M5) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 5}, + 350132: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Halls of the Damned (E2M6) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 6}, + 350133: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Spawning Vats (E2M7) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 7}, + 350134: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Tower of Babel (E2M8) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 8}, + 350135: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Fortress of Mystery (E2M9) - Complete', + 'doom_type': -2, + 'episode': 2, + 'map': 9}, + 350136: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Hell Keep (E3M1) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 1}, + 350137: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Slough of Despair (E3M2) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 2}, + 350138: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Pandemonium (E3M3) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 3}, + 350139: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'House of Pain (E3M4) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 4}, + 350140: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Unholy Cathedral (E3M5) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 5}, + 350141: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Mt. Erebus (E3M6) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 6}, + 350142: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Limbo (E3M7) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 7}, + 350143: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Dis (E3M8) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 8}, + 350144: {'classification': ItemClassification.progression, + 'count': 1, + 'name': 'Warrens (E3M9) - Complete', + 'doom_type': -2, + 'episode': 3, + 'map': 9}, } diff --git a/worlds/doom_1993/Locations.py b/worlds/doom_1993/Locations.py index 67abef16..2561e76a 100644 --- a/worlds/doom_1993/Locations.py +++ b/worlds/doom_1993/Locations.py @@ -198,13 +198,13 @@ location_table: Dict[int, LocationDict] = { 'map': 4, 'index': 39, 'doom_type': 2018, - 'region': "Command Control (E1M4) Blue Yellow"}, + 'region': "Command Control (E1M4) Blue"}, 351031: {'name': 'Command Control (E1M4) - Yellow keycard', 'episode': 1, 'map': 4, 'index': 61, 'doom_type': 6, - 'region': "Command Control (E1M4) Blue Yellow"}, + 'region': "Command Control (E1M4) Blue"}, 351032: {'name': 'Command Control (E1M4) - Blue keycard', 'episode': 1, 'map': 4, @@ -228,7 +228,7 @@ location_table: Dict[int, LocationDict] = { 'map': 4, 'index': 100, 'doom_type': 2019, - 'region': "Command Control (E1M4) Blue Yellow"}, + 'region': "Command Control (E1M4) Main"}, 351036: {'name': 'Command Control (E1M4) - Backpack', 'episode': 1, 'map': 4, @@ -246,7 +246,7 @@ location_table: Dict[int, LocationDict] = { 'map': 5, 'index': 4, 'doom_type': 5, - 'region': "Phobos Lab (E1M5) Yellow"}, + 'region': "Phobos Lab (E1M5) Green"}, 351039: {'name': 'Phobos Lab (E1M5) - Yellow keycard', 'episode': 1, 'map': 5, @@ -294,19 +294,19 @@ location_table: Dict[int, LocationDict] = { 'map': 5, 'index': 173, 'doom_type': 2002, - 'region': "Phobos Lab (E1M5) Yellow"}, + 'region': "Phobos Lab (E1M5) Green"}, 351047: {'name': 'Phobos Lab (E1M5) - Backpack', 'episode': 1, 'map': 5, 'index': 174, 'doom_type': 8, - 'region': "Phobos Lab (E1M5) Yellow"}, + 'region': "Phobos Lab (E1M5) Green"}, 351048: {'name': 'Phobos Lab (E1M5) - Computer area map', 'episode': 1, 'map': 5, 'index': 176, 'doom_type': 2026, - 'region': "Phobos Lab (E1M5) Yellow"}, + 'region': "Phobos Lab (E1M5) Green"}, 351049: {'name': 'Phobos Lab (E1M5) - Mega Armor 2', 'episode': 1, 'map': 5, @@ -330,7 +330,7 @@ location_table: Dict[int, LocationDict] = { 'map': 5, 'index': 280, 'doom_type': 2018, - 'region': "Phobos Lab (E1M5) Yellow"}, + 'region': "Phobos Lab (E1M5) Green"}, 351053: {'name': 'Phobos Lab (E1M5) - Partial invisibility', 'episode': 1, 'map': 5, @@ -432,7 +432,7 @@ location_table: Dict[int, LocationDict] = { 'map': 6, 'index': 291, 'doom_type': 2018, - 'region': "Central Processing (E1M6) Blue Yellow"}, + 'region': "Central Processing (E1M6) Yellow"}, 351070: {'name': 'Central Processing (E1M6) - Armor 4', 'episode': 1, 'map': 6, @@ -444,13 +444,13 @@ location_table: Dict[int, LocationDict] = { 'map': 6, 'index': 392, 'doom_type': 2013, - 'region': "Central Processing (E1M6) Blue"}, + 'region': "Central Processing (E1M6) Nukage"}, 351072: {'name': 'Central Processing (E1M6) - Backpack 3', 'episode': 1, 'map': 6, 'index': 395, 'doom_type': 8, - 'region': "Central Processing (E1M6) Blue"}, + 'region': "Central Processing (E1M6) Nukage"}, 351073: {'name': 'Computer Station (E1M7) - Chaingun', 'episode': 1, 'map': 7, @@ -540,7 +540,7 @@ location_table: Dict[int, LocationDict] = { 'map': 7, 'index': 337, 'doom_type': 2024, - 'region': "Computer Station (E1M7) Yellow Red"}, + 'region': "Computer Station (E1M7) Courtyard"}, 351088: {'name': 'Phobos Anomaly (E1M8) - Supercharge', 'episode': 1, 'map': 8, @@ -906,7 +906,7 @@ location_table: Dict[int, LocationDict] = { 'map': 4, 'index': 107, 'doom_type': 2013, - 'region': "Deimos Lab (E2M4) Blue Yellow"}, + 'region': "Deimos Lab (E2M4) Yellow"}, 351149: {'name': 'Deimos Lab (E2M4) - Shotgun', 'episode': 2, 'map': 4, @@ -918,13 +918,13 @@ location_table: Dict[int, LocationDict] = { 'map': 4, 'index': 129, 'doom_type': 2019, - 'region': "Deimos Lab (E2M4) Blue Yellow"}, + 'region': "Deimos Lab (E2M4) Yellow"}, 351151: {'name': 'Deimos Lab (E2M4) - Plasma gun', 'episode': 2, 'map': 4, 'index': 130, 'doom_type': 2004, - 'region': "Deimos Lab (E2M4) Blue Yellow"}, + 'region': "Deimos Lab (E2M4) Yellow"}, 351152: {'name': 'Deimos Lab (E2M4) - Backpack', 'episode': 2, 'map': 4, @@ -1068,7 +1068,7 @@ location_table: Dict[int, LocationDict] = { 'map': 6, 'index': 125, 'doom_type': 39, - 'region': "Halls of the Damned (E2M6) Main"}, + 'region': "Halls of the Damned (E2M6) One way Yellow"}, 351176: {'name': 'Halls of the Damned (E2M6) - Supercharge', 'episode': 2, 'map': 6, @@ -1092,7 +1092,7 @@ location_table: Dict[int, LocationDict] = { 'map': 6, 'index': 217, 'doom_type': 2024, - 'region': "Halls of the Damned (E2M6) Main"}, + 'region': "Halls of the Damned (E2M6) One way Yellow"}, 351180: {'name': 'Halls of the Damned (E2M6) - Red skull key', 'episode': 2, 'map': 6, @@ -1200,7 +1200,7 @@ location_table: Dict[int, LocationDict] = { 'map': 7, 'index': 199, 'doom_type': 2013, - 'region': "Spawning Vats (E2M7) Blue Red"}, + 'region': "Spawning Vats (E2M7) Entrance Secret"}, 351198: {'name': 'Spawning Vats (E2M7) - Invulnerability 2', 'episode': 2, 'map': 7, @@ -1524,19 +1524,19 @@ location_table: Dict[int, LocationDict] = { 'map': 4, 'index': 134, 'doom_type': 38, - 'region': "House of Pain (E3M4) Blue Yellow"}, + 'region': "House of Pain (E3M4) Yellow"}, 351252: {'name': 'House of Pain (E3M4) - Backpack', 'episode': 3, 'map': 4, 'index': 160, 'doom_type': 8, - 'region': "House of Pain (E3M4) Blue Red"}, + 'region': "House of Pain (E3M4) Red"}, 351253: {'name': 'House of Pain (E3M4) - Mega Armor 2', 'episode': 3, 'map': 4, 'index': 170, 'doom_type': 2019, - 'region': "House of Pain (E3M4) Blue Red"}, + 'region': "House of Pain (E3M4) Red"}, 351254: {'name': 'House of Pain (E3M4) - Partial invisibility', 'episode': 3, 'map': 4, @@ -1854,253 +1854,253 @@ location_table: Dict[int, LocationDict] = { 'map': 9, 'index': 46, 'doom_type': 2003, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue"}, 351307: {'name': 'Warrens (E3M9) - Rocket launcher 2', 'episode': 3, 'map': 9, 'index': 99, 'doom_type': 2003, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue"}, 351308: {'name': 'Warrens (E3M9) - Supercharge', 'episode': 3, 'map': 9, 'index': 101, 'doom_type': 2013, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue"}, 351309: {'name': 'Warrens (E3M9) - Blue skull key', 'episode': 3, 'map': 9, 'index': 108, 'doom_type': 40, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue"}, 351310: {'name': 'Warrens (E3M9) - Berserk', 'episode': 3, 'map': 9, 'index': 114, 'doom_type': 2023, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue"}, 351311: {'name': 'Warrens (E3M9) - Invulnerability', 'episode': 3, 'map': 9, 'index': 120, 'doom_type': 2022, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue"}, 351312: {'name': 'Warrens (E3M9) - Partial invisibility', 'episode': 3, 'map': 9, 'index': 121, 'doom_type': 2024, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue"}, 351313: {'name': 'Warrens (E3M9) - Chaingun', 'episode': 3, 'map': 9, 'index': 122, 'doom_type': 2002, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue"}, 351314: {'name': 'Warrens (E3M9) - Plasma gun', 'episode': 3, 'map': 9, 'index': 135, 'doom_type': 2004, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue trigger"}, 351315: {'name': 'Warrens (E3M9) - Invulnerability 2', 'episode': 3, 'map': 9, 'index': 138, 'doom_type': 2022, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue trigger"}, 351316: {'name': 'Warrens (E3M9) - Armor', 'episode': 3, 'map': 9, 'index': 139, 'doom_type': 2018, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue trigger"}, 351317: {'name': 'Warrens (E3M9) - Chainsaw', 'episode': 3, 'map': 9, 'index': 140, 'doom_type': 2005, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue trigger"}, 351318: {'name': 'Warrens (E3M9) - BFG9000', 'episode': 3, 'map': 9, 'index': 141, 'doom_type': 2006, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue trigger"}, 351319: {'name': 'Warrens (E3M9) - Red skull key', 'episode': 3, 'map': 9, 'index': 143, 'doom_type': 38, - 'region': "Warrens (E3M9) Main"}, + 'region': "Warrens (E3M9) Blue trigger"}, 351320: {'name': 'Warrens (E3M9) - Supercharge 2', 'episode': 3, 'map': 9, 'index': 188, 'doom_type': 2013, - 'region': "Warrens (E3M9) Main"}, - 351321: {'name': 'Central Processing (E1M6) - Complete', + 'region': "Warrens (E3M9) Blue trigger"}, + 351321: {'name': 'Central Processing (E1M6) - Exit', 'episode': 1, 'map': 6, 'index': -1, 'doom_type': -1, - 'region': "Central Processing (E1M6) Blue Yellow"}, - 351322: {'name': 'Command Center (E2M5) - Complete', + 'region': "Central Processing (E1M6) Main"}, + 351322: {'name': 'Command Center (E2M5) - Exit', 'episode': 2, 'map': 5, 'index': -1, 'doom_type': -1, 'region': "Command Center (E2M5) Main"}, - 351323: {'name': 'Command Control (E1M4) - Complete', + 351323: {'name': 'Command Control (E1M4) - Exit', 'episode': 1, 'map': 4, 'index': -1, 'doom_type': -1, 'region': "Command Control (E1M4) Main"}, - 351324: {'name': 'Computer Station (E1M7) - Complete', + 351324: {'name': 'Computer Station (E1M7) - Exit', 'episode': 1, 'map': 7, 'index': -1, 'doom_type': -1, - 'region': "Computer Station (E1M7) Blue"}, - 351325: {'name': 'Containment Area (E2M2) - Complete', + 'region': "Computer Station (E1M7) Main"}, + 351325: {'name': 'Containment Area (E2M2) - Exit', 'episode': 2, 'map': 2, 'index': -1, 'doom_type': -1, - 'region': "Containment Area (E2M2) Red"}, - 351326: {'name': 'Deimos Anomaly (E2M1) - Complete', + 'region': "Containment Area (E2M2) Main"}, + 351326: {'name': 'Deimos Anomaly (E2M1) - Exit', 'episode': 2, 'map': 1, 'index': -1, 'doom_type': -1, - 'region': "Deimos Anomaly (E2M1) Blue"}, - 351327: {'name': 'Deimos Lab (E2M4) - Complete', + 'region': "Deimos Anomaly (E2M1) Main"}, + 351327: {'name': 'Deimos Lab (E2M4) - Exit', 'episode': 2, 'map': 4, 'index': -1, 'doom_type': -1, - 'region': "Deimos Lab (E2M4) Blue Yellow"}, - 351328: {'name': 'Dis (E3M8) - Complete', + 'region': "Deimos Lab (E2M4) Yellow"}, + 351328: {'name': 'Dis (E3M8) - Exit', 'episode': 3, 'map': 8, 'index': -1, 'doom_type': -1, 'region': "Dis (E3M8) Main"}, - 351329: {'name': 'Fortress of Mystery (E2M9) - Complete', + 351329: {'name': 'Fortress of Mystery (E2M9) - Exit', 'episode': 2, 'map': 9, 'index': -1, 'doom_type': -1, - 'region': "Fortress of Mystery (E2M9) Yellow"}, - 351330: {'name': 'Halls of the Damned (E2M6) - Complete', + 'region': "Fortress of Mystery (E2M9) Main"}, + 351330: {'name': 'Halls of the Damned (E2M6) - Exit', 'episode': 2, 'map': 6, 'index': -1, 'doom_type': -1, - 'region': "Halls of the Damned (E2M6) Blue Yellow Red"}, - 351331: {'name': 'Hangar (E1M1) - Complete', + 'region': "Halls of the Damned (E2M6) Main"}, + 351331: {'name': 'Hangar (E1M1) - Exit', 'episode': 1, 'map': 1, 'index': -1, 'doom_type': -1, 'region': "Hangar (E1M1) Main"}, - 351332: {'name': 'Hell Keep (E3M1) - Complete', + 351332: {'name': 'Hell Keep (E3M1) - Exit', 'episode': 3, 'map': 1, 'index': -1, 'doom_type': -1, - 'region': "Hell Keep (E3M1) Narrow"}, - 351333: {'name': 'House of Pain (E3M4) - Complete', + 'region': "Hell Keep (E3M1) Main"}, + 351333: {'name': 'House of Pain (E3M4) - Exit', 'episode': 3, 'map': 4, 'index': -1, 'doom_type': -1, - 'region': "House of Pain (E3M4) Blue Red"}, - 351334: {'name': 'Limbo (E3M7) - Complete', + 'region': "House of Pain (E3M4) Main"}, + 351334: {'name': 'Limbo (E3M7) - Exit', 'episode': 3, 'map': 7, 'index': -1, 'doom_type': -1, - 'region': "Limbo (E3M7) Yellow Red"}, - 351335: {'name': 'Military Base (E1M9) - Complete', + 'region': "Limbo (E3M7) Main"}, + 351335: {'name': 'Military Base (E1M9) - Exit', 'episode': 1, 'map': 9, 'index': -1, 'doom_type': -1, - 'region': "Military Base (E1M9) Blue"}, - 351336: {'name': 'Mt. Erebus (E3M6) - Complete', + 'region': "Military Base (E1M9) Main"}, + 351336: {'name': 'Mt. Erebus (E3M6) - Exit', 'episode': 3, 'map': 6, 'index': -1, 'doom_type': -1, - 'region': "Mt. Erebus (E3M6) Blue"}, - 351337: {'name': 'Nuclear Plant (E1M2) - Complete', + 'region': "Mt. Erebus (E3M6) Main"}, + 351337: {'name': 'Nuclear Plant (E1M2) - Exit', 'episode': 1, 'map': 2, 'index': -1, 'doom_type': -1, - 'region': "Nuclear Plant (E1M2) Red"}, - 351338: {'name': 'Pandemonium (E3M3) - Complete', + 'region': "Nuclear Plant (E1M2) Main"}, + 351338: {'name': 'Pandemonium (E3M3) - Exit', 'episode': 3, 'map': 3, 'index': -1, 'doom_type': -1, - 'region': "Pandemonium (E3M3) Blue"}, - 351339: {'name': 'Phobos Anomaly (E1M8) - Complete', + 'region': "Pandemonium (E3M3) Main"}, + 351339: {'name': 'Phobos Anomaly (E1M8) - Exit', 'episode': 1, 'map': 8, 'index': -1, 'doom_type': -1, - 'region': "Phobos Anomaly (E1M8) Main"}, - 351340: {'name': 'Phobos Lab (E1M5) - Complete', + 'region': "Phobos Anomaly (E1M8) Start"}, + 351340: {'name': 'Phobos Lab (E1M5) - Exit', 'episode': 1, 'map': 5, 'index': -1, 'doom_type': -1, - 'region': "Phobos Lab (E1M5) Blue Yellow"}, - 351341: {'name': 'Refinery (E2M3) - Complete', + 'region': "Phobos Lab (E1M5) Main"}, + 351341: {'name': 'Refinery (E2M3) - Exit', 'episode': 2, 'map': 3, 'index': -1, 'doom_type': -1, - 'region': "Refinery (E2M3) Blue"}, - 351342: {'name': 'Slough of Despair (E3M2) - Complete', + 'region': "Refinery (E2M3) Main"}, + 351342: {'name': 'Slough of Despair (E3M2) - Exit', 'episode': 3, 'map': 2, 'index': -1, 'doom_type': -1, - 'region': "Slough of Despair (E3M2) Blue"}, - 351343: {'name': 'Spawning Vats (E2M7) - Complete', + 'region': "Slough of Despair (E3M2) Main"}, + 351343: {'name': 'Spawning Vats (E2M7) - Exit', 'episode': 2, 'map': 7, 'index': -1, 'doom_type': -1, - 'region': "Spawning Vats (E2M7) Red"}, - 351344: {'name': 'Tower of Babel (E2M8) - Complete', + 'region': "Spawning Vats (E2M7) Main"}, + 351344: {'name': 'Tower of Babel (E2M8) - Exit', 'episode': 2, 'map': 8, 'index': -1, 'doom_type': -1, 'region': "Tower of Babel (E2M8) Main"}, - 351345: {'name': 'Toxin Refinery (E1M3) - Complete', + 351345: {'name': 'Toxin Refinery (E1M3) - Exit', 'episode': 1, 'map': 3, 'index': -1, 'doom_type': -1, - 'region': "Toxin Refinery (E1M3) Blue"}, - 351346: {'name': 'Unholy Cathedral (E3M5) - Complete', + 'region': "Toxin Refinery (E1M3) Main"}, + 351346: {'name': 'Unholy Cathedral (E3M5) - Exit', 'episode': 3, 'map': 5, 'index': -1, 'doom_type': -1, - 'region': "Unholy Cathedral (E3M5) Blue"}, - 351347: {'name': 'Warrens (E3M9) - Complete', + 'region': "Unholy Cathedral (E3M5) Main"}, + 351347: {'name': 'Warrens (E3M9) - Exit', 'episode': 3, 'map': 9, 'index': -1, 'doom_type': -1, - 'region': "Warrens (E3M9) Red"}, + 'region': "Warrens (E3M9) Main"}, } @@ -2115,8 +2115,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Central Processing (E1M6) - Backpack 3', 'Central Processing (E1M6) - Blue keycard', 'Central Processing (E1M6) - Chaingun', - 'Central Processing (E1M6) - Complete', 'Central Processing (E1M6) - Computer area map', + 'Central Processing (E1M6) - Exit', 'Central Processing (E1M6) - Mega Armor', 'Central Processing (E1M6) - Partial invisibility', 'Central Processing (E1M6) - Partial invisibility 2', @@ -2134,8 +2134,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Command Center (E2M5) - Berserk', 'Command Center (E2M5) - Chaingun', 'Command Center (E2M5) - Chainsaw', - 'Command Center (E2M5) - Complete', 'Command Center (E2M5) - Computer area map', + 'Command Center (E2M5) - Exit', 'Command Center (E2M5) - Mega Armor', 'Command Center (E2M5) - Partial invisibility', 'Command Center (E2M5) - Plasma gun', @@ -2145,7 +2145,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Command Control (E1M4) - Backpack', 'Command Control (E1M4) - Blue keycard', 'Command Control (E1M4) - Chaingun', - 'Command Control (E1M4) - Complete', + 'Command Control (E1M4) - Exit', 'Command Control (E1M4) - Mega Armor', 'Command Control (E1M4) - Rocket launcher', 'Command Control (E1M4) - Shotgun', @@ -2159,8 +2159,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Computer Station (E1M7) - Blue keycard', 'Computer Station (E1M7) - Chaingun', 'Computer Station (E1M7) - Chainsaw', - 'Computer Station (E1M7) - Complete', 'Computer Station (E1M7) - Computer area map', + 'Computer Station (E1M7) - Exit', 'Computer Station (E1M7) - Mega Armor', 'Computer Station (E1M7) - Partial invisibility', 'Computer Station (E1M7) - Red keycard', @@ -2181,8 +2181,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Containment Area (E2M2) - Blue keycard', 'Containment Area (E2M2) - Chaingun', 'Containment Area (E2M2) - Chainsaw', - 'Containment Area (E2M2) - Complete', 'Containment Area (E2M2) - Computer area map', + 'Containment Area (E2M2) - Exit', 'Containment Area (E2M2) - Mega Armor', 'Containment Area (E2M2) - Plasma gun', 'Containment Area (E2M2) - Red keycard', @@ -2195,8 +2195,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Deimos Anomaly (E2M1)': { 'Deimos Anomaly (E2M1) - Armor', 'Deimos Anomaly (E2M1) - Blue keycard', - 'Deimos Anomaly (E2M1) - Complete', 'Deimos Anomaly (E2M1) - Computer area map', + 'Deimos Anomaly (E2M1) - Exit', 'Deimos Anomaly (E2M1) - Mega Armor', 'Deimos Anomaly (E2M1) - Plasma gun', 'Deimos Anomaly (E2M1) - Red keycard', @@ -2211,8 +2211,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Deimos Lab (E2M4) - Berserk', 'Deimos Lab (E2M4) - Blue keycard', 'Deimos Lab (E2M4) - Chaingun', - 'Deimos Lab (E2M4) - Complete', 'Deimos Lab (E2M4) - Computer area map', + 'Deimos Lab (E2M4) - Exit', 'Deimos Lab (E2M4) - Mega Armor', 'Deimos Lab (E2M4) - Partial invisibility', 'Deimos Lab (E2M4) - Partial invisibility 2', @@ -2223,7 +2223,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Deimos Lab (E2M4) - Yellow keycard', }, 'Dis (E3M8)': { - 'Dis (E3M8) - Complete', + 'Dis (E3M8) - Exit', 'Dis (E3M8) - Mega Armor', 'Dis (E3M8) - Plasma gun', 'Dis (E3M8) - Rocket launcher', @@ -2233,8 +2233,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Fortress of Mystery (E2M9) - Blue skull key', 'Fortress of Mystery (E2M9) - Chaingun', 'Fortress of Mystery (E2M9) - Chainsaw', - 'Fortress of Mystery (E2M9) - Complete', 'Fortress of Mystery (E2M9) - Computer area map', + 'Fortress of Mystery (E2M9) - Exit', 'Fortress of Mystery (E2M9) - Mega Armor', 'Fortress of Mystery (E2M9) - Plasma gun', 'Fortress of Mystery (E2M9) - Red skull key', @@ -2250,8 +2250,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Halls of the Damned (E2M6) - Blue skull key', 'Halls of the Damned (E2M6) - Chaingun', 'Halls of the Damned (E2M6) - Chainsaw', - 'Halls of the Damned (E2M6) - Complete', 'Halls of the Damned (E2M6) - Computer area map', + 'Halls of the Damned (E2M6) - Exit', 'Halls of the Damned (E2M6) - Mega Armor', 'Halls of the Damned (E2M6) - Partial invisibility', 'Halls of the Damned (E2M6) - Partial invisibility 2', @@ -2265,12 +2265,12 @@ location_name_groups: Dict[str, Set[str]] = { }, 'Hangar (E1M1)': { 'Hangar (E1M1) - Armor', - 'Hangar (E1M1) - Complete', + 'Hangar (E1M1) - Exit', 'Hangar (E1M1) - Mega Armor', 'Hangar (E1M1) - Shotgun', }, 'Hell Keep (E3M1)': { - 'Hell Keep (E3M1) - Complete', + 'Hell Keep (E3M1) - Exit', 'Hell Keep (E3M1) - Rocket launcher', 'Hell Keep (E3M1) - Shotgun', }, @@ -2283,7 +2283,7 @@ location_name_groups: Dict[str, Set[str]] = { 'House of Pain (E3M4) - Berserk', 'House of Pain (E3M4) - Blue skull key', 'House of Pain (E3M4) - Chaingun', - 'House of Pain (E3M4) - Complete', + 'House of Pain (E3M4) - Exit', 'House of Pain (E3M4) - Invulnerability', 'House of Pain (E3M4) - Invulnerability 2', 'House of Pain (E3M4) - Mega Armor', @@ -2301,7 +2301,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Limbo (E3M7) - BFG9000', 'Limbo (E3M7) - Backpack', 'Limbo (E3M7) - Blue skull key', - 'Limbo (E3M7) - Complete', + 'Limbo (E3M7) - Exit', 'Limbo (E3M7) - Mega Armor', 'Limbo (E3M7) - Plasma gun', 'Limbo (E3M7) - Red skull key', @@ -2315,7 +2315,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Military Base (E1M9) - Blue keycard', 'Military Base (E1M9) - Chaingun', 'Military Base (E1M9) - Chainsaw', - 'Military Base (E1M9) - Complete', + 'Military Base (E1M9) - Exit', 'Military Base (E1M9) - Red keycard', 'Military Base (E1M9) - Rocket launcher', 'Military Base (E1M9) - Shotgun', @@ -2330,8 +2330,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Mt. Erebus (E3M6) - Blue skull key 2', 'Mt. Erebus (E3M6) - Chaingun', 'Mt. Erebus (E3M6) - Chainsaw', - 'Mt. Erebus (E3M6) - Complete', 'Mt. Erebus (E3M6) - Computer area map', + 'Mt. Erebus (E3M6) - Exit', 'Mt. Erebus (E3M6) - Invulnerability', 'Mt. Erebus (E3M6) - Invulnerability 2', 'Mt. Erebus (E3M6) - Mega Armor', @@ -2349,7 +2349,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Nuclear Plant (E1M2) - Backpack 2', 'Nuclear Plant (E1M2) - Chaingun', 'Nuclear Plant (E1M2) - Chainsaw', - 'Nuclear Plant (E1M2) - Complete', + 'Nuclear Plant (E1M2) - Exit', 'Nuclear Plant (E1M2) - Mega Armor', 'Nuclear Plant (E1M2) - Red keycard', 'Nuclear Plant (E1M2) - Shotgun', @@ -2362,8 +2362,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Pandemonium (E3M3) - Berserk', 'Pandemonium (E3M3) - Blue skull key', 'Pandemonium (E3M3) - Chaingun', - 'Pandemonium (E3M3) - Complete', 'Pandemonium (E3M3) - Computer area map', + 'Pandemonium (E3M3) - Exit', 'Pandemonium (E3M3) - Invulnerability', 'Pandemonium (E3M3) - Mega Armor', 'Pandemonium (E3M3) - Mega Armor 2', @@ -2375,8 +2375,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Phobos Anomaly (E1M8)': { 'Phobos Anomaly (E1M8) - Armor', 'Phobos Anomaly (E1M8) - Chaingun', - 'Phobos Anomaly (E1M8) - Complete', 'Phobos Anomaly (E1M8) - Computer area map', + 'Phobos Anomaly (E1M8) - Exit', 'Phobos Anomaly (E1M8) - Partial invisibility', 'Phobos Anomaly (E1M8) - Shotgun', 'Phobos Anomaly (E1M8) - Shotgun 2', @@ -2389,8 +2389,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Phobos Lab (E1M5) - Blue keycard', 'Phobos Lab (E1M5) - Chaingun', 'Phobos Lab (E1M5) - Chainsaw', - 'Phobos Lab (E1M5) - Complete', 'Phobos Lab (E1M5) - Computer area map', + 'Phobos Lab (E1M5) - Exit', 'Phobos Lab (E1M5) - Mega Armor', 'Phobos Lab (E1M5) - Mega Armor 2', 'Phobos Lab (E1M5) - Partial invisibility', @@ -2407,7 +2407,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Refinery (E2M3) - Berserk', 'Refinery (E2M3) - Blue keycard', 'Refinery (E2M3) - Chaingun', - 'Refinery (E2M3) - Complete', + 'Refinery (E2M3) - Exit', 'Refinery (E2M3) - Mega Armor', 'Refinery (E2M3) - Partial invisibility', 'Refinery (E2M3) - Partial invisibility 2', @@ -2420,8 +2420,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Slough of Despair (E3M2) - Berserk', 'Slough of Despair (E3M2) - Blue skull key', 'Slough of Despair (E3M2) - Chaingun', - 'Slough of Despair (E3M2) - Complete', 'Slough of Despair (E3M2) - Computer area map', + 'Slough of Despair (E3M2) - Exit', 'Slough of Despair (E3M2) - Mega Armor', 'Slough of Despair (E3M2) - Plasma gun', 'Slough of Despair (E3M2) - Rocket launcher', @@ -2434,8 +2434,8 @@ location_name_groups: Dict[str, Set[str]] = { 'Spawning Vats (E2M7) - Blue keycard', 'Spawning Vats (E2M7) - Chaingun', 'Spawning Vats (E2M7) - Chainsaw', - 'Spawning Vats (E2M7) - Complete', 'Spawning Vats (E2M7) - Computer area map', + 'Spawning Vats (E2M7) - Exit', 'Spawning Vats (E2M7) - Invulnerability', 'Spawning Vats (E2M7) - Invulnerability 2', 'Spawning Vats (E2M7) - Mega Armor', @@ -2447,7 +2447,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Spawning Vats (E2M7) - Yellow keycard', }, 'Tower of Babel (E2M8)': { - 'Tower of Babel (E2M8) - Complete', + 'Tower of Babel (E2M8) - Exit', 'Tower of Babel (E2M8) - Mega Armor', 'Tower of Babel (E2M8) - Rocket launcher', 'Tower of Babel (E2M8) - Supercharge', @@ -2461,7 +2461,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Toxin Refinery (E1M3) - Blue keycard', 'Toxin Refinery (E1M3) - Chaingun', 'Toxin Refinery (E1M3) - Chainsaw', - 'Toxin Refinery (E1M3) - Complete', + 'Toxin Refinery (E1M3) - Exit', 'Toxin Refinery (E1M3) - Mega Armor', 'Toxin Refinery (E1M3) - Partial invisibility', 'Toxin Refinery (E1M3) - Rocket launcher', @@ -2477,7 +2477,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Unholy Cathedral (E3M5) - Blue skull key', 'Unholy Cathedral (E3M5) - Chaingun', 'Unholy Cathedral (E3M5) - Chainsaw', - 'Unholy Cathedral (E3M5) - Complete', + 'Unholy Cathedral (E3M5) - Exit', 'Unholy Cathedral (E3M5) - Invulnerability', 'Unholy Cathedral (E3M5) - Partial invisibility', 'Unholy Cathedral (E3M5) - Plasma gun', @@ -2495,7 +2495,7 @@ location_name_groups: Dict[str, Set[str]] = { 'Warrens (E3M9) - Blue skull key', 'Warrens (E3M9) - Chaingun', 'Warrens (E3M9) - Chainsaw', - 'Warrens (E3M9) - Complete', + 'Warrens (E3M9) - Exit', 'Warrens (E3M9) - Invulnerability', 'Warrens (E3M9) - Invulnerability 2', 'Warrens (E3M9) - Partial invisibility', @@ -2514,8 +2514,9 @@ death_logic_locations = [ "Command Control (E1M4) - Supercharge", "Command Control (E1M4) - Mega Armor", "Containment Area (E2M2) - Supercharge", + "Pandemonium (E3M3) - Mega Armor", "House of Pain (E3M4) - Chaingun", "House of Pain (E3M4) - Invulnerability", - "Pandemonium (E3M3) - Mega Armor", "Unholy Cathedral (E3M5) - BFG9000", + "Mt. Erebus (E3M6) - Chainsaw", ] diff --git a/worlds/doom_1993/Maps.py b/worlds/doom_1993/Maps.py new file mode 100644 index 00000000..b863c2fd --- /dev/null +++ b/worlds/doom_1993/Maps.py @@ -0,0 +1,34 @@ +# This file is auto generated. More info: https://github.com/Daivuk/apdoom + +from typing import List + + +map_names: List[str] = [ + 'Hangar (E1M1)', + 'Nuclear Plant (E1M2)', + 'Toxin Refinery (E1M3)', + 'Command Control (E1M4)', + 'Phobos Lab (E1M5)', + 'Central Processing (E1M6)', + 'Computer Station (E1M7)', + 'Phobos Anomaly (E1M8)', + 'Military Base (E1M9)', + 'Deimos Anomaly (E2M1)', + 'Containment Area (E2M2)', + 'Refinery (E2M3)', + 'Deimos Lab (E2M4)', + 'Command Center (E2M5)', + 'Halls of the Damned (E2M6)', + 'Spawning Vats (E2M7)', + 'Tower of Babel (E2M8)', + 'Fortress of Mystery (E2M9)', + 'Hell Keep (E3M1)', + 'Slough of Despair (E3M2)', + 'Pandemonium (E3M3)', + 'House of Pain (E3M4)', + 'Unholy Cathedral (E3M5)', + 'Mt. Erebus (E3M6)', + 'Limbo (E3M7)', + 'Dis (E3M8)', + 'Warrens (E3M9)', +] diff --git a/worlds/doom_1993/Options.py b/worlds/doom_1993/Options.py index 4e4c24f2..2c680408 100644 --- a/worlds/doom_1993/Options.py +++ b/worlds/doom_1993/Options.py @@ -57,6 +57,11 @@ class AllowDeathLogic(Toggle): display_name = "Allow Death Logic" +class StartWithComputerAreaMaps(Toggle): + """Give the player all Computer Area Map items from the start.""" + display_name = "Start With Computer Area Maps" + + class Episode1(DefaultOnToggle): """Knee-Deep in the Dead. If none of the episodes are chosen, Episode 1 will be chosen by default.""" @@ -80,6 +85,7 @@ options: typing.Dict[str, AssembleOptions] = { "random_monsters": RandomMonsters, "random_pickups": RandomPickups, "allow_death_logic": AllowDeathLogic, + "start_with_computer_area_maps": StartWithComputerAreaMaps, "death_link": DeathLink, "episode1": Episode1, "episode2": Episode2, diff --git a/worlds/doom_1993/Regions.py b/worlds/doom_1993/Regions.py index d3d395bb..f42df2e0 100644 --- a/worlds/doom_1993/Regions.py +++ b/worlds/doom_1993/Regions.py @@ -1,80 +1,358 @@ # This file is auto generated. More info: https://github.com/Daivuk/apdoom from typing import List -from BaseClasses import Region, Entrance +from BaseClasses import TypedDict -regions:List[Region] = [ - "Central Processing (E1M6) Blue", - "Central Processing (E1M6) Blue Yellow", - "Central Processing (E1M6) Main", - "Central Processing (E1M6) Red", - "Command Center (E2M5) Main", - "Command Control (E1M4) Blue Yellow", - "Command Control (E1M4) Main", - "Computer Station (E1M7) Blue", - "Computer Station (E1M7) Main", - "Computer Station (E1M7) Red", - "Computer Station (E1M7) Yellow", - "Computer Station (E1M7) Yellow Red", - "Containment Area (E2M2) Blue", - "Containment Area (E2M2) Main", - "Containment Area (E2M2) Red", - "Containment Area (E2M2) Yellow", - "Deimos Anomaly (E2M1) Blue", - "Deimos Anomaly (E2M1) Main", - "Deimos Anomaly (E2M1) Red", - "Deimos Lab (E2M4) Blue", - "Deimos Lab (E2M4) Blue Yellow", - "Deimos Lab (E2M4) Main", - "Dis (E3M8) Main", - "Fortress of Mystery (E2M9) Blue", - "Fortress of Mystery (E2M9) Main", - "Fortress of Mystery (E2M9) Red", - "Fortress of Mystery (E2M9) Yellow", - "Halls of the Damned (E2M6) Blue Yellow Red", - "Halls of the Damned (E2M6) Main", - "Halls of the Damned (E2M6) Yellow", - "Hangar (E1M1) Main", - "Hell Keep (E3M1) Main", - "Hell Keep (E3M1) Narrow", - "House of Pain (E3M4) Blue", - "House of Pain (E3M4) Blue Red", - "House of Pain (E3M4) Blue Yellow", - "House of Pain (E3M4) Main", - "Limbo (E3M7) Blue", - "Limbo (E3M7) Main", - "Limbo (E3M7) Red", - "Limbo (E3M7) Yellow Red", - "Military Base (E1M9) Blue", - "Military Base (E1M9) Main", - "Military Base (E1M9) Red", - "Military Base (E1M9) Yellow", - "Mt. Erebus (E3M6) Blue", - "Mt. Erebus (E3M6) Main", - "Nuclear Plant (E1M2) Main", - "Nuclear Plant (E1M2) Red", - "Pandemonium (E3M3) Blue", - "Pandemonium (E3M3) Main", - "Phobos Anomaly (E1M8) Main", - "Phobos Lab (E1M5) Blue Yellow", - "Phobos Lab (E1M5) Main", - "Phobos Lab (E1M5) Yellow", - "Refinery (E2M3) Blue", - "Refinery (E2M3) Main", - "Slough of Despair (E3M2) Blue", - "Slough of Despair (E3M2) Main", - "Spawning Vats (E2M7) Blue", - "Spawning Vats (E2M7) Blue Red", - "Spawning Vats (E2M7) Main", - "Spawning Vats (E2M7) Red", - "Spawning Vats (E2M7) Yellow", - "Tower of Babel (E2M8) Main", - "Toxin Refinery (E1M3) Blue", - "Toxin Refinery (E1M3) Main", - "Toxin Refinery (E1M3) Yellow", - "Unholy Cathedral (E3M5) Blue", - "Unholy Cathedral (E3M5) Main", - "Unholy Cathedral (E3M5) Yellow", - "Warrens (E3M9) Main", - "Warrens (E3M9) Red", +class RegionDict(TypedDict, total=False): + name: str + connects_to_hub: bool + connections: List[str] + + +regions:List[RegionDict] = [ + # Hangar (E1M1) + {"name":"Hangar (E1M1) Main", + "connects_to_hub":True, + "connections":[]}, + + # Nuclear Plant (E1M2) + {"name":"Nuclear Plant (E1M2) Main", + "connects_to_hub":True, + "connections":["Nuclear Plant (E1M2) Red"]}, + {"name":"Nuclear Plant (E1M2) Red", + "connects_to_hub":False, + "connections":["Nuclear Plant (E1M2) Main"]}, + + # Toxin Refinery (E1M3) + {"name":"Toxin Refinery (E1M3) Main", + "connects_to_hub":True, + "connections":["Toxin Refinery (E1M3) Blue"]}, + {"name":"Toxin Refinery (E1M3) Blue", + "connects_to_hub":False, + "connections":[ + "Toxin Refinery (E1M3) Yellow", + "Toxin Refinery (E1M3) Main"]}, + {"name":"Toxin Refinery (E1M3) Yellow", + "connects_to_hub":False, + "connections":["Toxin Refinery (E1M3) Blue"]}, + + # Command Control (E1M4) + {"name":"Command Control (E1M4) Main", + "connects_to_hub":True, + "connections":[ + "Command Control (E1M4) Blue", + "Command Control (E1M4) Yellow"]}, + {"name":"Command Control (E1M4) Blue", + "connects_to_hub":False, + "connections":["Command Control (E1M4) Main"]}, + {"name":"Command Control (E1M4) Yellow", + "connects_to_hub":False, + "connections":["Command Control (E1M4) Main"]}, + + # Phobos Lab (E1M5) + {"name":"Phobos Lab (E1M5) Main", + "connects_to_hub":True, + "connections":["Phobos Lab (E1M5) Yellow"]}, + {"name":"Phobos Lab (E1M5) Yellow", + "connects_to_hub":False, + "connections":[ + "Phobos Lab (E1M5) Main", + "Phobos Lab (E1M5) Blue", + "Phobos Lab (E1M5) Green"]}, + {"name":"Phobos Lab (E1M5) Blue", + "connects_to_hub":False, + "connections":[ + "Phobos Lab (E1M5) Green", + "Phobos Lab (E1M5) Yellow"]}, + {"name":"Phobos Lab (E1M5) Green", + "connects_to_hub":False, + "connections":[ + "Phobos Lab (E1M5) Main", + "Phobos Lab (E1M5) Blue"]}, + + # Central Processing (E1M6) + {"name":"Central Processing (E1M6) Main", + "connects_to_hub":True, + "connections":[ + "Central Processing (E1M6) Yellow", + "Central Processing (E1M6) Red", + "Central Processing (E1M6) Blue", + "Central Processing (E1M6) Nukage"]}, + {"name":"Central Processing (E1M6) Red", + "connects_to_hub":False, + "connections":["Central Processing (E1M6) Main"]}, + {"name":"Central Processing (E1M6) Blue", + "connects_to_hub":False, + "connections":["Central Processing (E1M6) Main"]}, + {"name":"Central Processing (E1M6) Yellow", + "connects_to_hub":False, + "connections":["Central Processing (E1M6) Main"]}, + {"name":"Central Processing (E1M6) Nukage", + "connects_to_hub":False, + "connections":["Central Processing (E1M6) Yellow"]}, + + # Computer Station (E1M7) + {"name":"Computer Station (E1M7) Main", + "connects_to_hub":True, + "connections":[ + "Computer Station (E1M7) Red", + "Computer Station (E1M7) Yellow"]}, + {"name":"Computer Station (E1M7) Blue", + "connects_to_hub":False, + "connections":["Computer Station (E1M7) Yellow"]}, + {"name":"Computer Station (E1M7) Red", + "connects_to_hub":False, + "connections":["Computer Station (E1M7) Main"]}, + {"name":"Computer Station (E1M7) Yellow", + "connects_to_hub":False, + "connections":[ + "Computer Station (E1M7) Blue", + "Computer Station (E1M7) Courtyard", + "Computer Station (E1M7) Main"]}, + {"name":"Computer Station (E1M7) Courtyard", + "connects_to_hub":False, + "connections":["Computer Station (E1M7) Yellow"]}, + + # Phobos Anomaly (E1M8) + {"name":"Phobos Anomaly (E1M8) Main", + "connects_to_hub":False, + "connections":[]}, + {"name":"Phobos Anomaly (E1M8) Start", + "connects_to_hub":True, + "connections":["Phobos Anomaly (E1M8) Main"]}, + + # Military Base (E1M9) + {"name":"Military Base (E1M9) Main", + "connects_to_hub":True, + "connections":[ + "Military Base (E1M9) Blue", + "Military Base (E1M9) Yellow", + "Military Base (E1M9) Red"]}, + {"name":"Military Base (E1M9) Blue", + "connects_to_hub":False, + "connections":["Military Base (E1M9) Main"]}, + {"name":"Military Base (E1M9) Red", + "connects_to_hub":False, + "connections":["Military Base (E1M9) Main"]}, + {"name":"Military Base (E1M9) Yellow", + "connects_to_hub":False, + "connections":["Military Base (E1M9) Main"]}, + + # Deimos Anomaly (E2M1) + {"name":"Deimos Anomaly (E2M1) Main", + "connects_to_hub":True, + "connections":[ + "Deimos Anomaly (E2M1) Red", + "Deimos Anomaly (E2M1) Blue"]}, + {"name":"Deimos Anomaly (E2M1) Blue", + "connects_to_hub":False, + "connections":["Deimos Anomaly (E2M1) Main"]}, + {"name":"Deimos Anomaly (E2M1) Red", + "connects_to_hub":False, + "connections":["Deimos Anomaly (E2M1) Main"]}, + + # Containment Area (E2M2) + {"name":"Containment Area (E2M2) Main", + "connects_to_hub":True, + "connections":[ + "Containment Area (E2M2) Yellow", + "Containment Area (E2M2) Blue", + "Containment Area (E2M2) Red"]}, + {"name":"Containment Area (E2M2) Blue", + "connects_to_hub":False, + "connections":["Containment Area (E2M2) Main"]}, + {"name":"Containment Area (E2M2) Red", + "connects_to_hub":False, + "connections":["Containment Area (E2M2) Main"]}, + {"name":"Containment Area (E2M2) Yellow", + "connects_to_hub":False, + "connections":["Containment Area (E2M2) Main"]}, + + # Refinery (E2M3) + {"name":"Refinery (E2M3) Main", + "connects_to_hub":True, + "connections":["Refinery (E2M3) Blue"]}, + {"name":"Refinery (E2M3) Blue", + "connects_to_hub":False, + "connections":["Refinery (E2M3) Main"]}, + + # Deimos Lab (E2M4) + {"name":"Deimos Lab (E2M4) Main", + "connects_to_hub":True, + "connections":["Deimos Lab (E2M4) Blue"]}, + {"name":"Deimos Lab (E2M4) Blue", + "connects_to_hub":False, + "connections":[ + "Deimos Lab (E2M4) Main", + "Deimos Lab (E2M4) Yellow"]}, + {"name":"Deimos Lab (E2M4) Yellow", + "connects_to_hub":False, + "connections":["Deimos Lab (E2M4) Blue"]}, + + # Command Center (E2M5) + {"name":"Command Center (E2M5) Main", + "connects_to_hub":True, + "connections":[]}, + + # Halls of the Damned (E2M6) + {"name":"Halls of the Damned (E2M6) Main", + "connects_to_hub":True, + "connections":[ + "Halls of the Damned (E2M6) Blue Yellow Red", + "Halls of the Damned (E2M6) Yellow", + "Halls of the Damned (E2M6) One way Yellow"]}, + {"name":"Halls of the Damned (E2M6) Yellow", + "connects_to_hub":False, + "connections":["Halls of the Damned (E2M6) Main"]}, + {"name":"Halls of the Damned (E2M6) Blue Yellow Red", + "connects_to_hub":False, + "connections":["Halls of the Damned (E2M6) Main"]}, + {"name":"Halls of the Damned (E2M6) One way Yellow", + "connects_to_hub":False, + "connections":["Halls of the Damned (E2M6) Main"]}, + + # Spawning Vats (E2M7) + {"name":"Spawning Vats (E2M7) Main", + "connects_to_hub":True, + "connections":[ + "Spawning Vats (E2M7) Blue", + "Spawning Vats (E2M7) Entrance Secret", + "Spawning Vats (E2M7) Red", + "Spawning Vats (E2M7) Yellow"]}, + {"name":"Spawning Vats (E2M7) Blue", + "connects_to_hub":False, + "connections":["Spawning Vats (E2M7) Main"]}, + {"name":"Spawning Vats (E2M7) Yellow", + "connects_to_hub":False, + "connections":["Spawning Vats (E2M7) Main"]}, + {"name":"Spawning Vats (E2M7) Red", + "connects_to_hub":False, + "connections":["Spawning Vats (E2M7) Main"]}, + {"name":"Spawning Vats (E2M7) Entrance Secret", + "connects_to_hub":False, + "connections":["Spawning Vats (E2M7) Main"]}, + + # Tower of Babel (E2M8) + {"name":"Tower of Babel (E2M8) Main", + "connects_to_hub":True, + "connections":[]}, + + # Fortress of Mystery (E2M9) + {"name":"Fortress of Mystery (E2M9) Main", + "connects_to_hub":True, + "connections":[ + "Fortress of Mystery (E2M9) Blue", + "Fortress of Mystery (E2M9) Red", + "Fortress of Mystery (E2M9) Yellow"]}, + {"name":"Fortress of Mystery (E2M9) Blue", + "connects_to_hub":False, + "connections":["Fortress of Mystery (E2M9) Main"]}, + {"name":"Fortress of Mystery (E2M9) Red", + "connects_to_hub":False, + "connections":["Fortress of Mystery (E2M9) Main"]}, + {"name":"Fortress of Mystery (E2M9) Yellow", + "connects_to_hub":False, + "connections":["Fortress of Mystery (E2M9) Main"]}, + + # Hell Keep (E3M1) + {"name":"Hell Keep (E3M1) Main", + "connects_to_hub":True, + "connections":["Hell Keep (E3M1) Narrow"]}, + {"name":"Hell Keep (E3M1) Narrow", + "connects_to_hub":False, + "connections":["Hell Keep (E3M1) Main"]}, + + # Slough of Despair (E3M2) + {"name":"Slough of Despair (E3M2) Main", + "connects_to_hub":True, + "connections":["Slough of Despair (E3M2) Blue"]}, + {"name":"Slough of Despair (E3M2) Blue", + "connects_to_hub":False, + "connections":["Slough of Despair (E3M2) Main"]}, + + # Pandemonium (E3M3) + {"name":"Pandemonium (E3M3) Main", + "connects_to_hub":True, + "connections":["Pandemonium (E3M3) Blue"]}, + {"name":"Pandemonium (E3M3) Blue", + "connects_to_hub":False, + "connections":["Pandemonium (E3M3) Main"]}, + + # House of Pain (E3M4) + {"name":"House of Pain (E3M4) Main", + "connects_to_hub":True, + "connections":["House of Pain (E3M4) Blue"]}, + {"name":"House of Pain (E3M4) Blue", + "connects_to_hub":False, + "connections":[ + "House of Pain (E3M4) Main", + "House of Pain (E3M4) Yellow", + "House of Pain (E3M4) Red"]}, + {"name":"House of Pain (E3M4) Red", + "connects_to_hub":False, + "connections":["House of Pain (E3M4) Blue"]}, + {"name":"House of Pain (E3M4) Yellow", + "connects_to_hub":False, + "connections":["House of Pain (E3M4) Blue"]}, + + # Unholy Cathedral (E3M5) + {"name":"Unholy Cathedral (E3M5) Main", + "connects_to_hub":True, + "connections":[ + "Unholy Cathedral (E3M5) Yellow", + "Unholy Cathedral (E3M5) Blue"]}, + {"name":"Unholy Cathedral (E3M5) Blue", + "connects_to_hub":False, + "connections":["Unholy Cathedral (E3M5) Main"]}, + {"name":"Unholy Cathedral (E3M5) Yellow", + "connects_to_hub":False, + "connections":["Unholy Cathedral (E3M5) Main"]}, + + # Mt. Erebus (E3M6) + {"name":"Mt. Erebus (E3M6) Main", + "connects_to_hub":True, + "connections":["Mt. Erebus (E3M6) Blue"]}, + {"name":"Mt. Erebus (E3M6) Blue", + "connects_to_hub":False, + "connections":["Mt. Erebus (E3M6) Main"]}, + + # Limbo (E3M7) + {"name":"Limbo (E3M7) Main", + "connects_to_hub":True, + "connections":[ + "Limbo (E3M7) Red", + "Limbo (E3M7) Blue"]}, + {"name":"Limbo (E3M7) Blue", + "connects_to_hub":False, + "connections":["Limbo (E3M7) Main"]}, + {"name":"Limbo (E3M7) Red", + "connects_to_hub":False, + "connections":[ + "Limbo (E3M7) Main", + "Limbo (E3M7) Yellow"]}, + {"name":"Limbo (E3M7) Yellow", + "connects_to_hub":False, + "connections":["Limbo (E3M7) Red"]}, + + # Dis (E3M8) + {"name":"Dis (E3M8) Main", + "connects_to_hub":True, + "connections":[]}, + + # Warrens (E3M9) + {"name":"Warrens (E3M9) Main", + "connects_to_hub":True, + "connections":[ + "Warrens (E3M9) Red", + "Warrens (E3M9) Blue", + "Warrens (E3M9) Blue trigger"]}, + {"name":"Warrens (E3M9) Red", + "connects_to_hub":False, + "connections":["Warrens (E3M9) Main"]}, + {"name":"Warrens (E3M9) Blue", + "connects_to_hub":False, + "connections":["Warrens (E3M9) Main"]}, + {"name":"Warrens (E3M9) Blue trigger", + "connects_to_hub":False, + "connections":["Warrens (E3M9) Main"]}, ] diff --git a/worlds/doom_1993/Rules.py b/worlds/doom_1993/Rules.py index 09470316..d653ecd7 100644 --- a/worlds/doom_1993/Rules.py +++ b/worlds/doom_1993/Rules.py @@ -11,130 +11,374 @@ def set_rules(doom_1993_world: "DOOM1993World"): player = doom_1993_world.player world = doom_1993_world.multiworld - # Hangar (E1M1) - E1M1 - set_rule(world.get_entrance("Mars -> Hangar (E1M1) Main", player), lambda state: state.has("Hangar (E1M1)", player, 1)) + # Hangar (E1M1) + set_rule(world.get_entrance("Hub -> Hangar (E1M1) Main", player), lambda state: + state.has("Hangar (E1M1)", player, 1)) - # Nuclear Plant (E1M2) - E1M2 - set_rule(world.get_entrance("Mars -> Nuclear Plant (E1M2) Main", player), lambda state: state.has("Nuclear Plant (E1M2)", player, 1) and state.has("Shotgun", player, 1)) - set_rule(world.get_entrance("Mars -> Nuclear Plant (E1M2) Red", player), lambda state: state.has("Nuclear Plant (E1M2)", player, 1) and state.has("Shotgun", player, 1) and (state.has("Nuclear Plant (E1M2) - Red keycard", player, 1))) + # Nuclear Plant (E1M2) + set_rule(world.get_entrance("Hub -> Nuclear Plant (E1M2) Main", player), lambda state: + (state.has("Nuclear Plant (E1M2)", player, 1)) and + (state.has("Shotgun", player, 1) or + state.has("Chaingun", player, 1))) + set_rule(world.get_entrance("Nuclear Plant (E1M2) Main -> Nuclear Plant (E1M2) Red", player), lambda state: + state.has("Nuclear Plant (E1M2) - Red keycard", player, 1)) + set_rule(world.get_entrance("Nuclear Plant (E1M2) Red -> Nuclear Plant (E1M2) Main", player), lambda state: + state.has("Nuclear Plant (E1M2) - Red keycard", player, 1)) - # Toxin Refinery (E1M3) - E1M3 - set_rule(world.get_entrance("Mars -> Toxin Refinery (E1M3) Blue", player), lambda state: state.has("Toxin Refinery (E1M3)", player, 1) and state.has("Shotgun", player, 1) and (state.has("Toxin Refinery (E1M3) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Toxin Refinery (E1M3) Main", player), lambda state: state.has("Toxin Refinery (E1M3)", player, 1) and state.has("Shotgun", player, 1)) - set_rule(world.get_entrance("Mars -> Toxin Refinery (E1M3) Yellow", player), lambda state: state.has("Toxin Refinery (E1M3)", player, 1) and state.has("Shotgun", player, 1)and state.has("Toxin Refinery (E1M3) - Blue keycard", player, 1)and state.has("Toxin Refinery (E1M3) - Yellow keycard", player, 1)) + # Toxin Refinery (E1M3) + set_rule(world.get_entrance("Hub -> Toxin Refinery (E1M3) Main", player), lambda state: + (state.has("Toxin Refinery (E1M3)", player, 1)) and + (state.has("Shotgun", player, 1) or + state.has("Chaingun", player, 1))) + set_rule(world.get_entrance("Toxin Refinery (E1M3) Main -> Toxin Refinery (E1M3) Blue", player), lambda state: + state.has("Toxin Refinery (E1M3) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Toxin Refinery (E1M3) Blue -> Toxin Refinery (E1M3) Yellow", player), lambda state: + state.has("Toxin Refinery (E1M3) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Toxin Refinery (E1M3) Blue -> Toxin Refinery (E1M3) Main", player), lambda state: + state.has("Toxin Refinery (E1M3) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Toxin Refinery (E1M3) Yellow -> Toxin Refinery (E1M3) Blue", player), lambda state: + state.has("Toxin Refinery (E1M3) - Yellow keycard", player, 1)) - # Command Control (E1M4) - E1M4 - set_rule(world.get_entrance("Mars -> Command Control (E1M4) Blue Yellow", player), lambda state: state.has("Command Control (E1M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Command Control (E1M4) - Blue keycard", player, 1) or state.has("Command Control (E1M4) - Yellow keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Command Control (E1M4) Main", player), lambda state: state.has("Command Control (E1M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) + # Command Control (E1M4) + set_rule(world.get_entrance("Hub -> Command Control (E1M4) Main", player), lambda state: + state.has("Command Control (E1M4)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1)) + set_rule(world.get_entrance("Command Control (E1M4) Main -> Command Control (E1M4) Blue", player), lambda state: + state.has("Command Control (E1M4) - Blue keycard", player, 1) or + state.has("Command Control (E1M4) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Command Control (E1M4) Main -> Command Control (E1M4) Yellow", player), lambda state: + state.has("Command Control (E1M4) - Blue keycard", player, 1) or + state.has("Command Control (E1M4) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Command Control (E1M4) Blue -> Command Control (E1M4) Main", player), lambda state: + state.has("Command Control (E1M4) - Yellow keycard", player, 1) or + state.has("Command Control (E1M4) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Command Control (E1M4) Yellow -> Command Control (E1M4) Main", player), lambda state: + state.has("Command Control (E1M4) - Yellow keycard", player, 1) or + state.has("Command Control (E1M4) - Blue keycard", player, 1)) - # Phobos Lab (E1M5) - E1M5 - set_rule(world.get_entrance("Mars -> Phobos Lab (E1M5) Blue Yellow", player), lambda state: state.has("Phobos Lab (E1M5)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Phobos Lab (E1M5) - Yellow keycard", player, 1) or state.has("Phobos Lab (E1M5) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Phobos Lab (E1M5) Main", player), lambda state: state.has("Phobos Lab (E1M5)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Phobos Lab (E1M5) Yellow", player), lambda state: state.has("Phobos Lab (E1M5)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Phobos Lab (E1M5) - Yellow keycard", player, 1))) + # Phobos Lab (E1M5) + set_rule(world.get_entrance("Hub -> Phobos Lab (E1M5) Main", player), lambda state: + state.has("Phobos Lab (E1M5)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1)) + set_rule(world.get_entrance("Phobos Lab (E1M5) Main -> Phobos Lab (E1M5) Yellow", player), lambda state: + state.has("Phobos Lab (E1M5) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Phobos Lab (E1M5) Yellow -> Phobos Lab (E1M5) Blue", player), lambda state: + state.has("Phobos Lab (E1M5) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Phobos Lab (E1M5) Blue -> Phobos Lab (E1M5) Green", player), lambda state: + state.has("Phobos Lab (E1M5) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Phobos Lab (E1M5) Green -> Phobos Lab (E1M5) Blue", player), lambda state: + state.has("Phobos Lab (E1M5) - Blue keycard", player, 1)) - # Central Processing (E1M6) - E1M6 - set_rule(world.get_entrance("Mars -> Central Processing (E1M6) Blue", player), lambda state: state.has("Central Processing (E1M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Central Processing (E1M6) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Central Processing (E1M6) Blue Yellow", player), lambda state: state.has("Central Processing (E1M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Central Processing (E1M6) - Yellow keycard", player, 1) or state.has("Central Processing (E1M6) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Central Processing (E1M6) Main", player), lambda state: state.has("Central Processing (E1M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Central Processing (E1M6) Red", player), lambda state: state.has("Central Processing (E1M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Central Processing (E1M6) - Red keycard", player, 1))) + # Central Processing (E1M6) + set_rule(world.get_entrance("Hub -> Central Processing (E1M6) Main", player), lambda state: + state.has("Central Processing (E1M6)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Rocket launcher", player, 1)) + set_rule(world.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Yellow", player), lambda state: + state.has("Central Processing (E1M6) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Red", player), lambda state: + state.has("Central Processing (E1M6) - Red keycard", player, 1)) + set_rule(world.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Blue", player), lambda state: + state.has("Central Processing (E1M6) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Nukage", player), lambda state: + state.has("Central Processing (E1M6) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Central Processing (E1M6) Yellow -> Central Processing (E1M6) Main", player), lambda state: + state.has("Central Processing (E1M6) - Yellow keycard", player, 1)) - # Computer Station (E1M7) - E1M7 - set_rule(world.get_entrance("Mars -> Computer Station (E1M7) Blue", player), lambda state: state.has("Computer Station (E1M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)and state.has("Computer Station (E1M7) - Blue keycard", player, 1)and state.has("Computer Station (E1M7) - Yellow keycard", player, 1)) - set_rule(world.get_entrance("Mars -> Computer Station (E1M7) Main", player), lambda state: state.has("Computer Station (E1M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Computer Station (E1M7) Red", player), lambda state: state.has("Computer Station (E1M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Computer Station (E1M7) - Red keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Computer Station (E1M7) Yellow", player), lambda state: state.has("Computer Station (E1M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Computer Station (E1M7) - Yellow keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Computer Station (E1M7) Yellow Red", player), lambda state: state.has("Computer Station (E1M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)and state.has("Computer Station (E1M7) - Yellow keycard", player, 1)and state.has("Computer Station (E1M7) - Red keycard", player, 1)) + # Computer Station (E1M7) + set_rule(world.get_entrance("Hub -> Computer Station (E1M7) Main", player), lambda state: + state.has("Computer Station (E1M7)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Rocket launcher", player, 1)) + set_rule(world.get_entrance("Computer Station (E1M7) Main -> Computer Station (E1M7) Red", player), lambda state: + state.has("Computer Station (E1M7) - Red keycard", player, 1)) + set_rule(world.get_entrance("Computer Station (E1M7) Main -> Computer Station (E1M7) Yellow", player), lambda state: + state.has("Computer Station (E1M7) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Computer Station (E1M7) Blue -> Computer Station (E1M7) Yellow", player), lambda state: + state.has("Computer Station (E1M7) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Computer Station (E1M7) Red -> Computer Station (E1M7) Main", player), lambda state: + state.has("Computer Station (E1M7) - Red keycard", player, 1)) + set_rule(world.get_entrance("Computer Station (E1M7) Yellow -> Computer Station (E1M7) Blue", player), lambda state: + state.has("Computer Station (E1M7) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Computer Station (E1M7) Yellow -> Computer Station (E1M7) Courtyard", player), lambda state: + state.has("Computer Station (E1M7) - Yellow keycard", player, 1) and + state.has("Computer Station (E1M7) - Red keycard", player, 1)) + set_rule(world.get_entrance("Computer Station (E1M7) Courtyard -> Computer Station (E1M7) Yellow", player), lambda state: + state.has("Computer Station (E1M7) - Yellow keycard", player, 1)) - # Phobos Anomaly (E1M8) - E1M8 - set_rule(world.get_entrance("Mars -> Phobos Anomaly (E1M8) Main", player), lambda state: state.has("Phobos Anomaly (E1M8)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Rocket launcher", player, 1) or state.has("Plasma gun", player, 1) or state.has("BFG9000", player, 1))) + # Phobos Anomaly (E1M8) + set_rule(world.get_entrance("Hub -> Phobos Anomaly (E1M8) Start", player), lambda state: + (state.has("Phobos Anomaly (E1M8)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1)) and + (state.has("Rocket launcher", player, 1) or + state.has("Plasma gun", player, 1) or + state.has("BFG9000", player, 1))) - # Military Base (E1M9) - E1M9 - set_rule(world.get_entrance("Mars -> Military Base (E1M9) Blue", player), lambda state: state.has("Military Base (E1M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Military Base (E1M9) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Military Base (E1M9) Main", player), lambda state: state.has("Military Base (E1M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Military Base (E1M9) Red", player), lambda state: state.has("Military Base (E1M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Military Base (E1M9) - Red keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Military Base (E1M9) Yellow", player), lambda state: state.has("Military Base (E1M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Military Base (E1M9) - Yellow keycard", player, 1))) + # Military Base (E1M9) + set_rule(world.get_entrance("Hub -> Military Base (E1M9) Main", player), lambda state: + state.has("Military Base (E1M9)", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Shotgun", player, 1)) + set_rule(world.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Blue", player), lambda state: + state.has("Military Base (E1M9) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Yellow", player), lambda state: + state.has("Military Base (E1M9) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Red", player), lambda state: + state.has("Military Base (E1M9) - Red keycard", player, 1)) + set_rule(world.get_entrance("Military Base (E1M9) Blue -> Military Base (E1M9) Main", player), lambda state: + state.has("Military Base (E1M9) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Military Base (E1M9) Yellow -> Military Base (E1M9) Main", player), lambda state: + state.has("Military Base (E1M9) - Yellow keycard", player, 1)) - # Deimos Anomaly (E2M1) - E2M1 - set_rule(world.get_entrance("Mars -> Deimos Anomaly (E2M1) Blue", player), lambda state: state.has("Deimos Anomaly (E2M1)", player, 1) and (state.has("Deimos Anomaly (E2M1) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Deimos Anomaly (E2M1) Main", player), lambda state: state.has("Deimos Anomaly (E2M1)", player, 1)) - set_rule(world.get_entrance("Mars -> Deimos Anomaly (E2M1) Red", player), lambda state: state.has("Deimos Anomaly (E2M1)", player, 1) and (state.has("Deimos Anomaly (E2M1) - Red keycard", player, 1))) + # Deimos Anomaly (E2M1) + set_rule(world.get_entrance("Hub -> Deimos Anomaly (E2M1) Main", player), lambda state: + state.has("Deimos Anomaly (E2M1)", player, 1)) + set_rule(world.get_entrance("Deimos Anomaly (E2M1) Main -> Deimos Anomaly (E2M1) Red", player), lambda state: + state.has("Deimos Anomaly (E2M1) - Red keycard", player, 1)) + set_rule(world.get_entrance("Deimos Anomaly (E2M1) Main -> Deimos Anomaly (E2M1) Blue", player), lambda state: + state.has("Deimos Anomaly (E2M1) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Deimos Anomaly (E2M1) Blue -> Deimos Anomaly (E2M1) Main", player), lambda state: + state.has("Deimos Anomaly (E2M1) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Deimos Anomaly (E2M1) Red -> Deimos Anomaly (E2M1) Main", player), lambda state: + state.has("Deimos Anomaly (E2M1) - Red keycard", player, 1)) - # Containment Area (E2M2) - E2M2 - set_rule(world.get_entrance("Mars -> Containment Area (E2M2) Blue", player), lambda state: state.has("Containment Area (E2M2)", player, 1) and state.has("Shotgun", player, 1) and (state.has("Containment Area (E2M2) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Containment Area (E2M2) Main", player), lambda state: state.has("Containment Area (E2M2)", player, 1) and state.has("Shotgun", player, 1)) - set_rule(world.get_entrance("Mars -> Containment Area (E2M2) Red", player), lambda state: state.has("Containment Area (E2M2)", player, 1) and state.has("Shotgun", player, 1) and (state.has("Containment Area (E2M2) - Red keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Containment Area (E2M2) Yellow", player), lambda state: state.has("Containment Area (E2M2)", player, 1) and state.has("Shotgun", player, 1) and (state.has("Containment Area (E2M2) - Yellow keycard", player, 1))) + # Containment Area (E2M2) + set_rule(world.get_entrance("Hub -> Containment Area (E2M2) Main", player), lambda state: + (state.has("Containment Area (E2M2)", player, 1) and + state.has("Shotgun", player, 1)) and + (state.has("Chaingun", player, 1) or + state.has("Plasma gun", player, 1))) + set_rule(world.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Yellow", player), lambda state: + state.has("Containment Area (E2M2) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Blue", player), lambda state: + state.has("Containment Area (E2M2) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Red", player), lambda state: + state.has("Containment Area (E2M2) - Red keycard", player, 1)) + set_rule(world.get_entrance("Containment Area (E2M2) Blue -> Containment Area (E2M2) Main", player), lambda state: + state.has("Containment Area (E2M2) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Containment Area (E2M2) Red -> Containment Area (E2M2) Main", player), lambda state: + state.has("Containment Area (E2M2) - Red keycard", player, 1)) - # Refinery (E2M3) - E2M3 - set_rule(world.get_entrance("Mars -> Refinery (E2M3) Blue", player), lambda state: state.has("Refinery (E2M3)", player, 1) and state.has("Shotgun", player, 1) and (state.has("Refinery (E2M3) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Refinery (E2M3) Main", player), lambda state: state.has("Refinery (E2M3)", player, 1) and state.has("Shotgun", player, 1)) + # Refinery (E2M3) + set_rule(world.get_entrance("Hub -> Refinery (E2M3) Main", player), lambda state: + (state.has("Refinery (E2M3)", player, 1) and + state.has("Shotgun", player, 1)) and + (state.has("Chaingun", player, 1) or + state.has("Plasma gun", player, 1))) + set_rule(world.get_entrance("Refinery (E2M3) Main -> Refinery (E2M3) Blue", player), lambda state: + state.has("Refinery (E2M3) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Refinery (E2M3) Blue -> Refinery (E2M3) Main", player), lambda state: + state.has("Refinery (E2M3) - Blue keycard", player, 1)) - # Deimos Lab (E2M4) - E2M4 - set_rule(world.get_entrance("Mars -> Deimos Lab (E2M4) Blue", player), lambda state: state.has("Deimos Lab (E2M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Deimos Lab (E2M4) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Deimos Lab (E2M4) Blue Yellow", player), lambda state: state.has("Deimos Lab (E2M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)and state.has("Deimos Lab (E2M4) - Blue keycard", player, 1)and state.has("Deimos Lab (E2M4) - Yellow keycard", player, 1)) - set_rule(world.get_entrance("Mars -> Deimos Lab (E2M4) Main", player), lambda state: state.has("Deimos Lab (E2M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) + # Deimos Lab (E2M4) + set_rule(world.get_entrance("Hub -> Deimos Lab (E2M4) Main", player), lambda state: + state.has("Deimos Lab (E2M4)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Plasma gun", player, 1)) + set_rule(world.get_entrance("Deimos Lab (E2M4) Main -> Deimos Lab (E2M4) Blue", player), lambda state: + state.has("Deimos Lab (E2M4) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Deimos Lab (E2M4) Blue -> Deimos Lab (E2M4) Yellow", player), lambda state: + state.has("Deimos Lab (E2M4) - Yellow keycard", player, 1)) - # Command Center (E2M5) - E2M5 - set_rule(world.get_entrance("Mars -> Command Center (E2M5) Main", player), lambda state: state.has("Command Center (E2M5)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) + # Command Center (E2M5) + set_rule(world.get_entrance("Hub -> Command Center (E2M5) Main", player), lambda state: + state.has("Command Center (E2M5)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Plasma gun", player, 1)) - # Halls of the Damned (E2M6) - E2M6 - set_rule(world.get_entrance("Mars -> Halls of the Damned (E2M6) Blue Yellow Red", player), lambda state: state.has("Halls of the Damned (E2M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)and state.has("Halls of the Damned (E2M6) - Red skull key", player, 1)and state.has("Halls of the Damned (E2M6) - Blue skull key", player, 1)and state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1)) - set_rule(world.get_entrance("Mars -> Halls of the Damned (E2M6) Main", player), lambda state: state.has("Halls of the Damned (E2M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Halls of the Damned (E2M6) Yellow", player), lambda state: state.has("Halls of the Damned (E2M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1))) + # Halls of the Damned (E2M6) + set_rule(world.get_entrance("Hub -> Halls of the Damned (E2M6) Main", player), lambda state: + state.has("Halls of the Damned (E2M6)", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Plasma gun", player, 1)) + set_rule(world.get_entrance("Halls of the Damned (E2M6) Main -> Halls of the Damned (E2M6) Blue Yellow Red", player), lambda state: + state.has("Halls of the Damned (E2M6) - Blue skull key", player, 1) and + state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1) and + state.has("Halls of the Damned (E2M6) - Red skull key", player, 1)) + set_rule(world.get_entrance("Halls of the Damned (E2M6) Main -> Halls of the Damned (E2M6) Yellow", player), lambda state: + state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1)) + set_rule(world.get_entrance("Halls of the Damned (E2M6) Blue Yellow Red -> Halls of the Damned (E2M6) Main", player), lambda state: + state.has("Halls of the Damned (E2M6) - Blue skull key", player, 1) and + state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1) and + state.has("Halls of the Damned (E2M6) - Red skull key", player, 1)) + set_rule(world.get_entrance("Halls of the Damned (E2M6) One way Yellow -> Halls of the Damned (E2M6) Main", player), lambda state: + state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1)) - # Spawning Vats (E2M7) - E2M7 - set_rule(world.get_entrance("Mars -> Spawning Vats (E2M7) Blue", player), lambda state: state.has("Spawning Vats (E2M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Spawning Vats (E2M7) - Blue keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Spawning Vats (E2M7) Blue Red", player), lambda state: state.has("Spawning Vats (E2M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)and state.has("Spawning Vats (E2M7) - Blue keycard", player, 1)and state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) - set_rule(world.get_entrance("Mars -> Spawning Vats (E2M7) Main", player), lambda state: state.has("Spawning Vats (E2M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Spawning Vats (E2M7) Red", player), lambda state: state.has("Spawning Vats (E2M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Spawning Vats (E2M7) - Red keycard", player, 1))) - set_rule(world.get_entrance("Mars -> Spawning Vats (E2M7) Yellow", player), lambda state: state.has("Spawning Vats (E2M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Spawning Vats (E2M7) - Yellow keycard", player, 1))) + # Spawning Vats (E2M7) + set_rule(world.get_entrance("Hub -> Spawning Vats (E2M7) Main", player), lambda state: + state.has("Spawning Vats (E2M7)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Plasma gun", player, 1) and + state.has("Rocket launcher", player, 1)) + set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Blue", player), lambda state: + state.has("Spawning Vats (E2M7) - Blue keycard", player, 1)) + set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Entrance Secret", player), lambda state: + state.has("Spawning Vats (E2M7) - Blue keycard", player, 1) and + state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) + set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Red", player), lambda state: + state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) + set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Yellow", player), lambda state: + state.has("Spawning Vats (E2M7) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Spawning Vats (E2M7) Yellow -> Spawning Vats (E2M7) Main", player), lambda state: + state.has("Spawning Vats (E2M7) - Yellow keycard", player, 1)) + set_rule(world.get_entrance("Spawning Vats (E2M7) Red -> Spawning Vats (E2M7) Main", player), lambda state: + state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) + set_rule(world.get_entrance("Spawning Vats (E2M7) Entrance Secret -> Spawning Vats (E2M7) Main", player), lambda state: + state.has("Spawning Vats (E2M7) - Blue keycard", player, 1) and + state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) - # Tower of Babel (E2M8) - E2M8 - set_rule(world.get_entrance("Mars -> Tower of Babel (E2M8) Main", player), lambda state: state.has("Tower of Babel (E2M8)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Rocket launcher", player, 1) or state.has("Plasma gun", player, 1) or state.has("BFG9000", player, 1))) + # Tower of Babel (E2M8) + set_rule(world.get_entrance("Hub -> Tower of Babel (E2M8) Main", player), lambda state: + state.has("Tower of Babel (E2M8)", player, 1)) - # Fortress of Mystery (E2M9) - E2M9 - set_rule(world.get_entrance("Mars -> Fortress of Mystery (E2M9) Blue", player), lambda state: state.has("Fortress of Mystery (E2M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Fortress of Mystery (E2M9) - Blue skull key", player, 1))) - set_rule(world.get_entrance("Mars -> Fortress of Mystery (E2M9) Main", player), lambda state: state.has("Fortress of Mystery (E2M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Fortress of Mystery (E2M9) Red", player), lambda state: state.has("Fortress of Mystery (E2M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Fortress of Mystery (E2M9) - Red skull key", player, 1))) - set_rule(world.get_entrance("Mars -> Fortress of Mystery (E2M9) Yellow", player), lambda state: state.has("Fortress of Mystery (E2M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Fortress of Mystery (E2M9) - Yellow skull key", player, 1))) + # Fortress of Mystery (E2M9) + set_rule(world.get_entrance("Hub -> Fortress of Mystery (E2M9) Main", player), lambda state: + (state.has("Fortress of Mystery (E2M9)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1)) and + (state.has("Rocket launcher", player, 1) or + state.has("Plasma gun", player, 1) or + state.has("BFG9000", player, 1))) + set_rule(world.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Blue", player), lambda state: + state.has("Fortress of Mystery (E2M9) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Red", player), lambda state: + state.has("Fortress of Mystery (E2M9) - Red skull key", player, 1)) + set_rule(world.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Yellow", player), lambda state: + state.has("Fortress of Mystery (E2M9) - Yellow skull key", player, 1)) + set_rule(world.get_entrance("Fortress of Mystery (E2M9) Blue -> Fortress of Mystery (E2M9) Main", player), lambda state: + state.has("Fortress of Mystery (E2M9) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Fortress of Mystery (E2M9) Red -> Fortress of Mystery (E2M9) Main", player), lambda state: + state.has("Fortress of Mystery (E2M9) - Red skull key", player, 1)) + set_rule(world.get_entrance("Fortress of Mystery (E2M9) Yellow -> Fortress of Mystery (E2M9) Main", player), lambda state: + state.has("Fortress of Mystery (E2M9) - Yellow skull key", player, 1)) - # Hell Keep (E3M1) - E3M1 - set_rule(world.get_entrance("Mars -> Hell Keep (E3M1) Main", player), lambda state: state.has("Hell Keep (E3M1)", player, 1)) - set_rule(world.get_entrance("Mars -> Hell Keep (E3M1) Narrow", player), lambda state: state.has("Hell Keep (E3M1)", player, 1) and (state.has("Shotgun", player, 1) or state.has("Chaingun", player, 1))) + # Hell Keep (E3M1) + set_rule(world.get_entrance("Hub -> Hell Keep (E3M1) Main", player), lambda state: + state.has("Hell Keep (E3M1)", player, 1)) + set_rule(world.get_entrance("Hell Keep (E3M1) Main -> Hell Keep (E3M1) Narrow", player), lambda state: + state.has("Chaingun", player, 1) or + state.has("Shotgun", player, 1)) - # Slough of Despair (E3M2) - E3M2 - set_rule(world.get_entrance("Mars -> Slough of Despair (E3M2) Blue", player), lambda state: state.has("Slough of Despair (E3M2)", player, 1) and state.has("Shotgun", player, 1) and (state.has("Slough of Despair (E3M2) - Blue skull key", player, 1))) - set_rule(world.get_entrance("Mars -> Slough of Despair (E3M2) Main", player), lambda state: state.has("Slough of Despair (E3M2)", player, 1) and state.has("Shotgun", player, 1)) + # Slough of Despair (E3M2) + set_rule(world.get_entrance("Hub -> Slough of Despair (E3M2) Main", player), lambda state: + (state.has("Slough of Despair (E3M2)", player, 1)) and + (state.has("Shotgun", player, 1) or + state.has("Chaingun", player, 1))) + set_rule(world.get_entrance("Slough of Despair (E3M2) Main -> Slough of Despair (E3M2) Blue", player), lambda state: + state.has("Slough of Despair (E3M2) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Slough of Despair (E3M2) Blue -> Slough of Despair (E3M2) Main", player), lambda state: + state.has("Slough of Despair (E3M2) - Blue skull key", player, 1)) - # Pandemonium (E3M3) - E3M3 - set_rule(world.get_entrance("Mars -> Pandemonium (E3M3) Blue", player), lambda state: state.has("Pandemonium (E3M3)", player, 1) and state.has("Shotgun", player, 1) and (state.has("Pandemonium (E3M3) - Blue skull key", player, 1))) - set_rule(world.get_entrance("Mars -> Pandemonium (E3M3) Main", player), lambda state: state.has("Pandemonium (E3M3)", player, 1) and state.has("Shotgun", player, 1)) + # Pandemonium (E3M3) + set_rule(world.get_entrance("Hub -> Pandemonium (E3M3) Main", player), lambda state: + (state.has("Pandemonium (E3M3)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1)) and + (state.has("Rocket launcher", player, 1) or + state.has("Plasma gun", player, 1) or + state.has("BFG9000", player, 1))) + set_rule(world.get_entrance("Pandemonium (E3M3) Main -> Pandemonium (E3M3) Blue", player), lambda state: + state.has("Pandemonium (E3M3) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Pandemonium (E3M3) Blue -> Pandemonium (E3M3) Main", player), lambda state: + state.has("Pandemonium (E3M3) - Blue skull key", player, 1)) - # House of Pain (E3M4) - E3M4 - set_rule(world.get_entrance("Mars -> House of Pain (E3M4) Blue", player), lambda state: state.has("House of Pain (E3M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("House of Pain (E3M4) - Blue skull key", player, 1))) - set_rule(world.get_entrance("Mars -> House of Pain (E3M4) Blue Red", player), lambda state: state.has("House of Pain (E3M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)and state.has("House of Pain (E3M4) - Red skull key", player, 1)and state.has("House of Pain (E3M4) - Blue skull key", player, 1)) - set_rule(world.get_entrance("Mars -> House of Pain (E3M4) Blue Yellow", player), lambda state: state.has("House of Pain (E3M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)and state.has("House of Pain (E3M4) - Yellow skull key", player, 1)and state.has("House of Pain (E3M4) - Blue skull key", player, 1)) - set_rule(world.get_entrance("Mars -> House of Pain (E3M4) Main", player), lambda state: state.has("House of Pain (E3M4)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) + # House of Pain (E3M4) + set_rule(world.get_entrance("Hub -> House of Pain (E3M4) Main", player), lambda state: + (state.has("House of Pain (E3M4)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1)) and + (state.has("Rocket launcher", player, 1) or + state.has("Plasma gun", player, 1) or + state.has("BFG9000", player, 1))) + set_rule(world.get_entrance("House of Pain (E3M4) Main -> House of Pain (E3M4) Blue", player), lambda state: + state.has("House of Pain (E3M4) - Blue skull key", player, 1)) + set_rule(world.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Main", player), lambda state: + state.has("House of Pain (E3M4) - Blue skull key", player, 1)) + set_rule(world.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Yellow", player), lambda state: + state.has("House of Pain (E3M4) - Yellow skull key", player, 1)) + set_rule(world.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Red", player), lambda state: + state.has("House of Pain (E3M4) - Red skull key", player, 1)) + set_rule(world.get_entrance("House of Pain (E3M4) Red -> House of Pain (E3M4) Blue", player), lambda state: + state.has("House of Pain (E3M4) - Red skull key", player, 1)) + set_rule(world.get_entrance("House of Pain (E3M4) Yellow -> House of Pain (E3M4) Blue", player), lambda state: + state.has("House of Pain (E3M4) - Yellow skull key", player, 1)) - # Unholy Cathedral (E3M5) - E3M5 - set_rule(world.get_entrance("Mars -> Unholy Cathedral (E3M5) Blue", player), lambda state: state.has("Unholy Cathedral (E3M5)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Unholy Cathedral (E3M5) - Blue skull key", player, 1))) - set_rule(world.get_entrance("Mars -> Unholy Cathedral (E3M5) Main", player), lambda state: state.has("Unholy Cathedral (E3M5)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Unholy Cathedral (E3M5) Yellow", player), lambda state: state.has("Unholy Cathedral (E3M5)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Unholy Cathedral (E3M5) - Yellow skull key", player, 1))) + # Unholy Cathedral (E3M5) + set_rule(world.get_entrance("Hub -> Unholy Cathedral (E3M5) Main", player), lambda state: + (state.has("Unholy Cathedral (E3M5)", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Shotgun", player, 1)) and + (state.has("Rocket launcher", player, 1) or + state.has("Plasma gun", player, 1) or + state.has("BFG9000", player, 1))) + set_rule(world.get_entrance("Unholy Cathedral (E3M5) Main -> Unholy Cathedral (E3M5) Yellow", player), lambda state: + state.has("Unholy Cathedral (E3M5) - Yellow skull key", player, 1)) + set_rule(world.get_entrance("Unholy Cathedral (E3M5) Main -> Unholy Cathedral (E3M5) Blue", player), lambda state: + state.has("Unholy Cathedral (E3M5) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Unholy Cathedral (E3M5) Blue -> Unholy Cathedral (E3M5) Main", player), lambda state: + state.has("Unholy Cathedral (E3M5) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Unholy Cathedral (E3M5) Yellow -> Unholy Cathedral (E3M5) Main", player), lambda state: + state.has("Unholy Cathedral (E3M5) - Yellow skull key", player, 1)) - # Mt. Erebus (E3M6) - E3M6 - set_rule(world.get_entrance("Mars -> Mt. Erebus (E3M6) Blue", player), lambda state: state.has("Mt. Erebus (E3M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Mt. Erebus (E3M6) - Blue skull key", player, 1))) - set_rule(world.get_entrance("Mars -> Mt. Erebus (E3M6) Main", player), lambda state: state.has("Mt. Erebus (E3M6)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) + # Mt. Erebus (E3M6) + set_rule(world.get_entrance("Hub -> Mt. Erebus (E3M6) Main", player), lambda state: + state.has("Mt. Erebus (E3M6)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1)) + set_rule(world.get_entrance("Mt. Erebus (E3M6) Main -> Mt. Erebus (E3M6) Blue", player), lambda state: + state.has("Mt. Erebus (E3M6) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Mt. Erebus (E3M6) Blue -> Mt. Erebus (E3M6) Main", player), lambda state: + state.has("Mt. Erebus (E3M6) - Blue skull key", player, 1)) - # Limbo (E3M7) - E3M7 - set_rule(world.get_entrance("Mars -> Limbo (E3M7) Blue", player), lambda state: state.has("Limbo (E3M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Limbo (E3M7) - Blue skull key", player, 1))) - set_rule(world.get_entrance("Mars -> Limbo (E3M7) Main", player), lambda state: state.has("Limbo (E3M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1)) - set_rule(world.get_entrance("Mars -> Limbo (E3M7) Red", player), lambda state: state.has("Limbo (E3M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Limbo (E3M7) - Red skull key", player, 1))) - set_rule(world.get_entrance("Mars -> Limbo (E3M7) Yellow Red", player), lambda state: state.has("Limbo (E3M7)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Limbo (E3M7) - Yellow skull key", player, 1) or state.has("Limbo (E3M7) - Red skull key", player, 1))) + # Limbo (E3M7) + set_rule(world.get_entrance("Hub -> Limbo (E3M7) Main", player), lambda state: + (state.has("Limbo (E3M7)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1)) and + (state.has("Rocket launcher", player, 1) or + state.has("Plasma gun", player, 1) or + state.has("BFG9000", player, 1))) + set_rule(world.get_entrance("Limbo (E3M7) Main -> Limbo (E3M7) Red", player), lambda state: + state.has("Limbo (E3M7) - Red skull key", player, 1)) + set_rule(world.get_entrance("Limbo (E3M7) Main -> Limbo (E3M7) Blue", player), lambda state: + state.has("Limbo (E3M7) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Limbo (E3M7) Red -> Limbo (E3M7) Yellow", player), lambda state: + state.has("Limbo (E3M7) - Yellow skull key", player, 1)) - # Dis (E3M8) - E3M8 - set_rule(world.get_entrance("Mars -> Dis (E3M8) Main", player), lambda state: state.has("Dis (E3M8)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Rocket launcher", player, 1) or state.has("Plasma gun", player, 1) or state.has("BFG9000", player, 1))) + # Dis (E3M8) + set_rule(world.get_entrance("Hub -> Dis (E3M8) Main", player), lambda state: + (state.has("Dis (E3M8)", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Shotgun", player, 1)) and + (state.has("Plasma gun", player, 1) or + state.has("BFG9000", player, 1) or + state.has("Rocket launcher", player, 1))) - # Warrens (E3M9) - E3M9 - set_rule(world.get_entrance("Mars -> Warrens (E3M9) Main", player), lambda state: state.has("Warrens (E3M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Rocket launcher", player, 1) or state.has("Plasma gun", player, 1) or state.has("BFG9000", player, 1))) - set_rule(world.get_entrance("Mars -> Warrens (E3M9) Red", player), lambda state: state.has("Warrens (E3M9)", player, 1) and state.has("Shotgun", player, 1) and state.has("Chaingun", player, 1) and (state.has("Warrens (E3M9) - Red skull key", player, 1))) + # Warrens (E3M9) + set_rule(world.get_entrance("Hub -> Warrens (E3M9) Main", player), lambda state: + (state.has("Warrens (E3M9)", player, 1) and + state.has("Shotgun", player, 1) and + state.has("Chaingun", player, 1) and + state.has("Plasma gun", player, 1)) and + (state.has("Rocket launcher", player, 1) or + state.has("BFG9000", player, 1))) + set_rule(world.get_entrance("Warrens (E3M9) Main -> Warrens (E3M9) Red", player), lambda state: + state.has("Warrens (E3M9) - Red skull key", player, 1)) + set_rule(world.get_entrance("Warrens (E3M9) Main -> Warrens (E3M9) Blue trigger", player), lambda state: + state.has("Warrens (E3M9) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Warrens (E3M9) Red -> Warrens (E3M9) Main", player), lambda state: + state.has("Warrens (E3M9) - Red skull key", player, 1)) + set_rule(world.get_entrance("Warrens (E3M9) Blue -> Warrens (E3M9) Main", player), lambda state: + state.has("Warrens (E3M9) - Blue skull key", player, 1)) + set_rule(world.get_entrance("Warrens (E3M9) Blue trigger -> Warrens (E3M9) Main", player), lambda state: + state.has("Warrens (E3M9) - Blue skull key", player, 1)) diff --git a/worlds/doom_1993/__init__.py b/worlds/doom_1993/__init__.py index 7ad6ee97..cfe0440e 100644 --- a/worlds/doom_1993/__init__.py +++ b/worlds/doom_1993/__init__.py @@ -2,12 +2,15 @@ import functools import logging from typing import Any, Dict, List -from BaseClasses import CollectionState, Item, ItemClassification, Location, MultiWorld, Region, Tutorial +from BaseClasses import Entrance, CollectionState, Item, ItemClassification, Location, MultiWorld, Region, Tutorial from worlds.AutoWorld import WebWorld, World -from . import Events, Items, Locations, Options, Regions, Rules +from . import Items, Locations, Maps, Options, Regions, Rules logger = logging.getLogger("DOOM 1993") +DOOM_TYPE_LEVEL_COMPLETE = -2 +DOOM_TYPE_COMPUTER_AREA_MAP = 2026 + class DOOM1993Location(Location): game: str = "DOOM 1993" @@ -37,7 +40,7 @@ class DOOM1993World(World): option_definitions = Options.options game = "DOOM 1993" web = DOOM1993Web() - data_version = 1 + data_version = 2 required_client_version = (0, 3, 9) item_name_to_id = {data["name"]: item_id for item_id, data in Items.item_table.items()} @@ -88,36 +91,59 @@ class DOOM1993World(World): def create_regions(self): # Main regions menu_region = Region("Menu", self.player, self.multiworld) - mars_region = Region("Mars", self.player, self.multiworld) - self.multiworld.regions += [menu_region, mars_region] - menu_region.add_exits(["Mars"]) + hub_region = Region("Hub", self.player, self.multiworld) + self.multiworld.regions += [menu_region, hub_region] + menu_region.add_exits(["Hub"]) # Create regions and locations - for region_name in Regions.regions: + main_regions = [] + connections = [] + for region_dict in Regions.regions: + region_name = region_dict["name"] + if region_dict["connects_to_hub"]: + main_regions.append(region_name) + region = Region(region_name, self.player, self.multiworld) region.add_locations({ - loc["name"]: (loc_id if loc["index"] != -1 else None) + loc["name"]: loc_id for loc_id, loc in Locations.location_table.items() if loc["region"] == region_name and self.included_episodes[loc["episode"] - 1] }, DOOM1993Location) self.multiworld.regions.append(region) - # Link all regions to Mars - mars_region.add_exits(Regions.regions) + for connection in region_dict["connections"]: + connections.append((region, connection)) + + # Connect main regions to Hub + hub_region.add_exits(main_regions) + + # Do the other connections between regions (They are not all both ways) + for connection in connections: + source = connection[0] + target = self.multiworld.get_region(connection[1], self.player) + + entrance = Entrance(self.player, f"{source.name} -> {target.name}", source) + source.exits.append(entrance) + entrance.connect(target) # Sum locations for items creation self.location_count = len(self.multiworld.get_locations(self.player)) def completion_rule(self, state: CollectionState): - for event in Events.events: - if event not in self.location_name_to_id: + for map_name in Maps.map_names: + if map_name + " - Exit" not in self.location_name_to_id: continue - loc = Locations.location_table[self.location_name_to_id[event]] + + # Exit location names are in form: Hangar (E1M1) - Exit + loc = Locations.location_table[self.location_name_to_id[map_name + " - Exit"]] if not self.included_episodes[loc["episode"] - 1]: continue - if not state.has(event, self.player, 1): + + # Map complete item names are in form: Hangar (E1M1) - Complete + if not state.has(map_name + " - Complete", self.player, 1): return False + return True def set_rules(self): @@ -126,16 +152,14 @@ class DOOM1993World(World): # Forbid progression items to locations that can be missed and can't be picked up. (e.g. One-time timed # platform) Unless the user allows for it. - if getattr(self.multiworld, "allow_death_logic")[self.player]: - self.multiworld.exclude_locations[self.player] += set(Locations.death_logic_locations) + if not getattr(self.multiworld, "allow_death_logic")[self.player].value: + for death_logic_location in Locations.death_logic_locations: + self.multiworld.exclude_locations[self.player].value.add(death_logic_location) def create_item(self, name: str) -> DOOM1993Item: item_id: int = self.item_name_to_id[name] return DOOM1993Item(name, Items.item_table[item_id]["classification"], item_id, self.player) - def create_event(self, name: str) -> DOOM1993Item: - return DOOM1993Item(name, ItemClassification.progression, None, self.player) - def place_locked_item_in_locations(self, item_name, locations): location = self.multiworld.random.choice(locations) self.multiworld.get_location(location, self.player).place_locked_item(self.create_item(item_name)) @@ -144,14 +168,21 @@ class DOOM1993World(World): def create_items(self): is_only_first_episode: bool = self.get_episode_count() == 1 and self.included_episodes[0] itempool: List[DOOM1993Item] = [] + start_with_computer_area_maps: bool = getattr(self.multiworld, "start_with_computer_area_maps")[self.player].value # Items for item_id, item in Items.item_table.items(): + if item["doom_type"] == DOOM_TYPE_LEVEL_COMPLETE: + continue # We'll fill it manually later + + if item["doom_type"] == DOOM_TYPE_COMPUTER_AREA_MAP and start_with_computer_area_maps: + continue # We'll fill it manually, and we will put fillers in place + if item["episode"] != -1 and not self.included_episodes[item["episode"] - 1]: continue if item["name"] in {"BFG9000", "Plasma Gun"} and is_only_first_episode: - continue # Don't include those guns in first episode + continue # Don't include those guns if only first episode if item["name"] in {"Warrens (E3M9) - Blue skull key", "Halls of the Damned (E2M6) - Yellow skull key"}: continue @@ -160,17 +191,23 @@ class DOOM1993World(World): itempool += [self.create_item(item["name"]) for _ in range(count)] # Place end level items in locked locations - for event in Events.events: - if event not in self.location_name_to_id: + for map_name in Maps.map_names: + loc_name = map_name + " - Exit" + item_name = map_name + " - Complete" + + if loc_name not in self.location_name_to_id: continue - loc = Locations.location_table[self.location_name_to_id[event]] + if item_name not in self.item_name_to_id: + continue + + loc = Locations.location_table[self.location_name_to_id[loc_name]] if not self.included_episodes[loc["episode"] - 1]: continue - self.multiworld.get_location(event, self.player).place_locked_item(self.create_event(event)) + self.multiworld.get_location(loc_name, self.player).place_locked_item(self.create_item(item_name)) self.location_count -= 1 - + # Special case for E2M6 and E3M8, where you enter a normal door then get stuck behind with a key door. # We need to put the key in the locations available behind this door. if self.included_episodes[1]: @@ -193,8 +230,14 @@ class DOOM1993World(World): for i in range(len(self.included_episodes)): if self.included_episodes[i]: self.multiworld.push_precollected(self.create_item(self.starting_level_for_episode[i])) + + # Give Computer area maps if option selected + if getattr(self.multiworld, "start_with_computer_area_maps")[self.player].value: + for item_id, item_dict in Items.item_table.items(): + if item_dict["doom_type"] == DOOM_TYPE_COMPUTER_AREA_MAP: + self.multiworld.push_precollected(self.create_item(item_dict["name"])) - # Fill the rest starting with weapons, powerups then fillers + # Fill the rest starting with powerups, then fillers self.create_ratioed_items("Armor", itempool) self.create_ratioed_items("Mega Armor", itempool) self.create_ratioed_items("Berserk", itempool)