DOOM 1993: Better region logics/rules, balancing, level exits (#1973)

This commit is contained in:
David St-Louis 2023-07-21 20:22:24 -04:00 committed by GitHub
parent 21228f9c63
commit 8015734fcf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 1083 additions and 349 deletions

View File

@ -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',
]

View File

@ -8,7 +8,7 @@ class ItemDict(TypedDict, total=False):
classification: ItemClassification classification: ItemClassification
count: int count: int
name: str 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. episode: int # Relevant if that item targets a specific level, like keycard or map reveal pickup.
map: int map: int
@ -722,6 +722,168 @@ item_table: Dict[int, ItemDict] = {
'doom_type': 17, 'doom_type': 17,
'episode': -1, 'episode': -1,
'map': -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},
} }

View File

@ -198,13 +198,13 @@ location_table: Dict[int, LocationDict] = {
'map': 4, 'map': 4,
'index': 39, 'index': 39,
'doom_type': 2018, 'doom_type': 2018,
'region': "Command Control (E1M4) Blue Yellow"}, 'region': "Command Control (E1M4) Blue"},
351031: {'name': 'Command Control (E1M4) - Yellow keycard', 351031: {'name': 'Command Control (E1M4) - Yellow keycard',
'episode': 1, 'episode': 1,
'map': 4, 'map': 4,
'index': 61, 'index': 61,
'doom_type': 6, 'doom_type': 6,
'region': "Command Control (E1M4) Blue Yellow"}, 'region': "Command Control (E1M4) Blue"},
351032: {'name': 'Command Control (E1M4) - Blue keycard', 351032: {'name': 'Command Control (E1M4) - Blue keycard',
'episode': 1, 'episode': 1,
'map': 4, 'map': 4,
@ -228,7 +228,7 @@ location_table: Dict[int, LocationDict] = {
'map': 4, 'map': 4,
'index': 100, 'index': 100,
'doom_type': 2019, 'doom_type': 2019,
'region': "Command Control (E1M4) Blue Yellow"}, 'region': "Command Control (E1M4) Main"},
351036: {'name': 'Command Control (E1M4) - Backpack', 351036: {'name': 'Command Control (E1M4) - Backpack',
'episode': 1, 'episode': 1,
'map': 4, 'map': 4,
@ -246,7 +246,7 @@ location_table: Dict[int, LocationDict] = {
'map': 5, 'map': 5,
'index': 4, 'index': 4,
'doom_type': 5, 'doom_type': 5,
'region': "Phobos Lab (E1M5) Yellow"}, 'region': "Phobos Lab (E1M5) Green"},
351039: {'name': 'Phobos Lab (E1M5) - Yellow keycard', 351039: {'name': 'Phobos Lab (E1M5) - Yellow keycard',
'episode': 1, 'episode': 1,
'map': 5, 'map': 5,
@ -294,19 +294,19 @@ location_table: Dict[int, LocationDict] = {
'map': 5, 'map': 5,
'index': 173, 'index': 173,
'doom_type': 2002, 'doom_type': 2002,
'region': "Phobos Lab (E1M5) Yellow"}, 'region': "Phobos Lab (E1M5) Green"},
351047: {'name': 'Phobos Lab (E1M5) - Backpack', 351047: {'name': 'Phobos Lab (E1M5) - Backpack',
'episode': 1, 'episode': 1,
'map': 5, 'map': 5,
'index': 174, 'index': 174,
'doom_type': 8, 'doom_type': 8,
'region': "Phobos Lab (E1M5) Yellow"}, 'region': "Phobos Lab (E1M5) Green"},
351048: {'name': 'Phobos Lab (E1M5) - Computer area map', 351048: {'name': 'Phobos Lab (E1M5) - Computer area map',
'episode': 1, 'episode': 1,
'map': 5, 'map': 5,
'index': 176, 'index': 176,
'doom_type': 2026, 'doom_type': 2026,
'region': "Phobos Lab (E1M5) Yellow"}, 'region': "Phobos Lab (E1M5) Green"},
351049: {'name': 'Phobos Lab (E1M5) - Mega Armor 2', 351049: {'name': 'Phobos Lab (E1M5) - Mega Armor 2',
'episode': 1, 'episode': 1,
'map': 5, 'map': 5,
@ -330,7 +330,7 @@ location_table: Dict[int, LocationDict] = {
'map': 5, 'map': 5,
'index': 280, 'index': 280,
'doom_type': 2018, 'doom_type': 2018,
'region': "Phobos Lab (E1M5) Yellow"}, 'region': "Phobos Lab (E1M5) Green"},
351053: {'name': 'Phobos Lab (E1M5) - Partial invisibility', 351053: {'name': 'Phobos Lab (E1M5) - Partial invisibility',
'episode': 1, 'episode': 1,
'map': 5, 'map': 5,
@ -432,7 +432,7 @@ location_table: Dict[int, LocationDict] = {
'map': 6, 'map': 6,
'index': 291, 'index': 291,
'doom_type': 2018, 'doom_type': 2018,
'region': "Central Processing (E1M6) Blue Yellow"}, 'region': "Central Processing (E1M6) Yellow"},
351070: {'name': 'Central Processing (E1M6) - Armor 4', 351070: {'name': 'Central Processing (E1M6) - Armor 4',
'episode': 1, 'episode': 1,
'map': 6, 'map': 6,
@ -444,13 +444,13 @@ location_table: Dict[int, LocationDict] = {
'map': 6, 'map': 6,
'index': 392, 'index': 392,
'doom_type': 2013, 'doom_type': 2013,
'region': "Central Processing (E1M6) Blue"}, 'region': "Central Processing (E1M6) Nukage"},
351072: {'name': 'Central Processing (E1M6) - Backpack 3', 351072: {'name': 'Central Processing (E1M6) - Backpack 3',
'episode': 1, 'episode': 1,
'map': 6, 'map': 6,
'index': 395, 'index': 395,
'doom_type': 8, 'doom_type': 8,
'region': "Central Processing (E1M6) Blue"}, 'region': "Central Processing (E1M6) Nukage"},
351073: {'name': 'Computer Station (E1M7) - Chaingun', 351073: {'name': 'Computer Station (E1M7) - Chaingun',
'episode': 1, 'episode': 1,
'map': 7, 'map': 7,
@ -540,7 +540,7 @@ location_table: Dict[int, LocationDict] = {
'map': 7, 'map': 7,
'index': 337, 'index': 337,
'doom_type': 2024, 'doom_type': 2024,
'region': "Computer Station (E1M7) Yellow Red"}, 'region': "Computer Station (E1M7) Courtyard"},
351088: {'name': 'Phobos Anomaly (E1M8) - Supercharge', 351088: {'name': 'Phobos Anomaly (E1M8) - Supercharge',
'episode': 1, 'episode': 1,
'map': 8, 'map': 8,
@ -906,7 +906,7 @@ location_table: Dict[int, LocationDict] = {
'map': 4, 'map': 4,
'index': 107, 'index': 107,
'doom_type': 2013, 'doom_type': 2013,
'region': "Deimos Lab (E2M4) Blue Yellow"}, 'region': "Deimos Lab (E2M4) Yellow"},
351149: {'name': 'Deimos Lab (E2M4) - Shotgun', 351149: {'name': 'Deimos Lab (E2M4) - Shotgun',
'episode': 2, 'episode': 2,
'map': 4, 'map': 4,
@ -918,13 +918,13 @@ location_table: Dict[int, LocationDict] = {
'map': 4, 'map': 4,
'index': 129, 'index': 129,
'doom_type': 2019, 'doom_type': 2019,
'region': "Deimos Lab (E2M4) Blue Yellow"}, 'region': "Deimos Lab (E2M4) Yellow"},
351151: {'name': 'Deimos Lab (E2M4) - Plasma gun', 351151: {'name': 'Deimos Lab (E2M4) - Plasma gun',
'episode': 2, 'episode': 2,
'map': 4, 'map': 4,
'index': 130, 'index': 130,
'doom_type': 2004, 'doom_type': 2004,
'region': "Deimos Lab (E2M4) Blue Yellow"}, 'region': "Deimos Lab (E2M4) Yellow"},
351152: {'name': 'Deimos Lab (E2M4) - Backpack', 351152: {'name': 'Deimos Lab (E2M4) - Backpack',
'episode': 2, 'episode': 2,
'map': 4, 'map': 4,
@ -1068,7 +1068,7 @@ location_table: Dict[int, LocationDict] = {
'map': 6, 'map': 6,
'index': 125, 'index': 125,
'doom_type': 39, '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', 351176: {'name': 'Halls of the Damned (E2M6) - Supercharge',
'episode': 2, 'episode': 2,
'map': 6, 'map': 6,
@ -1092,7 +1092,7 @@ location_table: Dict[int, LocationDict] = {
'map': 6, 'map': 6,
'index': 217, 'index': 217,
'doom_type': 2024, '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', 351180: {'name': 'Halls of the Damned (E2M6) - Red skull key',
'episode': 2, 'episode': 2,
'map': 6, 'map': 6,
@ -1200,7 +1200,7 @@ location_table: Dict[int, LocationDict] = {
'map': 7, 'map': 7,
'index': 199, 'index': 199,
'doom_type': 2013, 'doom_type': 2013,
'region': "Spawning Vats (E2M7) Blue Red"}, 'region': "Spawning Vats (E2M7) Entrance Secret"},
351198: {'name': 'Spawning Vats (E2M7) - Invulnerability 2', 351198: {'name': 'Spawning Vats (E2M7) - Invulnerability 2',
'episode': 2, 'episode': 2,
'map': 7, 'map': 7,
@ -1524,19 +1524,19 @@ location_table: Dict[int, LocationDict] = {
'map': 4, 'map': 4,
'index': 134, 'index': 134,
'doom_type': 38, 'doom_type': 38,
'region': "House of Pain (E3M4) Blue Yellow"}, 'region': "House of Pain (E3M4) Yellow"},
351252: {'name': 'House of Pain (E3M4) - Backpack', 351252: {'name': 'House of Pain (E3M4) - Backpack',
'episode': 3, 'episode': 3,
'map': 4, 'map': 4,
'index': 160, 'index': 160,
'doom_type': 8, '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', 351253: {'name': 'House of Pain (E3M4) - Mega Armor 2',
'episode': 3, 'episode': 3,
'map': 4, 'map': 4,
'index': 170, 'index': 170,
'doom_type': 2019, 'doom_type': 2019,
'region': "House of Pain (E3M4) Blue Red"}, 'region': "House of Pain (E3M4) Red"},
351254: {'name': 'House of Pain (E3M4) - Partial invisibility', 351254: {'name': 'House of Pain (E3M4) - Partial invisibility',
'episode': 3, 'episode': 3,
'map': 4, 'map': 4,
@ -1854,253 +1854,253 @@ location_table: Dict[int, LocationDict] = {
'map': 9, 'map': 9,
'index': 46, 'index': 46,
'doom_type': 2003, 'doom_type': 2003,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue"},
351307: {'name': 'Warrens (E3M9) - Rocket launcher 2', 351307: {'name': 'Warrens (E3M9) - Rocket launcher 2',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 99, 'index': 99,
'doom_type': 2003, 'doom_type': 2003,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue"},
351308: {'name': 'Warrens (E3M9) - Supercharge', 351308: {'name': 'Warrens (E3M9) - Supercharge',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 101, 'index': 101,
'doom_type': 2013, 'doom_type': 2013,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue"},
351309: {'name': 'Warrens (E3M9) - Blue skull key', 351309: {'name': 'Warrens (E3M9) - Blue skull key',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 108, 'index': 108,
'doom_type': 40, 'doom_type': 40,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue"},
351310: {'name': 'Warrens (E3M9) - Berserk', 351310: {'name': 'Warrens (E3M9) - Berserk',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 114, 'index': 114,
'doom_type': 2023, 'doom_type': 2023,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue"},
351311: {'name': 'Warrens (E3M9) - Invulnerability', 351311: {'name': 'Warrens (E3M9) - Invulnerability',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 120, 'index': 120,
'doom_type': 2022, 'doom_type': 2022,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue"},
351312: {'name': 'Warrens (E3M9) - Partial invisibility', 351312: {'name': 'Warrens (E3M9) - Partial invisibility',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 121, 'index': 121,
'doom_type': 2024, 'doom_type': 2024,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue"},
351313: {'name': 'Warrens (E3M9) - Chaingun', 351313: {'name': 'Warrens (E3M9) - Chaingun',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 122, 'index': 122,
'doom_type': 2002, 'doom_type': 2002,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue"},
351314: {'name': 'Warrens (E3M9) - Plasma gun', 351314: {'name': 'Warrens (E3M9) - Plasma gun',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 135, 'index': 135,
'doom_type': 2004, 'doom_type': 2004,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue trigger"},
351315: {'name': 'Warrens (E3M9) - Invulnerability 2', 351315: {'name': 'Warrens (E3M9) - Invulnerability 2',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 138, 'index': 138,
'doom_type': 2022, 'doom_type': 2022,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue trigger"},
351316: {'name': 'Warrens (E3M9) - Armor', 351316: {'name': 'Warrens (E3M9) - Armor',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 139, 'index': 139,
'doom_type': 2018, 'doom_type': 2018,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue trigger"},
351317: {'name': 'Warrens (E3M9) - Chainsaw', 351317: {'name': 'Warrens (E3M9) - Chainsaw',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 140, 'index': 140,
'doom_type': 2005, 'doom_type': 2005,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue trigger"},
351318: {'name': 'Warrens (E3M9) - BFG9000', 351318: {'name': 'Warrens (E3M9) - BFG9000',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 141, 'index': 141,
'doom_type': 2006, 'doom_type': 2006,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue trigger"},
351319: {'name': 'Warrens (E3M9) - Red skull key', 351319: {'name': 'Warrens (E3M9) - Red skull key',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 143, 'index': 143,
'doom_type': 38, 'doom_type': 38,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue trigger"},
351320: {'name': 'Warrens (E3M9) - Supercharge 2', 351320: {'name': 'Warrens (E3M9) - Supercharge 2',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': 188, 'index': 188,
'doom_type': 2013, 'doom_type': 2013,
'region': "Warrens (E3M9) Main"}, 'region': "Warrens (E3M9) Blue trigger"},
351321: {'name': 'Central Processing (E1M6) - Complete', 351321: {'name': 'Central Processing (E1M6) - Exit',
'episode': 1, 'episode': 1,
'map': 6, 'map': 6,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Central Processing (E1M6) Blue Yellow"}, 'region': "Central Processing (E1M6) Main"},
351322: {'name': 'Command Center (E2M5) - Complete', 351322: {'name': 'Command Center (E2M5) - Exit',
'episode': 2, 'episode': 2,
'map': 5, 'map': 5,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Command Center (E2M5) Main"}, 'region': "Command Center (E2M5) Main"},
351323: {'name': 'Command Control (E1M4) - Complete', 351323: {'name': 'Command Control (E1M4) - Exit',
'episode': 1, 'episode': 1,
'map': 4, 'map': 4,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Command Control (E1M4) Main"}, 'region': "Command Control (E1M4) Main"},
351324: {'name': 'Computer Station (E1M7) - Complete', 351324: {'name': 'Computer Station (E1M7) - Exit',
'episode': 1, 'episode': 1,
'map': 7, 'map': 7,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Computer Station (E1M7) Blue"}, 'region': "Computer Station (E1M7) Main"},
351325: {'name': 'Containment Area (E2M2) - Complete', 351325: {'name': 'Containment Area (E2M2) - Exit',
'episode': 2, 'episode': 2,
'map': 2, 'map': 2,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Containment Area (E2M2) Red"}, 'region': "Containment Area (E2M2) Main"},
351326: {'name': 'Deimos Anomaly (E2M1) - Complete', 351326: {'name': 'Deimos Anomaly (E2M1) - Exit',
'episode': 2, 'episode': 2,
'map': 1, 'map': 1,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Deimos Anomaly (E2M1) Blue"}, 'region': "Deimos Anomaly (E2M1) Main"},
351327: {'name': 'Deimos Lab (E2M4) - Complete', 351327: {'name': 'Deimos Lab (E2M4) - Exit',
'episode': 2, 'episode': 2,
'map': 4, 'map': 4,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Deimos Lab (E2M4) Blue Yellow"}, 'region': "Deimos Lab (E2M4) Yellow"},
351328: {'name': 'Dis (E3M8) - Complete', 351328: {'name': 'Dis (E3M8) - Exit',
'episode': 3, 'episode': 3,
'map': 8, 'map': 8,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Dis (E3M8) Main"}, 'region': "Dis (E3M8) Main"},
351329: {'name': 'Fortress of Mystery (E2M9) - Complete', 351329: {'name': 'Fortress of Mystery (E2M9) - Exit',
'episode': 2, 'episode': 2,
'map': 9, 'map': 9,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Fortress of Mystery (E2M9) Yellow"}, 'region': "Fortress of Mystery (E2M9) Main"},
351330: {'name': 'Halls of the Damned (E2M6) - Complete', 351330: {'name': 'Halls of the Damned (E2M6) - Exit',
'episode': 2, 'episode': 2,
'map': 6, 'map': 6,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Halls of the Damned (E2M6) Blue Yellow Red"}, 'region': "Halls of the Damned (E2M6) Main"},
351331: {'name': 'Hangar (E1M1) - Complete', 351331: {'name': 'Hangar (E1M1) - Exit',
'episode': 1, 'episode': 1,
'map': 1, 'map': 1,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Hangar (E1M1) Main"}, 'region': "Hangar (E1M1) Main"},
351332: {'name': 'Hell Keep (E3M1) - Complete', 351332: {'name': 'Hell Keep (E3M1) - Exit',
'episode': 3, 'episode': 3,
'map': 1, 'map': 1,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Hell Keep (E3M1) Narrow"}, 'region': "Hell Keep (E3M1) Main"},
351333: {'name': 'House of Pain (E3M4) - Complete', 351333: {'name': 'House of Pain (E3M4) - Exit',
'episode': 3, 'episode': 3,
'map': 4, 'map': 4,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "House of Pain (E3M4) Blue Red"}, 'region': "House of Pain (E3M4) Main"},
351334: {'name': 'Limbo (E3M7) - Complete', 351334: {'name': 'Limbo (E3M7) - Exit',
'episode': 3, 'episode': 3,
'map': 7, 'map': 7,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Limbo (E3M7) Yellow Red"}, 'region': "Limbo (E3M7) Main"},
351335: {'name': 'Military Base (E1M9) - Complete', 351335: {'name': 'Military Base (E1M9) - Exit',
'episode': 1, 'episode': 1,
'map': 9, 'map': 9,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Military Base (E1M9) Blue"}, 'region': "Military Base (E1M9) Main"},
351336: {'name': 'Mt. Erebus (E3M6) - Complete', 351336: {'name': 'Mt. Erebus (E3M6) - Exit',
'episode': 3, 'episode': 3,
'map': 6, 'map': 6,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Mt. Erebus (E3M6) Blue"}, 'region': "Mt. Erebus (E3M6) Main"},
351337: {'name': 'Nuclear Plant (E1M2) - Complete', 351337: {'name': 'Nuclear Plant (E1M2) - Exit',
'episode': 1, 'episode': 1,
'map': 2, 'map': 2,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Nuclear Plant (E1M2) Red"}, 'region': "Nuclear Plant (E1M2) Main"},
351338: {'name': 'Pandemonium (E3M3) - Complete', 351338: {'name': 'Pandemonium (E3M3) - Exit',
'episode': 3, 'episode': 3,
'map': 3, 'map': 3,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Pandemonium (E3M3) Blue"}, 'region': "Pandemonium (E3M3) Main"},
351339: {'name': 'Phobos Anomaly (E1M8) - Complete', 351339: {'name': 'Phobos Anomaly (E1M8) - Exit',
'episode': 1, 'episode': 1,
'map': 8, 'map': 8,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Phobos Anomaly (E1M8) Main"}, 'region': "Phobos Anomaly (E1M8) Start"},
351340: {'name': 'Phobos Lab (E1M5) - Complete', 351340: {'name': 'Phobos Lab (E1M5) - Exit',
'episode': 1, 'episode': 1,
'map': 5, 'map': 5,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Phobos Lab (E1M5) Blue Yellow"}, 'region': "Phobos Lab (E1M5) Main"},
351341: {'name': 'Refinery (E2M3) - Complete', 351341: {'name': 'Refinery (E2M3) - Exit',
'episode': 2, 'episode': 2,
'map': 3, 'map': 3,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Refinery (E2M3) Blue"}, 'region': "Refinery (E2M3) Main"},
351342: {'name': 'Slough of Despair (E3M2) - Complete', 351342: {'name': 'Slough of Despair (E3M2) - Exit',
'episode': 3, 'episode': 3,
'map': 2, 'map': 2,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Slough of Despair (E3M2) Blue"}, 'region': "Slough of Despair (E3M2) Main"},
351343: {'name': 'Spawning Vats (E2M7) - Complete', 351343: {'name': 'Spawning Vats (E2M7) - Exit',
'episode': 2, 'episode': 2,
'map': 7, 'map': 7,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Spawning Vats (E2M7) Red"}, 'region': "Spawning Vats (E2M7) Main"},
351344: {'name': 'Tower of Babel (E2M8) - Complete', 351344: {'name': 'Tower of Babel (E2M8) - Exit',
'episode': 2, 'episode': 2,
'map': 8, 'map': 8,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Tower of Babel (E2M8) Main"}, 'region': "Tower of Babel (E2M8) Main"},
351345: {'name': 'Toxin Refinery (E1M3) - Complete', 351345: {'name': 'Toxin Refinery (E1M3) - Exit',
'episode': 1, 'episode': 1,
'map': 3, 'map': 3,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Toxin Refinery (E1M3) Blue"}, 'region': "Toxin Refinery (E1M3) Main"},
351346: {'name': 'Unholy Cathedral (E3M5) - Complete', 351346: {'name': 'Unholy Cathedral (E3M5) - Exit',
'episode': 3, 'episode': 3,
'map': 5, 'map': 5,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Unholy Cathedral (E3M5) Blue"}, 'region': "Unholy Cathedral (E3M5) Main"},
351347: {'name': 'Warrens (E3M9) - Complete', 351347: {'name': 'Warrens (E3M9) - Exit',
'episode': 3, 'episode': 3,
'map': 9, 'map': 9,
'index': -1, 'index': -1,
'doom_type': -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) - Backpack 3',
'Central Processing (E1M6) - Blue keycard', 'Central Processing (E1M6) - Blue keycard',
'Central Processing (E1M6) - Chaingun', 'Central Processing (E1M6) - Chaingun',
'Central Processing (E1M6) - Complete',
'Central Processing (E1M6) - Computer area map', 'Central Processing (E1M6) - Computer area map',
'Central Processing (E1M6) - Exit',
'Central Processing (E1M6) - Mega Armor', 'Central Processing (E1M6) - Mega Armor',
'Central Processing (E1M6) - Partial invisibility', 'Central Processing (E1M6) - Partial invisibility',
'Central Processing (E1M6) - Partial invisibility 2', 'Central Processing (E1M6) - Partial invisibility 2',
@ -2134,8 +2134,8 @@ location_name_groups: Dict[str, Set[str]] = {
'Command Center (E2M5) - Berserk', 'Command Center (E2M5) - Berserk',
'Command Center (E2M5) - Chaingun', 'Command Center (E2M5) - Chaingun',
'Command Center (E2M5) - Chainsaw', 'Command Center (E2M5) - Chainsaw',
'Command Center (E2M5) - Complete',
'Command Center (E2M5) - Computer area map', 'Command Center (E2M5) - Computer area map',
'Command Center (E2M5) - Exit',
'Command Center (E2M5) - Mega Armor', 'Command Center (E2M5) - Mega Armor',
'Command Center (E2M5) - Partial invisibility', 'Command Center (E2M5) - Partial invisibility',
'Command Center (E2M5) - Plasma gun', 'Command Center (E2M5) - Plasma gun',
@ -2145,7 +2145,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Command Control (E1M4) - Backpack', 'Command Control (E1M4) - Backpack',
'Command Control (E1M4) - Blue keycard', 'Command Control (E1M4) - Blue keycard',
'Command Control (E1M4) - Chaingun', 'Command Control (E1M4) - Chaingun',
'Command Control (E1M4) - Complete', 'Command Control (E1M4) - Exit',
'Command Control (E1M4) - Mega Armor', 'Command Control (E1M4) - Mega Armor',
'Command Control (E1M4) - Rocket launcher', 'Command Control (E1M4) - Rocket launcher',
'Command Control (E1M4) - Shotgun', 'Command Control (E1M4) - Shotgun',
@ -2159,8 +2159,8 @@ location_name_groups: Dict[str, Set[str]] = {
'Computer Station (E1M7) - Blue keycard', 'Computer Station (E1M7) - Blue keycard',
'Computer Station (E1M7) - Chaingun', 'Computer Station (E1M7) - Chaingun',
'Computer Station (E1M7) - Chainsaw', 'Computer Station (E1M7) - Chainsaw',
'Computer Station (E1M7) - Complete',
'Computer Station (E1M7) - Computer area map', 'Computer Station (E1M7) - Computer area map',
'Computer Station (E1M7) - Exit',
'Computer Station (E1M7) - Mega Armor', 'Computer Station (E1M7) - Mega Armor',
'Computer Station (E1M7) - Partial invisibility', 'Computer Station (E1M7) - Partial invisibility',
'Computer Station (E1M7) - Red keycard', 'Computer Station (E1M7) - Red keycard',
@ -2181,8 +2181,8 @@ location_name_groups: Dict[str, Set[str]] = {
'Containment Area (E2M2) - Blue keycard', 'Containment Area (E2M2) - Blue keycard',
'Containment Area (E2M2) - Chaingun', 'Containment Area (E2M2) - Chaingun',
'Containment Area (E2M2) - Chainsaw', 'Containment Area (E2M2) - Chainsaw',
'Containment Area (E2M2) - Complete',
'Containment Area (E2M2) - Computer area map', 'Containment Area (E2M2) - Computer area map',
'Containment Area (E2M2) - Exit',
'Containment Area (E2M2) - Mega Armor', 'Containment Area (E2M2) - Mega Armor',
'Containment Area (E2M2) - Plasma gun', 'Containment Area (E2M2) - Plasma gun',
'Containment Area (E2M2) - Red keycard', 'Containment Area (E2M2) - Red keycard',
@ -2195,8 +2195,8 @@ location_name_groups: Dict[str, Set[str]] = {
'Deimos Anomaly (E2M1)': { 'Deimos Anomaly (E2M1)': {
'Deimos Anomaly (E2M1) - Armor', 'Deimos Anomaly (E2M1) - Armor',
'Deimos Anomaly (E2M1) - Blue keycard', 'Deimos Anomaly (E2M1) - Blue keycard',
'Deimos Anomaly (E2M1) - Complete',
'Deimos Anomaly (E2M1) - Computer area map', 'Deimos Anomaly (E2M1) - Computer area map',
'Deimos Anomaly (E2M1) - Exit',
'Deimos Anomaly (E2M1) - Mega Armor', 'Deimos Anomaly (E2M1) - Mega Armor',
'Deimos Anomaly (E2M1) - Plasma gun', 'Deimos Anomaly (E2M1) - Plasma gun',
'Deimos Anomaly (E2M1) - Red keycard', 'Deimos Anomaly (E2M1) - Red keycard',
@ -2211,8 +2211,8 @@ location_name_groups: Dict[str, Set[str]] = {
'Deimos Lab (E2M4) - Berserk', 'Deimos Lab (E2M4) - Berserk',
'Deimos Lab (E2M4) - Blue keycard', 'Deimos Lab (E2M4) - Blue keycard',
'Deimos Lab (E2M4) - Chaingun', 'Deimos Lab (E2M4) - Chaingun',
'Deimos Lab (E2M4) - Complete',
'Deimos Lab (E2M4) - Computer area map', 'Deimos Lab (E2M4) - Computer area map',
'Deimos Lab (E2M4) - Exit',
'Deimos Lab (E2M4) - Mega Armor', 'Deimos Lab (E2M4) - Mega Armor',
'Deimos Lab (E2M4) - Partial invisibility', 'Deimos Lab (E2M4) - Partial invisibility',
'Deimos Lab (E2M4) - Partial invisibility 2', 'Deimos Lab (E2M4) - Partial invisibility 2',
@ -2223,7 +2223,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Deimos Lab (E2M4) - Yellow keycard', 'Deimos Lab (E2M4) - Yellow keycard',
}, },
'Dis (E3M8)': { 'Dis (E3M8)': {
'Dis (E3M8) - Complete', 'Dis (E3M8) - Exit',
'Dis (E3M8) - Mega Armor', 'Dis (E3M8) - Mega Armor',
'Dis (E3M8) - Plasma gun', 'Dis (E3M8) - Plasma gun',
'Dis (E3M8) - Rocket launcher', '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) - Blue skull key',
'Fortress of Mystery (E2M9) - Chaingun', 'Fortress of Mystery (E2M9) - Chaingun',
'Fortress of Mystery (E2M9) - Chainsaw', 'Fortress of Mystery (E2M9) - Chainsaw',
'Fortress of Mystery (E2M9) - Complete',
'Fortress of Mystery (E2M9) - Computer area map', 'Fortress of Mystery (E2M9) - Computer area map',
'Fortress of Mystery (E2M9) - Exit',
'Fortress of Mystery (E2M9) - Mega Armor', 'Fortress of Mystery (E2M9) - Mega Armor',
'Fortress of Mystery (E2M9) - Plasma gun', 'Fortress of Mystery (E2M9) - Plasma gun',
'Fortress of Mystery (E2M9) - Red skull key', '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) - Blue skull key',
'Halls of the Damned (E2M6) - Chaingun', 'Halls of the Damned (E2M6) - Chaingun',
'Halls of the Damned (E2M6) - Chainsaw', '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) - Computer area map',
'Halls of the Damned (E2M6) - Exit',
'Halls of the Damned (E2M6) - Mega Armor', 'Halls of the Damned (E2M6) - Mega Armor',
'Halls of the Damned (E2M6) - Partial invisibility', 'Halls of the Damned (E2M6) - Partial invisibility',
'Halls of the Damned (E2M6) - Partial invisibility 2', 'Halls of the Damned (E2M6) - Partial invisibility 2',
@ -2265,12 +2265,12 @@ location_name_groups: Dict[str, Set[str]] = {
}, },
'Hangar (E1M1)': { 'Hangar (E1M1)': {
'Hangar (E1M1) - Armor', 'Hangar (E1M1) - Armor',
'Hangar (E1M1) - Complete', 'Hangar (E1M1) - Exit',
'Hangar (E1M1) - Mega Armor', 'Hangar (E1M1) - Mega Armor',
'Hangar (E1M1) - Shotgun', 'Hangar (E1M1) - Shotgun',
}, },
'Hell Keep (E3M1)': { 'Hell Keep (E3M1)': {
'Hell Keep (E3M1) - Complete', 'Hell Keep (E3M1) - Exit',
'Hell Keep (E3M1) - Rocket launcher', 'Hell Keep (E3M1) - Rocket launcher',
'Hell Keep (E3M1) - Shotgun', 'Hell Keep (E3M1) - Shotgun',
}, },
@ -2283,7 +2283,7 @@ location_name_groups: Dict[str, Set[str]] = {
'House of Pain (E3M4) - Berserk', 'House of Pain (E3M4) - Berserk',
'House of Pain (E3M4) - Blue skull key', 'House of Pain (E3M4) - Blue skull key',
'House of Pain (E3M4) - Chaingun', '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',
'House of Pain (E3M4) - Invulnerability 2', 'House of Pain (E3M4) - Invulnerability 2',
'House of Pain (E3M4) - Mega Armor', 'House of Pain (E3M4) - Mega Armor',
@ -2301,7 +2301,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Limbo (E3M7) - BFG9000', 'Limbo (E3M7) - BFG9000',
'Limbo (E3M7) - Backpack', 'Limbo (E3M7) - Backpack',
'Limbo (E3M7) - Blue skull key', 'Limbo (E3M7) - Blue skull key',
'Limbo (E3M7) - Complete', 'Limbo (E3M7) - Exit',
'Limbo (E3M7) - Mega Armor', 'Limbo (E3M7) - Mega Armor',
'Limbo (E3M7) - Plasma gun', 'Limbo (E3M7) - Plasma gun',
'Limbo (E3M7) - Red skull key', 'Limbo (E3M7) - Red skull key',
@ -2315,7 +2315,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Military Base (E1M9) - Blue keycard', 'Military Base (E1M9) - Blue keycard',
'Military Base (E1M9) - Chaingun', 'Military Base (E1M9) - Chaingun',
'Military Base (E1M9) - Chainsaw', 'Military Base (E1M9) - Chainsaw',
'Military Base (E1M9) - Complete', 'Military Base (E1M9) - Exit',
'Military Base (E1M9) - Red keycard', 'Military Base (E1M9) - Red keycard',
'Military Base (E1M9) - Rocket launcher', 'Military Base (E1M9) - Rocket launcher',
'Military Base (E1M9) - Shotgun', '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) - Blue skull key 2',
'Mt. Erebus (E3M6) - Chaingun', 'Mt. Erebus (E3M6) - Chaingun',
'Mt. Erebus (E3M6) - Chainsaw', 'Mt. Erebus (E3M6) - Chainsaw',
'Mt. Erebus (E3M6) - Complete',
'Mt. Erebus (E3M6) - Computer area map', 'Mt. Erebus (E3M6) - Computer area map',
'Mt. Erebus (E3M6) - Exit',
'Mt. Erebus (E3M6) - Invulnerability', 'Mt. Erebus (E3M6) - Invulnerability',
'Mt. Erebus (E3M6) - Invulnerability 2', 'Mt. Erebus (E3M6) - Invulnerability 2',
'Mt. Erebus (E3M6) - Mega Armor', 'Mt. Erebus (E3M6) - Mega Armor',
@ -2349,7 +2349,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Nuclear Plant (E1M2) - Backpack 2', 'Nuclear Plant (E1M2) - Backpack 2',
'Nuclear Plant (E1M2) - Chaingun', 'Nuclear Plant (E1M2) - Chaingun',
'Nuclear Plant (E1M2) - Chainsaw', 'Nuclear Plant (E1M2) - Chainsaw',
'Nuclear Plant (E1M2) - Complete', 'Nuclear Plant (E1M2) - Exit',
'Nuclear Plant (E1M2) - Mega Armor', 'Nuclear Plant (E1M2) - Mega Armor',
'Nuclear Plant (E1M2) - Red keycard', 'Nuclear Plant (E1M2) - Red keycard',
'Nuclear Plant (E1M2) - Shotgun', 'Nuclear Plant (E1M2) - Shotgun',
@ -2362,8 +2362,8 @@ location_name_groups: Dict[str, Set[str]] = {
'Pandemonium (E3M3) - Berserk', 'Pandemonium (E3M3) - Berserk',
'Pandemonium (E3M3) - Blue skull key', 'Pandemonium (E3M3) - Blue skull key',
'Pandemonium (E3M3) - Chaingun', 'Pandemonium (E3M3) - Chaingun',
'Pandemonium (E3M3) - Complete',
'Pandemonium (E3M3) - Computer area map', 'Pandemonium (E3M3) - Computer area map',
'Pandemonium (E3M3) - Exit',
'Pandemonium (E3M3) - Invulnerability', 'Pandemonium (E3M3) - Invulnerability',
'Pandemonium (E3M3) - Mega Armor', 'Pandemonium (E3M3) - Mega Armor',
'Pandemonium (E3M3) - Mega Armor 2', 'Pandemonium (E3M3) - Mega Armor 2',
@ -2375,8 +2375,8 @@ location_name_groups: Dict[str, Set[str]] = {
'Phobos Anomaly (E1M8)': { 'Phobos Anomaly (E1M8)': {
'Phobos Anomaly (E1M8) - Armor', 'Phobos Anomaly (E1M8) - Armor',
'Phobos Anomaly (E1M8) - Chaingun', 'Phobos Anomaly (E1M8) - Chaingun',
'Phobos Anomaly (E1M8) - Complete',
'Phobos Anomaly (E1M8) - Computer area map', 'Phobos Anomaly (E1M8) - Computer area map',
'Phobos Anomaly (E1M8) - Exit',
'Phobos Anomaly (E1M8) - Partial invisibility', 'Phobos Anomaly (E1M8) - Partial invisibility',
'Phobos Anomaly (E1M8) - Shotgun', 'Phobos Anomaly (E1M8) - Shotgun',
'Phobos Anomaly (E1M8) - Shotgun 2', 'Phobos Anomaly (E1M8) - Shotgun 2',
@ -2389,8 +2389,8 @@ location_name_groups: Dict[str, Set[str]] = {
'Phobos Lab (E1M5) - Blue keycard', 'Phobos Lab (E1M5) - Blue keycard',
'Phobos Lab (E1M5) - Chaingun', 'Phobos Lab (E1M5) - Chaingun',
'Phobos Lab (E1M5) - Chainsaw', 'Phobos Lab (E1M5) - Chainsaw',
'Phobos Lab (E1M5) - Complete',
'Phobos Lab (E1M5) - Computer area map', 'Phobos Lab (E1M5) - Computer area map',
'Phobos Lab (E1M5) - Exit',
'Phobos Lab (E1M5) - Mega Armor', 'Phobos Lab (E1M5) - Mega Armor',
'Phobos Lab (E1M5) - Mega Armor 2', 'Phobos Lab (E1M5) - Mega Armor 2',
'Phobos Lab (E1M5) - Partial invisibility', 'Phobos Lab (E1M5) - Partial invisibility',
@ -2407,7 +2407,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Refinery (E2M3) - Berserk', 'Refinery (E2M3) - Berserk',
'Refinery (E2M3) - Blue keycard', 'Refinery (E2M3) - Blue keycard',
'Refinery (E2M3) - Chaingun', 'Refinery (E2M3) - Chaingun',
'Refinery (E2M3) - Complete', 'Refinery (E2M3) - Exit',
'Refinery (E2M3) - Mega Armor', 'Refinery (E2M3) - Mega Armor',
'Refinery (E2M3) - Partial invisibility', 'Refinery (E2M3) - Partial invisibility',
'Refinery (E2M3) - Partial invisibility 2', '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) - Berserk',
'Slough of Despair (E3M2) - Blue skull key', 'Slough of Despair (E3M2) - Blue skull key',
'Slough of Despair (E3M2) - Chaingun', 'Slough of Despair (E3M2) - Chaingun',
'Slough of Despair (E3M2) - Complete',
'Slough of Despair (E3M2) - Computer area map', 'Slough of Despair (E3M2) - Computer area map',
'Slough of Despair (E3M2) - Exit',
'Slough of Despair (E3M2) - Mega Armor', 'Slough of Despair (E3M2) - Mega Armor',
'Slough of Despair (E3M2) - Plasma gun', 'Slough of Despair (E3M2) - Plasma gun',
'Slough of Despair (E3M2) - Rocket launcher', '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) - Blue keycard',
'Spawning Vats (E2M7) - Chaingun', 'Spawning Vats (E2M7) - Chaingun',
'Spawning Vats (E2M7) - Chainsaw', 'Spawning Vats (E2M7) - Chainsaw',
'Spawning Vats (E2M7) - Complete',
'Spawning Vats (E2M7) - Computer area map', 'Spawning Vats (E2M7) - Computer area map',
'Spawning Vats (E2M7) - Exit',
'Spawning Vats (E2M7) - Invulnerability', 'Spawning Vats (E2M7) - Invulnerability',
'Spawning Vats (E2M7) - Invulnerability 2', 'Spawning Vats (E2M7) - Invulnerability 2',
'Spawning Vats (E2M7) - Mega Armor', 'Spawning Vats (E2M7) - Mega Armor',
@ -2447,7 +2447,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Spawning Vats (E2M7) - Yellow keycard', 'Spawning Vats (E2M7) - Yellow keycard',
}, },
'Tower of Babel (E2M8)': { 'Tower of Babel (E2M8)': {
'Tower of Babel (E2M8) - Complete', 'Tower of Babel (E2M8) - Exit',
'Tower of Babel (E2M8) - Mega Armor', 'Tower of Babel (E2M8) - Mega Armor',
'Tower of Babel (E2M8) - Rocket launcher', 'Tower of Babel (E2M8) - Rocket launcher',
'Tower of Babel (E2M8) - Supercharge', 'Tower of Babel (E2M8) - Supercharge',
@ -2461,7 +2461,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Toxin Refinery (E1M3) - Blue keycard', 'Toxin Refinery (E1M3) - Blue keycard',
'Toxin Refinery (E1M3) - Chaingun', 'Toxin Refinery (E1M3) - Chaingun',
'Toxin Refinery (E1M3) - Chainsaw', 'Toxin Refinery (E1M3) - Chainsaw',
'Toxin Refinery (E1M3) - Complete', 'Toxin Refinery (E1M3) - Exit',
'Toxin Refinery (E1M3) - Mega Armor', 'Toxin Refinery (E1M3) - Mega Armor',
'Toxin Refinery (E1M3) - Partial invisibility', 'Toxin Refinery (E1M3) - Partial invisibility',
'Toxin Refinery (E1M3) - Rocket launcher', '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) - Blue skull key',
'Unholy Cathedral (E3M5) - Chaingun', 'Unholy Cathedral (E3M5) - Chaingun',
'Unholy Cathedral (E3M5) - Chainsaw', 'Unholy Cathedral (E3M5) - Chainsaw',
'Unholy Cathedral (E3M5) - Complete', 'Unholy Cathedral (E3M5) - Exit',
'Unholy Cathedral (E3M5) - Invulnerability', 'Unholy Cathedral (E3M5) - Invulnerability',
'Unholy Cathedral (E3M5) - Partial invisibility', 'Unholy Cathedral (E3M5) - Partial invisibility',
'Unholy Cathedral (E3M5) - Plasma gun', 'Unholy Cathedral (E3M5) - Plasma gun',
@ -2495,7 +2495,7 @@ location_name_groups: Dict[str, Set[str]] = {
'Warrens (E3M9) - Blue skull key', 'Warrens (E3M9) - Blue skull key',
'Warrens (E3M9) - Chaingun', 'Warrens (E3M9) - Chaingun',
'Warrens (E3M9) - Chainsaw', 'Warrens (E3M9) - Chainsaw',
'Warrens (E3M9) - Complete', 'Warrens (E3M9) - Exit',
'Warrens (E3M9) - Invulnerability', 'Warrens (E3M9) - Invulnerability',
'Warrens (E3M9) - Invulnerability 2', 'Warrens (E3M9) - Invulnerability 2',
'Warrens (E3M9) - Partial invisibility', 'Warrens (E3M9) - Partial invisibility',
@ -2514,8 +2514,9 @@ death_logic_locations = [
"Command Control (E1M4) - Supercharge", "Command Control (E1M4) - Supercharge",
"Command Control (E1M4) - Mega Armor", "Command Control (E1M4) - Mega Armor",
"Containment Area (E2M2) - Supercharge", "Containment Area (E2M2) - Supercharge",
"Pandemonium (E3M3) - Mega Armor",
"House of Pain (E3M4) - Chaingun", "House of Pain (E3M4) - Chaingun",
"House of Pain (E3M4) - Invulnerability", "House of Pain (E3M4) - Invulnerability",
"Pandemonium (E3M3) - Mega Armor",
"Unholy Cathedral (E3M5) - BFG9000", "Unholy Cathedral (E3M5) - BFG9000",
"Mt. Erebus (E3M6) - Chainsaw",
] ]

34
worlds/doom_1993/Maps.py Normal file
View File

@ -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)',
]

View File

@ -57,6 +57,11 @@ class AllowDeathLogic(Toggle):
display_name = "Allow Death Logic" 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): class Episode1(DefaultOnToggle):
"""Knee-Deep in the Dead. """Knee-Deep in the Dead.
If none of the episodes are chosen, Episode 1 will be chosen by default.""" 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_monsters": RandomMonsters,
"random_pickups": RandomPickups, "random_pickups": RandomPickups,
"allow_death_logic": AllowDeathLogic, "allow_death_logic": AllowDeathLogic,
"start_with_computer_area_maps": StartWithComputerAreaMaps,
"death_link": DeathLink, "death_link": DeathLink,
"episode1": Episode1, "episode1": Episode1,
"episode2": Episode2, "episode2": Episode2,

View File

@ -1,80 +1,358 @@
# This file is auto generated. More info: https://github.com/Daivuk/apdoom # This file is auto generated. More info: https://github.com/Daivuk/apdoom
from typing import List from typing import List
from BaseClasses import Region, Entrance from BaseClasses import TypedDict
regions:List[Region] = [ class RegionDict(TypedDict, total=False):
"Central Processing (E1M6) Blue", name: str
"Central Processing (E1M6) Blue Yellow", connects_to_hub: bool
"Central Processing (E1M6) Main", connections: List[str]
"Central Processing (E1M6) Red",
"Command Center (E2M5) Main",
"Command Control (E1M4) Blue Yellow", regions:List[RegionDict] = [
"Command Control (E1M4) Main", # Hangar (E1M1)
"Computer Station (E1M7) Blue", {"name":"Hangar (E1M1) Main",
"Computer Station (E1M7) Main", "connects_to_hub":True,
"Computer Station (E1M7) Red", "connections":[]},
"Computer Station (E1M7) Yellow",
"Computer Station (E1M7) Yellow Red", # Nuclear Plant (E1M2)
"Containment Area (E2M2) Blue", {"name":"Nuclear Plant (E1M2) Main",
"Containment Area (E2M2) Main", "connects_to_hub":True,
"Containment Area (E2M2) Red", "connections":["Nuclear Plant (E1M2) Red"]},
"Containment Area (E2M2) Yellow", {"name":"Nuclear Plant (E1M2) Red",
"Deimos Anomaly (E2M1) Blue", "connects_to_hub":False,
"Deimos Anomaly (E2M1) Main", "connections":["Nuclear Plant (E1M2) Main"]},
"Deimos Anomaly (E2M1) Red",
"Deimos Lab (E2M4) Blue", # Toxin Refinery (E1M3)
"Deimos Lab (E2M4) Blue Yellow", {"name":"Toxin Refinery (E1M3) Main",
"Deimos Lab (E2M4) Main", "connects_to_hub":True,
"Dis (E3M8) Main", "connections":["Toxin Refinery (E1M3) Blue"]},
"Fortress of Mystery (E2M9) Blue", {"name":"Toxin Refinery (E1M3) Blue",
"Fortress of Mystery (E2M9) Main", "connects_to_hub":False,
"Fortress of Mystery (E2M9) Red", "connections":[
"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", "Toxin Refinery (E1M3) Yellow",
"Unholy Cathedral (E3M5) Blue", "Toxin Refinery (E1M3) Main"]},
"Unholy Cathedral (E3M5) 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) Yellow",
"Warrens (E3M9) Main", "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) 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"]},
] ]

View File

@ -11,130 +11,374 @@ def set_rules(doom_1993_world: "DOOM1993World"):
player = doom_1993_world.player player = doom_1993_world.player
world = doom_1993_world.multiworld world = doom_1993_world.multiworld
# Hangar (E1M1) - E1M1 # Hangar (E1M1)
set_rule(world.get_entrance("Mars -> Hangar (E1M1) Main", player), lambda state: state.has("Hangar (E1M1)", player, 1)) set_rule(world.get_entrance("Hub -> Hangar (E1M1) Main", player), lambda state:
state.has("Hangar (E1M1)", player, 1))
# Nuclear Plant (E1M2) - E1M2 # Nuclear Plant (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("Hub -> Nuclear Plant (E1M2) Main", player), lambda state:
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))) (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 # Toxin Refinery (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("Hub -> Toxin Refinery (E1M3) Main", player), lambda state:
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)) (state.has("Toxin Refinery (E1M3)", player, 1)) and
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)) (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 # Command Control (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("Hub -> Command Control (E1M4) Main", player), lambda state:
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)) 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 # Phobos Lab (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("Hub -> Phobos Lab (E1M5) Main", player), lambda state:
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)) state.has("Phobos Lab (E1M5)", player, 1) and
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))) 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 # Central Processing (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("Hub -> Central Processing (E1M6) Main", player), lambda state:
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))) state.has("Central Processing (E1M6)", player, 1) and
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)) state.has("Shotgun", player, 1) and
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))) 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 # Computer Station (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("Hub -> Computer Station (E1M7) Main", player), lambda state:
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)) state.has("Computer Station (E1M7)", player, 1) and
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))) state.has("Shotgun", player, 1) and
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))) state.has("Chaingun", player, 1) and
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)) 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 # Phobos Anomaly (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))) 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 # Military Base (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("Hub -> Military Base (E1M9) Main", player), lambda state:
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)) state.has("Military Base (E1M9)", player, 1) and
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))) state.has("Chaingun", player, 1) and
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))) 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 # Deimos Anomaly (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("Hub -> Deimos Anomaly (E2M1) Main", player), lambda state:
set_rule(world.get_entrance("Mars -> Deimos Anomaly (E2M1) Main", player), lambda state: state.has("Deimos Anomaly (E2M1)", player, 1)) 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))) 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 # Containment Area (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("Hub -> Containment Area (E2M2) Main", player), lambda state:
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)) (state.has("Containment Area (E2M2)", player, 1) and
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))) state.has("Shotgun", player, 1)) and
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))) (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 # Refinery (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("Hub -> Refinery (E2M3) Main", player), lambda state:
set_rule(world.get_entrance("Mars -> Refinery (E2M3) Main", player), lambda state: state.has("Refinery (E2M3)", player, 1) and state.has("Shotgun", player, 1)) (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 # Deimos Lab (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("Hub -> Deimos Lab (E2M4) Main", player), lambda state:
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)) state.has("Deimos Lab (E2M4)", player, 1) and
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)) 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 # Command Center (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)) 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 # Halls of the Damned (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("Hub -> Halls of the Damned (E2M6) Main", player), lambda state:
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)) state.has("Halls of the Damned (E2M6)", player, 1) and
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))) 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 # Spawning Vats (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("Hub -> Spawning Vats (E2M7) Main", player), lambda state:
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)) state.has("Spawning Vats (E2M7)", player, 1) and
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)) state.has("Shotgun", player, 1) and
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))) state.has("Chaingun", player, 1) and
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))) 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 # Tower of Babel (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))) 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 # Fortress of Mystery (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("Hub -> Fortress of Mystery (E2M9) Main", player), lambda state:
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)) (state.has("Fortress of Mystery (E2M9)", player, 1) and
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))) state.has("Shotgun", player, 1) and
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))) 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 # Hell Keep (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("Hub -> Hell Keep (E3M1) Main", player), lambda state:
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))) 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 # Slough of Despair (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("Hub -> Slough of Despair (E3M2) Main", player), lambda state:
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)) (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 # Pandemonium (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("Hub -> Pandemonium (E3M3) Main", player), lambda state:
set_rule(world.get_entrance("Mars -> Pandemonium (E3M3) Main", player), lambda state: state.has("Pandemonium (E3M3)", player, 1) and state.has("Shotgun", player, 1)) (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 # House of Pain (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("Hub -> House of Pain (E3M4) Main", player), lambda state:
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)) (state.has("House of Pain (E3M4)", player, 1) and
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)) state.has("Shotgun", player, 1) and
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)) 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 # Unholy Cathedral (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("Hub -> Unholy Cathedral (E3M5) Main", player), lambda state:
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)) (state.has("Unholy Cathedral (E3M5)", player, 1) and
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))) 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 # Mt. Erebus (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("Hub -> Mt. Erebus (E3M6) Main", player), lambda state:
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)) 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 # Limbo (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("Hub -> Limbo (E3M7) Main", player), lambda state:
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)) (state.has("Limbo (E3M7)", player, 1) and
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))) state.has("Shotgun", player, 1) and
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))) 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 # Dis (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))) 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 # Warrens (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("Hub -> Warrens (E3M9) Main", player), lambda state:
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))) (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))

View File

@ -2,12 +2,15 @@ import functools
import logging import logging
from typing import Any, Dict, List 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 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") logger = logging.getLogger("DOOM 1993")
DOOM_TYPE_LEVEL_COMPLETE = -2
DOOM_TYPE_COMPUTER_AREA_MAP = 2026
class DOOM1993Location(Location): class DOOM1993Location(Location):
game: str = "DOOM 1993" game: str = "DOOM 1993"
@ -37,7 +40,7 @@ class DOOM1993World(World):
option_definitions = Options.options option_definitions = Options.options
game = "DOOM 1993" game = "DOOM 1993"
web = DOOM1993Web() web = DOOM1993Web()
data_version = 1 data_version = 2
required_client_version = (0, 3, 9) required_client_version = (0, 3, 9)
item_name_to_id = {data["name"]: item_id for item_id, data in Items.item_table.items()} 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): def create_regions(self):
# Main regions # Main regions
menu_region = Region("Menu", self.player, self.multiworld) menu_region = Region("Menu", self.player, self.multiworld)
mars_region = Region("Mars", self.player, self.multiworld) hub_region = Region("Hub", self.player, self.multiworld)
self.multiworld.regions += [menu_region, mars_region] self.multiworld.regions += [menu_region, hub_region]
menu_region.add_exits(["Mars"]) menu_region.add_exits(["Hub"])
# Create regions and locations # 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 = Region(region_name, self.player, self.multiworld)
region.add_locations({ 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() for loc_id, loc in Locations.location_table.items()
if loc["region"] == region_name and self.included_episodes[loc["episode"] - 1] if loc["region"] == region_name and self.included_episodes[loc["episode"] - 1]
}, DOOM1993Location) }, DOOM1993Location)
self.multiworld.regions.append(region) self.multiworld.regions.append(region)
# Link all regions to Mars for connection in region_dict["connections"]:
mars_region.add_exits(Regions.regions) 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 # Sum locations for items creation
self.location_count = len(self.multiworld.get_locations(self.player)) self.location_count = len(self.multiworld.get_locations(self.player))
def completion_rule(self, state: CollectionState): def completion_rule(self, state: CollectionState):
for event in Events.events: for map_name in Maps.map_names:
if event not in self.location_name_to_id: if map_name + " - Exit" not in self.location_name_to_id:
continue 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]: if not self.included_episodes[loc["episode"] - 1]:
continue 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 False
return True return True
def set_rules(self): 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 # 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. # platform) Unless the user allows for it.
if getattr(self.multiworld, "allow_death_logic")[self.player]: if not getattr(self.multiworld, "allow_death_logic")[self.player].value:
self.multiworld.exclude_locations[self.player] += set(Locations.death_logic_locations) 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: def create_item(self, name: str) -> DOOM1993Item:
item_id: int = self.item_name_to_id[name] item_id: int = self.item_name_to_id[name]
return DOOM1993Item(name, Items.item_table[item_id]["classification"], item_id, self.player) 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): def place_locked_item_in_locations(self, item_name, locations):
location = self.multiworld.random.choice(locations) location = self.multiworld.random.choice(locations)
self.multiworld.get_location(location, self.player).place_locked_item(self.create_item(item_name)) 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): def create_items(self):
is_only_first_episode: bool = self.get_episode_count() == 1 and self.included_episodes[0] is_only_first_episode: bool = self.get_episode_count() == 1 and self.included_episodes[0]
itempool: List[DOOM1993Item] = [] itempool: List[DOOM1993Item] = []
start_with_computer_area_maps: bool = getattr(self.multiworld, "start_with_computer_area_maps")[self.player].value
# Items # Items
for item_id, item in Items.item_table.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]: if item["episode"] != -1 and not self.included_episodes[item["episode"] - 1]:
continue continue
if item["name"] in {"BFG9000", "Plasma Gun"} and is_only_first_episode: 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"}: if item["name"] in {"Warrens (E3M9) - Blue skull key", "Halls of the Damned (E2M6) - Yellow skull key"}:
continue continue
@ -160,15 +191,21 @@ class DOOM1993World(World):
itempool += [self.create_item(item["name"]) for _ in range(count)] itempool += [self.create_item(item["name"]) for _ in range(count)]
# Place end level items in locked locations # Place end level items in locked locations
for event in Events.events: for map_name in Maps.map_names:
if event not in self.location_name_to_id: loc_name = map_name + " - Exit"
item_name = map_name + " - Complete"
if loc_name not in self.location_name_to_id:
continue 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]: if not self.included_episodes[loc["episode"] - 1]:
continue 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 self.location_count -= 1
# Special case for E2M6 and E3M8, where you enter a normal door then get stuck behind with a key door. # Special case for E2M6 and E3M8, where you enter a normal door then get stuck behind with a key door.
@ -194,7 +231,13 @@ class DOOM1993World(World):
if self.included_episodes[i]: if self.included_episodes[i]:
self.multiworld.push_precollected(self.create_item(self.starting_level_for_episode[i])) self.multiworld.push_precollected(self.create_item(self.starting_level_for_episode[i]))
# Fill the rest starting with weapons, powerups then fillers # 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 powerups, then fillers
self.create_ratioed_items("Armor", itempool) self.create_ratioed_items("Armor", itempool)
self.create_ratioed_items("Mega Armor", itempool) self.create_ratioed_items("Mega Armor", itempool)
self.create_ratioed_items("Berserk", itempool) self.create_ratioed_items("Berserk", itempool)