DOOM 1993: Include only regions/rules for selected episodes

This commit is contained in:
Daivuk 2023-07-25 15:02:59 -04:00 committed by Fabian Dill
parent 40c9287eba
commit de1ec4a18f
4 changed files with 136 additions and 6 deletions

View File

@ -80,7 +80,7 @@ class Episode3(DefaultOnToggle):
display_name = "Episode 3" display_name = "Episode 3"
class Episode4(DefaultOnToggle): class Episode4(Toggle):
"""Thy Flesh Consumed. """Thy Flesh Consumed.
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."""
display_name = "Episode 4" display_name = "Episode 4"

View File

@ -6,6 +6,7 @@ from BaseClasses import TypedDict
class RegionDict(TypedDict, total=False): class RegionDict(TypedDict, total=False):
name: str name: str
connects_to_hub: bool connects_to_hub: bool
episode: int
connections: List[str] connections: List[str]
@ -13,59 +14,72 @@ regions:List[RegionDict] = [
# Hangar (E1M1) # Hangar (E1M1)
{"name":"Hangar (E1M1) Main", {"name":"Hangar (E1M1) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":[]}, "connections":[]},
# Nuclear Plant (E1M2) # Nuclear Plant (E1M2)
{"name":"Nuclear Plant (E1M2) Main", {"name":"Nuclear Plant (E1M2) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":["Nuclear Plant (E1M2) Red"]}, "connections":["Nuclear Plant (E1M2) Red"]},
{"name":"Nuclear Plant (E1M2) Red", {"name":"Nuclear Plant (E1M2) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Nuclear Plant (E1M2) Main"]}, "connections":["Nuclear Plant (E1M2) Main"]},
# Toxin Refinery (E1M3) # Toxin Refinery (E1M3)
{"name":"Toxin Refinery (E1M3) Main", {"name":"Toxin Refinery (E1M3) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":["Toxin Refinery (E1M3) Blue"]}, "connections":["Toxin Refinery (E1M3) Blue"]},
{"name":"Toxin Refinery (E1M3) Blue", {"name":"Toxin Refinery (E1M3) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":[ "connections":[
"Toxin Refinery (E1M3) Yellow", "Toxin Refinery (E1M3) Yellow",
"Toxin Refinery (E1M3) Main"]}, "Toxin Refinery (E1M3) Main"]},
{"name":"Toxin Refinery (E1M3) Yellow", {"name":"Toxin Refinery (E1M3) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Toxin Refinery (E1M3) Blue"]}, "connections":["Toxin Refinery (E1M3) Blue"]},
# Command Control (E1M4) # Command Control (E1M4)
{"name":"Command Control (E1M4) Main", {"name":"Command Control (E1M4) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":[ "connections":[
"Command Control (E1M4) Blue", "Command Control (E1M4) Blue",
"Command Control (E1M4) Yellow"]}, "Command Control (E1M4) Yellow"]},
{"name":"Command Control (E1M4) Blue", {"name":"Command Control (E1M4) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Command Control (E1M4) Main"]}, "connections":["Command Control (E1M4) Main"]},
{"name":"Command Control (E1M4) Yellow", {"name":"Command Control (E1M4) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Command Control (E1M4) Main"]}, "connections":["Command Control (E1M4) Main"]},
# Phobos Lab (E1M5) # Phobos Lab (E1M5)
{"name":"Phobos Lab (E1M5) Main", {"name":"Phobos Lab (E1M5) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":["Phobos Lab (E1M5) Yellow"]}, "connections":["Phobos Lab (E1M5) Yellow"]},
{"name":"Phobos Lab (E1M5) Yellow", {"name":"Phobos Lab (E1M5) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":[ "connections":[
"Phobos Lab (E1M5) Main", "Phobos Lab (E1M5) Main",
"Phobos Lab (E1M5) Blue", "Phobos Lab (E1M5) Blue",
"Phobos Lab (E1M5) Green"]}, "Phobos Lab (E1M5) Green"]},
{"name":"Phobos Lab (E1M5) Blue", {"name":"Phobos Lab (E1M5) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":[ "connections":[
"Phobos Lab (E1M5) Green", "Phobos Lab (E1M5) Green",
"Phobos Lab (E1M5) Yellow"]}, "Phobos Lab (E1M5) Yellow"]},
{"name":"Phobos Lab (E1M5) Green", {"name":"Phobos Lab (E1M5) Green",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":[ "connections":[
"Phobos Lab (E1M5) Main", "Phobos Lab (E1M5) Main",
"Phobos Lab (E1M5) Blue"]}, "Phobos Lab (E1M5) Blue"]},
@ -73,6 +87,7 @@ regions:List[RegionDict] = [
# Central Processing (E1M6) # Central Processing (E1M6)
{"name":"Central Processing (E1M6) Main", {"name":"Central Processing (E1M6) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":[ "connections":[
"Central Processing (E1M6) Yellow", "Central Processing (E1M6) Yellow",
"Central Processing (E1M6) Red", "Central Processing (E1M6) Red",
@ -80,140 +95,173 @@ regions:List[RegionDict] = [
"Central Processing (E1M6) Nukage"]}, "Central Processing (E1M6) Nukage"]},
{"name":"Central Processing (E1M6) Red", {"name":"Central Processing (E1M6) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Central Processing (E1M6) Main"]}, "connections":["Central Processing (E1M6) Main"]},
{"name":"Central Processing (E1M6) Blue", {"name":"Central Processing (E1M6) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Central Processing (E1M6) Main"]}, "connections":["Central Processing (E1M6) Main"]},
{"name":"Central Processing (E1M6) Yellow", {"name":"Central Processing (E1M6) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Central Processing (E1M6) Main"]}, "connections":["Central Processing (E1M6) Main"]},
{"name":"Central Processing (E1M6) Nukage", {"name":"Central Processing (E1M6) Nukage",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Central Processing (E1M6) Yellow"]}, "connections":["Central Processing (E1M6) Yellow"]},
# Computer Station (E1M7) # Computer Station (E1M7)
{"name":"Computer Station (E1M7) Main", {"name":"Computer Station (E1M7) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":[ "connections":[
"Computer Station (E1M7) Red", "Computer Station (E1M7) Red",
"Computer Station (E1M7) Yellow"]}, "Computer Station (E1M7) Yellow"]},
{"name":"Computer Station (E1M7) Blue", {"name":"Computer Station (E1M7) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Computer Station (E1M7) Yellow"]}, "connections":["Computer Station (E1M7) Yellow"]},
{"name":"Computer Station (E1M7) Red", {"name":"Computer Station (E1M7) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Computer Station (E1M7) Main"]}, "connections":["Computer Station (E1M7) Main"]},
{"name":"Computer Station (E1M7) Yellow", {"name":"Computer Station (E1M7) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":[ "connections":[
"Computer Station (E1M7) Blue", "Computer Station (E1M7) Blue",
"Computer Station (E1M7) Courtyard", "Computer Station (E1M7) Courtyard",
"Computer Station (E1M7) Main"]}, "Computer Station (E1M7) Main"]},
{"name":"Computer Station (E1M7) Courtyard", {"name":"Computer Station (E1M7) Courtyard",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Computer Station (E1M7) Yellow"]}, "connections":["Computer Station (E1M7) Yellow"]},
# Phobos Anomaly (E1M8) # Phobos Anomaly (E1M8)
{"name":"Phobos Anomaly (E1M8) Main", {"name":"Phobos Anomaly (E1M8) Main",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":[]}, "connections":[]},
{"name":"Phobos Anomaly (E1M8) Start", {"name":"Phobos Anomaly (E1M8) Start",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":["Phobos Anomaly (E1M8) Main"]}, "connections":["Phobos Anomaly (E1M8) Main"]},
# Military Base (E1M9) # Military Base (E1M9)
{"name":"Military Base (E1M9) Main", {"name":"Military Base (E1M9) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":1,
"connections":[ "connections":[
"Military Base (E1M9) Blue", "Military Base (E1M9) Blue",
"Military Base (E1M9) Yellow", "Military Base (E1M9) Yellow",
"Military Base (E1M9) Red"]}, "Military Base (E1M9) Red"]},
{"name":"Military Base (E1M9) Blue", {"name":"Military Base (E1M9) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Military Base (E1M9) Main"]}, "connections":["Military Base (E1M9) Main"]},
{"name":"Military Base (E1M9) Red", {"name":"Military Base (E1M9) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Military Base (E1M9) Main"]}, "connections":["Military Base (E1M9) Main"]},
{"name":"Military Base (E1M9) Yellow", {"name":"Military Base (E1M9) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":1,
"connections":["Military Base (E1M9) Main"]}, "connections":["Military Base (E1M9) Main"]},
# Deimos Anomaly (E2M1) # Deimos Anomaly (E2M1)
{"name":"Deimos Anomaly (E2M1) Main", {"name":"Deimos Anomaly (E2M1) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":[ "connections":[
"Deimos Anomaly (E2M1) Red", "Deimos Anomaly (E2M1) Red",
"Deimos Anomaly (E2M1) Blue"]}, "Deimos Anomaly (E2M1) Blue"]},
{"name":"Deimos Anomaly (E2M1) Blue", {"name":"Deimos Anomaly (E2M1) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Deimos Anomaly (E2M1) Main"]}, "connections":["Deimos Anomaly (E2M1) Main"]},
{"name":"Deimos Anomaly (E2M1) Red", {"name":"Deimos Anomaly (E2M1) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Deimos Anomaly (E2M1) Main"]}, "connections":["Deimos Anomaly (E2M1) Main"]},
# Containment Area (E2M2) # Containment Area (E2M2)
{"name":"Containment Area (E2M2) Main", {"name":"Containment Area (E2M2) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":[ "connections":[
"Containment Area (E2M2) Yellow", "Containment Area (E2M2) Yellow",
"Containment Area (E2M2) Blue", "Containment Area (E2M2) Blue",
"Containment Area (E2M2) Red"]}, "Containment Area (E2M2) Red"]},
{"name":"Containment Area (E2M2) Blue", {"name":"Containment Area (E2M2) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Containment Area (E2M2) Main"]}, "connections":["Containment Area (E2M2) Main"]},
{"name":"Containment Area (E2M2) Red", {"name":"Containment Area (E2M2) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Containment Area (E2M2) Main"]}, "connections":["Containment Area (E2M2) Main"]},
{"name":"Containment Area (E2M2) Yellow", {"name":"Containment Area (E2M2) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Containment Area (E2M2) Main"]}, "connections":["Containment Area (E2M2) Main"]},
# Refinery (E2M3) # Refinery (E2M3)
{"name":"Refinery (E2M3) Main", {"name":"Refinery (E2M3) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":["Refinery (E2M3) Blue"]}, "connections":["Refinery (E2M3) Blue"]},
{"name":"Refinery (E2M3) Blue", {"name":"Refinery (E2M3) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Refinery (E2M3) Main"]}, "connections":["Refinery (E2M3) Main"]},
# Deimos Lab (E2M4) # Deimos Lab (E2M4)
{"name":"Deimos Lab (E2M4) Main", {"name":"Deimos Lab (E2M4) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":["Deimos Lab (E2M4) Blue"]}, "connections":["Deimos Lab (E2M4) Blue"]},
{"name":"Deimos Lab (E2M4) Blue", {"name":"Deimos Lab (E2M4) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":[ "connections":[
"Deimos Lab (E2M4) Main", "Deimos Lab (E2M4) Main",
"Deimos Lab (E2M4) Yellow"]}, "Deimos Lab (E2M4) Yellow"]},
{"name":"Deimos Lab (E2M4) Yellow", {"name":"Deimos Lab (E2M4) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Deimos Lab (E2M4) Blue"]}, "connections":["Deimos Lab (E2M4) Blue"]},
# Command Center (E2M5) # Command Center (E2M5)
{"name":"Command Center (E2M5) Main", {"name":"Command Center (E2M5) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":[]}, "connections":[]},
# Halls of the Damned (E2M6) # Halls of the Damned (E2M6)
{"name":"Halls of the Damned (E2M6) Main", {"name":"Halls of the Damned (E2M6) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":[ "connections":[
"Halls of the Damned (E2M6) Blue Yellow Red", "Halls of the Damned (E2M6) Blue Yellow Red",
"Halls of the Damned (E2M6) Yellow", "Halls of the Damned (E2M6) Yellow",
"Halls of the Damned (E2M6) One way Yellow"]}, "Halls of the Damned (E2M6) One way Yellow"]},
{"name":"Halls of the Damned (E2M6) Yellow", {"name":"Halls of the Damned (E2M6) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Halls of the Damned (E2M6) Main"]}, "connections":["Halls of the Damned (E2M6) Main"]},
{"name":"Halls of the Damned (E2M6) Blue Yellow Red", {"name":"Halls of the Damned (E2M6) Blue Yellow Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Halls of the Damned (E2M6) Main"]}, "connections":["Halls of the Damned (E2M6) Main"]},
{"name":"Halls of the Damned (E2M6) One way Yellow", {"name":"Halls of the Damned (E2M6) One way Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Halls of the Damned (E2M6) Main"]}, "connections":["Halls of the Damned (E2M6) Main"]},
# Spawning Vats (E2M7) # Spawning Vats (E2M7)
{"name":"Spawning Vats (E2M7) Main", {"name":"Spawning Vats (E2M7) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":[ "connections":[
"Spawning Vats (E2M7) Blue", "Spawning Vats (E2M7) Blue",
"Spawning Vats (E2M7) Entrance Secret", "Spawning Vats (E2M7) Entrance Secret",
@ -221,207 +269,256 @@ regions:List[RegionDict] = [
"Spawning Vats (E2M7) Yellow"]}, "Spawning Vats (E2M7) Yellow"]},
{"name":"Spawning Vats (E2M7) Blue", {"name":"Spawning Vats (E2M7) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Spawning Vats (E2M7) Main"]}, "connections":["Spawning Vats (E2M7) Main"]},
{"name":"Spawning Vats (E2M7) Yellow", {"name":"Spawning Vats (E2M7) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Spawning Vats (E2M7) Main"]}, "connections":["Spawning Vats (E2M7) Main"]},
{"name":"Spawning Vats (E2M7) Red", {"name":"Spawning Vats (E2M7) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Spawning Vats (E2M7) Main"]}, "connections":["Spawning Vats (E2M7) Main"]},
{"name":"Spawning Vats (E2M7) Entrance Secret", {"name":"Spawning Vats (E2M7) Entrance Secret",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Spawning Vats (E2M7) Main"]}, "connections":["Spawning Vats (E2M7) Main"]},
# Tower of Babel (E2M8) # Tower of Babel (E2M8)
{"name":"Tower of Babel (E2M8) Main", {"name":"Tower of Babel (E2M8) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":[]}, "connections":[]},
# Fortress of Mystery (E2M9) # Fortress of Mystery (E2M9)
{"name":"Fortress of Mystery (E2M9) Main", {"name":"Fortress of Mystery (E2M9) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":2,
"connections":[ "connections":[
"Fortress of Mystery (E2M9) Blue", "Fortress of Mystery (E2M9) Blue",
"Fortress of Mystery (E2M9) Red", "Fortress of Mystery (E2M9) Red",
"Fortress of Mystery (E2M9) Yellow"]}, "Fortress of Mystery (E2M9) Yellow"]},
{"name":"Fortress of Mystery (E2M9) Blue", {"name":"Fortress of Mystery (E2M9) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Fortress of Mystery (E2M9) Main"]}, "connections":["Fortress of Mystery (E2M9) Main"]},
{"name":"Fortress of Mystery (E2M9) Red", {"name":"Fortress of Mystery (E2M9) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Fortress of Mystery (E2M9) Main"]}, "connections":["Fortress of Mystery (E2M9) Main"]},
{"name":"Fortress of Mystery (E2M9) Yellow", {"name":"Fortress of Mystery (E2M9) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":2,
"connections":["Fortress of Mystery (E2M9) Main"]}, "connections":["Fortress of Mystery (E2M9) Main"]},
# Hell Keep (E3M1) # Hell Keep (E3M1)
{"name":"Hell Keep (E3M1) Main", {"name":"Hell Keep (E3M1) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":["Hell Keep (E3M1) Narrow"]}, "connections":["Hell Keep (E3M1) Narrow"]},
{"name":"Hell Keep (E3M1) Narrow", {"name":"Hell Keep (E3M1) Narrow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Hell Keep (E3M1) Main"]}, "connections":["Hell Keep (E3M1) Main"]},
# Slough of Despair (E3M2) # Slough of Despair (E3M2)
{"name":"Slough of Despair (E3M2) Main", {"name":"Slough of Despair (E3M2) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":["Slough of Despair (E3M2) Blue"]}, "connections":["Slough of Despair (E3M2) Blue"]},
{"name":"Slough of Despair (E3M2) Blue", {"name":"Slough of Despair (E3M2) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Slough of Despair (E3M2) Main"]}, "connections":["Slough of Despair (E3M2) Main"]},
# Pandemonium (E3M3) # Pandemonium (E3M3)
{"name":"Pandemonium (E3M3) Main", {"name":"Pandemonium (E3M3) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":["Pandemonium (E3M3) Blue"]}, "connections":["Pandemonium (E3M3) Blue"]},
{"name":"Pandemonium (E3M3) Blue", {"name":"Pandemonium (E3M3) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Pandemonium (E3M3) Main"]}, "connections":["Pandemonium (E3M3) Main"]},
# House of Pain (E3M4) # House of Pain (E3M4)
{"name":"House of Pain (E3M4) Main", {"name":"House of Pain (E3M4) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":["House of Pain (E3M4) Blue"]}, "connections":["House of Pain (E3M4) Blue"]},
{"name":"House of Pain (E3M4) Blue", {"name":"House of Pain (E3M4) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":[ "connections":[
"House of Pain (E3M4) Main", "House of Pain (E3M4) Main",
"House of Pain (E3M4) Yellow", "House of Pain (E3M4) Yellow",
"House of Pain (E3M4) Red"]}, "House of Pain (E3M4) Red"]},
{"name":"House of Pain (E3M4) Red", {"name":"House of Pain (E3M4) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["House of Pain (E3M4) Blue"]}, "connections":["House of Pain (E3M4) Blue"]},
{"name":"House of Pain (E3M4) Yellow", {"name":"House of Pain (E3M4) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["House of Pain (E3M4) Blue"]}, "connections":["House of Pain (E3M4) Blue"]},
# Unholy Cathedral (E3M5) # Unholy Cathedral (E3M5)
{"name":"Unholy Cathedral (E3M5) Main", {"name":"Unholy Cathedral (E3M5) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":[ "connections":[
"Unholy Cathedral (E3M5) Yellow", "Unholy Cathedral (E3M5) Yellow",
"Unholy Cathedral (E3M5) Blue"]}, "Unholy Cathedral (E3M5) Blue"]},
{"name":"Unholy Cathedral (E3M5) Blue", {"name":"Unholy Cathedral (E3M5) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Unholy Cathedral (E3M5) Main"]}, "connections":["Unholy Cathedral (E3M5) Main"]},
{"name":"Unholy Cathedral (E3M5) Yellow", {"name":"Unholy Cathedral (E3M5) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Unholy Cathedral (E3M5) Main"]}, "connections":["Unholy Cathedral (E3M5) Main"]},
# Mt. Erebus (E3M6) # Mt. Erebus (E3M6)
{"name":"Mt. Erebus (E3M6) Main", {"name":"Mt. Erebus (E3M6) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":["Mt. Erebus (E3M6) Blue"]}, "connections":["Mt. Erebus (E3M6) Blue"]},
{"name":"Mt. Erebus (E3M6) Blue", {"name":"Mt. Erebus (E3M6) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Mt. Erebus (E3M6) Main"]}, "connections":["Mt. Erebus (E3M6) Main"]},
# Limbo (E3M7) # Limbo (E3M7)
{"name":"Limbo (E3M7) Main", {"name":"Limbo (E3M7) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":[ "connections":[
"Limbo (E3M7) Red", "Limbo (E3M7) Red",
"Limbo (E3M7) Blue"]}, "Limbo (E3M7) Blue"]},
{"name":"Limbo (E3M7) Blue", {"name":"Limbo (E3M7) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Limbo (E3M7) Main"]}, "connections":["Limbo (E3M7) Main"]},
{"name":"Limbo (E3M7) Red", {"name":"Limbo (E3M7) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":[ "connections":[
"Limbo (E3M7) Main", "Limbo (E3M7) Main",
"Limbo (E3M7) Yellow"]}, "Limbo (E3M7) Yellow"]},
{"name":"Limbo (E3M7) Yellow", {"name":"Limbo (E3M7) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Limbo (E3M7) Red"]}, "connections":["Limbo (E3M7) Red"]},
# Dis (E3M8) # Dis (E3M8)
{"name":"Dis (E3M8) Main", {"name":"Dis (E3M8) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":[]}, "connections":[]},
# Warrens (E3M9) # Warrens (E3M9)
{"name":"Warrens (E3M9) Main", {"name":"Warrens (E3M9) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":3,
"connections":[ "connections":[
"Warrens (E3M9) Red", "Warrens (E3M9) Red",
"Warrens (E3M9) Blue", "Warrens (E3M9) Blue",
"Warrens (E3M9) Blue trigger"]}, "Warrens (E3M9) Blue trigger"]},
{"name":"Warrens (E3M9) Red", {"name":"Warrens (E3M9) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Warrens (E3M9) Main"]}, "connections":["Warrens (E3M9) Main"]},
{"name":"Warrens (E3M9) Blue", {"name":"Warrens (E3M9) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":["Warrens (E3M9) Main"]}, "connections":["Warrens (E3M9) Main"]},
{"name":"Warrens (E3M9) Blue trigger", {"name":"Warrens (E3M9) Blue trigger",
"connects_to_hub":False, "connects_to_hub":False,
"episode":3,
"connections":[]}, "connections":[]},
# Hell Beneath (E4M1) # Hell Beneath (E4M1)
{"name":"Hell Beneath (E4M1) Main", {"name":"Hell Beneath (E4M1) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":[ "connections":[
"Hell Beneath (E4M1) Red", "Hell Beneath (E4M1) Red",
"Hell Beneath (E4M1) Blue"]}, "Hell Beneath (E4M1) Blue"]},
{"name":"Hell Beneath (E4M1) Red", {"name":"Hell Beneath (E4M1) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Hell Beneath (E4M1) Main"]}, "connections":["Hell Beneath (E4M1) Main"]},
{"name":"Hell Beneath (E4M1) Blue", {"name":"Hell Beneath (E4M1) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Hell Beneath (E4M1) Main"]}, "connections":["Hell Beneath (E4M1) Main"]},
# Perfect Hatred (E4M2) # Perfect Hatred (E4M2)
{"name":"Perfect Hatred (E4M2) Main", {"name":"Perfect Hatred (E4M2) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":[ "connections":[
"Perfect Hatred (E4M2) Blue", "Perfect Hatred (E4M2) Blue",
"Perfect Hatred (E4M2) Yellow"]}, "Perfect Hatred (E4M2) Yellow"]},
{"name":"Perfect Hatred (E4M2) Blue", {"name":"Perfect Hatred (E4M2) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":[ "connections":[
"Perfect Hatred (E4M2) Main", "Perfect Hatred (E4M2) Main",
"Perfect Hatred (E4M2) Cave"]}, "Perfect Hatred (E4M2) Cave"]},
{"name":"Perfect Hatred (E4M2) Yellow", {"name":"Perfect Hatred (E4M2) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":[ "connections":[
"Perfect Hatred (E4M2) Main", "Perfect Hatred (E4M2) Main",
"Perfect Hatred (E4M2) Cave"]}, "Perfect Hatred (E4M2) Cave"]},
{"name":"Perfect Hatred (E4M2) Cave", {"name":"Perfect Hatred (E4M2) Cave",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":[]}, "connections":[]},
# Sever the Wicked (E4M3) # Sever the Wicked (E4M3)
{"name":"Sever the Wicked (E4M3) Main", {"name":"Sever the Wicked (E4M3) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":["Sever the Wicked (E4M3) Red"]}, "connections":["Sever the Wicked (E4M3) Red"]},
{"name":"Sever the Wicked (E4M3) Red", {"name":"Sever the Wicked (E4M3) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":[ "connections":[
"Sever the Wicked (E4M3) Blue", "Sever the Wicked (E4M3) Blue",
"Sever the Wicked (E4M3) Main"]}, "Sever the Wicked (E4M3) Main"]},
{"name":"Sever the Wicked (E4M3) Blue", {"name":"Sever the Wicked (E4M3) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Sever the Wicked (E4M3) Red"]}, "connections":["Sever the Wicked (E4M3) Red"]},
# Unruly Evil (E4M4) # Unruly Evil (E4M4)
{"name":"Unruly Evil (E4M4) Main", {"name":"Unruly Evil (E4M4) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":["Unruly Evil (E4M4) Red"]}, "connections":["Unruly Evil (E4M4) Red"]},
{"name":"Unruly Evil (E4M4) Red", {"name":"Unruly Evil (E4M4) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Unruly Evil (E4M4) Main"]}, "connections":["Unruly Evil (E4M4) Main"]},
# They Will Repent (E4M5) # They Will Repent (E4M5)
{"name":"They Will Repent (E4M5) Main", {"name":"They Will Repent (E4M5) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":["They Will Repent (E4M5) Red"]}, "connections":["They Will Repent (E4M5) Red"]},
{"name":"They Will Repent (E4M5) Yellow", {"name":"They Will Repent (E4M5) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["They Will Repent (E4M5) Red"]}, "connections":["They Will Repent (E4M5) Red"]},
{"name":"They Will Repent (E4M5) Blue", {"name":"They Will Repent (E4M5) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["They Will Repent (E4M5) Red"]}, "connections":["They Will Repent (E4M5) Red"]},
{"name":"They Will Repent (E4M5) Red", {"name":"They Will Repent (E4M5) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":[ "connections":[
"They Will Repent (E4M5) Main", "They Will Repent (E4M5) Main",
"They Will Repent (E4M5) Yellow", "They Will Repent (E4M5) Yellow",
@ -430,59 +527,73 @@ regions:List[RegionDict] = [
# Against Thee Wickedly (E4M6) # Against Thee Wickedly (E4M6)
{"name":"Against Thee Wickedly (E4M6) Main", {"name":"Against Thee Wickedly (E4M6) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":[ "connections":[
"Against Thee Wickedly (E4M6) Blue", "Against Thee Wickedly (E4M6) Blue",
"Against Thee Wickedly (E4M6) Yellow", "Against Thee Wickedly (E4M6) Yellow",
"Against Thee Wickedly (E4M6) Red"]}, "Against Thee Wickedly (E4M6) Red"]},
{"name":"Against Thee Wickedly (E4M6) Red", {"name":"Against Thee Wickedly (E4M6) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Against Thee Wickedly (E4M6) Main"]}, "connections":["Against Thee Wickedly (E4M6) Main"]},
{"name":"Against Thee Wickedly (E4M6) Blue", {"name":"Against Thee Wickedly (E4M6) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Against Thee Wickedly (E4M6) Main"]}, "connections":["Against Thee Wickedly (E4M6) Main"]},
{"name":"Against Thee Wickedly (E4M6) Yellow", {"name":"Against Thee Wickedly (E4M6) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Against Thee Wickedly (E4M6) Main"]}, "connections":["Against Thee Wickedly (E4M6) Main"]},
# And Hell Followed (E4M7) # And Hell Followed (E4M7)
{"name":"And Hell Followed (E4M7) Main", {"name":"And Hell Followed (E4M7) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":[ "connections":[
"And Hell Followed (E4M7) Blue", "And Hell Followed (E4M7) Blue",
"And Hell Followed (E4M7) Red", "And Hell Followed (E4M7) Red",
"And Hell Followed (E4M7) Yellow"]}, "And Hell Followed (E4M7) Yellow"]},
{"name":"And Hell Followed (E4M7) Red", {"name":"And Hell Followed (E4M7) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["And Hell Followed (E4M7) Main"]}, "connections":["And Hell Followed (E4M7) Main"]},
{"name":"And Hell Followed (E4M7) Blue", {"name":"And Hell Followed (E4M7) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["And Hell Followed (E4M7) Main"]}, "connections":["And Hell Followed (E4M7) Main"]},
{"name":"And Hell Followed (E4M7) Yellow", {"name":"And Hell Followed (E4M7) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["And Hell Followed (E4M7) Main"]}, "connections":["And Hell Followed (E4M7) Main"]},
# Unto the Cruel (E4M8) # Unto the Cruel (E4M8)
{"name":"Unto the Cruel (E4M8) Main", {"name":"Unto the Cruel (E4M8) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":[ "connections":[
"Unto the Cruel (E4M8) Red", "Unto the Cruel (E4M8) Red",
"Unto the Cruel (E4M8) Yellow", "Unto the Cruel (E4M8) Yellow",
"Unto the Cruel (E4M8) Orange"]}, "Unto the Cruel (E4M8) Orange"]},
{"name":"Unto the Cruel (E4M8) Yellow", {"name":"Unto the Cruel (E4M8) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Unto the Cruel (E4M8) Main"]}, "connections":["Unto the Cruel (E4M8) Main"]},
{"name":"Unto the Cruel (E4M8) Red", {"name":"Unto the Cruel (E4M8) Red",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Unto the Cruel (E4M8) Main"]}, "connections":["Unto the Cruel (E4M8) Main"]},
{"name":"Unto the Cruel (E4M8) Orange", {"name":"Unto the Cruel (E4M8) Orange",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Unto the Cruel (E4M8) Main"]}, "connections":["Unto the Cruel (E4M8) Main"]},
# Fear (E4M9) # Fear (E4M9)
{"name":"Fear (E4M9) Main", {"name":"Fear (E4M9) Main",
"connects_to_hub":True, "connects_to_hub":True,
"episode":4,
"connections":["Fear (E4M9) Yellow"]}, "connections":["Fear (E4M9) Yellow"]},
{"name":"Fear (E4M9) Yellow", {"name":"Fear (E4M9) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4,
"connections":["Fear (E4M9) Main"]}, "connections":["Fear (E4M9) Main"]},
] ]

View File

@ -7,10 +7,7 @@ if TYPE_CHECKING:
from . import DOOM1993World from . import DOOM1993World
def set_rules(doom_1993_world: "DOOM1993World"): def set_episode1_rules(player, world):
player = doom_1993_world.player
world = doom_1993_world.multiworld
# Hangar (E1M1) # Hangar (E1M1)
set_rule(world.get_entrance("Hub -> Hangar (E1M1) Main", player), lambda state: set_rule(world.get_entrance("Hub -> Hangar (E1M1) Main", player), lambda state:
state.has("Hangar (E1M1)", player, 1)) state.has("Hangar (E1M1)", player, 1))
@ -135,6 +132,8 @@ def set_rules(doom_1993_world: "DOOM1993World"):
set_rule(world.get_entrance("Military Base (E1M9) Yellow -> Military Base (E1M9) Main", player), lambda state: 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)) state.has("Military Base (E1M9) - Yellow keycard", player, 1))
def set_episode2_rules(player, world):
# Deimos Anomaly (E2M1) # Deimos Anomaly (E2M1)
set_rule(world.get_entrance("Hub -> Deimos Anomaly (E2M1) Main", player), lambda state: set_rule(world.get_entrance("Hub -> Deimos Anomaly (E2M1) Main", player), lambda state:
state.has("Deimos Anomaly (E2M1)", player, 1)) state.has("Deimos Anomaly (E2M1)", player, 1))
@ -263,6 +262,8 @@ def set_rules(doom_1993_world: "DOOM1993World"):
set_rule(world.get_entrance("Fortress of Mystery (E2M9) Yellow -> Fortress of Mystery (E2M9) Main", player), lambda state: 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)) state.has("Fortress of Mystery (E2M9) - Yellow skull key", player, 1))
def set_episode3_rules(player, world):
# Hell Keep (E3M1) # Hell Keep (E3M1)
set_rule(world.get_entrance("Hub -> Hell Keep (E3M1) Main", player), lambda state: set_rule(world.get_entrance("Hub -> Hell Keep (E3M1) Main", player), lambda state:
state.has("Hell Keep (E3M1)", player, 1)) state.has("Hell Keep (E3M1)", player, 1))
@ -384,6 +385,8 @@ def set_rules(doom_1993_world: "DOOM1993World"):
set_rule(world.get_entrance("Warrens (E3M9) Blue -> Warrens (E3M9) Main", player), lambda state: set_rule(world.get_entrance("Warrens (E3M9) Blue -> Warrens (E3M9) Main", player), lambda state:
state.has("Warrens (E3M9) - Blue skull key", player, 1)) state.has("Warrens (E3M9) - Blue skull key", player, 1))
def set_episode4_rules(player, world):
# Hell Beneath (E4M1) # Hell Beneath (E4M1)
set_rule(world.get_entrance("Hub -> Hell Beneath (E4M1) Main", player), lambda state: set_rule(world.get_entrance("Hub -> Hell Beneath (E4M1) Main", player), lambda state:
state.has("Hell Beneath (E4M1)", player, 1)) state.has("Hell Beneath (E4M1)", player, 1))
@ -519,3 +522,16 @@ def set_rules(doom_1993_world: "DOOM1993World"):
set_rule(world.get_entrance("Fear (E4M9) Yellow -> Fear (E4M9) Main", player), lambda state: set_rule(world.get_entrance("Fear (E4M9) Yellow -> Fear (E4M9) Main", player), lambda state:
state.has("Fear (E4M9) - Yellow skull key", player, 1)) state.has("Fear (E4M9) - Yellow skull key", player, 1))
def set_rules(doom_1993_world: "DOOM1993World", included_episodes):
player = doom_1993_world.player
world = doom_1993_world.multiworld
if included_episodes[0]:
set_episode1_rules(player, world)
if included_episodes[1]:
set_episode2_rules(player, world)
if included_episodes[2]:
set_episode3_rules(player, world)
if included_episodes[3]:
set_episode4_rules(player, world)

View File

@ -100,6 +100,9 @@ class DOOM1993World(World):
main_regions = [] main_regions = []
connections = [] connections = []
for region_dict in Regions.regions: for region_dict in Regions.regions:
if not self.included_episodes[region_dict["episode"] - 1]:
continue
region_name = region_dict["name"] region_name = region_dict["name"]
if region_dict["connects_to_hub"]: if region_dict["connects_to_hub"]:
main_regions.append(region_name) main_regions.append(region_name)
@ -148,7 +151,7 @@ class DOOM1993World(World):
return True return True
def set_rules(self): def set_rules(self):
Rules.set_rules(self) Rules.set_rules(self, self.included_episodes)
self.multiworld.completion_condition[self.player] = lambda state: self.completion_rule(state) self.multiworld.completion_condition[self.player] = lambda state: self.completion_rule(state)
# 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