DOOM 1993: Include only regions/rules for selected episodes
This commit is contained in:
		
							parent
							
								
									40c9287eba
								
							
						
					
					
						commit
						de1ec4a18f
					
				|  | @ -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" | ||||||
|  |  | ||||||
|  | @ -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"]}, | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue