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

View File

@ -1,6 +1,5 @@
import typing
from Options import AssembleOptions, Choice, Toggle, DeathLink, DefaultOnToggle, StartInventoryPool
from Options import PerGameCommonOptions, Choice, Toggle, DeathLink, DefaultOnToggle, StartInventoryPool
from dataclasses import dataclass
class Goal(Choice):
@ -146,22 +145,22 @@ class Episode5(Toggle):
display_name = "Episode 5"
options: typing.Dict[str, AssembleOptions] = {
"start_inventory_from_pool": StartInventoryPool,
"goal": Goal,
"difficulty": Difficulty,
"random_monsters": RandomMonsters,
"random_pickups": RandomPickups,
"random_music": RandomMusic,
"allow_death_logic": AllowDeathLogic,
"pro": Pro,
"check_sanity": CheckSanity,
"start_with_map_scrolls": StartWithMapScrolls,
"reset_level_on_death": ResetLevelOnDeath,
"death_link": DeathLink,
"episode1": Episode1,
"episode2": Episode2,
"episode3": Episode3,
"episode4": Episode4,
"episode5": Episode5
}
@dataclass
class HereticOptions(PerGameCommonOptions):
start_inventory_from_pool: StartInventoryPool
goal: Goal
difficulty: Difficulty
random_monsters: RandomMonsters
random_pickups: RandomPickups
random_music: RandomMusic
allow_death_logic: AllowDeathLogic
pro: Pro
check_sanity: CheckSanity
start_with_map_scrolls: StartWithMapScrolls
reset_level_on_death: ResetLevelOnDeath
death_link: DeathLink
episode1: Episode1
episode2: Episode2
episode3: Episode3
episode4: Episode4
episode5: Episode5

View File

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

View File

@ -7,185 +7,185 @@ if TYPE_CHECKING:
from . import HereticWorld
def set_episode1_rules(player, world, pro):
def set_episode1_rules(player, multiworld, pro):
# 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))
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))
# 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("Dragon Claw", player, 1) or
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))
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))
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))
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))
# 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("Ethereal Crossbow", player, 1) or
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))
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))
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))
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))
# 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("Ethereal Crossbow", player, 1) or
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))
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))
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))
# 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("Ethereal Crossbow", player, 1)) and
(state.has("Dragon Claw", player, 1) or
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))
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))
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))
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))
# 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("Ethereal Crossbow", player, 1)) and
(state.has("Gauntlets of the Necromancer", player, 1) or
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))
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))
# 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("Ethereal Crossbow", player, 1)) and
(state.has("Gauntlets of the Necromancer", player, 1) or
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))
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))
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))
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))
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))
# 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("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1))
# 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("Gauntlets of the Necromancer", player, 1) and
state.has("Ethereal Crossbow", player, 1) and
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))
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))
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))
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))
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))
def set_episode2_rules(player, world, pro):
def set_episode2_rules(player, multiworld, pro):
# 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))
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))
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))
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))
# 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("Ethereal Crossbow", player, 1) or
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))
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))
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))
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))
# 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("Dragon Claw", player, 1) and
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))
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))
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))
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))
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))
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))
# 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("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) and
(state.has("Hellstaff", player, 1) or
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))
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))
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))
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) - 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))
# 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("Gauntlets of the Necromancer", 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("Firemace", player, 1) or
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))
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))
set_rule(world.get_entrance("The Catacombs (E2M5) Yellow -> The Catacombs (E2M5) Green", player), lambda state:
state.has("The Catacombs (E2M5) - Yellow 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) Yellow -> The Catacombs (E2M5) Green", player), lambda state:
state.has("The Catacombs (E2M5) - Green key", player, 1))
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))
# 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("Gauntlets of the Necromancer", 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("Firemace", player, 1) or
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))
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))
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))
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))
# 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("Gauntlets of the Necromancer", 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("Phoenix Rod", player, 1) or
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))
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))
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))
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))
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))
# 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("Gauntlets of the Necromancer", 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))
# 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("Gauntlets of the Necromancer", 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("Phoenix Rod", player, 1) or
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))
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))
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))
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))
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))
def set_episode3_rules(player, world, pro):
def set_episode3_rules(player, multiworld, pro):
# 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))
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))
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))
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))
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))
# 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("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and
state.has("Firemace", player, 1) and
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))
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))
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))
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))
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))
# 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("Ethereal Crossbow", 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("Firemace", player, 1) or
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))
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))
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))
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))
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))
# 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("Ethereal Crossbow", 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("Phoenix Rod", player, 1) or
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))
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))
# 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("Ethereal Crossbow", 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("Phoenix Rod", player, 1) or
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))
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))
# 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("Firemace", 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("Gauntlets of the Necromancer", player, 1) or
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))
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))
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))
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))
# 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("Ethereal Crossbow", 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("Gauntlets of the Necromancer", player, 1) or
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))
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))
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))
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))
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))
# 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("Gauntlets of the Necromancer", 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))
# 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("Gauntlets of the Necromancer", 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("Firemace", player, 1) and
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))
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))
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))
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))
def set_episode4_rules(player, world, pro):
def set_episode4_rules(player, multiworld, pro):
# 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))
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))
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("Dragon Claw", 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)))
# 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("Ethereal Crossbow", player, 1) and
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))
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))
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))
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))
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))
# 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("Ethereal Crossbow", 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("Firemace", player, 1) or
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))
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))
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))
# 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("Ethereal Crossbow", 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)))
# 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("Gauntlets of the Necromancer", 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("Hellstaff", player, 1) or
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))
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))
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))
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))
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))
# 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("Gauntlets of the Necromancer", 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("Phoenix Rod", player, 1) or
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))
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))
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))
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))
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))
# 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("Gauntlets of the Necromancer", 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("Phoenix Rod", player, 1) or
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))
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))
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))
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))
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))
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))
# 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("Gauntlets of the Necromancer", 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("Firemace", player, 1) and
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))
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))
# 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("Gauntlets of the Necromancer", 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("Phoenix Rod", player, 1) or
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))
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))
def set_episode5_rules(player, world, pro):
def set_episode5_rules(player, multiworld, pro):
# 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))
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))
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))
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))
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))
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))
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))
# 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("Ethereal Crossbow", player, 1) and
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))
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))
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))
# 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("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) and
(state.has("Phoenix Rod", player, 1) or
state.has("Hellstaff", player, 1) or
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))
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))
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))
set_rule(world.get_entrance("Quay (E5M3) Blue -> Quay (E5M3) Green", 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:
set_rule(multiworld.get_entrance("Quay (E5M3) Yellow -> Quay (E5M3) Main", player), lambda state:
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))
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))
# 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("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1)) and
(state.has("Phoenix Rod", player, 1) or
state.has("Firemace", player, 1) or
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) - 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))
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))
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) - Green key", player, 1))
# 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("Ethereal Crossbow", player, 1) and
state.has("Dragon Claw", player, 1) and
state.has("Firemace", player, 1)) and
(state.has("Phoenix Rod", player, 1) or
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))
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))
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))
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))
# 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("Ethereal Crossbow", 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("Phoenix Rod", player, 1) or
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))
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))
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))
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))
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))
# 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("Ethereal Crossbow", 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("Phoenix Rod", player, 1) or
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))
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))
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))
# 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("Ethereal Crossbow", 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))
# 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("Bag of Holding", 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("Gauntlets of the Necromancer", player, 1) and
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))
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))
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))
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))
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))
def set_rules(heretic_world: "HereticWorld", included_episodes, pro):
player = heretic_world.player
world = heretic_world.multiworld
multiworld = heretic_world.multiworld
if included_episodes[0]:
set_episode1_rules(player, world, pro)
set_episode1_rules(player, multiworld, pro)
if included_episodes[1]:
set_episode2_rules(player, world, pro)
set_episode2_rules(player, multiworld, pro)
if included_episodes[2]:
set_episode3_rules(player, world, pro)
set_episode3_rules(player, multiworld, pro)
if included_episodes[3]:
set_episode4_rules(player, world, pro)
set_episode4_rules(player, multiworld, pro)
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
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 . import Items, Locations, Maps, Options, Regions, Rules
from . import Items, Locations, Maps, Regions, Rules
from .Options import HereticOptions
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.
"""
option_definitions = Options.options
options_dataclass = HereticOptions
options: HereticOptions
game = "Heretic"
web = HereticWeb()
data_version = 3
@ -56,7 +58,7 @@ class HereticWorld(World):
"Ochre Cliffs (E5M1)"
]
boss_level_for_espidoes: List[str] = [
boss_level_for_episode: List[str] = [
"Hell's Maw (E1M8)",
"The Portals of Chaos (E2M8)",
"D'Sparil'S Keep (E3M8)",
@ -77,27 +79,30 @@ class HereticWorld(World):
"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.location_count = 0
super().__init__(world, player)
super().__init__(multiworld, player)
def get_episode_count(self):
return functools.reduce(lambda count, episode: count + episode, self.included_episodes)
def generate_early(self):
# Cache which episodes are included
for i in range(5):
self.included_episodes[i] = getattr(self.multiworld, f"episode{i + 1}")[self.player].value
self.included_episodes[0] = self.options.episode1.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 self.get_episode_count() == 0:
self.included_episodes[0] = 1
def create_regions(self):
pro = getattr(self.multiworld, "pro")[self.player].value
check_sanity = getattr(self.multiworld, "check_sanity")[self.player].value
pro = self.options.pro.value
check_sanity = self.options.check_sanity.value
# Main regions
menu_region = Region("Menu", self.player, self.multiworld)
@ -148,8 +153,8 @@ class HereticWorld(World):
def completion_rule(self, state: CollectionState):
goal_levels = Maps.map_names
if getattr(self.multiworld, "goal")[self.player].value:
goal_levels = self.boss_level_for_espidoes
if self.options.goal.value:
goal_levels = self.boss_level_for_episode
for map_name in goal_levels:
if map_name + " - Exit" not in self.location_name_to_id:
@ -167,8 +172,8 @@ class HereticWorld(World):
return True
def set_rules(self):
pro = getattr(self.multiworld, "pro")[self.player].value
allow_death_logic = getattr(self.multiworld, "allow_death_logic")[self.player].value
pro = self.options.pro.value
allow_death_logic = self.options.allow_death_logic.value
Rules.set_rules(self, self.included_episodes, pro)
self.multiworld.completion_condition[self.player] = lambda state: self.completion_rule(state)
@ -185,7 +190,7 @@ class HereticWorld(World):
def create_items(self):
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
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]))
# 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():
item_episode = item_dict["episode"]
if item_episode > 0:
@ -275,7 +280,7 @@ class HereticWorld(World):
itempool.append(self.create_item(item_name))
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
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.
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,
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