Heretic: Update to use new Options + logic fixes + Doc fix (#3139)

This commit is contained in:
David St-Louis 2024-04-18 12:53:09 -04:00 committed by GitHub
parent 6f7c2fa25f
commit 2c80a9b8f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 289 additions and 276 deletions

View File

@ -1266,7 +1266,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 10, 'index': 10,
'doom_type': 79, 'doom_type': 79,
'region': "The River of Fire (E2M3) Main"}, 'region': "The River of Fire (E2M3) Green"},
371179: {'name': 'The River of Fire (E2M3) - Green key', 371179: {'name': 'The River of Fire (E2M3) - Green key',
'episode': 2, 'episode': 2,
'check_sanity': False, 'check_sanity': False,
@ -1301,7 +1301,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 122, 'index': 122,
'doom_type': 2003, 'doom_type': 2003,
'region': "The River of Fire (E2M3) Main"}, 'region': "The River of Fire (E2M3) Green"},
371184: {'name': 'The River of Fire (E2M3) - Hellstaff', 371184: {'name': 'The River of Fire (E2M3) - Hellstaff',
'episode': 2, 'episode': 2,
'check_sanity': False, 'check_sanity': False,
@ -1364,7 +1364,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 299, 'index': 299,
'doom_type': 32, 'doom_type': 32,
'region': "The River of Fire (E2M3) Main"}, 'region': "The River of Fire (E2M3) Green"},
371193: {'name': 'The River of Fire (E2M3) - Morph Ovum', 371193: {'name': 'The River of Fire (E2M3) - Morph Ovum',
'episode': 2, 'episode': 2,
'check_sanity': False, 'check_sanity': False,
@ -1385,7 +1385,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 413, 'index': 413,
'doom_type': 2002, 'doom_type': 2002,
'region': "The River of Fire (E2M3) Main"}, 'region': "The River of Fire (E2M3) Green"},
371196: {'name': 'The River of Fire (E2M3) - Firemace 2', 371196: {'name': 'The River of Fire (E2M3) - Firemace 2',
'episode': 2, 'episode': 2,
'check_sanity': True, 'check_sanity': True,
@ -2610,7 +2610,7 @@ location_table: Dict[int, LocationDict] = {
'map': 2, 'map': 2,
'index': 172, 'index': 172,
'doom_type': 33, 'doom_type': 33,
'region': "The Cesspool (E3M2) Main"}, 'region': "The Cesspool (E3M2) Yellow"},
371371: {'name': 'The Cesspool (E3M2) - Bag of Holding 2', 371371: {'name': 'The Cesspool (E3M2) - Bag of Holding 2',
'episode': 3, 'episode': 3,
'check_sanity': False, 'check_sanity': False,
@ -4360,7 +4360,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 297, 'index': 297,
'doom_type': 2002, 'doom_type': 2002,
'region': "Ambulatory (E4M3) Green"}, 'region': "Ambulatory (E4M3) Green Lock"},
371621: {'name': 'Ambulatory (E4M3) - Firemace 2', 371621: {'name': 'Ambulatory (E4M3) - Firemace 2',
'episode': 4, 'episode': 4,
'check_sanity': False, 'check_sanity': False,
@ -6040,7 +6040,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 234, 'index': 234,
'doom_type': 85, 'doom_type': 85,
'region': "Quay (E5M3) Blue"}, 'region': "Quay (E5M3) Cyan"},
371861: {'name': 'Quay (E5M3) - Map Scroll', 371861: {'name': 'Quay (E5M3) - Map Scroll',
'episode': 5, 'episode': 5,
'check_sanity': True, 'check_sanity': True,
@ -6075,7 +6075,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 239, 'index': 239,
'doom_type': 86, 'doom_type': 86,
'region': "Quay (E5M3) Blue"}, 'region': "Quay (E5M3) Cyan"},
371866: {'name': 'Quay (E5M3) - Torch', 371866: {'name': 'Quay (E5M3) - Torch',
'episode': 5, 'episode': 5,
'check_sanity': False, 'check_sanity': False,
@ -6089,7 +6089,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 242, 'index': 242,
'doom_type': 2002, 'doom_type': 2002,
'region': "Quay (E5M3) Blue"}, 'region': "Quay (E5M3) Cyan"},
371868: {'name': 'Quay (E5M3) - Firemace 2', 371868: {'name': 'Quay (E5M3) - Firemace 2',
'episode': 5, 'episode': 5,
'check_sanity': False, 'check_sanity': False,
@ -6124,7 +6124,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': 247, 'index': 247,
'doom_type': 2002, 'doom_type': 2002,
'region': "Quay (E5M3) Blue"}, 'region': "Quay (E5M3) Cyan"},
371873: {'name': 'Quay (E5M3) - Bag of Holding 2', 371873: {'name': 'Quay (E5M3) - Bag of Holding 2',
'episode': 5, 'episode': 5,
'check_sanity': True, 'check_sanity': True,
@ -6138,7 +6138,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3, 'map': 3,
'index': -1, 'index': -1,
'doom_type': -1, 'doom_type': -1,
'region': "Quay (E5M3) Blue"}, 'region': "Quay (E5M3) Cyan"},
371875: {'name': 'Courtyard (E5M4) - Blue key', 371875: {'name': 'Courtyard (E5M4) - Blue key',
'episode': 5, 'episode': 5,
'check_sanity': False, 'check_sanity': False,

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):
@ -146,22 +145,22 @@ class Episode5(Toggle):
display_name = "Episode 5" display_name = "Episode 5"
options: typing.Dict[str, AssembleOptions] = { @dataclass
"start_inventory_from_pool": StartInventoryPool, class HereticOptions(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
"allow_death_logic": AllowDeathLogic, random_music: RandomMusic
"pro": Pro, allow_death_logic: AllowDeathLogic
"check_sanity": CheckSanity, pro: Pro
"start_with_map_scrolls": StartWithMapScrolls, check_sanity: CheckSanity
"reset_level_on_death": ResetLevelOnDeath, start_with_map_scrolls: StartWithMapScrolls
"death_link": DeathLink, reset_level_on_death: ResetLevelOnDeath
"episode1": Episode1, death_link: DeathLink
"episode2": Episode2, episode1: Episode1
"episode3": Episode3, episode2: Episode2
"episode4": Episode4, episode3: Episode3
"episode5": Episode5 episode4: Episode4
} episode5: Episode5

View File

@ -604,7 +604,8 @@ regions:List[RegionDict] = [
"connections":[ "connections":[
{"target":"Ambulatory (E4M3) Blue","pro":False}, {"target":"Ambulatory (E4M3) Blue","pro":False},
{"target":"Ambulatory (E4M3) Yellow","pro":False}, {"target":"Ambulatory (E4M3) Yellow","pro":False},
{"target":"Ambulatory (E4M3) Green","pro":False}]}, {"target":"Ambulatory (E4M3) Green","pro":False},
{"target":"Ambulatory (E4M3) Green Lock","pro":False}]},
{"name":"Ambulatory (E4M3) Blue", {"name":"Ambulatory (E4M3) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":4, "episode":4,
@ -619,6 +620,12 @@ regions:List[RegionDict] = [
"connects_to_hub":False, "connects_to_hub":False,
"episode":4, "episode":4,
"connections":[{"target":"Ambulatory (E4M3) Main","pro":False}]}, "connections":[{"target":"Ambulatory (E4M3) Main","pro":False}]},
{"name":"Ambulatory (E4M3) Green Lock",
"connects_to_hub":False,
"episode":4,
"connections":[
{"target":"Ambulatory (E4M3) Green","pro":False},
{"target":"Ambulatory (E4M3) Main","pro":False}]},
# Sepulcher (E4M4) # Sepulcher (E4M4)
{"name":"Sepulcher (E4M4) Main", {"name":"Sepulcher (E4M4) Main",
@ -767,9 +774,7 @@ regions:List[RegionDict] = [
{"name":"Quay (E5M3) Blue", {"name":"Quay (E5M3) Blue",
"connects_to_hub":False, "connects_to_hub":False,
"episode":5, "episode":5,
"connections":[ "connections":[{"target":"Quay (E5M3) Main","pro":False}]},
{"target":"Quay (E5M3) Green","pro":False},
{"target":"Quay (E5M3) Main","pro":False}]},
{"name":"Quay (E5M3) Yellow", {"name":"Quay (E5M3) Yellow",
"connects_to_hub":False, "connects_to_hub":False,
"episode":5, "episode":5,
@ -779,7 +784,11 @@ regions:List[RegionDict] = [
"episode":5, "episode":5,
"connections":[ "connections":[
{"target":"Quay (E5M3) Main","pro":False}, {"target":"Quay (E5M3) Main","pro":False},
{"target":"Quay (E5M3) Blue","pro":False}]}, {"target":"Quay (E5M3) Cyan","pro":False}]},
{"name":"Quay (E5M3) Cyan",
"connects_to_hub":False,
"episode":5,
"connections":[{"target":"Quay (E5M3) Main","pro":False}]},
# Courtyard (E5M4) # Courtyard (E5M4)
{"name":"Courtyard (E5M4) Main", {"name":"Courtyard (E5M4) Main",

View File

@ -7,185 +7,185 @@ if TYPE_CHECKING:
from . import HereticWorld from . import HereticWorld
def set_episode1_rules(player, world, pro): def set_episode1_rules(player, multiworld, pro):
# The Docks (E1M1) # The Docks (E1M1)
set_rule(world.get_entrance("Hub -> The Docks (E1M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Docks (E1M1) Main", player), lambda state:
state.has("The Docks (E1M1)", player, 1)) state.has("The Docks (E1M1)", player, 1))
set_rule(world.get_entrance("The Docks (E1M1) Main -> The Docks (E1M1) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Docks (E1M1) Main -> The Docks (E1M1) Yellow", player), lambda state:
state.has("The Docks (E1M1) - Yellow key", player, 1)) state.has("The Docks (E1M1) - Yellow key", player, 1))
# The Dungeons (E1M2) # The Dungeons (E1M2)
set_rule(world.get_entrance("Hub -> The Dungeons (E1M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Dungeons (E1M2) Main", player), lambda state:
(state.has("The Dungeons (E1M2)", player, 1)) and (state.has("The Dungeons (E1M2)", player, 1)) and
(state.has("Dragon Claw", player, 1) or (state.has("Dragon Claw", player, 1) or
state.has("Ethereal Crossbow", player, 1))) state.has("Ethereal Crossbow", player, 1)))
set_rule(world.get_entrance("The Dungeons (E1M2) Main -> The Dungeons (E1M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Dungeons (E1M2) Main -> The Dungeons (E1M2) Yellow", player), lambda state:
state.has("The Dungeons (E1M2) - Yellow key", player, 1)) state.has("The Dungeons (E1M2) - Yellow key", player, 1))
set_rule(world.get_entrance("The Dungeons (E1M2) Main -> The Dungeons (E1M2) Green", player), lambda state: set_rule(multiworld.get_entrance("The Dungeons (E1M2) Main -> The Dungeons (E1M2) Green", player), lambda state:
state.has("The Dungeons (E1M2) - Green key", player, 1)) state.has("The Dungeons (E1M2) - Green key", player, 1))
set_rule(world.get_entrance("The Dungeons (E1M2) Blue -> The Dungeons (E1M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Dungeons (E1M2) Blue -> The Dungeons (E1M2) Yellow", player), lambda state:
state.has("The Dungeons (E1M2) - Blue key", player, 1)) state.has("The Dungeons (E1M2) - Blue key", player, 1))
set_rule(world.get_entrance("The Dungeons (E1M2) Yellow -> The Dungeons (E1M2) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Dungeons (E1M2) Yellow -> The Dungeons (E1M2) Blue", player), lambda state:
state.has("The Dungeons (E1M2) - Blue key", player, 1)) state.has("The Dungeons (E1M2) - Blue key", player, 1))
# The Gatehouse (E1M3) # The Gatehouse (E1M3)
set_rule(world.get_entrance("Hub -> The Gatehouse (E1M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Gatehouse (E1M3) Main", player), lambda state:
(state.has("The Gatehouse (E1M3)", player, 1)) and (state.has("The Gatehouse (E1M3)", player, 1)) and
(state.has("Ethereal Crossbow", player, 1) or (state.has("Ethereal Crossbow", player, 1) or
state.has("Dragon Claw", player, 1))) state.has("Dragon Claw", player, 1)))
set_rule(world.get_entrance("The Gatehouse (E1M3) Main -> The Gatehouse (E1M3) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Gatehouse (E1M3) Main -> The Gatehouse (E1M3) Yellow", player), lambda state:
state.has("The Gatehouse (E1M3) - Yellow key", player, 1)) state.has("The Gatehouse (E1M3) - Yellow key", player, 1))
set_rule(world.get_entrance("The Gatehouse (E1M3) Main -> The Gatehouse (E1M3) Sea", player), lambda state: set_rule(multiworld.get_entrance("The Gatehouse (E1M3) Main -> The Gatehouse (E1M3) Sea", player), lambda state:
state.has("The Gatehouse (E1M3) - Yellow key", player, 1)) state.has("The Gatehouse (E1M3) - Yellow key", player, 1))
set_rule(world.get_entrance("The Gatehouse (E1M3) Main -> The Gatehouse (E1M3) Green", player), lambda state: set_rule(multiworld.get_entrance("The Gatehouse (E1M3) Main -> The Gatehouse (E1M3) Green", player), lambda state:
state.has("The Gatehouse (E1M3) - Green key", player, 1)) state.has("The Gatehouse (E1M3) - Green key", player, 1))
set_rule(world.get_entrance("The Gatehouse (E1M3) Green -> The Gatehouse (E1M3) Main", player), lambda state: set_rule(multiworld.get_entrance("The Gatehouse (E1M3) Green -> The Gatehouse (E1M3) Main", player), lambda state:
state.has("The Gatehouse (E1M3) - Green key", player, 1)) state.has("The Gatehouse (E1M3) - Green key", player, 1))
# The Guard Tower (E1M4) # The Guard Tower (E1M4)
set_rule(world.get_entrance("Hub -> The Guard Tower (E1M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Guard Tower (E1M4) Main", player), lambda state:
(state.has("The Guard Tower (E1M4)", player, 1)) and (state.has("The Guard Tower (E1M4)", player, 1)) and
(state.has("Ethereal Crossbow", player, 1) or (state.has("Ethereal Crossbow", player, 1) or
state.has("Dragon Claw", player, 1))) state.has("Dragon Claw", player, 1)))
set_rule(world.get_entrance("The Guard Tower (E1M4) Main -> The Guard Tower (E1M4) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Guard Tower (E1M4) Main -> The Guard Tower (E1M4) Yellow", player), lambda state:
state.has("The Guard Tower (E1M4) - Yellow key", player, 1)) state.has("The Guard Tower (E1M4) - Yellow key", player, 1))
set_rule(world.get_entrance("The Guard Tower (E1M4) Yellow -> The Guard Tower (E1M4) Green", player), lambda state: set_rule(multiworld.get_entrance("The Guard Tower (E1M4) Yellow -> The Guard Tower (E1M4) Green", player), lambda state:
state.has("The Guard Tower (E1M4) - Green key", player, 1)) state.has("The Guard Tower (E1M4) - Green key", player, 1))
set_rule(world.get_entrance("The Guard Tower (E1M4) Green -> The Guard Tower (E1M4) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Guard Tower (E1M4) Green -> The Guard Tower (E1M4) Yellow", player), lambda state:
state.has("The Guard Tower (E1M4) - Green key", player, 1)) state.has("The Guard Tower (E1M4) - Green key", player, 1))
# The Citadel (E1M5) # The Citadel (E1M5)
set_rule(world.get_entrance("Hub -> The Citadel (E1M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Citadel (E1M5) Main", player), lambda state:
(state.has("The Citadel (E1M5)", player, 1) and (state.has("The Citadel (E1M5)", player, 1) and
state.has("Ethereal Crossbow", player, 1)) and state.has("Ethereal Crossbow", player, 1)) and
(state.has("Dragon Claw", player, 1) or (state.has("Dragon Claw", player, 1) or
state.has("Gauntlets of the Necromancer", player, 1))) state.has("Gauntlets of the Necromancer", player, 1)))
set_rule(world.get_entrance("The Citadel (E1M5) Main -> The Citadel (E1M5) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Citadel (E1M5) Main -> The Citadel (E1M5) Yellow", player), lambda state:
state.has("The Citadel (E1M5) - Yellow key", player, 1)) state.has("The Citadel (E1M5) - Yellow key", player, 1))
set_rule(world.get_entrance("The Citadel (E1M5) Blue -> The Citadel (E1M5) Green", player), lambda state: set_rule(multiworld.get_entrance("The Citadel (E1M5) Blue -> The Citadel (E1M5) Green", player), lambda state:
state.has("The Citadel (E1M5) - Blue key", player, 1)) state.has("The Citadel (E1M5) - Blue key", player, 1))
set_rule(world.get_entrance("The Citadel (E1M5) Yellow -> The Citadel (E1M5) Green", player), lambda state: set_rule(multiworld.get_entrance("The Citadel (E1M5) Yellow -> The Citadel (E1M5) Green", player), lambda state:
state.has("The Citadel (E1M5) - Green key", player, 1)) state.has("The Citadel (E1M5) - Green key", player, 1))
set_rule(world.get_entrance("The Citadel (E1M5) Green -> The Citadel (E1M5) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Citadel (E1M5) Green -> The Citadel (E1M5) Blue", player), lambda state:
state.has("The Citadel (E1M5) - Blue key", player, 1)) state.has("The Citadel (E1M5) - Blue key", player, 1))
# The Cathedral (E1M6) # The Cathedral (E1M6)
set_rule(world.get_entrance("Hub -> The Cathedral (E1M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Cathedral (E1M6) Main", player), lambda state:
(state.has("The Cathedral (E1M6)", player, 1) and (state.has("The Cathedral (E1M6)", player, 1) and
state.has("Ethereal Crossbow", player, 1)) and state.has("Ethereal Crossbow", player, 1)) and
(state.has("Gauntlets of the Necromancer", player, 1) or (state.has("Gauntlets of the Necromancer", player, 1) or
state.has("Dragon Claw", player, 1))) state.has("Dragon Claw", player, 1)))
set_rule(world.get_entrance("The Cathedral (E1M6) Main -> The Cathedral (E1M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Cathedral (E1M6) Main -> The Cathedral (E1M6) Yellow", player), lambda state:
state.has("The Cathedral (E1M6) - Yellow key", player, 1)) state.has("The Cathedral (E1M6) - Yellow key", player, 1))
set_rule(world.get_entrance("The Cathedral (E1M6) Yellow -> The Cathedral (E1M6) Green", player), lambda state: set_rule(multiworld.get_entrance("The Cathedral (E1M6) Yellow -> The Cathedral (E1M6) Green", player), lambda state:
state.has("The Cathedral (E1M6) - Green key", player, 1)) state.has("The Cathedral (E1M6) - Green key", player, 1))
# The Crypts (E1M7) # The Crypts (E1M7)
set_rule(world.get_entrance("Hub -> The Crypts (E1M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Crypts (E1M7) Main", player), lambda state:
(state.has("The Crypts (E1M7)", player, 1) and (state.has("The Crypts (E1M7)", player, 1) and
state.has("Ethereal Crossbow", player, 1)) and state.has("Ethereal Crossbow", player, 1)) and
(state.has("Gauntlets of the Necromancer", player, 1) or (state.has("Gauntlets of the Necromancer", player, 1) or
state.has("Dragon Claw", player, 1))) state.has("Dragon Claw", player, 1)))
set_rule(world.get_entrance("The Crypts (E1M7) Main -> The Crypts (E1M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Crypts (E1M7) Main -> The Crypts (E1M7) Yellow", player), lambda state:
state.has("The Crypts (E1M7) - Yellow key", player, 1)) state.has("The Crypts (E1M7) - Yellow key", player, 1))
set_rule(world.get_entrance("The Crypts (E1M7) Main -> The Crypts (E1M7) Green", player), lambda state: set_rule(multiworld.get_entrance("The Crypts (E1M7) Main -> The Crypts (E1M7) Green", player), lambda state:
state.has("The Crypts (E1M7) - Green key", player, 1)) state.has("The Crypts (E1M7) - Green key", player, 1))
set_rule(world.get_entrance("The Crypts (E1M7) Yellow -> The Crypts (E1M7) Green", player), lambda state: set_rule(multiworld.get_entrance("The Crypts (E1M7) Yellow -> The Crypts (E1M7) Green", player), lambda state:
state.has("The Crypts (E1M7) - Green key", player, 1)) state.has("The Crypts (E1M7) - Green key", player, 1))
set_rule(world.get_entrance("The Crypts (E1M7) Yellow -> The Crypts (E1M7) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Crypts (E1M7) Yellow -> The Crypts (E1M7) Blue", player), lambda state:
state.has("The Crypts (E1M7) - Blue key", player, 1)) state.has("The Crypts (E1M7) - Blue key", player, 1))
set_rule(world.get_entrance("The Crypts (E1M7) Green -> The Crypts (E1M7) Main", player), lambda state: set_rule(multiworld.get_entrance("The Crypts (E1M7) Green -> The Crypts (E1M7) Main", player), lambda state:
state.has("The Crypts (E1M7) - Green key", player, 1)) state.has("The Crypts (E1M7) - Green key", player, 1))
# Hell's Maw (E1M8) # Hell's Maw (E1M8)
set_rule(world.get_entrance("Hub -> Hell's Maw (E1M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Hell's Maw (E1M8) Main", player), lambda state:
state.has("Hell's Maw (E1M8)", player, 1) and state.has("Hell's Maw (E1M8)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) state.has("Dragon Claw", player, 1))
# The Graveyard (E1M9) # The Graveyard (E1M9)
set_rule(world.get_entrance("Hub -> The Graveyard (E1M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Graveyard (E1M9) Main", player), lambda state:
state.has("The Graveyard (E1M9)", player, 1) and state.has("The Graveyard (E1M9)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) state.has("Dragon Claw", player, 1))
set_rule(world.get_entrance("The Graveyard (E1M9) Main -> The Graveyard (E1M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Graveyard (E1M9) Main -> The Graveyard (E1M9) Yellow", player), lambda state:
state.has("The Graveyard (E1M9) - Yellow key", player, 1)) state.has("The Graveyard (E1M9) - Yellow key", player, 1))
set_rule(world.get_entrance("The Graveyard (E1M9) Main -> The Graveyard (E1M9) Green", player), lambda state: set_rule(multiworld.get_entrance("The Graveyard (E1M9) Main -> The Graveyard (E1M9) Green", player), lambda state:
state.has("The Graveyard (E1M9) - Green key", player, 1)) state.has("The Graveyard (E1M9) - Green key", player, 1))
set_rule(world.get_entrance("The Graveyard (E1M9) Main -> The Graveyard (E1M9) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Graveyard (E1M9) Main -> The Graveyard (E1M9) Blue", player), lambda state:
state.has("The Graveyard (E1M9) - Blue key", player, 1)) state.has("The Graveyard (E1M9) - Blue key", player, 1))
set_rule(world.get_entrance("The Graveyard (E1M9) Yellow -> The Graveyard (E1M9) Main", player), lambda state: set_rule(multiworld.get_entrance("The Graveyard (E1M9) Yellow -> The Graveyard (E1M9) Main", player), lambda state:
state.has("The Graveyard (E1M9) - Yellow key", player, 1)) state.has("The Graveyard (E1M9) - Yellow key", player, 1))
set_rule(world.get_entrance("The Graveyard (E1M9) Green -> The Graveyard (E1M9) Main", player), lambda state: set_rule(multiworld.get_entrance("The Graveyard (E1M9) Green -> The Graveyard (E1M9) Main", player), lambda state:
state.has("The Graveyard (E1M9) - Green key", player, 1)) state.has("The Graveyard (E1M9) - Green key", player, 1))
def set_episode2_rules(player, world, pro): def set_episode2_rules(player, multiworld, pro):
# The Crater (E2M1) # The Crater (E2M1)
set_rule(world.get_entrance("Hub -> The Crater (E2M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Crater (E2M1) Main", player), lambda state:
state.has("The Crater (E2M1)", player, 1)) state.has("The Crater (E2M1)", player, 1))
set_rule(world.get_entrance("The Crater (E2M1) Main -> The Crater (E2M1) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Crater (E2M1) Main -> The Crater (E2M1) Yellow", player), lambda state:
state.has("The Crater (E2M1) - Yellow key", player, 1)) state.has("The Crater (E2M1) - Yellow key", player, 1))
set_rule(world.get_entrance("The Crater (E2M1) Yellow -> The Crater (E2M1) Green", player), lambda state: set_rule(multiworld.get_entrance("The Crater (E2M1) Yellow -> The Crater (E2M1) Green", player), lambda state:
state.has("The Crater (E2M1) - Green key", player, 1)) state.has("The Crater (E2M1) - Green key", player, 1))
set_rule(world.get_entrance("The Crater (E2M1) Green -> The Crater (E2M1) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Crater (E2M1) Green -> The Crater (E2M1) Yellow", player), lambda state:
state.has("The Crater (E2M1) - Green key", player, 1)) state.has("The Crater (E2M1) - Green key", player, 1))
# The Lava Pits (E2M2) # The Lava Pits (E2M2)
set_rule(world.get_entrance("Hub -> The Lava Pits (E2M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Lava Pits (E2M2) Main", player), lambda state:
(state.has("The Lava Pits (E2M2)", player, 1)) and (state.has("The Lava Pits (E2M2)", player, 1)) and
(state.has("Ethereal Crossbow", player, 1) or (state.has("Ethereal Crossbow", player, 1) or
state.has("Dragon Claw", player, 1))) state.has("Dragon Claw", player, 1)))
set_rule(world.get_entrance("The Lava Pits (E2M2) Main -> The Lava Pits (E2M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Lava Pits (E2M2) Main -> The Lava Pits (E2M2) Yellow", player), lambda state:
state.has("The Lava Pits (E2M2) - Yellow key", player, 1)) state.has("The Lava Pits (E2M2) - Yellow key", player, 1))
set_rule(world.get_entrance("The Lava Pits (E2M2) Yellow -> The Lava Pits (E2M2) Green", player), lambda state: set_rule(multiworld.get_entrance("The Lava Pits (E2M2) Yellow -> The Lava Pits (E2M2) Green", player), lambda state:
state.has("The Lava Pits (E2M2) - Green key", player, 1)) state.has("The Lava Pits (E2M2) - Green key", player, 1))
set_rule(world.get_entrance("The Lava Pits (E2M2) Yellow -> The Lava Pits (E2M2) Main", player), lambda state: set_rule(multiworld.get_entrance("The Lava Pits (E2M2) Yellow -> The Lava Pits (E2M2) Main", player), lambda state:
state.has("The Lava Pits (E2M2) - Yellow key", player, 1)) state.has("The Lava Pits (E2M2) - Yellow key", player, 1))
set_rule(world.get_entrance("The Lava Pits (E2M2) Green -> The Lava Pits (E2M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Lava Pits (E2M2) Green -> The Lava Pits (E2M2) Yellow", player), lambda state:
state.has("The Lava Pits (E2M2) - Green key", player, 1)) state.has("The Lava Pits (E2M2) - Green key", player, 1))
# The River of Fire (E2M3) # The River of Fire (E2M3)
set_rule(world.get_entrance("Hub -> The River of Fire (E2M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The River of Fire (E2M3) Main", player), lambda state:
state.has("The River of Fire (E2M3)", player, 1) and state.has("The River of Fire (E2M3)", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
state.has("Ethereal Crossbow", player, 1)) state.has("Ethereal Crossbow", player, 1))
set_rule(world.get_entrance("The River of Fire (E2M3) Main -> The River of Fire (E2M3) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The River of Fire (E2M3) Main -> The River of Fire (E2M3) Yellow", player), lambda state:
state.has("The River of Fire (E2M3) - Yellow key", player, 1)) state.has("The River of Fire (E2M3) - Yellow key", player, 1))
set_rule(world.get_entrance("The River of Fire (E2M3) Main -> The River of Fire (E2M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("The River of Fire (E2M3) Main -> The River of Fire (E2M3) Blue", player), lambda state:
state.has("The River of Fire (E2M3) - Blue key", player, 1)) state.has("The River of Fire (E2M3) - Blue key", player, 1))
set_rule(world.get_entrance("The River of Fire (E2M3) Main -> The River of Fire (E2M3) Green", player), lambda state: set_rule(multiworld.get_entrance("The River of Fire (E2M3) Main -> The River of Fire (E2M3) Green", player), lambda state:
state.has("The River of Fire (E2M3) - Green key", player, 1)) state.has("The River of Fire (E2M3) - Green key", player, 1))
set_rule(world.get_entrance("The River of Fire (E2M3) Blue -> The River of Fire (E2M3) Main", player), lambda state: set_rule(multiworld.get_entrance("The River of Fire (E2M3) Blue -> The River of Fire (E2M3) Main", player), lambda state:
state.has("The River of Fire (E2M3) - Blue key", player, 1)) state.has("The River of Fire (E2M3) - Blue key", player, 1))
set_rule(world.get_entrance("The River of Fire (E2M3) Yellow -> The River of Fire (E2M3) Main", player), lambda state: set_rule(multiworld.get_entrance("The River of Fire (E2M3) Yellow -> The River of Fire (E2M3) Main", player), lambda state:
state.has("The River of Fire (E2M3) - Yellow key", player, 1)) state.has("The River of Fire (E2M3) - Yellow key", player, 1))
set_rule(world.get_entrance("The River of Fire (E2M3) Green -> The River of Fire (E2M3) Main", player), lambda state: set_rule(multiworld.get_entrance("The River of Fire (E2M3) Green -> The River of Fire (E2M3) Main", player), lambda state:
state.has("The River of Fire (E2M3) - Green key", player, 1)) state.has("The River of Fire (E2M3) - Green key", player, 1))
# The Ice Grotto (E2M4) # The Ice Grotto (E2M4)
set_rule(world.get_entrance("Hub -> The Ice Grotto (E2M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Ice Grotto (E2M4) Main", player), lambda state:
(state.has("The Ice Grotto (E2M4)", player, 1) and (state.has("The Ice Grotto (E2M4)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) and state.has("Dragon Claw", player, 1)) and
(state.has("Hellstaff", player, 1) or (state.has("Hellstaff", player, 1) or
state.has("Firemace", player, 1))) state.has("Firemace", player, 1)))
set_rule(world.get_entrance("The Ice Grotto (E2M4) Main -> The Ice Grotto (E2M4) Green", player), lambda state: set_rule(multiworld.get_entrance("The Ice Grotto (E2M4) Main -> The Ice Grotto (E2M4) Green", player), lambda state:
state.has("The Ice Grotto (E2M4) - Green key", player, 1)) state.has("The Ice Grotto (E2M4) - Green key", player, 1))
set_rule(world.get_entrance("The Ice Grotto (E2M4) Main -> The Ice Grotto (E2M4) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Ice Grotto (E2M4) Main -> The Ice Grotto (E2M4) Yellow", player), lambda state:
state.has("The Ice Grotto (E2M4) - Yellow key", player, 1)) state.has("The Ice Grotto (E2M4) - Yellow key", player, 1))
set_rule(world.get_entrance("The Ice Grotto (E2M4) Blue -> The Ice Grotto (E2M4) Green", player), lambda state: set_rule(multiworld.get_entrance("The Ice Grotto (E2M4) Blue -> The Ice Grotto (E2M4) Green", player), lambda state:
state.has("The Ice Grotto (E2M4) - Blue key", player, 1)) state.has("The Ice Grotto (E2M4) - Blue key", player, 1))
set_rule(world.get_entrance("The Ice Grotto (E2M4) Yellow -> The Ice Grotto (E2M4) Magenta", player), lambda state: set_rule(multiworld.get_entrance("The Ice Grotto (E2M4) Yellow -> The Ice Grotto (E2M4) Magenta", player), lambda state:
state.has("The Ice Grotto (E2M4) - Green key", player, 1) and state.has("The Ice Grotto (E2M4) - Green key", player, 1) and
state.has("The Ice Grotto (E2M4) - Blue key", player, 1)) state.has("The Ice Grotto (E2M4) - Blue key", player, 1))
set_rule(world.get_entrance("The Ice Grotto (E2M4) Green -> The Ice Grotto (E2M4) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Ice Grotto (E2M4) Green -> The Ice Grotto (E2M4) Blue", player), lambda state:
state.has("The Ice Grotto (E2M4) - Blue key", player, 1)) state.has("The Ice Grotto (E2M4) - Blue key", player, 1))
# The Catacombs (E2M5) # The Catacombs (E2M5)
set_rule(world.get_entrance("Hub -> The Catacombs (E2M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Catacombs (E2M5) Main", player), lambda state:
(state.has("The Catacombs (E2M5)", player, 1) and (state.has("The Catacombs (E2M5)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -193,17 +193,17 @@ def set_episode2_rules(player, world, pro):
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Firemace", player, 1) or state.has("Firemace", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("The Catacombs (E2M5) Main -> The Catacombs (E2M5) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Catacombs (E2M5) Main -> The Catacombs (E2M5) Yellow", player), lambda state:
state.has("The Catacombs (E2M5) - Yellow key", player, 1)) state.has("The Catacombs (E2M5) - Yellow key", player, 1))
set_rule(world.get_entrance("The Catacombs (E2M5) Blue -> The Catacombs (E2M5) Green", player), lambda state: set_rule(multiworld.get_entrance("The Catacombs (E2M5) Blue -> The Catacombs (E2M5) Green", player), lambda state:
state.has("The Catacombs (E2M5) - Blue key", player, 1)) state.has("The Catacombs (E2M5) - Blue key", player, 1))
set_rule(world.get_entrance("The Catacombs (E2M5) Yellow -> The Catacombs (E2M5) Green", player), lambda state: set_rule(multiworld.get_entrance("The Catacombs (E2M5) Yellow -> The Catacombs (E2M5) Green", player), lambda state:
state.has("The Catacombs (E2M5) - Yellow key", player, 1)) state.has("The Catacombs (E2M5) - Green key", player, 1))
set_rule(world.get_entrance("The Catacombs (E2M5) Green -> The Catacombs (E2M5) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Catacombs (E2M5) Green -> The Catacombs (E2M5) Blue", player), lambda state:
state.has("The Catacombs (E2M5) - Blue key", player, 1)) state.has("The Catacombs (E2M5) - Blue key", player, 1))
# The Labyrinth (E2M6) # The Labyrinth (E2M6)
set_rule(world.get_entrance("Hub -> The Labyrinth (E2M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Labyrinth (E2M6) Main", player), lambda state:
(state.has("The Labyrinth (E2M6)", player, 1) and (state.has("The Labyrinth (E2M6)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -211,17 +211,17 @@ def set_episode2_rules(player, world, pro):
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Firemace", player, 1) or state.has("Firemace", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("The Labyrinth (E2M6) Main -> The Labyrinth (E2M6) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Labyrinth (E2M6) Main -> The Labyrinth (E2M6) Blue", player), lambda state:
state.has("The Labyrinth (E2M6) - Blue key", player, 1)) state.has("The Labyrinth (E2M6) - Blue key", player, 1))
set_rule(world.get_entrance("The Labyrinth (E2M6) Main -> The Labyrinth (E2M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Labyrinth (E2M6) Main -> The Labyrinth (E2M6) Yellow", player), lambda state:
state.has("The Labyrinth (E2M6) - Yellow key", player, 1)) state.has("The Labyrinth (E2M6) - Yellow key", player, 1))
set_rule(world.get_entrance("The Labyrinth (E2M6) Main -> The Labyrinth (E2M6) Green", player), lambda state: set_rule(multiworld.get_entrance("The Labyrinth (E2M6) Main -> The Labyrinth (E2M6) Green", player), lambda state:
state.has("The Labyrinth (E2M6) - Green key", player, 1)) state.has("The Labyrinth (E2M6) - Green key", player, 1))
set_rule(world.get_entrance("The Labyrinth (E2M6) Blue -> The Labyrinth (E2M6) Main", player), lambda state: set_rule(multiworld.get_entrance("The Labyrinth (E2M6) Blue -> The Labyrinth (E2M6) Main", player), lambda state:
state.has("The Labyrinth (E2M6) - Blue key", player, 1)) state.has("The Labyrinth (E2M6) - Blue key", player, 1))
# The Great Hall (E2M7) # The Great Hall (E2M7)
set_rule(world.get_entrance("Hub -> The Great Hall (E2M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Great Hall (E2M7) Main", player), lambda state:
(state.has("The Great Hall (E2M7)", player, 1) and (state.has("The Great Hall (E2M7)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -229,19 +229,19 @@ def set_episode2_rules(player, world, pro):
state.has("Firemace", player, 1)) and state.has("Firemace", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("The Great Hall (E2M7) Main -> The Great Hall (E2M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Great Hall (E2M7) Main -> The Great Hall (E2M7) Yellow", player), lambda state:
state.has("The Great Hall (E2M7) - Yellow key", player, 1)) state.has("The Great Hall (E2M7) - Yellow key", player, 1))
set_rule(world.get_entrance("The Great Hall (E2M7) Main -> The Great Hall (E2M7) Green", player), lambda state: set_rule(multiworld.get_entrance("The Great Hall (E2M7) Main -> The Great Hall (E2M7) Green", player), lambda state:
state.has("The Great Hall (E2M7) - Green key", player, 1)) state.has("The Great Hall (E2M7) - Green key", player, 1))
set_rule(world.get_entrance("The Great Hall (E2M7) Blue -> The Great Hall (E2M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Great Hall (E2M7) Blue -> The Great Hall (E2M7) Yellow", player), lambda state:
state.has("The Great Hall (E2M7) - Blue key", player, 1)) state.has("The Great Hall (E2M7) - Blue key", player, 1))
set_rule(world.get_entrance("The Great Hall (E2M7) Yellow -> The Great Hall (E2M7) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Great Hall (E2M7) Yellow -> The Great Hall (E2M7) Blue", player), lambda state:
state.has("The Great Hall (E2M7) - Blue key", player, 1)) state.has("The Great Hall (E2M7) - Blue key", player, 1))
set_rule(world.get_entrance("The Great Hall (E2M7) Yellow -> The Great Hall (E2M7) Main", player), lambda state: set_rule(multiworld.get_entrance("The Great Hall (E2M7) Yellow -> The Great Hall (E2M7) Main", player), lambda state:
state.has("The Great Hall (E2M7) - Yellow key", player, 1)) state.has("The Great Hall (E2M7) - Yellow key", player, 1))
# The Portals of Chaos (E2M8) # The Portals of Chaos (E2M8)
set_rule(world.get_entrance("Hub -> The Portals of Chaos (E2M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Portals of Chaos (E2M8) Main", player), lambda state:
state.has("The Portals of Chaos (E2M8)", player, 1) and state.has("The Portals of Chaos (E2M8)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -251,7 +251,7 @@ def set_episode2_rules(player, world, pro):
state.has("Hellstaff", player, 1)) state.has("Hellstaff", player, 1))
# The Glacier (E2M9) # The Glacier (E2M9)
set_rule(world.get_entrance("Hub -> The Glacier (E2M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Glacier (E2M9) Main", player), lambda state:
(state.has("The Glacier (E2M9)", player, 1) and (state.has("The Glacier (E2M9)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -259,51 +259,51 @@ def set_episode2_rules(player, world, pro):
state.has("Firemace", player, 1)) and state.has("Firemace", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("The Glacier (E2M9) Main -> The Glacier (E2M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Glacier (E2M9) Main -> The Glacier (E2M9) Yellow", player), lambda state:
state.has("The Glacier (E2M9) - Yellow key", player, 1)) state.has("The Glacier (E2M9) - Yellow key", player, 1))
set_rule(world.get_entrance("The Glacier (E2M9) Main -> The Glacier (E2M9) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Glacier (E2M9) Main -> The Glacier (E2M9) Blue", player), lambda state:
state.has("The Glacier (E2M9) - Blue key", player, 1)) state.has("The Glacier (E2M9) - Blue key", player, 1))
set_rule(world.get_entrance("The Glacier (E2M9) Main -> The Glacier (E2M9) Green", player), lambda state: set_rule(multiworld.get_entrance("The Glacier (E2M9) Main -> The Glacier (E2M9) Green", player), lambda state:
state.has("The Glacier (E2M9) - Green key", player, 1)) state.has("The Glacier (E2M9) - Green key", player, 1))
set_rule(world.get_entrance("The Glacier (E2M9) Blue -> The Glacier (E2M9) Main", player), lambda state: set_rule(multiworld.get_entrance("The Glacier (E2M9) Blue -> The Glacier (E2M9) Main", player), lambda state:
state.has("The Glacier (E2M9) - Blue key", player, 1)) state.has("The Glacier (E2M9) - Blue key", player, 1))
set_rule(world.get_entrance("The Glacier (E2M9) Yellow -> The Glacier (E2M9) Main", player), lambda state: set_rule(multiworld.get_entrance("The Glacier (E2M9) Yellow -> The Glacier (E2M9) Main", player), lambda state:
state.has("The Glacier (E2M9) - Yellow key", player, 1)) state.has("The Glacier (E2M9) - Yellow key", player, 1))
def set_episode3_rules(player, world, pro): def set_episode3_rules(player, multiworld, pro):
# The Storehouse (E3M1) # The Storehouse (E3M1)
set_rule(world.get_entrance("Hub -> The Storehouse (E3M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Storehouse (E3M1) Main", player), lambda state:
state.has("The Storehouse (E3M1)", player, 1)) state.has("The Storehouse (E3M1)", player, 1))
set_rule(world.get_entrance("The Storehouse (E3M1) Main -> The Storehouse (E3M1) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Storehouse (E3M1) Main -> The Storehouse (E3M1) Yellow", player), lambda state:
state.has("The Storehouse (E3M1) - Yellow key", player, 1)) state.has("The Storehouse (E3M1) - Yellow key", player, 1))
set_rule(world.get_entrance("The Storehouse (E3M1) Main -> The Storehouse (E3M1) Green", player), lambda state: set_rule(multiworld.get_entrance("The Storehouse (E3M1) Main -> The Storehouse (E3M1) Green", player), lambda state:
state.has("The Storehouse (E3M1) - Green key", player, 1)) state.has("The Storehouse (E3M1) - Green key", player, 1))
set_rule(world.get_entrance("The Storehouse (E3M1) Yellow -> The Storehouse (E3M1) Main", player), lambda state: set_rule(multiworld.get_entrance("The Storehouse (E3M1) Yellow -> The Storehouse (E3M1) Main", player), lambda state:
state.has("The Storehouse (E3M1) - Yellow key", player, 1)) state.has("The Storehouse (E3M1) - Yellow key", player, 1))
set_rule(world.get_entrance("The Storehouse (E3M1) Green -> The Storehouse (E3M1) Main", player), lambda state: set_rule(multiworld.get_entrance("The Storehouse (E3M1) Green -> The Storehouse (E3M1) Main", player), lambda state:
state.has("The Storehouse (E3M1) - Green key", player, 1)) state.has("The Storehouse (E3M1) - Green key", player, 1))
# The Cesspool (E3M2) # The Cesspool (E3M2)
set_rule(world.get_entrance("Hub -> The Cesspool (E3M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Cesspool (E3M2) Main", player), lambda state:
state.has("The Cesspool (E3M2)", player, 1) and state.has("The Cesspool (E3M2)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
state.has("Firemace", player, 1) and state.has("Firemace", player, 1) and
state.has("Hellstaff", player, 1)) state.has("Hellstaff", player, 1))
set_rule(world.get_entrance("The Cesspool (E3M2) Main -> The Cesspool (E3M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Cesspool (E3M2) Main -> The Cesspool (E3M2) Yellow", player), lambda state:
state.has("The Cesspool (E3M2) - Yellow key", player, 1)) state.has("The Cesspool (E3M2) - Yellow key", player, 1))
set_rule(world.get_entrance("The Cesspool (E3M2) Blue -> The Cesspool (E3M2) Green", player), lambda state: set_rule(multiworld.get_entrance("The Cesspool (E3M2) Blue -> The Cesspool (E3M2) Green", player), lambda state:
state.has("The Cesspool (E3M2) - Blue key", player, 1)) state.has("The Cesspool (E3M2) - Blue key", player, 1))
set_rule(world.get_entrance("The Cesspool (E3M2) Yellow -> The Cesspool (E3M2) Green", player), lambda state: set_rule(multiworld.get_entrance("The Cesspool (E3M2) Yellow -> The Cesspool (E3M2) Green", player), lambda state:
state.has("The Cesspool (E3M2) - Green key", player, 1)) state.has("The Cesspool (E3M2) - Green key", player, 1))
set_rule(world.get_entrance("The Cesspool (E3M2) Green -> The Cesspool (E3M2) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Cesspool (E3M2) Green -> The Cesspool (E3M2) Blue", player), lambda state:
state.has("The Cesspool (E3M2) - Blue key", player, 1)) state.has("The Cesspool (E3M2) - Blue key", player, 1))
set_rule(world.get_entrance("The Cesspool (E3M2) Green -> The Cesspool (E3M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Cesspool (E3M2) Green -> The Cesspool (E3M2) Yellow", player), lambda state:
state.has("The Cesspool (E3M2) - Green key", player, 1)) state.has("The Cesspool (E3M2) - Green key", player, 1))
# The Confluence (E3M3) # The Confluence (E3M3)
set_rule(world.get_entrance("Hub -> The Confluence (E3M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Confluence (E3M3) Main", player), lambda state:
(state.has("The Confluence (E3M3)", player, 1) and (state.has("The Confluence (E3M3)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) and state.has("Dragon Claw", player, 1)) and
@ -311,19 +311,19 @@ def set_episode3_rules(player, world, pro):
state.has("Phoenix Rod", player, 1) or state.has("Phoenix Rod", player, 1) or
state.has("Firemace", player, 1) or state.has("Firemace", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("The Confluence (E3M3) Main -> The Confluence (E3M3) Green", player), lambda state: set_rule(multiworld.get_entrance("The Confluence (E3M3) Main -> The Confluence (E3M3) Green", player), lambda state:
state.has("The Confluence (E3M3) - Green key", player, 1)) state.has("The Confluence (E3M3) - Green key", player, 1))
set_rule(world.get_entrance("The Confluence (E3M3) Main -> The Confluence (E3M3) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Confluence (E3M3) Main -> The Confluence (E3M3) Yellow", player), lambda state:
state.has("The Confluence (E3M3) - Yellow key", player, 1)) state.has("The Confluence (E3M3) - Yellow key", player, 1))
set_rule(world.get_entrance("The Confluence (E3M3) Blue -> The Confluence (E3M3) Green", player), lambda state: set_rule(multiworld.get_entrance("The Confluence (E3M3) Blue -> The Confluence (E3M3) Green", player), lambda state:
state.has("The Confluence (E3M3) - Blue key", player, 1)) state.has("The Confluence (E3M3) - Blue key", player, 1))
set_rule(world.get_entrance("The Confluence (E3M3) Green -> The Confluence (E3M3) Main", player), lambda state: set_rule(multiworld.get_entrance("The Confluence (E3M3) Green -> The Confluence (E3M3) Main", player), lambda state:
state.has("The Confluence (E3M3) - Green key", player, 1)) state.has("The Confluence (E3M3) - Green key", player, 1))
set_rule(world.get_entrance("The Confluence (E3M3) Green -> The Confluence (E3M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Confluence (E3M3) Green -> The Confluence (E3M3) Blue", player), lambda state:
state.has("The Confluence (E3M3) - Blue key", player, 1)) state.has("The Confluence (E3M3) - Blue key", player, 1))
# The Azure Fortress (E3M4) # The Azure Fortress (E3M4)
set_rule(world.get_entrance("Hub -> The Azure Fortress (E3M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Azure Fortress (E3M4) Main", player), lambda state:
(state.has("The Azure Fortress (E3M4)", player, 1) and (state.has("The Azure Fortress (E3M4)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
@ -331,13 +331,13 @@ def set_episode3_rules(player, world, pro):
(state.has("Firemace", player, 1) or (state.has("Firemace", player, 1) or
state.has("Phoenix Rod", player, 1) or state.has("Phoenix Rod", player, 1) or
state.has("Gauntlets of the Necromancer", player, 1))) state.has("Gauntlets of the Necromancer", player, 1)))
set_rule(world.get_entrance("The Azure Fortress (E3M4) Main -> The Azure Fortress (E3M4) Green", player), lambda state: set_rule(multiworld.get_entrance("The Azure Fortress (E3M4) Main -> The Azure Fortress (E3M4) Green", player), lambda state:
state.has("The Azure Fortress (E3M4) - Green key", player, 1)) state.has("The Azure Fortress (E3M4) - Green key", player, 1))
set_rule(world.get_entrance("The Azure Fortress (E3M4) Main -> The Azure Fortress (E3M4) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Azure Fortress (E3M4) Main -> The Azure Fortress (E3M4) Yellow", player), lambda state:
state.has("The Azure Fortress (E3M4) - Yellow key", player, 1)) state.has("The Azure Fortress (E3M4) - Yellow key", player, 1))
# The Ophidian Lair (E3M5) # The Ophidian Lair (E3M5)
set_rule(world.get_entrance("Hub -> The Ophidian Lair (E3M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Ophidian Lair (E3M5) Main", player), lambda state:
(state.has("The Ophidian Lair (E3M5)", player, 1) and (state.has("The Ophidian Lair (E3M5)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
@ -345,13 +345,13 @@ def set_episode3_rules(player, world, pro):
(state.has("Gauntlets of the Necromancer", player, 1) or (state.has("Gauntlets of the Necromancer", player, 1) or
state.has("Phoenix Rod", player, 1) or state.has("Phoenix Rod", player, 1) or
state.has("Firemace", player, 1))) state.has("Firemace", player, 1)))
set_rule(world.get_entrance("The Ophidian Lair (E3M5) Main -> The Ophidian Lair (E3M5) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Ophidian Lair (E3M5) Main -> The Ophidian Lair (E3M5) Yellow", player), lambda state:
state.has("The Ophidian Lair (E3M5) - Yellow key", player, 1)) state.has("The Ophidian Lair (E3M5) - Yellow key", player, 1))
set_rule(world.get_entrance("The Ophidian Lair (E3M5) Main -> The Ophidian Lair (E3M5) Green", player), lambda state: set_rule(multiworld.get_entrance("The Ophidian Lair (E3M5) Main -> The Ophidian Lair (E3M5) Green", player), lambda state:
state.has("The Ophidian Lair (E3M5) - Green key", player, 1)) state.has("The Ophidian Lair (E3M5) - Green key", player, 1))
# The Halls of Fear (E3M6) # The Halls of Fear (E3M6)
set_rule(world.get_entrance("Hub -> The Halls of Fear (E3M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Halls of Fear (E3M6) Main", player), lambda state:
(state.has("The Halls of Fear (E3M6)", player, 1) and (state.has("The Halls of Fear (E3M6)", player, 1) and
state.has("Firemace", player, 1) and state.has("Firemace", player, 1) and
state.has("Hellstaff", player, 1) and state.has("Hellstaff", player, 1) and
@ -359,17 +359,17 @@ def set_episode3_rules(player, world, pro):
state.has("Ethereal Crossbow", player, 1)) and state.has("Ethereal Crossbow", player, 1)) and
(state.has("Gauntlets of the Necromancer", player, 1) or (state.has("Gauntlets of the Necromancer", player, 1) or
state.has("Phoenix Rod", player, 1))) state.has("Phoenix Rod", player, 1)))
set_rule(world.get_entrance("The Halls of Fear (E3M6) Main -> The Halls of Fear (E3M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Halls of Fear (E3M6) Main -> The Halls of Fear (E3M6) Yellow", player), lambda state:
state.has("The Halls of Fear (E3M6) - Yellow key", player, 1)) state.has("The Halls of Fear (E3M6) - Yellow key", player, 1))
set_rule(world.get_entrance("The Halls of Fear (E3M6) Blue -> The Halls of Fear (E3M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Halls of Fear (E3M6) Blue -> The Halls of Fear (E3M6) Yellow", player), lambda state:
state.has("The Halls of Fear (E3M6) - Blue key", player, 1)) state.has("The Halls of Fear (E3M6) - Blue key", player, 1))
set_rule(world.get_entrance("The Halls of Fear (E3M6) Yellow -> The Halls of Fear (E3M6) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Halls of Fear (E3M6) Yellow -> The Halls of Fear (E3M6) Blue", player), lambda state:
state.has("The Halls of Fear (E3M6) - Blue key", player, 1)) state.has("The Halls of Fear (E3M6) - Blue key", player, 1))
set_rule(world.get_entrance("The Halls of Fear (E3M6) Yellow -> The Halls of Fear (E3M6) Green", player), lambda state: set_rule(multiworld.get_entrance("The Halls of Fear (E3M6) Yellow -> The Halls of Fear (E3M6) Green", player), lambda state:
state.has("The Halls of Fear (E3M6) - Green key", player, 1)) state.has("The Halls of Fear (E3M6) - Green key", player, 1))
# The Chasm (E3M7) # The Chasm (E3M7)
set_rule(world.get_entrance("Hub -> The Chasm (E3M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Chasm (E3M7) Main", player), lambda state:
(state.has("The Chasm (E3M7)", player, 1) and (state.has("The Chasm (E3M7)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
@ -377,19 +377,19 @@ def set_episode3_rules(player, world, pro):
state.has("Hellstaff", player, 1)) and state.has("Hellstaff", player, 1)) and
(state.has("Gauntlets of the Necromancer", player, 1) or (state.has("Gauntlets of the Necromancer", player, 1) or
state.has("Phoenix Rod", player, 1))) state.has("Phoenix Rod", player, 1)))
set_rule(world.get_entrance("The Chasm (E3M7) Main -> The Chasm (E3M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Chasm (E3M7) Main -> The Chasm (E3M7) Yellow", player), lambda state:
state.has("The Chasm (E3M7) - Yellow key", player, 1)) state.has("The Chasm (E3M7) - Yellow key", player, 1))
set_rule(world.get_entrance("The Chasm (E3M7) Yellow -> The Chasm (E3M7) Main", player), lambda state: set_rule(multiworld.get_entrance("The Chasm (E3M7) Yellow -> The Chasm (E3M7) Main", player), lambda state:
state.has("The Chasm (E3M7) - Yellow key", player, 1)) state.has("The Chasm (E3M7) - Yellow key", player, 1))
set_rule(world.get_entrance("The Chasm (E3M7) Yellow -> The Chasm (E3M7) Green", player), lambda state: set_rule(multiworld.get_entrance("The Chasm (E3M7) Yellow -> The Chasm (E3M7) Green", player), lambda state:
state.has("The Chasm (E3M7) - Green key", player, 1)) state.has("The Chasm (E3M7) - Green key", player, 1))
set_rule(world.get_entrance("The Chasm (E3M7) Yellow -> The Chasm (E3M7) Blue", player), lambda state: set_rule(multiworld.get_entrance("The Chasm (E3M7) Yellow -> The Chasm (E3M7) Blue", player), lambda state:
state.has("The Chasm (E3M7) - Blue key", player, 1)) state.has("The Chasm (E3M7) - Blue key", player, 1))
set_rule(world.get_entrance("The Chasm (E3M7) Green -> The Chasm (E3M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Chasm (E3M7) Green -> The Chasm (E3M7) Yellow", player), lambda state:
state.has("The Chasm (E3M7) - Green key", player, 1)) state.has("The Chasm (E3M7) - Green key", player, 1))
# D'Sparil'S Keep (E3M8) # D'Sparil'S Keep (E3M8)
set_rule(world.get_entrance("Hub -> D'Sparil'S Keep (E3M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> D'Sparil'S Keep (E3M8) Main", player), lambda state:
state.has("D'Sparil'S Keep (E3M8)", player, 1) and state.has("D'Sparil'S Keep (E3M8)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -399,7 +399,7 @@ def set_episode3_rules(player, world, pro):
state.has("Hellstaff", player, 1)) state.has("Hellstaff", player, 1))
# The Aquifier (E3M9) # The Aquifier (E3M9)
set_rule(world.get_entrance("Hub -> The Aquifier (E3M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> The Aquifier (E3M9) Main", player), lambda state:
state.has("The Aquifier (E3M9)", player, 1) and state.has("The Aquifier (E3M9)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -407,23 +407,23 @@ def set_episode3_rules(player, world, pro):
state.has("Phoenix Rod", player, 1) and state.has("Phoenix Rod", player, 1) and
state.has("Firemace", player, 1) and state.has("Firemace", player, 1) and
state.has("Hellstaff", player, 1)) state.has("Hellstaff", player, 1))
set_rule(world.get_entrance("The Aquifier (E3M9) Main -> The Aquifier (E3M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Aquifier (E3M9) Main -> The Aquifier (E3M9) Yellow", player), lambda state:
state.has("The Aquifier (E3M9) - Yellow key", player, 1)) state.has("The Aquifier (E3M9) - Yellow key", player, 1))
set_rule(world.get_entrance("The Aquifier (E3M9) Yellow -> The Aquifier (E3M9) Green", player), lambda state: set_rule(multiworld.get_entrance("The Aquifier (E3M9) Yellow -> The Aquifier (E3M9) Green", player), lambda state:
state.has("The Aquifier (E3M9) - Green key", player, 1)) state.has("The Aquifier (E3M9) - Green key", player, 1))
set_rule(world.get_entrance("The Aquifier (E3M9) Yellow -> The Aquifier (E3M9) Main", player), lambda state: set_rule(multiworld.get_entrance("The Aquifier (E3M9) Yellow -> The Aquifier (E3M9) Main", player), lambda state:
state.has("The Aquifier (E3M9) - Yellow key", player, 1)) state.has("The Aquifier (E3M9) - Yellow key", player, 1))
set_rule(world.get_entrance("The Aquifier (E3M9) Green -> The Aquifier (E3M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("The Aquifier (E3M9) Green -> The Aquifier (E3M9) Yellow", player), lambda state:
state.has("The Aquifier (E3M9) - Green key", player, 1)) state.has("The Aquifier (E3M9) - Green key", player, 1))
def set_episode4_rules(player, world, pro): def set_episode4_rules(player, multiworld, pro):
# Catafalque (E4M1) # Catafalque (E4M1)
set_rule(world.get_entrance("Hub -> Catafalque (E4M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Catafalque (E4M1) Main", player), lambda state:
state.has("Catafalque (E4M1)", player, 1)) state.has("Catafalque (E4M1)", player, 1))
set_rule(world.get_entrance("Catafalque (E4M1) Main -> Catafalque (E4M1) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Catafalque (E4M1) Main -> Catafalque (E4M1) Yellow", player), lambda state:
state.has("Catafalque (E4M1) - Yellow key", player, 1)) state.has("Catafalque (E4M1) - Yellow key", player, 1))
set_rule(world.get_entrance("Catafalque (E4M1) Yellow -> Catafalque (E4M1) Green", player), lambda state: set_rule(multiworld.get_entrance("Catafalque (E4M1) Yellow -> Catafalque (E4M1) Green", player), lambda state:
(state.has("Catafalque (E4M1) - Green key", player, 1)) and (state.has("Ethereal Crossbow", player, 1) or (state.has("Catafalque (E4M1) - Green key", player, 1)) and (state.has("Ethereal Crossbow", player, 1) or
state.has("Dragon Claw", player, 1) or state.has("Dragon Claw", player, 1) or
state.has("Phoenix Rod", player, 1) or state.has("Phoenix Rod", player, 1) or
@ -431,23 +431,23 @@ def set_episode4_rules(player, world, pro):
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
# Blockhouse (E4M2) # Blockhouse (E4M2)
set_rule(world.get_entrance("Hub -> Blockhouse (E4M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Blockhouse (E4M2) Main", player), lambda state:
state.has("Blockhouse (E4M2)", player, 1) and state.has("Blockhouse (E4M2)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) state.has("Dragon Claw", player, 1))
set_rule(world.get_entrance("Blockhouse (E4M2) Main -> Blockhouse (E4M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Blockhouse (E4M2) Main -> Blockhouse (E4M2) Yellow", player), lambda state:
state.has("Blockhouse (E4M2) - Yellow key", player, 1)) state.has("Blockhouse (E4M2) - Yellow key", player, 1))
set_rule(world.get_entrance("Blockhouse (E4M2) Main -> Blockhouse (E4M2) Green", player), lambda state: set_rule(multiworld.get_entrance("Blockhouse (E4M2) Main -> Blockhouse (E4M2) Green", player), lambda state:
state.has("Blockhouse (E4M2) - Green key", player, 1)) state.has("Blockhouse (E4M2) - Green key", player, 1))
set_rule(world.get_entrance("Blockhouse (E4M2) Main -> Blockhouse (E4M2) Blue", player), lambda state: set_rule(multiworld.get_entrance("Blockhouse (E4M2) Main -> Blockhouse (E4M2) Blue", player), lambda state:
state.has("Blockhouse (E4M2) - Blue key", player, 1)) state.has("Blockhouse (E4M2) - Blue key", player, 1))
set_rule(world.get_entrance("Blockhouse (E4M2) Green -> Blockhouse (E4M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Blockhouse (E4M2) Green -> Blockhouse (E4M2) Main", player), lambda state:
state.has("Blockhouse (E4M2) - Green key", player, 1)) state.has("Blockhouse (E4M2) - Green key", player, 1))
set_rule(world.get_entrance("Blockhouse (E4M2) Blue -> Blockhouse (E4M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Blockhouse (E4M2) Blue -> Blockhouse (E4M2) Main", player), lambda state:
state.has("Blockhouse (E4M2) - Blue key", player, 1)) state.has("Blockhouse (E4M2) - Blue key", player, 1))
# Ambulatory (E4M3) # Ambulatory (E4M3)
set_rule(world.get_entrance("Hub -> Ambulatory (E4M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Ambulatory (E4M3) Main", player), lambda state:
(state.has("Ambulatory (E4M3)", player, 1) and (state.has("Ambulatory (E4M3)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
@ -455,15 +455,17 @@ def set_episode4_rules(player, world, pro):
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Firemace", player, 1) or state.has("Firemace", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("Ambulatory (E4M3) Main -> Ambulatory (E4M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("Ambulatory (E4M3) Main -> Ambulatory (E4M3) Blue", player), lambda state:
state.has("Ambulatory (E4M3) - Blue key", player, 1)) state.has("Ambulatory (E4M3) - Blue key", player, 1))
set_rule(world.get_entrance("Ambulatory (E4M3) Main -> Ambulatory (E4M3) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Ambulatory (E4M3) Main -> Ambulatory (E4M3) Yellow", player), lambda state:
state.has("Ambulatory (E4M3) - Yellow key", player, 1)) state.has("Ambulatory (E4M3) - Yellow key", player, 1))
set_rule(world.get_entrance("Ambulatory (E4M3) Main -> Ambulatory (E4M3) Green", player), lambda state: set_rule(multiworld.get_entrance("Ambulatory (E4M3) Main -> Ambulatory (E4M3) Green", player), lambda state:
state.has("Ambulatory (E4M3) - Green key", player, 1))
set_rule(multiworld.get_entrance("Ambulatory (E4M3) Main -> Ambulatory (E4M3) Green Lock", player), lambda state:
state.has("Ambulatory (E4M3) - Green key", player, 1)) state.has("Ambulatory (E4M3) - Green key", player, 1))
# Sepulcher (E4M4) # Sepulcher (E4M4)
set_rule(world.get_entrance("Hub -> Sepulcher (E4M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Sepulcher (E4M4) Main", player), lambda state:
(state.has("Sepulcher (E4M4)", player, 1) and (state.has("Sepulcher (E4M4)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
@ -473,7 +475,7 @@ def set_episode4_rules(player, world, pro):
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
# Great Stair (E4M5) # Great Stair (E4M5)
set_rule(world.get_entrance("Hub -> Great Stair (E4M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Great Stair (E4M5) Main", player), lambda state:
(state.has("Great Stair (E4M5)", player, 1) and (state.has("Great Stair (E4M5)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -481,19 +483,19 @@ def set_episode4_rules(player, world, pro):
state.has("Firemace", player, 1)) and state.has("Firemace", player, 1)) and
(state.has("Hellstaff", player, 1) or (state.has("Hellstaff", player, 1) or
state.has("Phoenix Rod", player, 1))) state.has("Phoenix Rod", player, 1)))
set_rule(world.get_entrance("Great Stair (E4M5) Main -> Great Stair (E4M5) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Great Stair (E4M5) Main -> Great Stair (E4M5) Yellow", player), lambda state:
state.has("Great Stair (E4M5) - Yellow key", player, 1)) state.has("Great Stair (E4M5) - Yellow key", player, 1))
set_rule(world.get_entrance("Great Stair (E4M5) Blue -> Great Stair (E4M5) Green", player), lambda state: set_rule(multiworld.get_entrance("Great Stair (E4M5) Blue -> Great Stair (E4M5) Green", player), lambda state:
state.has("Great Stair (E4M5) - Blue key", player, 1)) state.has("Great Stair (E4M5) - Blue key", player, 1))
set_rule(world.get_entrance("Great Stair (E4M5) Yellow -> Great Stair (E4M5) Green", player), lambda state: set_rule(multiworld.get_entrance("Great Stair (E4M5) Yellow -> Great Stair (E4M5) Green", player), lambda state:
state.has("Great Stair (E4M5) - Green key", player, 1)) state.has("Great Stair (E4M5) - Green key", player, 1))
set_rule(world.get_entrance("Great Stair (E4M5) Green -> Great Stair (E4M5) Blue", player), lambda state: set_rule(multiworld.get_entrance("Great Stair (E4M5) Green -> Great Stair (E4M5) Blue", player), lambda state:
state.has("Great Stair (E4M5) - Blue key", player, 1)) state.has("Great Stair (E4M5) - Blue key", player, 1))
set_rule(world.get_entrance("Great Stair (E4M5) Green -> Great Stair (E4M5) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Great Stair (E4M5) Green -> Great Stair (E4M5) Yellow", player), lambda state:
state.has("Great Stair (E4M5) - Green key", player, 1)) state.has("Great Stair (E4M5) - Green key", player, 1))
# Halls of the Apostate (E4M6) # Halls of the Apostate (E4M6)
set_rule(world.get_entrance("Hub -> Halls of the Apostate (E4M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Halls of the Apostate (E4M6) Main", player), lambda state:
(state.has("Halls of the Apostate (E4M6)", player, 1) and (state.has("Halls of the Apostate (E4M6)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -501,19 +503,19 @@ def set_episode4_rules(player, world, pro):
state.has("Firemace", player, 1)) and state.has("Firemace", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("Halls of the Apostate (E4M6) Main -> Halls of the Apostate (E4M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Halls of the Apostate (E4M6) Main -> Halls of the Apostate (E4M6) Yellow", player), lambda state:
state.has("Halls of the Apostate (E4M6) - Yellow key", player, 1)) state.has("Halls of the Apostate (E4M6) - Yellow key", player, 1))
set_rule(world.get_entrance("Halls of the Apostate (E4M6) Blue -> Halls of the Apostate (E4M6) Green", player), lambda state: set_rule(multiworld.get_entrance("Halls of the Apostate (E4M6) Blue -> Halls of the Apostate (E4M6) Green", player), lambda state:
state.has("Halls of the Apostate (E4M6) - Blue key", player, 1)) state.has("Halls of the Apostate (E4M6) - Blue key", player, 1))
set_rule(world.get_entrance("Halls of the Apostate (E4M6) Yellow -> Halls of the Apostate (E4M6) Green", player), lambda state: set_rule(multiworld.get_entrance("Halls of the Apostate (E4M6) Yellow -> Halls of the Apostate (E4M6) Green", player), lambda state:
state.has("Halls of the Apostate (E4M6) - Green key", player, 1)) state.has("Halls of the Apostate (E4M6) - Green key", player, 1))
set_rule(world.get_entrance("Halls of the Apostate (E4M6) Green -> Halls of the Apostate (E4M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Halls of the Apostate (E4M6) Green -> Halls of the Apostate (E4M6) Yellow", player), lambda state:
state.has("Halls of the Apostate (E4M6) - Green key", player, 1)) state.has("Halls of the Apostate (E4M6) - Green key", player, 1))
set_rule(world.get_entrance("Halls of the Apostate (E4M6) Green -> Halls of the Apostate (E4M6) Blue", player), lambda state: set_rule(multiworld.get_entrance("Halls of the Apostate (E4M6) Green -> Halls of the Apostate (E4M6) Blue", player), lambda state:
state.has("Halls of the Apostate (E4M6) - Blue key", player, 1)) state.has("Halls of the Apostate (E4M6) - Blue key", player, 1))
# Ramparts of Perdition (E4M7) # Ramparts of Perdition (E4M7)
set_rule(world.get_entrance("Hub -> Ramparts of Perdition (E4M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Ramparts of Perdition (E4M7) Main", player), lambda state:
(state.has("Ramparts of Perdition (E4M7)", player, 1) and (state.has("Ramparts of Perdition (E4M7)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -521,21 +523,21 @@ def set_episode4_rules(player, world, pro):
state.has("Firemace", player, 1)) and state.has("Firemace", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("Ramparts of Perdition (E4M7) Main -> Ramparts of Perdition (E4M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Ramparts of Perdition (E4M7) Main -> Ramparts of Perdition (E4M7) Yellow", player), lambda state:
state.has("Ramparts of Perdition (E4M7) - Yellow key", player, 1)) state.has("Ramparts of Perdition (E4M7) - Yellow key", player, 1))
set_rule(world.get_entrance("Ramparts of Perdition (E4M7) Blue -> Ramparts of Perdition (E4M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Ramparts of Perdition (E4M7) Blue -> Ramparts of Perdition (E4M7) Yellow", player), lambda state:
state.has("Ramparts of Perdition (E4M7) - Blue key", player, 1)) state.has("Ramparts of Perdition (E4M7) - Blue key", player, 1))
set_rule(world.get_entrance("Ramparts of Perdition (E4M7) Yellow -> Ramparts of Perdition (E4M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Ramparts of Perdition (E4M7) Yellow -> Ramparts of Perdition (E4M7) Main", player), lambda state:
state.has("Ramparts of Perdition (E4M7) - Yellow key", player, 1)) state.has("Ramparts of Perdition (E4M7) - Yellow key", player, 1))
set_rule(world.get_entrance("Ramparts of Perdition (E4M7) Yellow -> Ramparts of Perdition (E4M7) Green", player), lambda state: set_rule(multiworld.get_entrance("Ramparts of Perdition (E4M7) Yellow -> Ramparts of Perdition (E4M7) Green", player), lambda state:
state.has("Ramparts of Perdition (E4M7) - Green key", player, 1)) state.has("Ramparts of Perdition (E4M7) - Green key", player, 1))
set_rule(world.get_entrance("Ramparts of Perdition (E4M7) Yellow -> Ramparts of Perdition (E4M7) Blue", player), lambda state: set_rule(multiworld.get_entrance("Ramparts of Perdition (E4M7) Yellow -> Ramparts of Perdition (E4M7) Blue", player), lambda state:
state.has("Ramparts of Perdition (E4M7) - Blue key", player, 1)) state.has("Ramparts of Perdition (E4M7) - Blue key", player, 1))
set_rule(world.get_entrance("Ramparts of Perdition (E4M7) Green -> Ramparts of Perdition (E4M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Ramparts of Perdition (E4M7) Green -> Ramparts of Perdition (E4M7) Yellow", player), lambda state:
state.has("Ramparts of Perdition (E4M7) - Green key", player, 1)) state.has("Ramparts of Perdition (E4M7) - Green key", player, 1))
# Shattered Bridge (E4M8) # Shattered Bridge (E4M8)
set_rule(world.get_entrance("Hub -> Shattered Bridge (E4M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Shattered Bridge (E4M8) Main", player), lambda state:
state.has("Shattered Bridge (E4M8)", player, 1) and state.has("Shattered Bridge (E4M8)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -543,13 +545,13 @@ def set_episode4_rules(player, world, pro):
state.has("Phoenix Rod", player, 1) and state.has("Phoenix Rod", player, 1) and
state.has("Firemace", player, 1) and state.has("Firemace", player, 1) and
state.has("Hellstaff", player, 1)) state.has("Hellstaff", player, 1))
set_rule(world.get_entrance("Shattered Bridge (E4M8) Main -> Shattered Bridge (E4M8) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Shattered Bridge (E4M8) Main -> Shattered Bridge (E4M8) Yellow", player), lambda state:
state.has("Shattered Bridge (E4M8) - Yellow key", player, 1)) state.has("Shattered Bridge (E4M8) - Yellow key", player, 1))
set_rule(world.get_entrance("Shattered Bridge (E4M8) Yellow -> Shattered Bridge (E4M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Shattered Bridge (E4M8) Yellow -> Shattered Bridge (E4M8) Main", player), lambda state:
state.has("Shattered Bridge (E4M8) - Yellow key", player, 1)) state.has("Shattered Bridge (E4M8) - Yellow key", player, 1))
# Mausoleum (E4M9) # Mausoleum (E4M9)
set_rule(world.get_entrance("Hub -> Mausoleum (E4M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Mausoleum (E4M9) Main", player), lambda state:
(state.has("Mausoleum (E4M9)", player, 1) and (state.has("Mausoleum (E4M9)", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
@ -557,102 +559,100 @@ def set_episode4_rules(player, world, pro):
state.has("Firemace", player, 1)) and state.has("Firemace", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("Mausoleum (E4M9) Main -> Mausoleum (E4M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Mausoleum (E4M9) Main -> Mausoleum (E4M9) Yellow", player), lambda state:
state.has("Mausoleum (E4M9) - Yellow key", player, 1)) state.has("Mausoleum (E4M9) - Yellow key", player, 1))
set_rule(world.get_entrance("Mausoleum (E4M9) Yellow -> Mausoleum (E4M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Mausoleum (E4M9) Yellow -> Mausoleum (E4M9) Main", player), lambda state:
state.has("Mausoleum (E4M9) - Yellow key", player, 1)) state.has("Mausoleum (E4M9) - Yellow key", player, 1))
def set_episode5_rules(player, world, pro): def set_episode5_rules(player, multiworld, pro):
# Ochre Cliffs (E5M1) # Ochre Cliffs (E5M1)
set_rule(world.get_entrance("Hub -> Ochre Cliffs (E5M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Ochre Cliffs (E5M1) Main", player), lambda state:
state.has("Ochre Cliffs (E5M1)", player, 1)) state.has("Ochre Cliffs (E5M1)", player, 1))
set_rule(world.get_entrance("Ochre Cliffs (E5M1) Main -> Ochre Cliffs (E5M1) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Ochre Cliffs (E5M1) Main -> Ochre Cliffs (E5M1) Yellow", player), lambda state:
state.has("Ochre Cliffs (E5M1) - Yellow key", player, 1)) state.has("Ochre Cliffs (E5M1) - Yellow key", player, 1))
set_rule(world.get_entrance("Ochre Cliffs (E5M1) Blue -> Ochre Cliffs (E5M1) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Ochre Cliffs (E5M1) Blue -> Ochre Cliffs (E5M1) Yellow", player), lambda state:
state.has("Ochre Cliffs (E5M1) - Blue key", player, 1)) state.has("Ochre Cliffs (E5M1) - Blue key", player, 1))
set_rule(world.get_entrance("Ochre Cliffs (E5M1) Yellow -> Ochre Cliffs (E5M1) Main", player), lambda state: set_rule(multiworld.get_entrance("Ochre Cliffs (E5M1) Yellow -> Ochre Cliffs (E5M1) Main", player), lambda state:
state.has("Ochre Cliffs (E5M1) - Yellow key", player, 1)) state.has("Ochre Cliffs (E5M1) - Yellow key", player, 1))
set_rule(world.get_entrance("Ochre Cliffs (E5M1) Yellow -> Ochre Cliffs (E5M1) Green", player), lambda state: set_rule(multiworld.get_entrance("Ochre Cliffs (E5M1) Yellow -> Ochre Cliffs (E5M1) Green", player), lambda state:
state.has("Ochre Cliffs (E5M1) - Green key", player, 1)) state.has("Ochre Cliffs (E5M1) - Green key", player, 1))
set_rule(world.get_entrance("Ochre Cliffs (E5M1) Yellow -> Ochre Cliffs (E5M1) Blue", player), lambda state: set_rule(multiworld.get_entrance("Ochre Cliffs (E5M1) Yellow -> Ochre Cliffs (E5M1) Blue", player), lambda state:
state.has("Ochre Cliffs (E5M1) - Blue key", player, 1)) state.has("Ochre Cliffs (E5M1) - Blue key", player, 1))
set_rule(world.get_entrance("Ochre Cliffs (E5M1) Green -> Ochre Cliffs (E5M1) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Ochre Cliffs (E5M1) Green -> Ochre Cliffs (E5M1) Yellow", player), lambda state:
state.has("Ochre Cliffs (E5M1) - Green key", player, 1)) state.has("Ochre Cliffs (E5M1) - Green key", player, 1))
# Rapids (E5M2) # Rapids (E5M2)
set_rule(world.get_entrance("Hub -> Rapids (E5M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Rapids (E5M2) Main", player), lambda state:
state.has("Rapids (E5M2)", player, 1) and state.has("Rapids (E5M2)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) state.has("Dragon Claw", player, 1))
set_rule(world.get_entrance("Rapids (E5M2) Main -> Rapids (E5M2) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Rapids (E5M2) Main -> Rapids (E5M2) Yellow", player), lambda state:
state.has("Rapids (E5M2) - Yellow key", player, 1)) state.has("Rapids (E5M2) - Yellow key", player, 1))
set_rule(world.get_entrance("Rapids (E5M2) Yellow -> Rapids (E5M2) Main", player), lambda state: set_rule(multiworld.get_entrance("Rapids (E5M2) Yellow -> Rapids (E5M2) Main", player), lambda state:
state.has("Rapids (E5M2) - Yellow key", player, 1)) state.has("Rapids (E5M2) - Yellow key", player, 1))
set_rule(world.get_entrance("Rapids (E5M2) Yellow -> Rapids (E5M2) Green", player), lambda state: set_rule(multiworld.get_entrance("Rapids (E5M2) Yellow -> Rapids (E5M2) Green", player), lambda state:
state.has("Rapids (E5M2) - Green key", player, 1)) state.has("Rapids (E5M2) - Green key", player, 1))
# Quay (E5M3) # Quay (E5M3)
set_rule(world.get_entrance("Hub -> Quay (E5M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Quay (E5M3) Main", player), lambda state:
(state.has("Quay (E5M3)", player, 1) and (state.has("Quay (E5M3)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) and state.has("Dragon Claw", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1) or state.has("Hellstaff", player, 1) or
state.has("Firemace", player, 1))) state.has("Firemace", player, 1)))
set_rule(world.get_entrance("Quay (E5M3) Main -> Quay (E5M3) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Quay (E5M3) Main -> Quay (E5M3) Yellow", player), lambda state:
state.has("Quay (E5M3) - Yellow key", player, 1)) state.has("Quay (E5M3) - Yellow key", player, 1))
set_rule(world.get_entrance("Quay (E5M3) Main -> Quay (E5M3) Green", player), lambda state: set_rule(multiworld.get_entrance("Quay (E5M3) Main -> Quay (E5M3) Green", player), lambda state:
state.has("Quay (E5M3) - Green key", player, 1)) state.has("Quay (E5M3) - Green key", player, 1))
set_rule(world.get_entrance("Quay (E5M3) Main -> Quay (E5M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("Quay (E5M3) Main -> Quay (E5M3) Blue", player), lambda state:
state.has("Quay (E5M3) - Blue key", player, 1)) state.has("Quay (E5M3) - Blue key", player, 1))
set_rule(world.get_entrance("Quay (E5M3) Blue -> Quay (E5M3) Green", player), lambda state: set_rule(multiworld.get_entrance("Quay (E5M3) Yellow -> Quay (E5M3) Main", player), lambda state:
state.has("Quay (E5M3) - Blue key", player, 1))
set_rule(world.get_entrance("Quay (E5M3) Yellow -> Quay (E5M3) Main", player), lambda state:
state.has("Quay (E5M3) - Yellow key", player, 1)) state.has("Quay (E5M3) - Yellow key", player, 1))
set_rule(world.get_entrance("Quay (E5M3) Green -> Quay (E5M3) Main", player), lambda state: set_rule(multiworld.get_entrance("Quay (E5M3) Green -> Quay (E5M3) Main", player), lambda state:
state.has("Quay (E5M3) - Green key", player, 1)) state.has("Quay (E5M3) - Green key", player, 1))
set_rule(world.get_entrance("Quay (E5M3) Green -> Quay (E5M3) Blue", player), lambda state: set_rule(multiworld.get_entrance("Quay (E5M3) Green -> Quay (E5M3) Cyan", player), lambda state:
state.has("Quay (E5M3) - Blue key", player, 1)) state.has("Quay (E5M3) - Blue key", player, 1))
# Courtyard (E5M4) # Courtyard (E5M4)
set_rule(world.get_entrance("Hub -> Courtyard (E5M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Courtyard (E5M4) Main", player), lambda state:
(state.has("Courtyard (E5M4)", player, 1) and (state.has("Courtyard (E5M4)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) and state.has("Dragon Claw", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Firemace", player, 1) or state.has("Firemace", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("Courtyard (E5M4) Main -> Courtyard (E5M4) Kakis", player), lambda state: set_rule(multiworld.get_entrance("Courtyard (E5M4) Main -> Courtyard (E5M4) Kakis", player), lambda state:
state.has("Courtyard (E5M4) - Yellow key", player, 1) or state.has("Courtyard (E5M4) - Yellow key", player, 1) or
state.has("Courtyard (E5M4) - Green key", player, 1)) state.has("Courtyard (E5M4) - Green key", player, 1))
set_rule(world.get_entrance("Courtyard (E5M4) Main -> Courtyard (E5M4) Blue", player), lambda state: set_rule(multiworld.get_entrance("Courtyard (E5M4) Main -> Courtyard (E5M4) Blue", player), lambda state:
state.has("Courtyard (E5M4) - Blue key", player, 1)) state.has("Courtyard (E5M4) - Blue key", player, 1))
set_rule(world.get_entrance("Courtyard (E5M4) Blue -> Courtyard (E5M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Courtyard (E5M4) Blue -> Courtyard (E5M4) Main", player), lambda state:
state.has("Courtyard (E5M4) - Blue key", player, 1)) state.has("Courtyard (E5M4) - Blue key", player, 1))
set_rule(world.get_entrance("Courtyard (E5M4) Kakis -> Courtyard (E5M4) Main", player), lambda state: set_rule(multiworld.get_entrance("Courtyard (E5M4) Kakis -> Courtyard (E5M4) Main", player), lambda state:
state.has("Courtyard (E5M4) - Yellow key", player, 1) or state.has("Courtyard (E5M4) - Yellow key", player, 1) or
state.has("Courtyard (E5M4) - Green key", player, 1)) state.has("Courtyard (E5M4) - Green key", player, 1))
# Hydratyr (E5M5) # Hydratyr (E5M5)
set_rule(world.get_entrance("Hub -> Hydratyr (E5M5) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Hydratyr (E5M5) Main", player), lambda state:
(state.has("Hydratyr (E5M5)", player, 1) and (state.has("Hydratyr (E5M5)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
state.has("Firemace", player, 1)) and state.has("Firemace", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("Hydratyr (E5M5) Main -> Hydratyr (E5M5) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Hydratyr (E5M5) Main -> Hydratyr (E5M5) Yellow", player), lambda state:
state.has("Hydratyr (E5M5) - Yellow key", player, 1)) state.has("Hydratyr (E5M5) - Yellow key", player, 1))
set_rule(world.get_entrance("Hydratyr (E5M5) Blue -> Hydratyr (E5M5) Green", player), lambda state: set_rule(multiworld.get_entrance("Hydratyr (E5M5) Blue -> Hydratyr (E5M5) Green", player), lambda state:
state.has("Hydratyr (E5M5) - Blue key", player, 1)) state.has("Hydratyr (E5M5) - Blue key", player, 1))
set_rule(world.get_entrance("Hydratyr (E5M5) Yellow -> Hydratyr (E5M5) Green", player), lambda state: set_rule(multiworld.get_entrance("Hydratyr (E5M5) Yellow -> Hydratyr (E5M5) Green", player), lambda state:
state.has("Hydratyr (E5M5) - Green key", player, 1)) state.has("Hydratyr (E5M5) - Green key", player, 1))
set_rule(world.get_entrance("Hydratyr (E5M5) Green -> Hydratyr (E5M5) Blue", player), lambda state: set_rule(multiworld.get_entrance("Hydratyr (E5M5) Green -> Hydratyr (E5M5) Blue", player), lambda state:
state.has("Hydratyr (E5M5) - Blue key", player, 1)) state.has("Hydratyr (E5M5) - Blue key", player, 1))
# Colonnade (E5M6) # Colonnade (E5M6)
set_rule(world.get_entrance("Hub -> Colonnade (E5M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Colonnade (E5M6) Main", player), lambda state:
(state.has("Colonnade (E5M6)", player, 1) and (state.has("Colonnade (E5M6)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
@ -660,19 +660,19 @@ def set_episode5_rules(player, world, pro):
state.has("Gauntlets of the Necromancer", player, 1)) and state.has("Gauntlets of the Necromancer", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("Colonnade (E5M6) Main -> Colonnade (E5M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Colonnade (E5M6) Main -> Colonnade (E5M6) Yellow", player), lambda state:
state.has("Colonnade (E5M6) - Yellow key", player, 1)) state.has("Colonnade (E5M6) - Yellow key", player, 1))
set_rule(world.get_entrance("Colonnade (E5M6) Main -> Colonnade (E5M6) Blue", player), lambda state: set_rule(multiworld.get_entrance("Colonnade (E5M6) Main -> Colonnade (E5M6) Blue", player), lambda state:
state.has("Colonnade (E5M6) - Blue key", player, 1)) state.has("Colonnade (E5M6) - Blue key", player, 1))
set_rule(world.get_entrance("Colonnade (E5M6) Blue -> Colonnade (E5M6) Main", player), lambda state: set_rule(multiworld.get_entrance("Colonnade (E5M6) Blue -> Colonnade (E5M6) Main", player), lambda state:
state.has("Colonnade (E5M6) - Blue key", player, 1)) state.has("Colonnade (E5M6) - Blue key", player, 1))
set_rule(world.get_entrance("Colonnade (E5M6) Yellow -> Colonnade (E5M6) Green", player), lambda state: set_rule(multiworld.get_entrance("Colonnade (E5M6) Yellow -> Colonnade (E5M6) Green", player), lambda state:
state.has("Colonnade (E5M6) - Green key", player, 1)) state.has("Colonnade (E5M6) - Green key", player, 1))
set_rule(world.get_entrance("Colonnade (E5M6) Green -> Colonnade (E5M6) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Colonnade (E5M6) Green -> Colonnade (E5M6) Yellow", player), lambda state:
state.has("Colonnade (E5M6) - Green key", player, 1)) state.has("Colonnade (E5M6) - Green key", player, 1))
# Foetid Manse (E5M7) # Foetid Manse (E5M7)
set_rule(world.get_entrance("Hub -> Foetid Manse (E5M7) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Foetid Manse (E5M7) Main", player), lambda state:
(state.has("Foetid Manse (E5M7)", player, 1) and (state.has("Foetid Manse (E5M7)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
@ -680,15 +680,15 @@ def set_episode5_rules(player, world, pro):
state.has("Gauntlets of the Necromancer", player, 1)) and state.has("Gauntlets of the Necromancer", player, 1)) and
(state.has("Phoenix Rod", player, 1) or (state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1))) state.has("Hellstaff", player, 1)))
set_rule(world.get_entrance("Foetid Manse (E5M7) Main -> Foetid Manse (E5M7) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Foetid Manse (E5M7) Main -> Foetid Manse (E5M7) Yellow", player), lambda state:
state.has("Foetid Manse (E5M7) - Yellow key", player, 1)) state.has("Foetid Manse (E5M7) - Yellow key", player, 1))
set_rule(world.get_entrance("Foetid Manse (E5M7) Yellow -> Foetid Manse (E5M7) Green", player), lambda state: set_rule(multiworld.get_entrance("Foetid Manse (E5M7) Yellow -> Foetid Manse (E5M7) Green", player), lambda state:
state.has("Foetid Manse (E5M7) - Green key", player, 1)) state.has("Foetid Manse (E5M7) - Green key", player, 1))
set_rule(world.get_entrance("Foetid Manse (E5M7) Yellow -> Foetid Manse (E5M7) Blue", player), lambda state: set_rule(multiworld.get_entrance("Foetid Manse (E5M7) Yellow -> Foetid Manse (E5M7) Blue", player), lambda state:
state.has("Foetid Manse (E5M7) - Blue key", player, 1)) state.has("Foetid Manse (E5M7) - Blue key", player, 1))
# Field of Judgement (E5M8) # Field of Judgement (E5M8)
set_rule(world.get_entrance("Hub -> Field of Judgement (E5M8) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Field of Judgement (E5M8) Main", player), lambda state:
state.has("Field of Judgement (E5M8)", player, 1) and state.has("Field of Judgement (E5M8)", player, 1) and
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and state.has("Dragon Claw", player, 1) and
@ -699,7 +699,7 @@ def set_episode5_rules(player, world, pro):
state.has("Bag of Holding", player, 1)) state.has("Bag of Holding", player, 1))
# Skein of D'Sparil (E5M9) # Skein of D'Sparil (E5M9)
set_rule(world.get_entrance("Hub -> Skein of D'Sparil (E5M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Hub -> Skein of D'Sparil (E5M9) Main", player), lambda state:
state.has("Skein of D'Sparil (E5M9)", player, 1) and state.has("Skein of D'Sparil (E5M9)", player, 1) and
state.has("Bag of Holding", player, 1) and state.has("Bag of Holding", player, 1) and
state.has("Hellstaff", player, 1) and state.has("Hellstaff", player, 1) and
@ -708,29 +708,29 @@ def set_episode5_rules(player, world, pro):
state.has("Ethereal Crossbow", player, 1) and state.has("Ethereal Crossbow", player, 1) and
state.has("Gauntlets of the Necromancer", player, 1) and state.has("Gauntlets of the Necromancer", player, 1) and
state.has("Firemace", player, 1)) state.has("Firemace", player, 1))
set_rule(world.get_entrance("Skein of D'Sparil (E5M9) Main -> Skein of D'Sparil (E5M9) Blue", player), lambda state: set_rule(multiworld.get_entrance("Skein of D'Sparil (E5M9) Main -> Skein of D'Sparil (E5M9) Blue", player), lambda state:
state.has("Skein of D'Sparil (E5M9) - Blue key", player, 1)) state.has("Skein of D'Sparil (E5M9) - Blue key", player, 1))
set_rule(world.get_entrance("Skein of D'Sparil (E5M9) Main -> Skein of D'Sparil (E5M9) Yellow", player), lambda state: set_rule(multiworld.get_entrance("Skein of D'Sparil (E5M9) Main -> Skein of D'Sparil (E5M9) Yellow", player), lambda state:
state.has("Skein of D'Sparil (E5M9) - Yellow key", player, 1)) state.has("Skein of D'Sparil (E5M9) - Yellow key", player, 1))
set_rule(world.get_entrance("Skein of D'Sparil (E5M9) Main -> Skein of D'Sparil (E5M9) Green", player), lambda state: set_rule(multiworld.get_entrance("Skein of D'Sparil (E5M9) Main -> Skein of D'Sparil (E5M9) Green", player), lambda state:
state.has("Skein of D'Sparil (E5M9) - Green key", player, 1)) state.has("Skein of D'Sparil (E5M9) - Green key", player, 1))
set_rule(world.get_entrance("Skein of D'Sparil (E5M9) Yellow -> Skein of D'Sparil (E5M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Skein of D'Sparil (E5M9) Yellow -> Skein of D'Sparil (E5M9) Main", player), lambda state:
state.has("Skein of D'Sparil (E5M9) - Yellow key", player, 1)) state.has("Skein of D'Sparil (E5M9) - Yellow key", player, 1))
set_rule(world.get_entrance("Skein of D'Sparil (E5M9) Green -> Skein of D'Sparil (E5M9) Main", player), lambda state: set_rule(multiworld.get_entrance("Skein of D'Sparil (E5M9) Green -> Skein of D'Sparil (E5M9) Main", player), lambda state:
state.has("Skein of D'Sparil (E5M9) - Green key", player, 1)) state.has("Skein of D'Sparil (E5M9) - Green key", player, 1))
def set_rules(heretic_world: "HereticWorld", included_episodes, pro): def set_rules(heretic_world: "HereticWorld", included_episodes, pro):
player = heretic_world.player player = heretic_world.player
world = heretic_world.multiworld multiworld = heretic_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)
if included_episodes[4]: if included_episodes[4]:
set_episode5_rules(player, world, pro) set_episode5_rules(player, multiworld, pro)

View File

@ -2,9 +2,10 @@ import functools
import logging import logging
from typing import Any, Dict, List, Set from typing import Any, Dict, List, Set
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 HereticOptions
logger = logging.getLogger("Heretic") logger = logging.getLogger("Heretic")
@ -36,7 +37,8 @@ class HereticWorld(World):
""" """
Heretic is a dark fantasy first-person shooter video game released in December 1994. It was developed by Raven Software. Heretic is a dark fantasy first-person shooter video game released in December 1994. It was developed by Raven Software.
""" """
option_definitions = Options.options options_dataclass = HereticOptions
options: HereticOptions
game = "Heretic" game = "Heretic"
web = HereticWeb() web = HereticWeb()
data_version = 3 data_version = 3
@ -56,7 +58,7 @@ class HereticWorld(World):
"Ochre Cliffs (E5M1)" "Ochre Cliffs (E5M1)"
] ]
boss_level_for_espidoes: List[str] = [ boss_level_for_episode: List[str] = [
"Hell's Maw (E1M8)", "Hell's Maw (E1M8)",
"The Portals of Chaos (E2M8)", "The Portals of Chaos (E2M8)",
"D'Sparil'S Keep (E3M8)", "D'Sparil'S Keep (E3M8)",
@ -77,27 +79,30 @@ class HereticWorld(World):
"Shadowsphere": 1 "Shadowsphere": 1
} }
def __init__(self, world: MultiWorld, player: int): def __init__(self, multiworld: MultiWorld, player: int):
self.included_episodes = [1, 1, 1, 0, 0] self.included_episodes = [1, 1, 1, 0, 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(5): 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
self.included_episodes[4] = self.options.episode5.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
check_sanity = getattr(self.multiworld, "check_sanity")[self.player].value check_sanity = self.options.check_sanity.value
# Main regions # Main regions
menu_region = Region("Menu", self.player, self.multiworld) menu_region = Region("Menu", self.player, self.multiworld)
@ -148,8 +153,8 @@ class HereticWorld(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_episode
for map_name in goal_levels: for map_name in goal_levels:
if map_name + " - Exit" not in self.location_name_to_id: if map_name + " - Exit" not in self.location_name_to_id:
@ -167,8 +172,8 @@ class HereticWorld(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 +190,7 @@ class HereticWorld(World):
def create_items(self): def create_items(self):
itempool: List[HereticItem] = [] itempool: List[HereticItem] = []
start_with_map_scrolls: bool = getattr(self.multiworld, "start_with_map_scrolls")[self.player].value start_with_map_scrolls: bool = self.options.start_with_map_scrolls.value
# Items # Items
for item_id, item in Items.item_table.items(): for item_id, item in Items.item_table.items():
@ -225,7 +230,7 @@ class HereticWorld(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_map_scrolls")[self.player].value: if self.options.start_with_map_scrolls.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:
@ -275,7 +280,7 @@ class HereticWorld(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 = self.options.as_dict("difficulty", "random_monsters", "random_pickups", "random_music", "allow_death_logic", "pro", "death_link", "reset_level_on_death", "check_sanity") slot_data = self.options.as_dict("goal", "difficulty", "random_monsters", "random_pickups", "random_music", "allow_death_logic", "pro", "death_link", "reset_level_on_death", "check_sanity")
# Make sure we send proper episode settings # Make sure we send proper episode settings
slot_data["episode1"] = self.included_episodes[0] slot_data["episode1"] = self.included_episodes[0]

View File

@ -13,7 +13,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 HERETIC.WAD from your steam install into the extracted folder. 2. Copy HERETIC.WAD from your steam install into the 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