DOOM 1993: Added Episode 4. Game is now complete

And some bug fixes, balance and small features.
This commit is contained in:
Daivuk 2023-07-08 14:29:46 -04:00 committed by Fabian Dill
parent d49860fbeb
commit 7279de0605
7 changed files with 1483 additions and 40 deletions

View File

@ -884,13 +884,289 @@ item_table: Dict[int, ItemDict] = {
'doom_type': -2,
'episode': 3,
'map': 9},
350145: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Hell Beneath (E4M1) - Red skull key',
'doom_type': 38,
'episode': 4,
'map': 1},
350146: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Hell Beneath (E4M1) - Blue skull key',
'doom_type': 40,
'episode': 4,
'map': 1},
350147: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Perfect Hatred (E4M2) - Yellow skull key',
'doom_type': 39,
'episode': 4,
'map': 2},
350148: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Perfect Hatred (E4M2) - Blue skull key',
'doom_type': 40,
'episode': 4,
'map': 2},
350149: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Sever the Wicked (E4M3) - Red skull key',
'doom_type': 38,
'episode': 4,
'map': 3},
350150: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Sever the Wicked (E4M3) - Blue skull key',
'doom_type': 40,
'episode': 4,
'map': 3},
350151: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Unruly Evil (E4M4) - Red skull key',
'doom_type': 38,
'episode': 4,
'map': 4},
350152: {'classification': ItemClassification.progression,
'count': 1,
'name': 'They Will Repent (E4M5) - Yellow skull key',
'doom_type': 39,
'episode': 4,
'map': 5},
350153: {'classification': ItemClassification.progression,
'count': 1,
'name': 'They Will Repent (E4M5) - Red skull key',
'doom_type': 38,
'episode': 4,
'map': 5},
350154: {'classification': ItemClassification.progression,
'count': 1,
'name': 'They Will Repent (E4M5) - Blue skull key',
'doom_type': 40,
'episode': 4,
'map': 5},
350155: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Against Thee Wickedly (E4M6) - Blue skull key',
'doom_type': 40,
'episode': 4,
'map': 6},
350156: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Against Thee Wickedly (E4M6) - Yellow skull key',
'doom_type': 39,
'episode': 4,
'map': 6},
350157: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Against Thee Wickedly (E4M6) - Red skull key',
'doom_type': 38,
'episode': 4,
'map': 6},
350158: {'classification': ItemClassification.progression,
'count': 1,
'name': 'And Hell Followed (E4M7) - Blue skull key',
'doom_type': 40,
'episode': 4,
'map': 7},
350159: {'classification': ItemClassification.progression,
'count': 1,
'name': 'And Hell Followed (E4M7) - Yellow skull key',
'doom_type': 39,
'episode': 4,
'map': 7},
350160: {'classification': ItemClassification.progression,
'count': 1,
'name': 'And Hell Followed (E4M7) - Red skull key',
'doom_type': 38,
'episode': 4,
'map': 7},
350161: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Unto the Cruel (E4M8) - Yellow skull key',
'doom_type': 39,
'episode': 4,
'map': 8},
350162: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Unto the Cruel (E4M8) - Red skull key',
'doom_type': 38,
'episode': 4,
'map': 8},
350163: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Fear (E4M9) - Yellow skull key',
'doom_type': 39,
'episode': 4,
'map': 9},
350164: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Hell Beneath (E4M1)',
'doom_type': -1,
'episode': 4,
'map': 1},
350165: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Hell Beneath (E4M1) - Complete',
'doom_type': -2,
'episode': 4,
'map': 1},
350166: {'classification': ItemClassification.filler,
'count': 1,
'name': 'Hell Beneath (E4M1) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 1},
350167: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Perfect Hatred (E4M2)',
'doom_type': -1,
'episode': 4,
'map': 2},
350168: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Perfect Hatred (E4M2) - Complete',
'doom_type': -2,
'episode': 4,
'map': 2},
350169: {'classification': ItemClassification.filler,
'count': 1,
'name': 'Perfect Hatred (E4M2) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 2},
350170: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Sever the Wicked (E4M3)',
'doom_type': -1,
'episode': 4,
'map': 3},
350171: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Sever the Wicked (E4M3) - Complete',
'doom_type': -2,
'episode': 4,
'map': 3},
350172: {'classification': ItemClassification.filler,
'count': 1,
'name': 'Sever the Wicked (E4M3) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 3},
350173: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Unruly Evil (E4M4)',
'doom_type': -1,
'episode': 4,
'map': 4},
350174: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Unruly Evil (E4M4) - Complete',
'doom_type': -2,
'episode': 4,
'map': 4},
350175: {'classification': ItemClassification.filler,
'count': 1,
'name': 'Unruly Evil (E4M4) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 4},
350176: {'classification': ItemClassification.progression,
'count': 1,
'name': 'They Will Repent (E4M5)',
'doom_type': -1,
'episode': 4,
'map': 5},
350177: {'classification': ItemClassification.progression,
'count': 1,
'name': 'They Will Repent (E4M5) - Complete',
'doom_type': -2,
'episode': 4,
'map': 5},
350178: {'classification': ItemClassification.filler,
'count': 1,
'name': 'They Will Repent (E4M5) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 5},
350179: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Against Thee Wickedly (E4M6)',
'doom_type': -1,
'episode': 4,
'map': 6},
350180: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Against Thee Wickedly (E4M6) - Complete',
'doom_type': -2,
'episode': 4,
'map': 6},
350181: {'classification': ItemClassification.filler,
'count': 1,
'name': 'Against Thee Wickedly (E4M6) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 6},
350182: {'classification': ItemClassification.progression,
'count': 1,
'name': 'And Hell Followed (E4M7)',
'doom_type': -1,
'episode': 4,
'map': 7},
350183: {'classification': ItemClassification.progression,
'count': 1,
'name': 'And Hell Followed (E4M7) - Complete',
'doom_type': -2,
'episode': 4,
'map': 7},
350184: {'classification': ItemClassification.filler,
'count': 1,
'name': 'And Hell Followed (E4M7) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 7},
350185: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Unto the Cruel (E4M8)',
'doom_type': -1,
'episode': 4,
'map': 8},
350186: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Unto the Cruel (E4M8) - Complete',
'doom_type': -2,
'episode': 4,
'map': 8},
350187: {'classification': ItemClassification.filler,
'count': 1,
'name': 'Unto the Cruel (E4M8) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 8},
350188: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Fear (E4M9)',
'doom_type': -1,
'episode': 4,
'map': 9},
350189: {'classification': ItemClassification.progression,
'count': 1,
'name': 'Fear (E4M9) - Complete',
'doom_type': -2,
'episode': 4,
'map': 9},
350190: {'classification': ItemClassification.filler,
'count': 1,
'name': 'Fear (E4M9) - Computer area map',
'doom_type': 2026,
'episode': 4,
'map': 9},
}
item_name_groups: Dict[str, Set[str]] = {
'Ammos': {'Box of bullets', 'Box of rockets', 'Box of shotgun shells', 'Energy cell pack', },
'Keys': {'Central Processing (E1M6) - Blue keycard', 'Central Processing (E1M6) - Red keycard', 'Central Processing (E1M6) - Yellow keycard', 'Command Control (E1M4) - Blue keycard', 'Command Control (E1M4) - Yellow keycard', 'Computer Station (E1M7) - Blue keycard', 'Computer Station (E1M7) - Red keycard', 'Computer Station (E1M7) - Yellow keycard', 'Containment Area (E2M2) - Blue keycard', 'Containment Area (E2M2) - Red keycard', 'Containment Area (E2M2) - Yellow keycard', 'Deimos Anomaly (E2M1) - Blue keycard', 'Deimos Anomaly (E2M1) - Red keycard', 'Deimos Lab (E2M4) - Blue keycard', 'Deimos Lab (E2M4) - Yellow keycard', 'Fortress of Mystery (E2M9) - Blue skull key', 'Fortress of Mystery (E2M9) - Red skull key', 'Fortress of Mystery (E2M9) - Yellow skull key', 'Halls of the Damned (E2M6) - Blue skull key', 'Halls of the Damned (E2M6) - Red skull key', 'Halls of the Damned (E2M6) - Yellow skull key', 'House of Pain (E3M4) - Blue skull key', 'House of Pain (E3M4) - Red skull key', 'House of Pain (E3M4) - Yellow skull key', 'Limbo (E3M7) - Blue skull key', 'Limbo (E3M7) - Red skull key', 'Limbo (E3M7) - Yellow skull key', 'Military Base (E1M9) - Blue keycard', 'Military Base (E1M9) - Red keycard', 'Military Base (E1M9) - Yellow keycard', 'Mt. Erebus (E3M6) - Blue skull key', 'Nuclear Plant (E1M2) - Red keycard', 'Pandemonium (E3M3) - Blue skull key', 'Phobos Lab (E1M5) - Blue keycard', 'Phobos Lab (E1M5) - Yellow keycard', 'Refinery (E2M3) - Blue keycard', 'Slough of Despair (E3M2) - Blue skull key', 'Spawning Vats (E2M7) - Blue keycard', 'Spawning Vats (E2M7) - Red keycard', 'Spawning Vats (E2M7) - Yellow keycard', 'Toxin Refinery (E1M3) - Blue keycard', 'Toxin Refinery (E1M3) - Yellow keycard', 'Unholy Cathedral (E3M5) - Blue skull key', 'Unholy Cathedral (E3M5) - Yellow skull key', 'Warrens (E3M9) - Blue skull key', 'Warrens (E3M9) - Red skull key', },
'Levels': {'Central Processing (E1M6)', 'Command Center (E2M5)', 'Command Control (E1M4)', 'Computer Station (E1M7)', 'Containment Area (E2M2)', 'Deimos Anomaly (E2M1)', 'Deimos Lab (E2M4)', 'Dis (E3M8)', 'Fortress of Mystery (E2M9)', 'Halls of the Damned (E2M6)', 'Hangar (E1M1)', 'Hell Keep (E3M1)', 'House of Pain (E3M4)', 'Limbo (E3M7)', 'Military Base (E1M9)', 'Mt. Erebus (E3M6)', 'Nuclear Plant (E1M2)', 'Pandemonium (E3M3)', 'Phobos Anomaly (E1M8)', 'Phobos Lab (E1M5)', 'Refinery (E2M3)', 'Slough of Despair (E3M2)', 'Spawning Vats (E2M7)', 'Tower of Babel (E2M8)', 'Toxin Refinery (E1M3)', 'Unholy Cathedral (E3M5)', 'Warrens (E3M9)', },
'Keys': {'Against Thee Wickedly (E4M6) - Blue skull key', 'Against Thee Wickedly (E4M6) - Red skull key', 'Against Thee Wickedly (E4M6) - Yellow skull key', 'And Hell Followed (E4M7) - Blue skull key', 'And Hell Followed (E4M7) - Red skull key', 'And Hell Followed (E4M7) - Yellow skull key', 'Central Processing (E1M6) - Blue keycard', 'Central Processing (E1M6) - Red keycard', 'Central Processing (E1M6) - Yellow keycard', 'Command Control (E1M4) - Blue keycard', 'Command Control (E1M4) - Yellow keycard', 'Computer Station (E1M7) - Blue keycard', 'Computer Station (E1M7) - Red keycard', 'Computer Station (E1M7) - Yellow keycard', 'Containment Area (E2M2) - Blue keycard', 'Containment Area (E2M2) - Red keycard', 'Containment Area (E2M2) - Yellow keycard', 'Deimos Anomaly (E2M1) - Blue keycard', 'Deimos Anomaly (E2M1) - Red keycard', 'Deimos Lab (E2M4) - Blue keycard', 'Deimos Lab (E2M4) - Yellow keycard', 'Fear (E4M9) - Yellow skull key', 'Fortress of Mystery (E2M9) - Blue skull key', 'Fortress of Mystery (E2M9) - Red skull key', 'Fortress of Mystery (E2M9) - Yellow skull key', 'Halls of the Damned (E2M6) - Blue skull key', 'Halls of the Damned (E2M6) - Red skull key', 'Halls of the Damned (E2M6) - Yellow skull key', 'Hell Beneath (E4M1) - Blue skull key', 'Hell Beneath (E4M1) - Red skull key', 'House of Pain (E3M4) - Blue skull key', 'House of Pain (E3M4) - Red skull key', 'House of Pain (E3M4) - Yellow skull key', 'Limbo (E3M7) - Blue skull key', 'Limbo (E3M7) - Red skull key', 'Limbo (E3M7) - Yellow skull key', 'Military Base (E1M9) - Blue keycard', 'Military Base (E1M9) - Red keycard', 'Military Base (E1M9) - Yellow keycard', 'Mt. Erebus (E3M6) - Blue skull key', 'Nuclear Plant (E1M2) - Red keycard', 'Pandemonium (E3M3) - Blue skull key', 'Perfect Hatred (E4M2) - Blue skull key', 'Perfect Hatred (E4M2) - Yellow skull key', 'Phobos Lab (E1M5) - Blue keycard', 'Phobos Lab (E1M5) - Yellow keycard', 'Refinery (E2M3) - Blue keycard', 'Sever the Wicked (E4M3) - Blue skull key', 'Sever the Wicked (E4M3) - Red skull key', 'Slough of Despair (E3M2) - Blue skull key', 'Spawning Vats (E2M7) - Blue keycard', 'Spawning Vats (E2M7) - Red keycard', 'Spawning Vats (E2M7) - Yellow keycard', 'They Will Repent (E4M5) - Blue skull key', 'They Will Repent (E4M5) - Red skull key', 'They Will Repent (E4M5) - Yellow skull key', 'Toxin Refinery (E1M3) - Blue keycard', 'Toxin Refinery (E1M3) - Yellow keycard', 'Unholy Cathedral (E3M5) - Blue skull key', 'Unholy Cathedral (E3M5) - Yellow skull key', 'Unruly Evil (E4M4) - Red skull key', 'Unto the Cruel (E4M8) - Red skull key', 'Unto the Cruel (E4M8) - Yellow skull key', 'Warrens (E3M9) - Blue skull key', 'Warrens (E3M9) - Red skull key', },
'Levels': {'Against Thee Wickedly (E4M6)', 'And Hell Followed (E4M7)', 'Central Processing (E1M6)', 'Command Center (E2M5)', 'Command Control (E1M4)', 'Computer Station (E1M7)', 'Containment Area (E2M2)', 'Deimos Anomaly (E2M1)', 'Deimos Lab (E2M4)', 'Dis (E3M8)', 'Fear (E4M9)', 'Fortress of Mystery (E2M9)', 'Halls of the Damned (E2M6)', 'Hangar (E1M1)', 'Hell Beneath (E4M1)', 'Hell Keep (E3M1)', 'House of Pain (E3M4)', 'Limbo (E3M7)', 'Military Base (E1M9)', 'Mt. Erebus (E3M6)', 'Nuclear Plant (E1M2)', 'Pandemonium (E3M3)', 'Perfect Hatred (E4M2)', 'Phobos Anomaly (E1M8)', 'Phobos Lab (E1M5)', 'Refinery (E2M3)', 'Sever the Wicked (E4M3)', 'Slough of Despair (E3M2)', 'Spawning Vats (E2M7)', 'They Will Repent (E4M5)', 'Tower of Babel (E2M8)', 'Toxin Refinery (E1M3)', 'Unholy Cathedral (E3M5)', 'Unruly Evil (E4M4)', 'Unto the Cruel (E4M8)', 'Warrens (E3M9)', },
'Powerups': {'Armor', 'Berserk', 'Invulnerability', 'Mega Armor', 'Partial invisibility', 'Supercharge', },
'Weapons': {'BFG9000', 'Chaingun', 'Chainsaw', 'Plasma gun', 'Rocket launcher', 'Shotgun', },
}

View File

@ -2101,10 +2101,810 @@ location_table: Dict[int, LocationDict] = {
'index': -1,
'doom_type': -1,
'region': "Warrens (E3M9) Red"},
351348: {'name': 'Hell Beneath (E4M1) - Red skull key',
'episode': 4,
'map': 1,
'index': 6,
'doom_type': 38,
'region': "Hell Beneath (E4M1) Main"},
351349: {'name': 'Hell Beneath (E4M1) - Rocket launcher',
'episode': 4,
'map': 1,
'index': 23,
'doom_type': 2003,
'region': "Hell Beneath (E4M1) Main"},
351350: {'name': 'Hell Beneath (E4M1) - Blue skull key',
'episode': 4,
'map': 1,
'index': 33,
'doom_type': 40,
'region': "Hell Beneath (E4M1) Red"},
351351: {'name': 'Hell Beneath (E4M1) - Shotgun',
'episode': 4,
'map': 1,
'index': 47,
'doom_type': 2001,
'region': "Hell Beneath (E4M1) Main"},
351352: {'name': 'Hell Beneath (E4M1) - Armor',
'episode': 4,
'map': 1,
'index': 90,
'doom_type': 2018,
'region': "Hell Beneath (E4M1) Main"},
351353: {'name': 'Hell Beneath (E4M1) - Chaingun',
'episode': 4,
'map': 1,
'index': 97,
'doom_type': 2002,
'region': "Hell Beneath (E4M1) Main"},
351354: {'name': 'Hell Beneath (E4M1) - Exit',
'episode': 4,
'map': 1,
'index': -1,
'doom_type': -1,
'region': "Hell Beneath (E4M1) Blue"},
351355: {'name': 'Perfect Hatred (E4M2) - Plasma gun',
'episode': 4,
'map': 2,
'index': 5,
'doom_type': 2004,
'region': "Perfect Hatred (E4M2) Main"},
351356: {'name': 'Perfect Hatred (E4M2) - Shotgun',
'episode': 4,
'map': 2,
'index': 10,
'doom_type': 2001,
'region': "Perfect Hatred (E4M2) Main"},
351357: {'name': 'Perfect Hatred (E4M2) - Berserk',
'episode': 4,
'map': 2,
'index': 14,
'doom_type': 2023,
'region': "Perfect Hatred (E4M2) Main"},
351358: {'name': 'Perfect Hatred (E4M2) - Supercharge',
'episode': 4,
'map': 2,
'index': 17,
'doom_type': 2013,
'region': "Perfect Hatred (E4M2) Main"},
351359: {'name': 'Perfect Hatred (E4M2) - Mega Armor',
'episode': 4,
'map': 2,
'index': 20,
'doom_type': 2019,
'region': "Perfect Hatred (E4M2) Main"},
351360: {'name': 'Perfect Hatred (E4M2) - Yellow skull key',
'episode': 4,
'map': 2,
'index': 29,
'doom_type': 39,
'region': "Perfect Hatred (E4M2) Main"},
351361: {'name': 'Perfect Hatred (E4M2) - Armor',
'episode': 4,
'map': 2,
'index': 46,
'doom_type': 2018,
'region': "Perfect Hatred (E4M2) Main"},
351362: {'name': 'Perfect Hatred (E4M2) - Rocket launcher',
'episode': 4,
'map': 2,
'index': 93,
'doom_type': 2003,
'region': "Perfect Hatred (E4M2) Yellow"},
351363: {'name': 'Perfect Hatred (E4M2) - Chainsaw',
'episode': 4,
'map': 2,
'index': 126,
'doom_type': 2005,
'region': "Perfect Hatred (E4M2) Cave"},
351364: {'name': 'Perfect Hatred (E4M2) - Armor 2',
'episode': 4,
'map': 2,
'index': 151,
'doom_type': 2018,
'region': "Perfect Hatred (E4M2) Cave"},
351365: {'name': 'Perfect Hatred (E4M2) - Blue skull key',
'episode': 4,
'map': 2,
'index': 167,
'doom_type': 40,
'region': "Perfect Hatred (E4M2) Cave"},
351366: {'name': 'Perfect Hatred (E4M2) - BFG9000',
'episode': 4,
'map': 2,
'index': 217,
'doom_type': 2006,
'region': "Perfect Hatred (E4M2) Blue"},
351367: {'name': 'Perfect Hatred (E4M2) - Exit',
'episode': 4,
'map': 2,
'index': -1,
'doom_type': -1,
'region': "Perfect Hatred (E4M2) Blue"},
351368: {'name': 'Sever the Wicked (E4M3) - Invulnerability',
'episode': 4,
'map': 3,
'index': 9,
'doom_type': 2022,
'region': "Sever the Wicked (E4M3) Main"},
351369: {'name': 'Sever the Wicked (E4M3) - Berserk',
'episode': 4,
'map': 3,
'index': 21,
'doom_type': 2023,
'region': "Sever the Wicked (E4M3) Main"},
351370: {'name': 'Sever the Wicked (E4M3) - Partial invisibility',
'episode': 4,
'map': 3,
'index': 22,
'doom_type': 2024,
'region': "Sever the Wicked (E4M3) Main"},
351371: {'name': 'Sever the Wicked (E4M3) - Backpack',
'episode': 4,
'map': 3,
'index': 23,
'doom_type': 8,
'region': "Sever the Wicked (E4M3) Main"},
351372: {'name': 'Sever the Wicked (E4M3) - Plasma gun',
'episode': 4,
'map': 3,
'index': 25,
'doom_type': 2004,
'region': "Sever the Wicked (E4M3) Blue"},
351373: {'name': 'Sever the Wicked (E4M3) - Red skull key',
'episode': 4,
'map': 3,
'index': 27,
'doom_type': 38,
'region': "Sever the Wicked (E4M3) Main"},
351374: {'name': 'Sever the Wicked (E4M3) - Blue skull key',
'episode': 4,
'map': 3,
'index': 28,
'doom_type': 40,
'region': "Sever the Wicked (E4M3) Main"},
351375: {'name': 'Sever the Wicked (E4M3) - Backpack 2',
'episode': 4,
'map': 3,
'index': 29,
'doom_type': 8,
'region': "Sever the Wicked (E4M3) Main"},
351376: {'name': 'Sever the Wicked (E4M3) - Chainsaw',
'episode': 4,
'map': 3,
'index': 38,
'doom_type': 2005,
'region': "Sever the Wicked (E4M3) Main"},
351377: {'name': 'Sever the Wicked (E4M3) - Mega Armor',
'episode': 4,
'map': 3,
'index': 39,
'doom_type': 2019,
'region': "Sever the Wicked (E4M3) Main"},
351378: {'name': 'Sever the Wicked (E4M3) - Supercharge',
'episode': 4,
'map': 3,
'index': 94,
'doom_type': 2013,
'region': "Sever the Wicked (E4M3) Main"},
351379: {'name': 'Sever the Wicked (E4M3) - Plasma gun 2',
'episode': 4,
'map': 3,
'index': 157,
'doom_type': 2004,
'region': "Sever the Wicked (E4M3) Main"},
351380: {'name': 'Sever the Wicked (E4M3) - Chaingun',
'episode': 4,
'map': 3,
'index': 178,
'doom_type': 2002,
'region': "Sever the Wicked (E4M3) Main"},
351381: {'name': 'Sever the Wicked (E4M3) - Shotgun',
'episode': 4,
'map': 3,
'index': 254,
'doom_type': 2001,
'region': "Sever the Wicked (E4M3) Main"},
351382: {'name': 'Sever the Wicked (E4M3) - Rocket launcher',
'episode': 4,
'map': 3,
'index': 299,
'doom_type': 2003,
'region': "Sever the Wicked (E4M3) Main"},
351383: {'name': 'Sever the Wicked (E4M3) - Partial invisibility 2',
'episode': 4,
'map': 3,
'index': 304,
'doom_type': 2024,
'region': "Sever the Wicked (E4M3) Main"},
351384: {'name': 'Sever the Wicked (E4M3) - Exit',
'episode': 4,
'map': 3,
'index': -1,
'doom_type': -1,
'region': "Sever the Wicked (E4M3) Blue"},
351385: {'name': 'Unruly Evil (E4M4) - Rocket launcher',
'episode': 4,
'map': 4,
'index': 9,
'doom_type': 2003,
'region': "Unruly Evil (E4M4) Main"},
351386: {'name': 'Unruly Evil (E4M4) - Berserk',
'episode': 4,
'map': 4,
'index': 15,
'doom_type': 2023,
'region': "Unruly Evil (E4M4) Main"},
351387: {'name': 'Unruly Evil (E4M4) - Red skull key',
'episode': 4,
'map': 4,
'index': 16,
'doom_type': 38,
'region': "Unruly Evil (E4M4) Main"},
351388: {'name': 'Unruly Evil (E4M4) - Chaingun',
'episode': 4,
'map': 4,
'index': 56,
'doom_type': 2002,
'region': "Unruly Evil (E4M4) Main"},
351389: {'name': 'Unruly Evil (E4M4) - Shotgun',
'episode': 4,
'map': 4,
'index': 61,
'doom_type': 2001,
'region': "Unruly Evil (E4M4) Main"},
351390: {'name': 'Unruly Evil (E4M4) - Partial invisibility',
'episode': 4,
'map': 4,
'index': 68,
'doom_type': 2024,
'region': "Unruly Evil (E4M4) Main"},
351391: {'name': 'Unruly Evil (E4M4) - Invulnerability',
'episode': 4,
'map': 4,
'index': 115,
'doom_type': 2022,
'region': "Unruly Evil (E4M4) Main"},
351392: {'name': 'Unruly Evil (E4M4) - Supercharge',
'episode': 4,
'map': 4,
'index': 116,
'doom_type': 2013,
'region': "Unruly Evil (E4M4) Main"},
351393: {'name': 'Unruly Evil (E4M4) - Exit',
'episode': 4,
'map': 4,
'index': -1,
'doom_type': -1,
'region': "Unruly Evil (E4M4) Red"},
351394: {'name': 'They Will Repent (E4M5) - Yellow skull key',
'episode': 4,
'map': 5,
'index': 17,
'doom_type': 39,
'region': "They Will Repent (E4M5) Red"},
351395: {'name': 'They Will Repent (E4M5) - Red skull key',
'episode': 4,
'map': 5,
'index': 20,
'doom_type': 38,
'region': "They Will Repent (E4M5) Main"},
351396: {'name': 'They Will Repent (E4M5) - Blue skull key',
'episode': 4,
'map': 5,
'index': 21,
'doom_type': 40,
'region': "They Will Repent (E4M5) Red"},
351397: {'name': 'They Will Repent (E4M5) - BFG9000',
'episode': 4,
'map': 5,
'index': 31,
'doom_type': 2006,
'region': "They Will Repent (E4M5) Red"},
351398: {'name': 'They Will Repent (E4M5) - Chaingun',
'episode': 4,
'map': 5,
'index': 137,
'doom_type': 2002,
'region': "They Will Repent (E4M5) Main"},
351399: {'name': 'They Will Repent (E4M5) - Rocket launcher',
'episode': 4,
'map': 5,
'index': 140,
'doom_type': 2003,
'region': "They Will Repent (E4M5) Main"},
351400: {'name': 'They Will Repent (E4M5) - Armor',
'episode': 4,
'map': 5,
'index': 155,
'doom_type': 2018,
'region': "They Will Repent (E4M5) Main"},
351401: {'name': 'They Will Repent (E4M5) - Plasma gun',
'episode': 4,
'map': 5,
'index': 177,
'doom_type': 2004,
'region': "They Will Repent (E4M5) Red"},
351402: {'name': 'They Will Repent (E4M5) - Supercharge',
'episode': 4,
'map': 5,
'index': 193,
'doom_type': 2013,
'region': "They Will Repent (E4M5) Red"},
351403: {'name': 'They Will Repent (E4M5) - Invulnerability',
'episode': 4,
'map': 5,
'index': 199,
'doom_type': 2022,
'region': "They Will Repent (E4M5) Red"},
351404: {'name': 'They Will Repent (E4M5) - Berserk',
'episode': 4,
'map': 5,
'index': 256,
'doom_type': 2023,
'region': "They Will Repent (E4M5) Red"},
351405: {'name': 'They Will Repent (E4M5) - Exit',
'episode': 4,
'map': 5,
'index': -1,
'doom_type': -1,
'region': "They Will Repent (E4M5) Red"},
351406: {'name': 'Against Thee Wickedly (E4M6) - Plasma gun',
'episode': 4,
'map': 6,
'index': 30,
'doom_type': 2004,
'region': "Against Thee Wickedly (E4M6) Main"},
351407: {'name': 'Against Thee Wickedly (E4M6) - Blue skull key',
'episode': 4,
'map': 6,
'index': 39,
'doom_type': 40,
'region': "Against Thee Wickedly (E4M6) Main"},
351408: {'name': 'Against Thee Wickedly (E4M6) - Yellow skull key',
'episode': 4,
'map': 6,
'index': 47,
'doom_type': 39,
'region': "Against Thee Wickedly (E4M6) Blue"},
351409: {'name': 'Against Thee Wickedly (E4M6) - Supercharge',
'episode': 4,
'map': 6,
'index': 48,
'doom_type': 2013,
'region': "Against Thee Wickedly (E4M6) Main"},
351410: {'name': 'Against Thee Wickedly (E4M6) - Rocket launcher',
'episode': 4,
'map': 6,
'index': 49,
'doom_type': 2003,
'region': "Against Thee Wickedly (E4M6) Main"},
351411: {'name': 'Against Thee Wickedly (E4M6) - Chaingun',
'episode': 4,
'map': 6,
'index': 54,
'doom_type': 2002,
'region': "Against Thee Wickedly (E4M6) Main"},
351412: {'name': 'Against Thee Wickedly (E4M6) - Partial invisibility',
'episode': 4,
'map': 6,
'index': 56,
'doom_type': 2024,
'region': "Against Thee Wickedly (E4M6) Main"},
351413: {'name': 'Against Thee Wickedly (E4M6) - Red skull key',
'episode': 4,
'map': 6,
'index': 77,
'doom_type': 38,
'region': "Against Thee Wickedly (E4M6) Yellow"},
351414: {'name': 'Against Thee Wickedly (E4M6) - Invulnerability',
'episode': 4,
'map': 6,
'index': 78,
'doom_type': 2022,
'region': "Against Thee Wickedly (E4M6) Red"},
351415: {'name': 'Against Thee Wickedly (E4M6) - Invulnerability 2',
'episode': 4,
'map': 6,
'index': 89,
'doom_type': 2022,
'region': "Against Thee Wickedly (E4M6) Red"},
351416: {'name': 'Against Thee Wickedly (E4M6) - BFG9000',
'episode': 4,
'map': 6,
'index': 99,
'doom_type': 2006,
'region': "Against Thee Wickedly (E4M6) Red"},
351417: {'name': 'Against Thee Wickedly (E4M6) - Backpack',
'episode': 4,
'map': 6,
'index': 102,
'doom_type': 8,
'region': "Against Thee Wickedly (E4M6) Red"},
351418: {'name': 'Against Thee Wickedly (E4M6) - Berserk',
'episode': 4,
'map': 6,
'index': 256,
'doom_type': 2023,
'region': "Against Thee Wickedly (E4M6) Red"},
351419: {'name': 'Against Thee Wickedly (E4M6) - Shotgun',
'episode': 4,
'map': 6,
'index': 278,
'doom_type': 2001,
'region': "Against Thee Wickedly (E4M6) Main"},
351420: {'name': 'Against Thee Wickedly (E4M6) - Armor',
'episode': 4,
'map': 6,
'index': 292,
'doom_type': 2018,
'region': "Against Thee Wickedly (E4M6) Main"},
351421: {'name': 'Against Thee Wickedly (E4M6) - Mega Armor',
'episode': 4,
'map': 6,
'index': 293,
'doom_type': 2019,
'region': "Against Thee Wickedly (E4M6) Main"},
351422: {'name': 'Against Thee Wickedly (E4M6) - Exit',
'episode': 4,
'map': 6,
'index': -1,
'doom_type': -1,
'region': "Against Thee Wickedly (E4M6) Red"},
351423: {'name': 'And Hell Followed (E4M7) - Shotgun',
'episode': 4,
'map': 7,
'index': 1,
'doom_type': 2001,
'region': "And Hell Followed (E4M7) Main"},
351424: {'name': 'And Hell Followed (E4M7) - Chaingun',
'episode': 4,
'map': 7,
'index': 33,
'doom_type': 2002,
'region': "And Hell Followed (E4M7) Main"},
351425: {'name': 'And Hell Followed (E4M7) - Rocket launcher',
'episode': 4,
'map': 7,
'index': 58,
'doom_type': 2003,
'region': "And Hell Followed (E4M7) Main"},
351426: {'name': 'And Hell Followed (E4M7) - Plasma gun',
'episode': 4,
'map': 7,
'index': 61,
'doom_type': 2004,
'region': "And Hell Followed (E4M7) Red"},
351427: {'name': 'And Hell Followed (E4M7) - Backpack',
'episode': 4,
'map': 7,
'index': 76,
'doom_type': 8,
'region': "And Hell Followed (E4M7) Main"},
351428: {'name': 'And Hell Followed (E4M7) - Supercharge',
'episode': 4,
'map': 7,
'index': 77,
'doom_type': 2013,
'region': "And Hell Followed (E4M7) Main"},
351429: {'name': 'And Hell Followed (E4M7) - Blue skull key',
'episode': 4,
'map': 7,
'index': 87,
'doom_type': 40,
'region': "And Hell Followed (E4M7) Main"},
351430: {'name': 'And Hell Followed (E4M7) - Partial invisibility',
'episode': 4,
'map': 7,
'index': 122,
'doom_type': 2024,
'region': "And Hell Followed (E4M7) Main"},
351431: {'name': 'And Hell Followed (E4M7) - Mega Armor',
'episode': 4,
'map': 7,
'index': 156,
'doom_type': 2019,
'region': "And Hell Followed (E4M7) Main"},
351432: {'name': 'And Hell Followed (E4M7) - Armor',
'episode': 4,
'map': 7,
'index': 172,
'doom_type': 2018,
'region': "And Hell Followed (E4M7) Main"},
351433: {'name': 'And Hell Followed (E4M7) - Computer area map',
'episode': 4,
'map': 7,
'index': 173,
'doom_type': 2026,
'region': "And Hell Followed (E4M7) Main"},
351434: {'name': 'And Hell Followed (E4M7) - Berserk',
'episode': 4,
'map': 7,
'index': 174,
'doom_type': 2023,
'region': "And Hell Followed (E4M7) Main"},
351435: {'name': 'And Hell Followed (E4M7) - Yellow skull key',
'episode': 4,
'map': 7,
'index': 182,
'doom_type': 39,
'region': "And Hell Followed (E4M7) Main"},
351436: {'name': 'And Hell Followed (E4M7) - Red skull key',
'episode': 4,
'map': 7,
'index': 186,
'doom_type': 38,
'region': "And Hell Followed (E4M7) Main"},
351437: {'name': 'And Hell Followed (E4M7) - Chainsaw',
'episode': 4,
'map': 7,
'index': 190,
'doom_type': 2005,
'region': "And Hell Followed (E4M7) Main"},
351438: {'name': 'And Hell Followed (E4M7) - BFG9000',
'episode': 4,
'map': 7,
'index': 196,
'doom_type': 2006,
'region': "And Hell Followed (E4M7) Yellow"},
351439: {'name': 'And Hell Followed (E4M7) - Mega Armor 2',
'episode': 4,
'map': 7,
'index': 217,
'doom_type': 2019,
'region': "And Hell Followed (E4M7) Yellow"},
351440: {'name': 'And Hell Followed (E4M7) - Invulnerability',
'episode': 4,
'map': 7,
'index': 235,
'doom_type': 2022,
'region': "And Hell Followed (E4M7) Yellow"},
351441: {'name': 'And Hell Followed (E4M7) - Invulnerability 2',
'episode': 4,
'map': 7,
'index': 236,
'doom_type': 2022,
'region': "And Hell Followed (E4M7) Yellow"},
351442: {'name': 'And Hell Followed (E4M7) - Supercharge 2',
'episode': 4,
'map': 7,
'index': 237,
'doom_type': 2013,
'region': "And Hell Followed (E4M7) Yellow"},
351443: {'name': 'And Hell Followed (E4M7) - Rocket launcher 2',
'episode': 4,
'map': 7,
'index': 243,
'doom_type': 2003,
'region': "And Hell Followed (E4M7) Yellow"},
351444: {'name': 'And Hell Followed (E4M7) - Rocket launcher 3',
'episode': 4,
'map': 7,
'index': 248,
'doom_type': 2003,
'region': "And Hell Followed (E4M7) Red"},
351445: {'name': 'And Hell Followed (E4M7) - Exit',
'episode': 4,
'map': 7,
'index': -1,
'doom_type': -1,
'region': "And Hell Followed (E4M7) Red"},
351446: {'name': 'Unto the Cruel (E4M8) - Shotgun',
'episode': 4,
'map': 8,
'index': 80,
'doom_type': 2001,
'region': "Unto the Cruel (E4M8) Main"},
351447: {'name': 'Unto the Cruel (E4M8) - Supercharge',
'episode': 4,
'map': 8,
'index': 81,
'doom_type': 2013,
'region': "Unto the Cruel (E4M8) Main"},
351448: {'name': 'Unto the Cruel (E4M8) - Rocket launcher',
'episode': 4,
'map': 8,
'index': 85,
'doom_type': 2003,
'region': "Unto the Cruel (E4M8) Main"},
351449: {'name': 'Unto the Cruel (E4M8) - Mega Armor',
'episode': 4,
'map': 8,
'index': 100,
'doom_type': 2019,
'region': "Unto the Cruel (E4M8) Orange"},
351450: {'name': 'Unto the Cruel (E4M8) - Supercharge 2',
'episode': 4,
'map': 8,
'index': 101,
'doom_type': 2013,
'region': "Unto the Cruel (E4M8) Orange"},
351451: {'name': 'Unto the Cruel (E4M8) - Mega Armor 2',
'episode': 4,
'map': 8,
'index': 102,
'doom_type': 2019,
'region': "Unto the Cruel (E4M8) Main"},
351452: {'name': 'Unto the Cruel (E4M8) - Yellow skull key',
'episode': 4,
'map': 8,
'index': 146,
'doom_type': 39,
'region': "Unto the Cruel (E4M8) Main"},
351453: {'name': 'Unto the Cruel (E4M8) - Berserk',
'episode': 4,
'map': 8,
'index': 148,
'doom_type': 2023,
'region': "Unto the Cruel (E4M8) Main"},
351454: {'name': 'Unto the Cruel (E4M8) - BFG9000',
'episode': 4,
'map': 8,
'index': 180,
'doom_type': 2006,
'region': "Unto the Cruel (E4M8) Orange"},
351455: {'name': 'Unto the Cruel (E4M8) - Rocket launcher 2',
'episode': 4,
'map': 8,
'index': 186,
'doom_type': 2003,
'region': "Unto the Cruel (E4M8) Orange"},
351456: {'name': 'Unto the Cruel (E4M8) - Plasma gun',
'episode': 4,
'map': 8,
'index': 187,
'doom_type': 2004,
'region': "Unto the Cruel (E4M8) Orange"},
351457: {'name': 'Unto the Cruel (E4M8) - Red skull key',
'episode': 4,
'map': 8,
'index': 192,
'doom_type': 38,
'region': "Unto the Cruel (E4M8) Main"},
351458: {'name': 'Unto the Cruel (E4M8) - Chaingun',
'episode': 4,
'map': 8,
'index': 292,
'doom_type': 2002,
'region': "Unto the Cruel (E4M8) Main"},
351459: {'name': 'Unto the Cruel (E4M8) - Supercharge 3',
'episode': 4,
'map': 8,
'index': 304,
'doom_type': 2013,
'region': "Unto the Cruel (E4M8) Main"},
351460: {'name': 'Unto the Cruel (E4M8) - Partial invisibility',
'episode': 4,
'map': 8,
'index': 310,
'doom_type': 2024,
'region': "Unto the Cruel (E4M8) Main"},
351461: {'name': 'Unto the Cruel (E4M8) - Backpack',
'episode': 4,
'map': 8,
'index': 311,
'doom_type': 8,
'region': "Unto the Cruel (E4M8) Main"},
351462: {'name': 'Unto the Cruel (E4M8) - Plasma gun 2',
'episode': 4,
'map': 8,
'index': 312,
'doom_type': 2004,
'region': "Unto the Cruel (E4M8) Main"},
351463: {'name': 'Unto the Cruel (E4M8) - Exit',
'episode': 4,
'map': 8,
'index': -1,
'doom_type': -1,
'region': "Unto the Cruel (E4M8) Orange"},
351464: {'name': 'Fear (E4M9) - Yellow skull key',
'episode': 4,
'map': 9,
'index': 6,
'doom_type': 39,
'region': "Fear (E4M9) Main"},
351465: {'name': 'Fear (E4M9) - Shotgun',
'episode': 4,
'map': 9,
'index': 37,
'doom_type': 2001,
'region': "Fear (E4M9) Main"},
351466: {'name': 'Fear (E4M9) - Mega Armor',
'episode': 4,
'map': 9,
'index': 40,
'doom_type': 2019,
'region': "Fear (E4M9) Main"},
351467: {'name': 'Fear (E4M9) - Rocket launcher',
'episode': 4,
'map': 9,
'index': 119,
'doom_type': 2003,
'region': "Fear (E4M9) Main"},
351468: {'name': 'Fear (E4M9) - Rocket launcher 2',
'episode': 4,
'map': 9,
'index': 149,
'doom_type': 2003,
'region': "Fear (E4M9) Main"},
351469: {'name': 'Fear (E4M9) - Backpack',
'episode': 4,
'map': 9,
'index': 151,
'doom_type': 8,
'region': "Fear (E4M9) Yellow"},
351470: {'name': 'Fear (E4M9) - Plasma gun',
'episode': 4,
'map': 9,
'index': 220,
'doom_type': 2004,
'region': "Fear (E4M9) Main"},
351471: {'name': 'Fear (E4M9) - Chaingun',
'episode': 4,
'map': 9,
'index': 235,
'doom_type': 2002,
'region': "Fear (E4M9) Main"},
351472: {'name': 'Fear (E4M9) - Berserk',
'episode': 4,
'map': 9,
'index': 246,
'doom_type': 2023,
'region': "Fear (E4M9) Main"},
351473: {'name': 'Fear (E4M9) - Exit',
'episode': 4,
'map': 9,
'index': -1,
'doom_type': -1,
'region': "Fear (E4M9) Yellow"},
}
location_name_groups: Dict[str, Set[str]] = {
'Against Thee Wickedly (E4M6)': {
'Against Thee Wickedly (E4M6) - Armor',
'Against Thee Wickedly (E4M6) - BFG9000',
'Against Thee Wickedly (E4M6) - Backpack',
'Against Thee Wickedly (E4M6) - Berserk',
'Against Thee Wickedly (E4M6) - Blue skull key',
'Against Thee Wickedly (E4M6) - Chaingun',
'Against Thee Wickedly (E4M6) - Exit',
'Against Thee Wickedly (E4M6) - Invulnerability',
'Against Thee Wickedly (E4M6) - Invulnerability 2',
'Against Thee Wickedly (E4M6) - Mega Armor',
'Against Thee Wickedly (E4M6) - Partial invisibility',
'Against Thee Wickedly (E4M6) - Plasma gun',
'Against Thee Wickedly (E4M6) - Red skull key',
'Against Thee Wickedly (E4M6) - Rocket launcher',
'Against Thee Wickedly (E4M6) - Shotgun',
'Against Thee Wickedly (E4M6) - Supercharge',
'Against Thee Wickedly (E4M6) - Yellow skull key',
},
'And Hell Followed (E4M7)': {
'And Hell Followed (E4M7) - Armor',
'And Hell Followed (E4M7) - BFG9000',
'And Hell Followed (E4M7) - Backpack',
'And Hell Followed (E4M7) - Berserk',
'And Hell Followed (E4M7) - Blue skull key',
'And Hell Followed (E4M7) - Chaingun',
'And Hell Followed (E4M7) - Chainsaw',
'And Hell Followed (E4M7) - Computer area map',
'And Hell Followed (E4M7) - Exit',
'And Hell Followed (E4M7) - Invulnerability',
'And Hell Followed (E4M7) - Invulnerability 2',
'And Hell Followed (E4M7) - Mega Armor',
'And Hell Followed (E4M7) - Mega Armor 2',
'And Hell Followed (E4M7) - Partial invisibility',
'And Hell Followed (E4M7) - Plasma gun',
'And Hell Followed (E4M7) - Red skull key',
'And Hell Followed (E4M7) - Rocket launcher',
'And Hell Followed (E4M7) - Rocket launcher 2',
'And Hell Followed (E4M7) - Rocket launcher 3',
'And Hell Followed (E4M7) - Shotgun',
'And Hell Followed (E4M7) - Supercharge',
'And Hell Followed (E4M7) - Supercharge 2',
'And Hell Followed (E4M7) - Yellow skull key',
},
'Central Processing (E1M6)': {
'Central Processing (E1M6) - Armor',
'Central Processing (E1M6) - Armor 2',
@ -2228,6 +3028,18 @@ location_name_groups: Dict[str, Set[str]] = {
'Dis (E3M8) - Plasma gun',
'Dis (E3M8) - Rocket launcher',
},
'Fear (E4M9)': {
'Fear (E4M9) - Backpack',
'Fear (E4M9) - Berserk',
'Fear (E4M9) - Chaingun',
'Fear (E4M9) - Exit',
'Fear (E4M9) - Mega Armor',
'Fear (E4M9) - Plasma gun',
'Fear (E4M9) - Rocket launcher',
'Fear (E4M9) - Rocket launcher 2',
'Fear (E4M9) - Shotgun',
'Fear (E4M9) - Yellow skull key',
},
'Fortress of Mystery (E2M9)': {
'Fortress of Mystery (E2M9) - Backpack',
'Fortress of Mystery (E2M9) - Blue skull key',
@ -2269,6 +3081,15 @@ location_name_groups: Dict[str, Set[str]] = {
'Hangar (E1M1) - Mega Armor',
'Hangar (E1M1) - Shotgun',
},
'Hell Beneath (E4M1)': {
'Hell Beneath (E4M1) - Armor',
'Hell Beneath (E4M1) - Blue skull key',
'Hell Beneath (E4M1) - Chaingun',
'Hell Beneath (E4M1) - Exit',
'Hell Beneath (E4M1) - Red skull key',
'Hell Beneath (E4M1) - Rocket launcher',
'Hell Beneath (E4M1) - Shotgun',
},
'Hell Keep (E3M1)': {
'Hell Keep (E3M1) - Exit',
'Hell Keep (E3M1) - Rocket launcher',
@ -2372,6 +3193,21 @@ location_name_groups: Dict[str, Set[str]] = {
'Pandemonium (E3M3) - Shotgun 2',
'Pandemonium (E3M3) - Supercharge',
},
'Perfect Hatred (E4M2)': {
'Perfect Hatred (E4M2) - Armor',
'Perfect Hatred (E4M2) - Armor 2',
'Perfect Hatred (E4M2) - BFG9000',
'Perfect Hatred (E4M2) - Berserk',
'Perfect Hatred (E4M2) - Blue skull key',
'Perfect Hatred (E4M2) - Chainsaw',
'Perfect Hatred (E4M2) - Exit',
'Perfect Hatred (E4M2) - Mega Armor',
'Perfect Hatred (E4M2) - Plasma gun',
'Perfect Hatred (E4M2) - Rocket launcher',
'Perfect Hatred (E4M2) - Shotgun',
'Perfect Hatred (E4M2) - Supercharge',
'Perfect Hatred (E4M2) - Yellow skull key',
},
'Phobos Anomaly (E1M8)': {
'Phobos Anomaly (E1M8) - Armor',
'Phobos Anomaly (E1M8) - Chaingun',
@ -2415,6 +3251,25 @@ location_name_groups: Dict[str, Set[str]] = {
'Refinery (E2M3) - Shotgun',
'Refinery (E2M3) - Supercharge',
},
'Sever the Wicked (E4M3)': {
'Sever the Wicked (E4M3) - Backpack',
'Sever the Wicked (E4M3) - Backpack 2',
'Sever the Wicked (E4M3) - Berserk',
'Sever the Wicked (E4M3) - Blue skull key',
'Sever the Wicked (E4M3) - Chaingun',
'Sever the Wicked (E4M3) - Chainsaw',
'Sever the Wicked (E4M3) - Exit',
'Sever the Wicked (E4M3) - Invulnerability',
'Sever the Wicked (E4M3) - Mega Armor',
'Sever the Wicked (E4M3) - Partial invisibility',
'Sever the Wicked (E4M3) - Partial invisibility 2',
'Sever the Wicked (E4M3) - Plasma gun',
'Sever the Wicked (E4M3) - Plasma gun 2',
'Sever the Wicked (E4M3) - Red skull key',
'Sever the Wicked (E4M3) - Rocket launcher',
'Sever the Wicked (E4M3) - Shotgun',
'Sever the Wicked (E4M3) - Supercharge',
},
'Slough of Despair (E3M2)': {
'Slough of Despair (E3M2) - Armor',
'Slough of Despair (E3M2) - Berserk',
@ -2446,6 +3301,20 @@ location_name_groups: Dict[str, Set[str]] = {
'Spawning Vats (E2M7) - Supercharge',
'Spawning Vats (E2M7) - Yellow keycard',
},
'They Will Repent (E4M5)': {
'They Will Repent (E4M5) - Armor',
'They Will Repent (E4M5) - BFG9000',
'They Will Repent (E4M5) - Berserk',
'They Will Repent (E4M5) - Blue skull key',
'They Will Repent (E4M5) - Chaingun',
'They Will Repent (E4M5) - Exit',
'They Will Repent (E4M5) - Invulnerability',
'They Will Repent (E4M5) - Plasma gun',
'They Will Repent (E4M5) - Red skull key',
'They Will Repent (E4M5) - Rocket launcher',
'They Will Repent (E4M5) - Supercharge',
'They Will Repent (E4M5) - Yellow skull key',
},
'Tower of Babel (E2M8)': {
'Tower of Babel (E2M8) - Exit',
'Tower of Babel (E2M8) - Mega Armor',
@ -2488,6 +3357,37 @@ location_name_groups: Dict[str, Set[str]] = {
'Unholy Cathedral (E3M5) - Supercharge 2',
'Unholy Cathedral (E3M5) - Yellow skull key',
},
'Unruly Evil (E4M4)': {
'Unruly Evil (E4M4) - Berserk',
'Unruly Evil (E4M4) - Chaingun',
'Unruly Evil (E4M4) - Exit',
'Unruly Evil (E4M4) - Invulnerability',
'Unruly Evil (E4M4) - Partial invisibility',
'Unruly Evil (E4M4) - Red skull key',
'Unruly Evil (E4M4) - Rocket launcher',
'Unruly Evil (E4M4) - Shotgun',
'Unruly Evil (E4M4) - Supercharge',
},
'Unto the Cruel (E4M8)': {
'Unto the Cruel (E4M8) - BFG9000',
'Unto the Cruel (E4M8) - Backpack',
'Unto the Cruel (E4M8) - Berserk',
'Unto the Cruel (E4M8) - Chaingun',
'Unto the Cruel (E4M8) - Exit',
'Unto the Cruel (E4M8) - Mega Armor',
'Unto the Cruel (E4M8) - Mega Armor 2',
'Unto the Cruel (E4M8) - Partial invisibility',
'Unto the Cruel (E4M8) - Plasma gun',
'Unto the Cruel (E4M8) - Plasma gun 2',
'Unto the Cruel (E4M8) - Red skull key',
'Unto the Cruel (E4M8) - Rocket launcher',
'Unto the Cruel (E4M8) - Rocket launcher 2',
'Unto the Cruel (E4M8) - Shotgun',
'Unto the Cruel (E4M8) - Supercharge',
'Unto the Cruel (E4M8) - Supercharge 2',
'Unto the Cruel (E4M8) - Supercharge 3',
'Unto the Cruel (E4M8) - Yellow skull key',
},
'Warrens (E3M9)': {
'Warrens (E3M9) - Armor',
'Warrens (E3M9) - BFG9000',

View File

@ -31,4 +31,13 @@ map_names: List[str] = [
'Limbo (E3M7)',
'Dis (E3M8)',
'Warrens (E3M9)',
'Hell Beneath (E4M1)',
'Perfect Hatred (E4M2)',
'Sever the Wicked (E4M3)',
'Unruly Evil (E4M4)',
'They Will Repent (E4M5)',
'Against Thee Wickedly (E4M6)',
'And Hell Followed (E4M7)',
'Unto the Cruel (E4M8)',
'Fear (E4M9)',
]

View File

@ -69,17 +69,23 @@ class Episode1(DefaultOnToggle):
class Episode2(DefaultOnToggle):
"""The Shores of Hell
"""The Shores of Hell.
If none of the episodes are chosen, Episode 1 will be chosen by default."""
display_name = "Episode 2"
class Episode3(DefaultOnToggle):
"""Inferno
"""Inferno.
If none of the episodes are chosen, Episode 1 will be chosen by default."""
display_name = "Episode 3"
class Episode4(DefaultOnToggle):
"""Thy Flesh Consumed.
If none of the episodes are chosen, Episode 1 will be chosen by default."""
display_name = "Episode 4"
options: typing.Dict[str, AssembleOptions] = {
"difficulty": Difficulty,
"random_monsters": RandomMonsters,
@ -89,5 +95,6 @@ options: typing.Dict[str, AssembleOptions] = {
"death_link": DeathLink,
"episode1": Episode1,
"episode2": Episode2,
"episode3": Episode3
"episode3": Episode3,
"episode4": Episode4
}

View File

@ -354,5 +354,135 @@ regions:List[RegionDict] = [
"connections":["Warrens (E3M9) Main"]},
{"name":"Warrens (E3M9) Blue trigger",
"connects_to_hub":False,
"connections":["Warrens (E3M9) Main"]},
"connections":[]},
# Hell Beneath (E4M1)
{"name":"Hell Beneath (E4M1) Main",
"connects_to_hub":True,
"connections":[
"Hell Beneath (E4M1) Red",
"Hell Beneath (E4M1) Blue"]},
{"name":"Hell Beneath (E4M1) Red",
"connects_to_hub":False,
"connections":["Hell Beneath (E4M1) Main"]},
{"name":"Hell Beneath (E4M1) Blue",
"connects_to_hub":False,
"connections":["Hell Beneath (E4M1) Main"]},
# Perfect Hatred (E4M2)
{"name":"Perfect Hatred (E4M2) Main",
"connects_to_hub":True,
"connections":[
"Perfect Hatred (E4M2) Blue",
"Perfect Hatred (E4M2) Yellow"]},
{"name":"Perfect Hatred (E4M2) Blue",
"connects_to_hub":False,
"connections":[
"Perfect Hatred (E4M2) Main",
"Perfect Hatred (E4M2) Cave"]},
{"name":"Perfect Hatred (E4M2) Yellow",
"connects_to_hub":False,
"connections":[
"Perfect Hatred (E4M2) Main",
"Perfect Hatred (E4M2) Cave"]},
{"name":"Perfect Hatred (E4M2) Cave",
"connects_to_hub":False,
"connections":[]},
# Sever the Wicked (E4M3)
{"name":"Sever the Wicked (E4M3) Main",
"connects_to_hub":True,
"connections":["Sever the Wicked (E4M3) Red"]},
{"name":"Sever the Wicked (E4M3) Red",
"connects_to_hub":False,
"connections":[
"Sever the Wicked (E4M3) Blue",
"Sever the Wicked (E4M3) Main"]},
{"name":"Sever the Wicked (E4M3) Blue",
"connects_to_hub":False,
"connections":["Sever the Wicked (E4M3) Red"]},
# Unruly Evil (E4M4)
{"name":"Unruly Evil (E4M4) Main",
"connects_to_hub":True,
"connections":["Unruly Evil (E4M4) Red"]},
{"name":"Unruly Evil (E4M4) Red",
"connects_to_hub":False,
"connections":["Unruly Evil (E4M4) Main"]},
# They Will Repent (E4M5)
{"name":"They Will Repent (E4M5) Main",
"connects_to_hub":True,
"connections":["They Will Repent (E4M5) Red"]},
{"name":"They Will Repent (E4M5) Yellow",
"connects_to_hub":False,
"connections":["They Will Repent (E4M5) Red"]},
{"name":"They Will Repent (E4M5) Blue",
"connects_to_hub":False,
"connections":["They Will Repent (E4M5) Red"]},
{"name":"They Will Repent (E4M5) Red",
"connects_to_hub":False,
"connections":[
"They Will Repent (E4M5) Main",
"They Will Repent (E4M5) Yellow",
"They Will Repent (E4M5) Blue"]},
# Against Thee Wickedly (E4M6)
{"name":"Against Thee Wickedly (E4M6) Main",
"connects_to_hub":True,
"connections":[
"Against Thee Wickedly (E4M6) Blue",
"Against Thee Wickedly (E4M6) Yellow",
"Against Thee Wickedly (E4M6) Red"]},
{"name":"Against Thee Wickedly (E4M6) Red",
"connects_to_hub":False,
"connections":["Against Thee Wickedly (E4M6) Main"]},
{"name":"Against Thee Wickedly (E4M6) Blue",
"connects_to_hub":False,
"connections":["Against Thee Wickedly (E4M6) Main"]},
{"name":"Against Thee Wickedly (E4M6) Yellow",
"connects_to_hub":False,
"connections":["Against Thee Wickedly (E4M6) Main"]},
# And Hell Followed (E4M7)
{"name":"And Hell Followed (E4M7) Main",
"connects_to_hub":True,
"connections":[
"And Hell Followed (E4M7) Blue",
"And Hell Followed (E4M7) Red",
"And Hell Followed (E4M7) Yellow"]},
{"name":"And Hell Followed (E4M7) Red",
"connects_to_hub":False,
"connections":["And Hell Followed (E4M7) Main"]},
{"name":"And Hell Followed (E4M7) Blue",
"connects_to_hub":False,
"connections":["And Hell Followed (E4M7) Main"]},
{"name":"And Hell Followed (E4M7) Yellow",
"connects_to_hub":False,
"connections":["And Hell Followed (E4M7) Main"]},
# Unto the Cruel (E4M8)
{"name":"Unto the Cruel (E4M8) Main",
"connects_to_hub":True,
"connections":[
"Unto the Cruel (E4M8) Red",
"Unto the Cruel (E4M8) Yellow",
"Unto the Cruel (E4M8) Orange"]},
{"name":"Unto the Cruel (E4M8) Yellow",
"connects_to_hub":False,
"connections":["Unto the Cruel (E4M8) Main"]},
{"name":"Unto the Cruel (E4M8) Red",
"connects_to_hub":False,
"connections":["Unto the Cruel (E4M8) Main"]},
{"name":"Unto the Cruel (E4M8) Orange",
"connects_to_hub":False,
"connections":["Unto the Cruel (E4M8) Main"]},
# Fear (E4M9)
{"name":"Fear (E4M9) Main",
"connects_to_hub":True,
"connections":["Fear (E4M9) Yellow"]},
{"name":"Fear (E4M9) Yellow",
"connects_to_hub":False,
"connections":["Fear (E4M9) Main"]},
]

View File

@ -205,6 +205,8 @@ def set_rules(doom_1993_world: "DOOM1993World"):
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) Main -> Halls of the Damned (E2M6) One way 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
@ -373,12 +375,147 @@ def set_rules(doom_1993_world: "DOOM1993World"):
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", player), lambda state:
state.has("Warrens (E3M9) - Blue 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))
# Hell Beneath (E4M1)
set_rule(world.get_entrance("Hub -> Hell Beneath (E4M1) Main", player), lambda state:
state.has("Hell Beneath (E4M1)", player, 1))
set_rule(world.get_entrance("Hell Beneath (E4M1) Main -> Hell Beneath (E4M1) Red", player), lambda state:
(state.has("Hell Beneath (E4M1) - Red skull key", player, 1) and
state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and (state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Hell Beneath (E4M1) Main -> Hell Beneath (E4M1) Blue", player), lambda state:
state.has("Shotgun", player, 1) or
state.has("Chaingun", player, 1) or
state.has("Hell Beneath (E4M1) - Blue skull key", player, 1))
# Perfect Hatred (E4M2)
set_rule(world.get_entrance("Hub -> Perfect Hatred (E4M2) Main", player), lambda state:
(state.has("Perfect Hatred (E4M2)", 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("Perfect Hatred (E4M2) Main -> Perfect Hatred (E4M2) Blue", player), lambda state:
state.has("Perfect Hatred (E4M2) - Blue skull key", player, 1))
set_rule(world.get_entrance("Perfect Hatred (E4M2) Main -> Perfect Hatred (E4M2) Yellow", player), lambda state:
state.has("Perfect Hatred (E4M2) - Yellow skull key", player, 1))
# Sever the Wicked (E4M3)
set_rule(world.get_entrance("Hub -> Sever the Wicked (E4M3) Main", player), lambda state:
(state.has("Sever the Wicked (E4M3)", 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("Sever the Wicked (E4M3) Main -> Sever the Wicked (E4M3) Red", player), lambda state:
state.has("Sever the Wicked (E4M3) - Red skull key", player, 1))
set_rule(world.get_entrance("Sever the Wicked (E4M3) Red -> Sever the Wicked (E4M3) Blue", player), lambda state:
state.has("Sever the Wicked (E4M3) - Blue skull key", player, 1))
set_rule(world.get_entrance("Sever the Wicked (E4M3) Red -> Sever the Wicked (E4M3) Main", player), lambda state:
state.has("Sever the Wicked (E4M3) - Red skull key", player, 1))
set_rule(world.get_entrance("Sever the Wicked (E4M3) Blue -> Sever the Wicked (E4M3) Red", player), lambda state:
state.has("Sever the Wicked (E4M3) - Blue skull key", player, 1))
# Unruly Evil (E4M4)
set_rule(world.get_entrance("Hub -> Unruly Evil (E4M4) Main", player), lambda state:
(state.has("Unruly Evil (E4M4)", 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("Unruly Evil (E4M4) Main -> Unruly Evil (E4M4) Red", player), lambda state:
state.has("Unruly Evil (E4M4) - Red skull key", player, 1))
# They Will Repent (E4M5)
set_rule(world.get_entrance("Hub -> They Will Repent (E4M5) Main", player), lambda state:
(state.has("They Will Repent (E4M5)", 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("They Will Repent (E4M5) Main -> They Will Repent (E4M5) Red", player), lambda state:
state.has("They Will Repent (E4M5) - Red skull key", player, 1))
set_rule(world.get_entrance("They Will Repent (E4M5) Red -> They Will Repent (E4M5) Main", player), lambda state:
state.has("They Will Repent (E4M5) - Red skull key", player, 1))
set_rule(world.get_entrance("They Will Repent (E4M5) Red -> They Will Repent (E4M5) Yellow", player), lambda state:
state.has("They Will Repent (E4M5) - Yellow skull key", player, 1))
set_rule(world.get_entrance("They Will Repent (E4M5) Red -> They Will Repent (E4M5) Blue", player), lambda state:
state.has("They Will Repent (E4M5) - Blue skull key", player, 1))
# Against Thee Wickedly (E4M6)
set_rule(world.get_entrance("Hub -> Against Thee Wickedly (E4M6) Main", player), lambda state:
(state.has("Against Thee Wickedly (E4M6)", 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("Against Thee Wickedly (E4M6) Main -> Against Thee Wickedly (E4M6) Blue", player), lambda state:
state.has("Against Thee Wickedly (E4M6) - Blue skull key", player, 1))
set_rule(world.get_entrance("Against Thee Wickedly (E4M6) Main -> Against Thee Wickedly (E4M6) Yellow", player), lambda state:
state.has("Against Thee Wickedly (E4M6) - Yellow skull key", player, 1))
set_rule(world.get_entrance("Against Thee Wickedly (E4M6) Main -> Against Thee Wickedly (E4M6) Red", player), lambda state:
state.has("Against Thee Wickedly (E4M6) - Red skull key", player, 1))
set_rule(world.get_entrance("Against Thee Wickedly (E4M6) Blue -> Against Thee Wickedly (E4M6) Main", player), lambda state:
state.has("Against Thee Wickedly (E4M6) - Blue skull key", player, 1))
# And Hell Followed (E4M7)
set_rule(world.get_entrance("Hub -> And Hell Followed (E4M7) Main", player), lambda state:
(state.has("And Hell Followed (E4M7)", 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("And Hell Followed (E4M7) Main -> And Hell Followed (E4M7) Blue", player), lambda state:
state.has("And Hell Followed (E4M7) - Blue skull key", player, 1))
set_rule(world.get_entrance("And Hell Followed (E4M7) Main -> And Hell Followed (E4M7) Red", player), lambda state:
state.has("And Hell Followed (E4M7) - Red skull key", player, 1))
set_rule(world.get_entrance("And Hell Followed (E4M7) Main -> And Hell Followed (E4M7) Yellow", player), lambda state:
state.has("And Hell Followed (E4M7) - Yellow skull key", player, 1))
set_rule(world.get_entrance("And Hell Followed (E4M7) Red -> And Hell Followed (E4M7) Main", player), lambda state:
state.has("And Hell Followed (E4M7) - Red skull key", player, 1))
# Unto the Cruel (E4M8)
set_rule(world.get_entrance("Hub -> Unto the Cruel (E4M8) Main", player), lambda state:
(state.has("Unto the Cruel (E4M8)", player, 1) and
state.has("Chainsaw", player, 1) and
state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and
state.has("Rocket launcher", player, 1)) and
(state.has("BFG9000", player, 1) or
state.has("Plasma gun", player, 1)))
set_rule(world.get_entrance("Unto the Cruel (E4M8) Main -> Unto the Cruel (E4M8) Red", player), lambda state:
state.has("Unto the Cruel (E4M8) - Red skull key", player, 1))
set_rule(world.get_entrance("Unto the Cruel (E4M8) Main -> Unto the Cruel (E4M8) Yellow", player), lambda state:
state.has("Unto the Cruel (E4M8) - Yellow skull key", player, 1))
set_rule(world.get_entrance("Unto the Cruel (E4M8) Main -> Unto the Cruel (E4M8) Orange", player), lambda state:
state.has("Unto the Cruel (E4M8) - Yellow skull key", player, 1) and
state.has("Unto the Cruel (E4M8) - Red skull key", player, 1))
# Fear (E4M9)
set_rule(world.get_entrance("Hub -> Fear (E4M9) Main", player), lambda state:
state.has("Fear (E4M9)", player, 1) and
state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and
state.has("Rocket launcher", player, 1) and
state.has("Plasma gun", player, 1) and
state.has("BFG9000", player, 1))
set_rule(world.get_entrance("Fear (E4M9) Main -> Fear (E4M9) Yellow", player), lambda state:
state.has("Fear (E4M9) - Yellow skull key", player, 1))
set_rule(world.get_entrance("Fear (E4M9) Yellow -> Fear (E4M9) Main", player), lambda state:
state.has("Fear (E4M9) - Yellow skull key", player, 1))

View File

@ -40,7 +40,7 @@ class DOOM1993World(World):
option_definitions = Options.options
game = "DOOM 1993"
web = DOOM1993Web()
data_version = 2
data_version = 3
required_client_version = (0, 3, 9)
item_name_to_id = {data["name"]: item_id for item_id, data in Items.item_table.items()}
@ -52,7 +52,8 @@ class DOOM1993World(World):
starting_level_for_episode: List[str] = [
"Hangar (E1M1)",
"Deimos Anomaly (E2M1)",
"Hell Keep (E3M1)"
"Hell Keep (E3M1)",
"Hell Beneath (E4M1)"
]
# Item ratio that scales depending on episode count. These are the ratio for 3 episode.
@ -71,7 +72,7 @@ class DOOM1993World(World):
}
def __init__(self, world: MultiWorld, player: int):
self.included_episodes = [1, 1, 1]
self.included_episodes = [1, 1, 1, 0]
self.location_count = 0
super().__init__(world, player)
@ -81,7 +82,7 @@ class DOOM1993World(World):
def generate_early(self):
# Cache which episodes are included
for i in range(3):
for i in range(4):
self.included_episodes[i] = getattr(self.multiworld, f"episode{i + 1}")[self.player].value
# If no episodes selected, select Episode 1
@ -160,11 +161,6 @@ class DOOM1993World(World):
item_id: int = self.item_name_to_id[name]
return DOOM1993Item(name, Items.item_table[item_id]["classification"], item_id, self.player)
def place_locked_item_in_locations(self, item_name, locations):
location = self.multiworld.random.choice(locations)
self.multiworld.get_location(location, self.player).place_locked_item(self.create_item(item_name))
self.location_count -= 1
def create_items(self):
is_only_first_episode: bool = self.get_episode_count() == 1 and self.included_episodes[0]
itempool: List[DOOM1993Item] = []
@ -184,9 +180,6 @@ class DOOM1993World(World):
if item["name"] in {"BFG9000", "Plasma Gun"} and is_only_first_episode:
continue # Don't include those guns if only first episode
if item["name"] in {"Warrens (E3M9) - Blue skull key", "Halls of the Damned (E2M6) - Yellow skull key"}:
continue
count = item["count"] if item["name"] not in self.starting_level_for_episode else item["count"] - 1
itempool += [self.create_item(item["name"]) for _ in range(count)]
@ -208,24 +201,6 @@ class DOOM1993World(World):
self.multiworld.get_location(loc_name, self.player).place_locked_item(self.create_item(item_name))
self.location_count -= 1
# Special case for E2M6 and E3M8, where you enter a normal door then get stuck behind with a key door.
# We need to put the key in the locations available behind this door.
if self.included_episodes[1]:
self.place_locked_item_in_locations("Halls of the Damned (E2M6) - Yellow skull key", [
"Halls of the Damned (E2M6) - Yellow skull key",
"Halls of the Damned (E2M6) - Partial invisibility 2"
])
if self.included_episodes[2]:
self.place_locked_item_in_locations("Warrens (E3M9) - Blue skull key", [
"Warrens (E3M9) - Rocket launcher",
"Warrens (E3M9) - Rocket launcher 2",
"Warrens (E3M9) - Partial invisibility",
"Warrens (E3M9) - Invulnerability",
"Warrens (E3M9) - Supercharge",
"Warrens (E3M9) - Berserk",
"Warrens (E3M9) - Chaingun"
])
# Give starting levels right away
for i in range(len(self.included_episodes)):
if self.included_episodes[i]:
@ -264,7 +239,7 @@ class DOOM1993World(World):
remaining_loc = self.location_count - len(itempool)
ep_count = self.get_episode_count()
# Was balanced for 3 episodes
# Was balanced for 3 episodes (We added 4th episode, but keep same ratio)
count = min(remaining_loc, max(1, int(round(self.items_ratio[item_name] * ep_count / 3))))
if count == 0:
logger.warning("Warning, no ", item_name, " will be placed.")
@ -274,4 +249,13 @@ class DOOM1993World(World):
itempool.append(self.create_item(item_name))
def fill_slot_data(self) -> Dict[str, Any]:
return {name: getattr(self.multiworld, name)[self.player].value for name in self.option_definitions}
slot_data = {name: getattr(self.multiworld, name)[self.player].value for name in self.option_definitions}
# E2M6 and E3M9 each have one way keydoor. You can enter, but required the keycard to get out.
# We used to force place the keycard behind those doors. Limiting the randomness for those items. A change
# was made to make those specific doors 2-ways keydoors. So the keycards are not shuffled in the pool like the
# rest. The client needs to know about this so it can modify the door. If the multiworld was generated with
# an older version, the player would end up stuck.
slot_data["two_ways_keydoors"] = True
return slot_data