DOOM 1993: Update to use new Options + logic fixes + Doc fix (#3138)

This commit is contained in:
David St-Louis 2024-04-18 12:56:10 -04:00 committed by GitHub
parent 2704015eef
commit ffff63e6f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 204 additions and 195 deletions

View File

@ -1,6 +1,5 @@
import typing from Options import PerGameCommonOptions, Choice, Toggle, DeathLink, DefaultOnToggle, StartInventoryPool
from dataclasses import dataclass
from Options import AssembleOptions, Choice, Toggle, DeathLink, DefaultOnToggle, StartInventoryPool
class Goal(Choice): class Goal(Choice):
@ -140,21 +139,22 @@ class Episode4(Toggle):
display_name = "Episode 4" display_name = "Episode 4"
options: typing.Dict[str, AssembleOptions] = { @dataclass
"start_inventory_from_pool": StartInventoryPool, class DOOM1993Options(PerGameCommonOptions):
"goal": Goal, start_inventory_from_pool: StartInventoryPool
"difficulty": Difficulty, goal: Goal
"random_monsters": RandomMonsters, difficulty: Difficulty
"random_pickups": RandomPickups, random_monsters: RandomMonsters
"random_music": RandomMusic, random_pickups: RandomPickups
"flip_levels": FlipLevels, random_music: RandomMusic
"allow_death_logic": AllowDeathLogic, flip_levels: FlipLevels
"pro": Pro, allow_death_logic: AllowDeathLogic
"start_with_computer_area_maps": StartWithComputerAreaMaps, pro: Pro
"death_link": DeathLink, start_with_computer_area_maps: StartWithComputerAreaMaps
"reset_level_on_death": ResetLevelOnDeath, death_link: DeathLink
"episode1": Episode1, reset_level_on_death: ResetLevelOnDeath
"episode2": Episode2, episode1: Episode1
"episode3": Episode3, episode2: Episode2
"episode4": Episode4 episode3: Episode3
} episode4: Episode4

View File

@ -7,105 +7,105 @@ if TYPE_CHECKING:
from . import DOOM1993World from . import DOOM1993World
def set_episode1_rules(player, world, pro): def set_episode1_rules(player, multiworld, pro):
# Hangar (E1M1) # Hangar (E1M1)
set_rule(world.get_entrance("Hub -> Hangar (E1M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Hangar (E1M1) Main", player), lambda state:
state.has("Hangar (E1M1)", player, 1)) state.has("Hangar (E1M1)", player, 1))
# Nuclear Plant (E1M2) # Nuclear Plant (E1M2)
set_rule(world.get_entrance("Hub -> Nuclear Plant (E1M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Nuclear Plant (E1M2) Main", player), lambda state:
(state.has("Nuclear Plant (E1M2)", player, 1)) and (state.has("Nuclear Plant (E1M2)", player, 1)) and
(state.has("Shotgun", player, 1) or (state.has("Shotgun", player, 1) or
state.has("Chaingun", player, 1))) state.has("Chaingun", player, 1)))
set_rule(world.get_entrance("Nuclear Plant (E1M2) Main -> Nuclear Plant (E1M2) Red", player), lambda state: set_rule(multiworld.get_entrance("Nuclear Plant (E1M2) Main -> Nuclear Plant (E1M2) Red", player), lambda state:
state.has("Nuclear Plant (E1M2) - Red keycard", player, 1)) state.has("Nuclear Plant (E1M2) - Red keycard", player, 1))
set_rule(world.get_entrance("Nuclear Plant (E1M2) Red -> Nuclear Plant (E1M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Nuclear Plant (E1M2) Red -> Nuclear Plant (E1M2) Main", player), lambda state:
state.has("Nuclear Plant (E1M2) - Red keycard", player, 1)) state.has("Nuclear Plant (E1M2) - Red keycard", player, 1))
# Toxin Refinery (E1M3) # Toxin Refinery (E1M3)
set_rule(world.get_entrance("Hub -> Toxin Refinery (E1M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Toxin Refinery (E1M3) Main", player), lambda state:
(state.has("Toxin Refinery (E1M3)", player, 1)) and (state.has("Toxin Refinery (E1M3)", player, 1)) and
(state.has("Shotgun", player, 1) or (state.has("Shotgun", player, 1) or
state.has("Chaingun", player, 1))) state.has("Chaingun", player, 1)))
set_rule(world.get_entrance("Toxin Refinery (E1M3) Main -> Toxin Refinery (E1M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("Toxin Refinery (E1M3) Main -> Toxin Refinery (E1M3) Blue", player), lambda state:
state.has("Toxin Refinery (E1M3) - Blue keycard", player, 1)) state.has("Toxin Refinery (E1M3) - Blue keycard", player, 1))
set_rule(world.get_entrance("Toxin Refinery (E1M3) Blue -> Toxin Refinery (E1M3) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Toxin Refinery (E1M3) Blue -> Toxin Refinery (E1M3) Yellow", player), lambda state:
state.has("Toxin Refinery (E1M3) - Yellow keycard", player, 1)) state.has("Toxin Refinery (E1M3) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Toxin Refinery (E1M3) Blue -> Toxin Refinery (E1M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Toxin Refinery (E1M3) Blue -> Toxin Refinery (E1M3) Main", player), lambda state:
state.has("Toxin Refinery (E1M3) - Blue keycard", player, 1)) state.has("Toxin Refinery (E1M3) - Blue keycard", player, 1))
set_rule(world.get_entrance("Toxin Refinery (E1M3) Yellow -> Toxin Refinery (E1M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("Toxin Refinery (E1M3) Yellow -> Toxin Refinery (E1M3) Blue", player), lambda state:
state.has("Toxin Refinery (E1M3) - Yellow keycard", player, 1)) state.has("Toxin Refinery (E1M3) - Yellow keycard", player, 1))
# Command Control (E1M4) # Command Control (E1M4)
set_rule(world.get_entrance("Hub -> Command Control (E1M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Command Control (E1M4) Main", player), lambda state:
state.has("Command Control (E1M4)", player, 1) and state.has("Command Control (E1M4)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) state.has("Chaingun", player, 1))
set_rule(world.get_entrance("Command Control (E1M4) Main -> Command Control (E1M4) Blue", player), lambda state: set_rule(multiworld.get_entrance("Command Control (E1M4) Main -> Command Control (E1M4) Blue", player), lambda state:
state.has("Command Control (E1M4) - Blue keycard", player, 1) or state.has("Command Control (E1M4) - Blue keycard", player, 1) or
state.has("Command Control (E1M4) - Yellow keycard", player, 1)) state.has("Command Control (E1M4) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Command Control (E1M4) Main -> Command Control (E1M4) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Command Control (E1M4) Main -> Command Control (E1M4) Yellow", player), lambda state:
state.has("Command Control (E1M4) - Blue keycard", player, 1) or state.has("Command Control (E1M4) - Blue keycard", player, 1) or
state.has("Command Control (E1M4) - Yellow keycard", player, 1)) state.has("Command Control (E1M4) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Command Control (E1M4) Blue -> Command Control (E1M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Command Control (E1M4) Blue -> Command Control (E1M4) Main", player), lambda state:
state.has("Command Control (E1M4) - Yellow keycard", player, 1) or state.has("Command Control (E1M4) - Yellow keycard", player, 1) or
state.has("Command Control (E1M4) - Blue keycard", player, 1)) state.has("Command Control (E1M4) - Blue keycard", player, 1))
# Phobos Lab (E1M5) # Phobos Lab (E1M5)
set_rule(world.get_entrance("Hub -> Phobos Lab (E1M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Phobos Lab (E1M5) Main", player), lambda state:
state.has("Phobos Lab (E1M5)", player, 1) and state.has("Phobos Lab (E1M5)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) state.has("Chaingun", player, 1))
set_rule(world.get_entrance("Phobos Lab (E1M5) Main -> Phobos Lab (E1M5) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Phobos Lab (E1M5) Main -> Phobos Lab (E1M5) Yellow", player), lambda state:
state.has("Phobos Lab (E1M5) - Yellow keycard", player, 1)) state.has("Phobos Lab (E1M5) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Phobos Lab (E1M5) Yellow -> Phobos Lab (E1M5) Blue", player), lambda state: set_rule(multiworld.get_entrance("Phobos Lab (E1M5) Yellow -> Phobos Lab (E1M5) Blue", player), lambda state:
state.has("Phobos Lab (E1M5) - Blue keycard", player, 1)) state.has("Phobos Lab (E1M5) - Blue keycard", player, 1))
set_rule(world.get_entrance("Phobos Lab (E1M5) Blue -> Phobos Lab (E1M5) Green", player), lambda state: set_rule(multiworld.get_entrance("Phobos Lab (E1M5) Blue -> Phobos Lab (E1M5) Green", player), lambda state:
state.has("Phobos Lab (E1M5) - Blue keycard", player, 1)) state.has("Phobos Lab (E1M5) - Blue keycard", player, 1))
set_rule(world.get_entrance("Phobos Lab (E1M5) Green -> Phobos Lab (E1M5) Blue", player), lambda state: set_rule(multiworld.get_entrance("Phobos Lab (E1M5) Green -> Phobos Lab (E1M5) Blue", player), lambda state:
state.has("Phobos Lab (E1M5) - Blue keycard", player, 1)) state.has("Phobos Lab (E1M5) - Blue keycard", player, 1))
# Central Processing (E1M6) # Central Processing (E1M6)
set_rule(world.get_entrance("Hub -> Central Processing (E1M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Central Processing (E1M6) Main", player), lambda state:
state.has("Central Processing (E1M6)", player, 1) and state.has("Central Processing (E1M6)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Rocket launcher", player, 1)) state.has("Rocket launcher", player, 1))
set_rule(world.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Yellow", player), lambda state:
state.has("Central Processing (E1M6) - Yellow keycard", player, 1)) state.has("Central Processing (E1M6) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Red", player), lambda state: set_rule(multiworld.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Red", player), lambda state:
state.has("Central Processing (E1M6) - Red keycard", player, 1)) state.has("Central Processing (E1M6) - Red keycard", player, 1))
set_rule(world.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Blue", player), lambda state: set_rule(multiworld.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Blue", player), lambda state:
state.has("Central Processing (E1M6) - Blue keycard", player, 1)) state.has("Central Processing (E1M6) - Blue keycard", player, 1))
set_rule(world.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Nukage", player), lambda state: set_rule(multiworld.get_entrance("Central Processing (E1M6) Main -> Central Processing (E1M6) Nukage", player), lambda state:
state.has("Central Processing (E1M6) - Blue keycard", player, 1)) state.has("Central Processing (E1M6) - Blue keycard", player, 1))
set_rule(world.get_entrance("Central Processing (E1M6) Yellow -> Central Processing (E1M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Central Processing (E1M6) Yellow -> Central Processing (E1M6) Main", player), lambda state:
state.has("Central Processing (E1M6) - Yellow keycard", player, 1)) state.has("Central Processing (E1M6) - Yellow keycard", player, 1))
# Computer Station (E1M7) # Computer Station (E1M7)
set_rule(world.get_entrance("Hub -> Computer Station (E1M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Computer Station (E1M7) Main", player), lambda state:
state.has("Computer Station (E1M7)", player, 1) and state.has("Computer Station (E1M7)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Rocket launcher", player, 1)) state.has("Rocket launcher", player, 1))
set_rule(world.get_entrance("Computer Station (E1M7) Main -> Computer Station (E1M7) Red", player), lambda state: set_rule(multiworld.get_entrance("Computer Station (E1M7) Main -> Computer Station (E1M7) Red", player), lambda state:
state.has("Computer Station (E1M7) - Red keycard", player, 1)) state.has("Computer Station (E1M7) - Red keycard", player, 1))
set_rule(world.get_entrance("Computer Station (E1M7) Main -> Computer Station (E1M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Computer Station (E1M7) Main -> Computer Station (E1M7) Yellow", player), lambda state:
state.has("Computer Station (E1M7) - Yellow keycard", player, 1)) state.has("Computer Station (E1M7) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Computer Station (E1M7) Blue -> Computer Station (E1M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Computer Station (E1M7) Blue -> Computer Station (E1M7) Yellow", player), lambda state:
state.has("Computer Station (E1M7) - Blue keycard", player, 1)) state.has("Computer Station (E1M7) - Blue keycard", player, 1))
set_rule(world.get_entrance("Computer Station (E1M7) Red -> Computer Station (E1M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Computer Station (E1M7) Red -> Computer Station (E1M7) Main", player), lambda state:
state.has("Computer Station (E1M7) - Red keycard", player, 1)) state.has("Computer Station (E1M7) - Red keycard", player, 1))
set_rule(world.get_entrance("Computer Station (E1M7) Yellow -> Computer Station (E1M7) Blue", player), lambda state: set_rule(multiworld.get_entrance("Computer Station (E1M7) Yellow -> Computer Station (E1M7) Blue", player), lambda state:
state.has("Computer Station (E1M7) - Blue keycard", player, 1)) state.has("Computer Station (E1M7) - Blue keycard", player, 1))
set_rule(world.get_entrance("Computer Station (E1M7) Yellow -> Computer Station (E1M7) Courtyard", player), lambda state: set_rule(multiworld.get_entrance("Computer Station (E1M7) Yellow -> Computer Station (E1M7) Courtyard", player), lambda state:
state.has("Computer Station (E1M7) - Yellow keycard", player, 1) and state.has("Computer Station (E1M7) - Yellow keycard", player, 1) and
state.has("Computer Station (E1M7) - Red keycard", player, 1)) state.has("Computer Station (E1M7) - Red keycard", player, 1))
set_rule(world.get_entrance("Computer Station (E1M7) Courtyard -> Computer Station (E1M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Computer Station (E1M7) Courtyard -> Computer Station (E1M7) Yellow", player), lambda state:
state.has("Computer Station (E1M7) - Yellow keycard", player, 1)) state.has("Computer Station (E1M7) - Yellow keycard", player, 1))
# Phobos Anomaly (E1M8) # Phobos Anomaly (E1M8)
set_rule(world.get_entrance("Hub -> Phobos Anomaly (E1M8) Start", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Phobos Anomaly (E1M8) Start", player), lambda state:
(state.has("Phobos Anomaly (E1M8)", player, 1) and (state.has("Phobos Anomaly (E1M8)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
@ -114,255 +114,260 @@ def set_episode1_rules(player, world, pro):
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
# Military Base (E1M9) # Military Base (E1M9)
set_rule(world.get_entrance("Hub -> Military Base (E1M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Military Base (E1M9) Main", player), lambda state:
state.has("Military Base (E1M9)", player, 1) and state.has("Military Base (E1M9)", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Shotgun", player, 1)) state.has("Shotgun", player, 1))
set_rule(world.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Blue", player), lambda state: set_rule(multiworld.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Blue", player), lambda state:
state.has("Military Base (E1M9) - Blue keycard", player, 1)) state.has("Military Base (E1M9) - Blue keycard", player, 1))
set_rule(world.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Yellow", player), lambda state:
state.has("Military Base (E1M9) - Yellow keycard", player, 1)) state.has("Military Base (E1M9) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Red", player), lambda state: set_rule(multiworld.get_entrance("Military Base (E1M9) Main -> Military Base (E1M9) Red", player), lambda state:
state.has("Military Base (E1M9) - Red keycard", player, 1)) state.has("Military Base (E1M9) - Red keycard", player, 1))
set_rule(world.get_entrance("Military Base (E1M9) Blue -> Military Base (E1M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Military Base (E1M9) Blue -> Military Base (E1M9) Main", player), lambda state:
state.has("Military Base (E1M9) - Blue keycard", player, 1)) state.has("Military Base (E1M9) - Blue keycard", player, 1))
set_rule(world.get_entrance("Military Base (E1M9) Yellow -> Military Base (E1M9) Main", player), lambda state: set_rule(multiworld.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, pro): def set_episode2_rules(player, multiworld, pro):
# Deimos Anomaly (E2M1) # Deimos Anomaly (E2M1)
set_rule(world.get_entrance("Hub -> Deimos Anomaly (E2M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Deimos Anomaly (E2M1) Main", player), lambda state:
state.has("Deimos Anomaly (E2M1)", player, 1)) state.has("Deimos Anomaly (E2M1)", player, 1))
set_rule(world.get_entrance("Deimos Anomaly (E2M1) Main -> Deimos Anomaly (E2M1) Red", player), lambda state: set_rule(multiworld.get_entrance("Deimos Anomaly (E2M1) Main -> Deimos Anomaly (E2M1) Red", player), lambda state:
state.has("Deimos Anomaly (E2M1) - Red keycard", player, 1)) state.has("Deimos Anomaly (E2M1) - Red keycard", player, 1))
set_rule(world.get_entrance("Deimos Anomaly (E2M1) Main -> Deimos Anomaly (E2M1) Blue", player), lambda state: set_rule(multiworld.get_entrance("Deimos Anomaly (E2M1) Main -> Deimos Anomaly (E2M1) Blue", player), lambda state:
state.has("Deimos Anomaly (E2M1) - Blue keycard", player, 1)) state.has("Deimos Anomaly (E2M1) - Blue keycard", player, 1))
set_rule(world.get_entrance("Deimos Anomaly (E2M1) Blue -> Deimos Anomaly (E2M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Deimos Anomaly (E2M1) Blue -> Deimos Anomaly (E2M1) Main", player), lambda state:
state.has("Deimos Anomaly (E2M1) - Blue keycard", player, 1)) state.has("Deimos Anomaly (E2M1) - Blue keycard", player, 1))
set_rule(world.get_entrance("Deimos Anomaly (E2M1) Red -> Deimos Anomaly (E2M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Deimos Anomaly (E2M1) Red -> Deimos Anomaly (E2M1) Main", player), lambda state:
state.has("Deimos Anomaly (E2M1) - Red keycard", player, 1)) state.has("Deimos Anomaly (E2M1) - Red keycard", player, 1))
# Containment Area (E2M2) # Containment Area (E2M2)
set_rule(world.get_entrance("Hub -> Containment Area (E2M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Containment Area (E2M2) Main", player), lambda state:
(state.has("Containment Area (E2M2)", player, 1) and (state.has("Containment Area (E2M2)", player, 1) and
state.has("Shotgun", player, 1)) and state.has("Shotgun", player, 1)) and
(state.has("Chaingun", player, 1) or (state.has("Chaingun", player, 1) or
state.has("Plasma gun", player, 1))) state.has("Plasma gun", player, 1)))
set_rule(world.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Yellow", player), lambda state:
state.has("Containment Area (E2M2) - Yellow keycard", player, 1)) state.has("Containment Area (E2M2) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Blue", player), lambda state: set_rule(multiworld.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Blue", player), lambda state:
state.has("Containment Area (E2M2) - Blue keycard", player, 1)) state.has("Containment Area (E2M2) - Blue keycard", player, 1))
set_rule(world.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Red", player), lambda state: set_rule(multiworld.get_entrance("Containment Area (E2M2) Main -> Containment Area (E2M2) Red", player), lambda state:
state.has("Containment Area (E2M2) - Red keycard", player, 1)) state.has("Containment Area (E2M2) - Red keycard", player, 1))
set_rule(world.get_entrance("Containment Area (E2M2) Blue -> Containment Area (E2M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Containment Area (E2M2) Blue -> Containment Area (E2M2) Main", player), lambda state:
state.has("Containment Area (E2M2) - Blue keycard", player, 1)) state.has("Containment Area (E2M2) - Blue keycard", player, 1))
set_rule(world.get_entrance("Containment Area (E2M2) Red -> Containment Area (E2M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Containment Area (E2M2) Red -> Containment Area (E2M2) Main", player), lambda state:
state.has("Containment Area (E2M2) - Red keycard", player, 1)) state.has("Containment Area (E2M2) - Red keycard", player, 1))
# Refinery (E2M3) # Refinery (E2M3)
set_rule(world.get_entrance("Hub -> Refinery (E2M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Refinery (E2M3) Main", player), lambda state:
(state.has("Refinery (E2M3)", player, 1) and (state.has("Refinery (E2M3)", player, 1) and
state.has("Shotgun", player, 1)) and state.has("Shotgun", player, 1)) and
(state.has("Chaingun", player, 1) or (state.has("Chaingun", player, 1) or
state.has("Plasma gun", player, 1))) state.has("Plasma gun", player, 1)))
set_rule(world.get_entrance("Refinery (E2M3) Main -> Refinery (E2M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("Refinery (E2M3) Main -> Refinery (E2M3) Blue", player), lambda state:
state.has("Refinery (E2M3) - Blue keycard", player, 1)) state.has("Refinery (E2M3) - Blue keycard", player, 1))
set_rule(world.get_entrance("Refinery (E2M3) Blue -> Refinery (E2M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Refinery (E2M3) Blue -> Refinery (E2M3) Main", player), lambda state:
state.has("Refinery (E2M3) - Blue keycard", player, 1)) state.has("Refinery (E2M3) - Blue keycard", player, 1))
# Deimos Lab (E2M4) # Deimos Lab (E2M4)
set_rule(world.get_entrance("Hub -> Deimos Lab (E2M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Deimos Lab (E2M4) Main", player), lambda state:
state.has("Deimos Lab (E2M4)", player, 1) and state.has("Deimos Lab (E2M4)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Plasma gun", player, 1)) state.has("Plasma gun", player, 1))
set_rule(world.get_entrance("Deimos Lab (E2M4) Main -> Deimos Lab (E2M4) Blue", player), lambda state: set_rule(multiworld.get_entrance("Deimos Lab (E2M4) Main -> Deimos Lab (E2M4) Blue", player), lambda state:
state.has("Deimos Lab (E2M4) - Blue keycard", player, 1)) state.has("Deimos Lab (E2M4) - Blue keycard", player, 1))
set_rule(world.get_entrance("Deimos Lab (E2M4) Blue -> Deimos Lab (E2M4) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Deimos Lab (E2M4) Blue -> Deimos Lab (E2M4) Yellow", player), lambda state:
state.has("Deimos Lab (E2M4) - Yellow keycard", player, 1)) state.has("Deimos Lab (E2M4) - Yellow keycard", player, 1))
# Command Center (E2M5) # Command Center (E2M5)
set_rule(world.get_entrance("Hub -> Command Center (E2M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Command Center (E2M5) Main", player), lambda state:
state.has("Command Center (E2M5)", player, 1) and state.has("Command Center (E2M5)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Plasma gun", player, 1)) state.has("Plasma gun", player, 1))
# Halls of the Damned (E2M6) # Halls of the Damned (E2M6)
set_rule(world.get_entrance("Hub -> Halls of the Damned (E2M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Halls of the Damned (E2M6) Main", player), lambda state:
state.has("Halls of the Damned (E2M6)", player, 1) and state.has("Halls of the Damned (E2M6)", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Plasma gun", player, 1)) state.has("Plasma gun", player, 1))
set_rule(world.get_entrance("Halls of the Damned (E2M6) Main -> Halls of the Damned (E2M6) Blue Yellow Red", player), lambda state: set_rule(multiworld.get_entrance("Halls of the Damned (E2M6) Main -> Halls of the Damned (E2M6) Blue Yellow Red", player), lambda state:
state.has("Halls of the Damned (E2M6) - Blue skull key", player, 1) and state.has("Halls of the Damned (E2M6) - Blue skull key", player, 1) and
state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1) and state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1) and
state.has("Halls of the Damned (E2M6) - Red skull key", player, 1)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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) - Blue skull key", player, 1) and
state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1) and state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1) and
state.has("Halls of the Damned (E2M6) - Red skull key", player, 1)) state.has("Halls of the Damned (E2M6) - Red skull key", player, 1))
set_rule(world.get_entrance("Halls of the Damned (E2M6) One way Yellow -> Halls of the Damned (E2M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Halls of the Damned (E2M6) One way Yellow -> Halls of the Damned (E2M6) Main", player), lambda state:
state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1)) state.has("Halls of the Damned (E2M6) - Yellow skull key", player, 1))
# Spawning Vats (E2M7) # Spawning Vats (E2M7)
set_rule(world.get_entrance("Hub -> Spawning Vats (E2M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Spawning Vats (E2M7) Main", player), lambda state:
state.has("Spawning Vats (E2M7)", player, 1) and state.has("Spawning Vats (E2M7)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Plasma gun", player, 1) and state.has("Plasma gun", player, 1) and
state.has("Rocket launcher", player, 1)) state.has("Rocket launcher", player, 1))
set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Blue", player), lambda state: set_rule(multiworld.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Blue", player), lambda state:
state.has("Spawning Vats (E2M7) - Blue keycard", player, 1)) state.has("Spawning Vats (E2M7) - Blue keycard", player, 1))
set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Entrance Secret", player), lambda state: set_rule(multiworld.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Entrance Secret", player), lambda state:
state.has("Spawning Vats (E2M7) - Blue keycard", player, 1) and state.has("Spawning Vats (E2M7) - Blue keycard", player, 1) and
state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) state.has("Spawning Vats (E2M7) - Red keycard", player, 1))
set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Red", player), lambda state: set_rule(multiworld.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Red", player), lambda state:
state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) state.has("Spawning Vats (E2M7) - Red keycard", player, 1))
set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Yellow", player), lambda state:
state.has("Spawning Vats (E2M7) - Yellow keycard", player, 1)) state.has("Spawning Vats (E2M7) - Yellow keycard", player, 1))
if pro: if pro:
set_rule(world.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Red Exit", player), lambda state: set_rule(multiworld.get_entrance("Spawning Vats (E2M7) Main -> Spawning Vats (E2M7) Red Exit", player), lambda state:
state.has("Rocket launcher", player, 1)) state.has("Rocket launcher", player, 1))
set_rule(world.get_entrance("Spawning Vats (E2M7) Yellow -> Spawning Vats (E2M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Spawning Vats (E2M7) Yellow -> Spawning Vats (E2M7) Main", player), lambda state:
state.has("Spawning Vats (E2M7) - Yellow keycard", player, 1)) state.has("Spawning Vats (E2M7) - Yellow keycard", player, 1))
set_rule(world.get_entrance("Spawning Vats (E2M7) Red -> Spawning Vats (E2M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Spawning Vats (E2M7) Red -> Spawning Vats (E2M7) Main", player), lambda state:
state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) state.has("Spawning Vats (E2M7) - Red keycard", player, 1))
set_rule(world.get_entrance("Spawning Vats (E2M7) Entrance Secret -> Spawning Vats (E2M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Spawning Vats (E2M7) Entrance Secret -> Spawning Vats (E2M7) Main", player), lambda state:
state.has("Spawning Vats (E2M7) - Blue keycard", player, 1) and state.has("Spawning Vats (E2M7) - Blue keycard", player, 1) and
state.has("Spawning Vats (E2M7) - Red keycard", player, 1)) state.has("Spawning Vats (E2M7) - Red keycard", player, 1))
# Tower of Babel (E2M8) # Tower of Babel (E2M8)
set_rule(world.get_entrance("Hub -> Tower of Babel (E2M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Tower of Babel (E2M8) Main", player), lambda state:
state.has("Tower of Babel (E2M8)", player, 1)) (state.has("Tower of Babel (E2M8)", player, 1) and
state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1)))
# Fortress of Mystery (E2M9) # Fortress of Mystery (E2M9)
set_rule(world.get_entrance("Hub -> Fortress of Mystery (E2M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Fortress of Mystery (E2M9) Main", player), lambda state:
(state.has("Fortress of Mystery (E2M9)", player, 1) and (state.has("Fortress of Mystery (E2M9)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Blue", player), lambda state: set_rule(multiworld.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Blue", player), lambda state:
state.has("Fortress of Mystery (E2M9) - Blue skull key", player, 1)) state.has("Fortress of Mystery (E2M9) - Blue skull key", player, 1))
set_rule(world.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Red", player), lambda state: set_rule(multiworld.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Red", player), lambda state:
state.has("Fortress of Mystery (E2M9) - Red skull key", player, 1)) state.has("Fortress of Mystery (E2M9) - Red skull key", player, 1))
set_rule(world.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Fortress of Mystery (E2M9) Main -> Fortress of Mystery (E2M9) Yellow", player), lambda state:
state.has("Fortress of Mystery (E2M9) - Yellow skull key", player, 1)) state.has("Fortress of Mystery (E2M9) - Yellow skull key", player, 1))
set_rule(world.get_entrance("Fortress of Mystery (E2M9) Blue -> Fortress of Mystery (E2M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Fortress of Mystery (E2M9) Blue -> Fortress of Mystery (E2M9) Main", player), lambda state:
state.has("Fortress of Mystery (E2M9) - Blue skull key", player, 1)) state.has("Fortress of Mystery (E2M9) - Blue skull key", player, 1))
set_rule(world.get_entrance("Fortress of Mystery (E2M9) Red -> Fortress of Mystery (E2M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Fortress of Mystery (E2M9) Red -> Fortress of Mystery (E2M9) Main", player), lambda state:
state.has("Fortress of Mystery (E2M9) - Red skull key", player, 1)) state.has("Fortress of Mystery (E2M9) - Red skull key", player, 1))
set_rule(world.get_entrance("Fortress of Mystery (E2M9) Yellow -> Fortress of Mystery (E2M9) Main", player), lambda state: set_rule(multiworld.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, pro): def set_episode3_rules(player, multiworld, pro):
# Hell Keep (E3M1) # Hell Keep (E3M1)
set_rule(world.get_entrance("Hub -> Hell Keep (E3M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Hell Keep (E3M1) Main", player), lambda state:
state.has("Hell Keep (E3M1)", player, 1)) state.has("Hell Keep (E3M1)", player, 1))
set_rule(world.get_entrance("Hell Keep (E3M1) Main -> Hell Keep (E3M1) Narrow", player), lambda state: set_rule(multiworld.get_entrance("Hell Keep (E3M1) Main -> Hell Keep (E3M1) Narrow", player), lambda state:
state.has("Chaingun", player, 1) or state.has("Chaingun", player, 1) or
state.has("Shotgun", player, 1)) state.has("Shotgun", player, 1))
# Slough of Despair (E3M2) # Slough of Despair (E3M2)
set_rule(world.get_entrance("Hub -> Slough of Despair (E3M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Slough of Despair (E3M2) Main", player), lambda state:
(state.has("Slough of Despair (E3M2)", player, 1)) and (state.has("Slough of Despair (E3M2)", player, 1)) and
(state.has("Shotgun", player, 1) or (state.has("Shotgun", player, 1) or
state.has("Chaingun", player, 1))) state.has("Chaingun", player, 1)))
set_rule(world.get_entrance("Slough of Despair (E3M2) Main -> Slough of Despair (E3M2) Blue", player), lambda state: set_rule(multiworld.get_entrance("Slough of Despair (E3M2) Main -> Slough of Despair (E3M2) Blue", player), lambda state:
state.has("Slough of Despair (E3M2) - Blue skull key", player, 1)) state.has("Slough of Despair (E3M2) - Blue skull key", player, 1))
set_rule(world.get_entrance("Slough of Despair (E3M2) Blue -> Slough of Despair (E3M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Slough of Despair (E3M2) Blue -> Slough of Despair (E3M2) Main", player), lambda state:
state.has("Slough of Despair (E3M2) - Blue skull key", player, 1)) state.has("Slough of Despair (E3M2) - Blue skull key", player, 1))
# Pandemonium (E3M3) # Pandemonium (E3M3)
set_rule(world.get_entrance("Hub -> Pandemonium (E3M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Pandemonium (E3M3) Main", player), lambda state:
(state.has("Pandemonium (E3M3)", player, 1) and (state.has("Pandemonium (E3M3)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Pandemonium (E3M3) Main -> Pandemonium (E3M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("Pandemonium (E3M3) Main -> Pandemonium (E3M3) Blue", player), lambda state:
state.has("Pandemonium (E3M3) - Blue skull key", player, 1)) state.has("Pandemonium (E3M3) - Blue skull key", player, 1))
set_rule(world.get_entrance("Pandemonium (E3M3) Blue -> Pandemonium (E3M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Pandemonium (E3M3) Blue -> Pandemonium (E3M3) Main", player), lambda state:
state.has("Pandemonium (E3M3) - Blue skull key", player, 1)) state.has("Pandemonium (E3M3) - Blue skull key", player, 1))
# House of Pain (E3M4) # House of Pain (E3M4)
set_rule(world.get_entrance("Hub -> House of Pain (E3M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> House of Pain (E3M4) Main", player), lambda state:
(state.has("House of Pain (E3M4)", player, 1) and (state.has("House of Pain (E3M4)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("House of Pain (E3M4) Main -> House of Pain (E3M4) Blue", player), lambda state: set_rule(multiworld.get_entrance("House of Pain (E3M4) Main -> House of Pain (E3M4) Blue", player), lambda state:
state.has("House of Pain (E3M4) - Blue skull key", player, 1)) state.has("House of Pain (E3M4) - Blue skull key", player, 1))
set_rule(world.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Main", player), lambda state: set_rule(multiworld.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Main", player), lambda state:
state.has("House of Pain (E3M4) - Blue skull key", player, 1)) state.has("House of Pain (E3M4) - Blue skull key", player, 1))
set_rule(world.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Yellow", player), lambda state: set_rule(multiworld.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Yellow", player), lambda state:
state.has("House of Pain (E3M4) - Yellow skull key", player, 1)) state.has("House of Pain (E3M4) - Yellow skull key", player, 1))
set_rule(world.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Red", player), lambda state: set_rule(multiworld.get_entrance("House of Pain (E3M4) Blue -> House of Pain (E3M4) Red", player), lambda state:
state.has("House of Pain (E3M4) - Red skull key", player, 1)) state.has("House of Pain (E3M4) - Red skull key", player, 1))
set_rule(world.get_entrance("House of Pain (E3M4) Red -> House of Pain (E3M4) Blue", player), lambda state: set_rule(multiworld.get_entrance("House of Pain (E3M4) Red -> House of Pain (E3M4) Blue", player), lambda state:
state.has("House of Pain (E3M4) - Red skull key", player, 1)) state.has("House of Pain (E3M4) - Red skull key", player, 1))
set_rule(world.get_entrance("House of Pain (E3M4) Yellow -> House of Pain (E3M4) Blue", player), lambda state: set_rule(multiworld.get_entrance("House of Pain (E3M4) Yellow -> House of Pain (E3M4) Blue", player), lambda state:
state.has("House of Pain (E3M4) - Yellow skull key", player, 1)) state.has("House of Pain (E3M4) - Yellow skull key", player, 1))
# Unholy Cathedral (E3M5) # Unholy Cathedral (E3M5)
set_rule(world.get_entrance("Hub -> Unholy Cathedral (E3M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Unholy Cathedral (E3M5) Main", player), lambda state:
(state.has("Unholy Cathedral (E3M5)", player, 1) and (state.has("Unholy Cathedral (E3M5)", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Shotgun", player, 1)) and state.has("Shotgun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Unholy Cathedral (E3M5) Main -> Unholy Cathedral (E3M5) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Unholy Cathedral (E3M5) Main -> Unholy Cathedral (E3M5) Yellow", player), lambda state:
state.has("Unholy Cathedral (E3M5) - Yellow skull key", player, 1)) state.has("Unholy Cathedral (E3M5) - Yellow skull key", player, 1))
set_rule(world.get_entrance("Unholy Cathedral (E3M5) Main -> Unholy Cathedral (E3M5) Blue", player), lambda state: set_rule(multiworld.get_entrance("Unholy Cathedral (E3M5) Main -> Unholy Cathedral (E3M5) Blue", player), lambda state:
state.has("Unholy Cathedral (E3M5) - Blue skull key", player, 1)) state.has("Unholy Cathedral (E3M5) - Blue skull key", player, 1))
set_rule(world.get_entrance("Unholy Cathedral (E3M5) Blue -> Unholy Cathedral (E3M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Unholy Cathedral (E3M5) Blue -> Unholy Cathedral (E3M5) Main", player), lambda state:
state.has("Unholy Cathedral (E3M5) - Blue skull key", player, 1)) state.has("Unholy Cathedral (E3M5) - Blue skull key", player, 1))
set_rule(world.get_entrance("Unholy Cathedral (E3M5) Yellow -> Unholy Cathedral (E3M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Unholy Cathedral (E3M5) Yellow -> Unholy Cathedral (E3M5) Main", player), lambda state:
state.has("Unholy Cathedral (E3M5) - Yellow skull key", player, 1)) state.has("Unholy Cathedral (E3M5) - Yellow skull key", player, 1))
# Mt. Erebus (E3M6) # Mt. Erebus (E3M6)
set_rule(world.get_entrance("Hub -> Mt. Erebus (E3M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Mt. Erebus (E3M6) Main", player), lambda state:
state.has("Mt. Erebus (E3M6)", player, 1) and state.has("Mt. Erebus (E3M6)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) state.has("Chaingun", player, 1))
set_rule(world.get_entrance("Mt. Erebus (E3M6) Main -> Mt. Erebus (E3M6) Blue", player), lambda state: set_rule(multiworld.get_entrance("Mt. Erebus (E3M6) Main -> Mt. Erebus (E3M6) Blue", player), lambda state:
state.has("Mt. Erebus (E3M6) - Blue skull key", player, 1)) state.has("Mt. Erebus (E3M6) - Blue skull key", player, 1))
set_rule(world.get_entrance("Mt. Erebus (E3M6) Blue -> Mt. Erebus (E3M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Mt. Erebus (E3M6) Blue -> Mt. Erebus (E3M6) Main", player), lambda state:
state.has("Mt. Erebus (E3M6) - Blue skull key", player, 1)) state.has("Mt. Erebus (E3M6) - Blue skull key", player, 1))
# Limbo (E3M7) # Limbo (E3M7)
set_rule(world.get_entrance("Hub -> Limbo (E3M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Limbo (E3M7) Main", player), lambda state:
(state.has("Limbo (E3M7)", player, 1) and (state.has("Limbo (E3M7)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Limbo (E3M7) Main -> Limbo (E3M7) Red", player), lambda state: set_rule(multiworld.get_entrance("Limbo (E3M7) Main -> Limbo (E3M7) Red", player), lambda state:
state.has("Limbo (E3M7) - Red skull key", player, 1)) state.has("Limbo (E3M7) - Red skull key", player, 1))
set_rule(world.get_entrance("Limbo (E3M7) Main -> Limbo (E3M7) Blue", player), lambda state: set_rule(multiworld.get_entrance("Limbo (E3M7) Main -> Limbo (E3M7) Blue", player), lambda state:
state.has("Limbo (E3M7) - Blue skull key", player, 1)) state.has("Limbo (E3M7) - Blue skull key", player, 1))
set_rule(world.get_entrance("Limbo (E3M7) Main -> Limbo (E3M7) Pink", player), lambda state: set_rule(multiworld.get_entrance("Limbo (E3M7) Main -> Limbo (E3M7) Pink", player), lambda state:
state.has("Limbo (E3M7) - Blue skull key", player, 1)) state.has("Limbo (E3M7) - Blue skull key", player, 1))
set_rule(world.get_entrance("Limbo (E3M7) Red -> Limbo (E3M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Limbo (E3M7) Red -> Limbo (E3M7) Yellow", player), lambda state:
state.has("Limbo (E3M7) - Yellow skull key", player, 1)) state.has("Limbo (E3M7) - Yellow skull key", player, 1))
set_rule(world.get_entrance("Limbo (E3M7) Pink -> Limbo (E3M7) Green", player), lambda state: set_rule(multiworld.get_entrance("Limbo (E3M7) Pink -> Limbo (E3M7) Green", player), lambda state:
state.has("Limbo (E3M7) - Red skull key", player, 1)) state.has("Limbo (E3M7) - Red skull key", player, 1))
# Dis (E3M8) # Dis (E3M8)
set_rule(world.get_entrance("Hub -> Dis (E3M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Dis (E3M8) Main", player), lambda state:
(state.has("Dis (E3M8)", player, 1) and (state.has("Dis (E3M8)", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Shotgun", player, 1)) and state.has("Shotgun", player, 1)) and
@ -371,129 +376,129 @@ def set_episode3_rules(player, world, pro):
state.has("Rocket launcher", player, 1))) state.has("Rocket launcher", player, 1)))
# Warrens (E3M9) # Warrens (E3M9)
set_rule(world.get_entrance("Hub -> Warrens (E3M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Warrens (E3M9) Main", player), lambda state:
(state.has("Warrens (E3M9)", player, 1) and (state.has("Warrens (E3M9)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Plasma gun", player, 1)) and state.has("Plasma gun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Warrens (E3M9) Main -> Warrens (E3M9) Blue", player), lambda state: set_rule(multiworld.get_entrance("Warrens (E3M9) Main -> Warrens (E3M9) Blue", player), lambda state:
state.has("Warrens (E3M9) - Blue skull key", player, 1)) state.has("Warrens (E3M9) - Blue skull key", player, 1))
set_rule(world.get_entrance("Warrens (E3M9) Main -> Warrens (E3M9) Blue trigger", player), lambda state: set_rule(multiworld.get_entrance("Warrens (E3M9) Main -> Warrens (E3M9) Blue trigger", player), lambda state:
state.has("Warrens (E3M9) - Blue skull key", player, 1)) state.has("Warrens (E3M9) - Blue skull key", player, 1))
set_rule(world.get_entrance("Warrens (E3M9) Blue -> Warrens (E3M9) Main", player), lambda state: set_rule(multiworld.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))
set_rule(world.get_entrance("Warrens (E3M9) Blue -> Warrens (E3M9) Red", player), lambda state: set_rule(multiworld.get_entrance("Warrens (E3M9) Blue -> Warrens (E3M9) Red", player), lambda state:
state.has("Warrens (E3M9) - Red skull key", player, 1)) state.has("Warrens (E3M9) - Red skull key", player, 1))
def set_episode4_rules(player, world, pro): def set_episode4_rules(player, multiworld, pro):
# Hell Beneath (E4M1) # Hell Beneath (E4M1)
set_rule(world.get_entrance("Hub -> Hell Beneath (E4M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Hell Beneath (E4M1) Main", player), lambda state:
state.has("Hell Beneath (E4M1)", player, 1)) state.has("Hell Beneath (E4M1)", player, 1))
set_rule(world.get_entrance("Hell Beneath (E4M1) Main -> Hell Beneath (E4M1) Red", player), lambda state: set_rule(multiworld.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("Hell Beneath (E4M1) - Red skull key", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and (state.has("Plasma gun", player, 1) or state.has("Chaingun", player, 1)) and (state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Hell Beneath (E4M1) Main -> Hell Beneath (E4M1) Blue", player), lambda state: set_rule(multiworld.get_entrance("Hell Beneath (E4M1) Main -> Hell Beneath (E4M1) Blue", player), lambda state:
state.has("Shotgun", player, 1) or state.has("Shotgun", player, 1) or
state.has("Chaingun", player, 1) or state.has("Chaingun", player, 1) or
state.has("Hell Beneath (E4M1) - Blue skull key", player, 1)) state.has("Hell Beneath (E4M1) - Blue skull key", player, 1))
# Perfect Hatred (E4M2) # Perfect Hatred (E4M2)
set_rule(world.get_entrance("Hub -> Perfect Hatred (E4M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Perfect Hatred (E4M2) Main", player), lambda state:
(state.has("Perfect Hatred (E4M2)", player, 1) and (state.has("Perfect Hatred (E4M2)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Perfect Hatred (E4M2) Main -> Perfect Hatred (E4M2) Blue", player), lambda state: set_rule(multiworld.get_entrance("Perfect Hatred (E4M2) Main -> Perfect Hatred (E4M2) Blue", player), lambda state:
state.has("Perfect Hatred (E4M2) - Blue skull key", player, 1)) 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: set_rule(multiworld.get_entrance("Perfect Hatred (E4M2) Main -> Perfect Hatred (E4M2) Yellow", player), lambda state:
state.has("Perfect Hatred (E4M2) - Yellow skull key", player, 1)) state.has("Perfect Hatred (E4M2) - Yellow skull key", player, 1))
# Sever the Wicked (E4M3) # Sever the Wicked (E4M3)
set_rule(world.get_entrance("Hub -> Sever the Wicked (E4M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Sever the Wicked (E4M3) Main", player), lambda state:
(state.has("Sever the Wicked (E4M3)", player, 1) and (state.has("Sever the Wicked (E4M3)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Sever the Wicked (E4M3) Main -> Sever the Wicked (E4M3) Red", player), lambda state: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) state.has("Sever the Wicked (E4M3) - Blue skull key", player, 1))
# Unruly Evil (E4M4) # Unruly Evil (E4M4)
set_rule(world.get_entrance("Hub -> Unruly Evil (E4M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Unruly Evil (E4M4) Main", player), lambda state:
(state.has("Unruly Evil (E4M4)", player, 1) and (state.has("Unruly Evil (E4M4)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Unruly Evil (E4M4) Main -> Unruly Evil (E4M4) Red", player), lambda state: set_rule(multiworld.get_entrance("Unruly Evil (E4M4) Main -> Unruly Evil (E4M4) Red", player), lambda state:
state.has("Unruly Evil (E4M4) - Red skull key", player, 1)) state.has("Unruly Evil (E4M4) - Red skull key", player, 1))
# They Will Repent (E4M5) # They Will Repent (E4M5)
set_rule(world.get_entrance("Hub -> They Will Repent (E4M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> They Will Repent (E4M5) Main", player), lambda state:
(state.has("They Will Repent (E4M5)", player, 1) and (state.has("They Will Repent (E4M5)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("They Will Repent (E4M5) Main -> They Will Repent (E4M5) Red", player), lambda state: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) state.has("They Will Repent (E4M5) - Blue skull key", player, 1))
# Against Thee Wickedly (E4M6) # Against Thee Wickedly (E4M6)
set_rule(world.get_entrance("Hub -> Against Thee Wickedly (E4M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Against Thee Wickedly (E4M6) Main", player), lambda state:
(state.has("Against Thee Wickedly (E4M6)", player, 1) and (state.has("Against Thee Wickedly (E4M6)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("Against Thee Wickedly (E4M6) Main -> Against Thee Wickedly (E4M6) Blue", player), lambda state: set_rule(multiworld.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)) state.has("Against Thee Wickedly (E4M6) - Blue skull key", player, 1))
set_rule(world.get_entrance("Against Thee Wickedly (E4M6) Blue -> Against Thee Wickedly (E4M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Against Thee Wickedly (E4M6) Blue -> Against Thee Wickedly (E4M6) Yellow", player), lambda state:
state.has("Against Thee Wickedly (E4M6) - Yellow skull key", player, 1)) state.has("Against Thee Wickedly (E4M6) - Yellow skull key", player, 1))
set_rule(world.get_entrance("Against Thee Wickedly (E4M6) Blue -> Against Thee Wickedly (E4M6) Red", player), lambda state: set_rule(multiworld.get_entrance("Against Thee Wickedly (E4M6) Blue -> Against Thee Wickedly (E4M6) Red", player), lambda state:
state.has("Against Thee Wickedly (E4M6) - Red skull key", player, 1)) state.has("Against Thee Wickedly (E4M6) - Red skull key", player, 1))
# And Hell Followed (E4M7) # And Hell Followed (E4M7)
set_rule(world.get_entrance("Hub -> And Hell Followed (E4M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> And Hell Followed (E4M7) Main", player), lambda state:
(state.has("And Hell Followed (E4M7)", player, 1) and (state.has("And Hell Followed (E4M7)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1)) and state.has("Chaingun", player, 1)) and
(state.has("Rocket launcher", player, 1) or (state.has("Rocket launcher", player, 1) or
state.has("Plasma gun", player, 1) or state.has("Plasma gun", player, 1) or
state.has("BFG9000", player, 1))) state.has("BFG9000", player, 1)))
set_rule(world.get_entrance("And Hell Followed (E4M7) Main -> And Hell Followed (E4M7) Blue", player), lambda state: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) state.has("And Hell Followed (E4M7) - Red skull key", player, 1))
# Unto the Cruel (E4M8) # Unto the Cruel (E4M8)
set_rule(world.get_entrance("Hub -> Unto the Cruel (E4M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Unto the Cruel (E4M8) Main", player), lambda state:
(state.has("Unto the Cruel (E4M8)", player, 1) and (state.has("Unto the Cruel (E4M8)", player, 1) and
state.has("Chainsaw", player, 1) and state.has("Chainsaw", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
@ -501,37 +506,37 @@ def set_episode4_rules(player, world, pro):
state.has("Rocket launcher", player, 1)) and state.has("Rocket launcher", player, 1)) and
(state.has("BFG9000", player, 1) or (state.has("BFG9000", player, 1) or
state.has("Plasma gun", player, 1))) state.has("Plasma gun", player, 1)))
set_rule(world.get_entrance("Unto the Cruel (E4M8) Main -> Unto the Cruel (E4M8) Red", player), lambda state: set_rule(multiworld.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)) 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: set_rule(multiworld.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)) 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: set_rule(multiworld.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) - Yellow skull key", player, 1) and
state.has("Unto the Cruel (E4M8) - Red skull key", player, 1)) state.has("Unto the Cruel (E4M8) - Red skull key", player, 1))
# Fear (E4M9) # Fear (E4M9)
set_rule(world.get_entrance("Hub -> Fear (E4M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Fear (E4M9) Main", player), lambda state:
state.has("Fear (E4M9)", player, 1) and state.has("Fear (E4M9)", player, 1) and
state.has("Shotgun", player, 1) and state.has("Shotgun", player, 1) and
state.has("Chaingun", player, 1) and state.has("Chaingun", player, 1) and
state.has("Rocket launcher", player, 1) and state.has("Rocket launcher", player, 1) and
state.has("Plasma gun", player, 1) and state.has("Plasma gun", player, 1) and
state.has("BFG9000", player, 1)) state.has("BFG9000", player, 1))
set_rule(world.get_entrance("Fear (E4M9) Main -> Fear (E4M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Fear (E4M9) Main -> Fear (E4M9) Yellow", player), lambda state:
state.has("Fear (E4M9) - Yellow skull key", player, 1)) state.has("Fear (E4M9) - Yellow skull key", player, 1))
set_rule(world.get_entrance("Fear (E4M9) Yellow -> Fear (E4M9) Main", player), lambda state: set_rule(multiworld.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, pro): def set_rules(doom_1993_world: "DOOM1993World", included_episodes, pro):
player = doom_1993_world.player player = doom_1993_world.player
world = doom_1993_world.multiworld multiworld = doom_1993_world.multiworld
if included_episodes[0]: if included_episodes[0]:
set_episode1_rules(player, world, pro) set_episode1_rules(player, multiworld, pro)
if included_episodes[1]: if included_episodes[1]:
set_episode2_rules(player, world, pro) set_episode2_rules(player, multiworld, pro)
if included_episodes[2]: if included_episodes[2]:
set_episode3_rules(player, world, pro) set_episode3_rules(player, multiworld, pro)
if included_episodes[3]: if included_episodes[3]:
set_episode4_rules(player, world, pro) set_episode4_rules(player, multiworld, pro)

View File

@ -2,9 +2,10 @@ import functools
import logging import logging
from typing import Any, Dict, List from typing import Any, Dict, List
from BaseClasses import Entrance, CollectionState, Item, ItemClassification, Location, MultiWorld, Region, Tutorial from BaseClasses import Entrance, CollectionState, Item, Location, MultiWorld, Region, Tutorial
from worlds.AutoWorld import WebWorld, World from worlds.AutoWorld import WebWorld, World
from . import Items, Locations, Maps, Options, Regions, Rules from . import Items, Locations, Maps, Regions, Rules
from .Options import DOOM1993Options
logger = logging.getLogger("DOOM 1993") logger = logging.getLogger("DOOM 1993")
@ -37,7 +38,8 @@ class DOOM1993World(World):
Developed by id Software, and originally released in 1993, DOOM pioneered and popularized the first-person shooter, Developed by id Software, and originally released in 1993, DOOM pioneered and popularized the first-person shooter,
setting a standard for all FPS games. setting a standard for all FPS games.
""" """
option_definitions = Options.options options_dataclass = DOOM1993Options
options: DOOM1993Options
game = "DOOM 1993" game = "DOOM 1993"
web = DOOM1993Web() web = DOOM1993Web()
data_version = 3 data_version = 3
@ -78,26 +80,28 @@ class DOOM1993World(World):
"Energy cell pack": 10 "Energy cell pack": 10
} }
def __init__(self, world: MultiWorld, player: int): def __init__(self, multiworld: MultiWorld, player: int):
self.included_episodes = [1, 1, 1, 0] self.included_episodes = [1, 1, 1, 0]
self.location_count = 0 self.location_count = 0
super().__init__(world, player) super().__init__(multiworld, player)
def get_episode_count(self): def get_episode_count(self):
return functools.reduce(lambda count, episode: count + episode, self.included_episodes) return functools.reduce(lambda count, episode: count + episode, self.included_episodes)
def generate_early(self): def generate_early(self):
# Cache which episodes are included # Cache which episodes are included
for i in range(4): self.included_episodes[0] = self.options.episode1.value
self.included_episodes[i] = getattr(self.multiworld, f"episode{i + 1}")[self.player].value self.included_episodes[1] = self.options.episode2.value
self.included_episodes[2] = self.options.episode3.value
self.included_episodes[3] = self.options.episode4.value
# If no episodes selected, select Episode 1 # If no episodes selected, select Episode 1
if self.get_episode_count() == 0: if self.get_episode_count() == 0:
self.included_episodes[0] = 1 self.included_episodes[0] = 1
def create_regions(self): def create_regions(self):
pro = getattr(self.multiworld, "pro")[self.player].value pro = self.options.pro.value
# Main regions # Main regions
menu_region = Region("Menu", self.player, self.multiworld) menu_region = Region("Menu", self.player, self.multiworld)
@ -148,7 +152,7 @@ class DOOM1993World(World):
def completion_rule(self, state: CollectionState): def completion_rule(self, state: CollectionState):
goal_levels = Maps.map_names goal_levels = Maps.map_names
if getattr(self.multiworld, "goal")[self.player].value: if self.options.goal.value:
goal_levels = self.boss_level_for_espidoes goal_levels = self.boss_level_for_espidoes
for map_name in goal_levels: for map_name in goal_levels:
@ -167,8 +171,8 @@ class DOOM1993World(World):
return True return True
def set_rules(self): def set_rules(self):
pro = getattr(self.multiworld, "pro")[self.player].value pro = self.options.pro.value
allow_death_logic = getattr(self.multiworld, "allow_death_logic")[self.player].value allow_death_logic = self.options.allow_death_logic.value
Rules.set_rules(self, self.included_episodes, pro) Rules.set_rules(self, self.included_episodes, pro)
self.multiworld.completion_condition[self.player] = lambda state: self.completion_rule(state) self.multiworld.completion_condition[self.player] = lambda state: self.completion_rule(state)
@ -185,7 +189,7 @@ class DOOM1993World(World):
def create_items(self): def create_items(self):
itempool: List[DOOM1993Item] = [] itempool: List[DOOM1993Item] = []
start_with_computer_area_maps: bool = getattr(self.multiworld, "start_with_computer_area_maps")[self.player].value start_with_computer_area_maps: bool = self.options.start_with_computer_area_maps.value
# Items # Items
for item_id, item in Items.item_table.items(): for item_id, item in Items.item_table.items():
@ -225,7 +229,7 @@ class DOOM1993World(World):
self.multiworld.push_precollected(self.create_item(self.starting_level_for_episode[i])) self.multiworld.push_precollected(self.create_item(self.starting_level_for_episode[i]))
# Give Computer area maps if option selected # Give Computer area maps if option selected
if getattr(self.multiworld, "start_with_computer_area_maps")[self.player].value: if self.options.start_with_computer_area_maps.value:
for item_id, item_dict in Items.item_table.items(): for item_id, item_dict in Items.item_table.items():
item_episode = item_dict["episode"] item_episode = item_dict["episode"]
if item_episode > 0: if item_episode > 0:
@ -269,7 +273,7 @@ class DOOM1993World(World):
itempool.append(self.create_item(item_name)) itempool.append(self.create_item(item_name))
def fill_slot_data(self) -> Dict[str, Any]: def fill_slot_data(self) -> Dict[str, Any]:
slot_data = {name: getattr(self.multiworld, name)[self.player].value for name in self.option_definitions} slot_data = self.options.as_dict("goal", "difficulty", "random_monsters", "random_pickups", "random_music", "flip_levels", "allow_death_logic", "pro", "start_with_computer_area_maps", "death_link", "reset_level_on_death", "episode1", "episode2", "episode3", "episode4")
# E2M6 and E3M9 each have one way keydoor. You can enter, but required the keycard to get out. # 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 # We used to force place the keycard behind those doors. Limiting the randomness for those items. A change

View File

@ -15,7 +15,7 @@
1. Download [APDOOM.zip](https://github.com/Daivuk/apdoom/releases) and extract it. 1. Download [APDOOM.zip](https://github.com/Daivuk/apdoom/releases) and extract it.
2. Copy `DOOM.WAD` from your game's installation directory into the newly extracted folder. 2. Copy `DOOM.WAD` from your game's installation directory into the newly extracted folder.
You can find the folder in steam by finding the game in your library, You can find the folder in steam by finding the game in your library,
right-clicking it and choosing **Manage -> Browse Local Files**. right-clicking it and choosing **Manage -> Browse Local Files**. The WAD file is in the `/base/` folder.
## Joining a MultiWorld Game ## Joining a MultiWorld Game