id Tech 1 games: Logic updates (Feb '25) (#4677)

- Across Doom 1993 and Doom 2, any items that are accessible in Ultra-Violence from the start of the level without putting the player in any danger are now considered in logic when that level is first received, without needing any weapons available. This is intended to give generation more possible outs for bad placements.
  - This affects the following maps in Doom 1993:
    - Toxin Refinery (E1M3): 1 location.
    - Command Control (E1M4): 1 location.
    - Computer Station (E1M7): 1 location.
    - Deimos Lab (E2M4): 1 location.
    - Tower of Babel (E2M8): 1 location.
    - Unholy Cathedral (E3M5): 1 location.
  - This affects the following maps in Doom 2:
    - The Waste Tunnels (MAP05): 2 locations.
    - Dead Simple (MAP07): 2 locations.
    - The Pit (MAP09): 1 location.
    - Refueling Base (MAP10): 1 location.
    - Nirvana (MAP21): 1 location, except see below.
    - Icon of Sin (MAP30): 9 locations.
    - Grosse (MAP32): 2 locations.
- Doom 2 has had some more significant logical adjustments made.
  - The following Pro tricks have been added to Pro logic:
    - Circle of Death (MAP11): Lowering the exit wall without the Red key by hitting the switch to do so from the nukage. This makes three items previously locked behind the Red key available early, as well as the exit.
    - Suburbs (MAP16): Reaching the exit without any keys, as the gap between the pillar and the wall is large enough to let you through if you position yourself well. While multiple other squeeze glides exist (for example, you can skip the Yellow key in MAP21 by using one), this one is significantly easier than the rest; it does not require much precision, nor does it require vertical mouse movement.
    - Nirvana (MAP21): Skipping the Blue key, as there is a gigantic gap between the bars that attempt to block you.
    - The Chasm (MAP24): Skipping the Blue key by going extremely far through the nukage and finding one of a couple specific teleporters is now considered a Pro trick, and standard logic now expects the key to be obtained.
  - The following levels have had other logic adjustments:
    - The Waste Tunnels (MAP05): Requirements lowered to Shotgun + Super Shotgun + (Chaingun | Plasma gun).
    - The Crusher (MAP06): Requirements lowered to Shotgun + (Chaingun | Plasma gun) for areas immediately accessible. Going beyond the Blue key door also requires Super Shotgun.
    - The Factory (MAP12): The outdoors area, and the little room to the right of where you start, are accessible in sphere 1. These three items are all easily obtainable with only the pistol. The remaining items that are not in the central area are accessible with (Super Shotgun | Plasma gun), while the items in that area are accessible with Super Shotgun + Chaingun + (Plasma gun | BFG9000). This fixes Episode 2 not having an available sphere 1, and allows solo Episode 2 games.
    - Nirvana (MAP21): As above, the item in the starting room is accessible in sphere 1. Every other item that doesn't require a key is accessible with (Super Shotgun | Plasma gun). The room in which you use the Yellow key is accessible with Super Shotgun + Chaingun + (Plasma gun | BFG9000). This fixes Episode 3 not having an available sphere 1, and allows solo Episode 3 games.
    - The Catacombs (MAP22): The four items in the opening room only require (Shotgun | Super Shotgun | Plasma gun). The rest of the level is as before.
    - Bloodfalls (MAP25): Requirements lowered to Shotgun + Super Shotgun + Chaingun, as this level is unusually easy for its placement in the game. Progressing past the Blue key door additionally requires (Rocket launcher | Plasma gun | BFG9000) solely to deal with the Arch-vile at the end of the level.
    - Wolfenstein (MAP31): Requirements lowered to Chaingun + (Shotgun | Super Shotgun). This is closer to what the game expects from a non-secret hunting player from a pistol start.
- The following logic bugs in Heretic have been fixed:
  - Quay (E5M3): An item in a Blue key locked hallway was previously marked as being in the "Main" region, thus considered to be accessible without that key. It has been moved to the appropriate "Blue" region.
  - Courtyard (E5M4): Logic previously assumed you could reach the Wings of Wrath from the opening room, when that isn't actually possible. Changing this moved some items previously in the "Main" region into a new "Green" region, and items previously in the "Kakis" (Yellow OR Green) are now in a "Yellow" region instead. Fixes #4662.
- For known problematic solo episodes, some additional special cases have been added.
  - Doom 1993, Episode 3: One of either the Shotgun or Chaingun is placed early. Slough of Despair (E3M2) is given as an additional starting level.
  - Doom 2, Episode 3: One of either the Super Shotgun or Plasma gun is placed early.
  - Heretic, Episode 1: The Docks (E1M1) - Yellow key is placed early.
- The following levels (and thus, their items and locations) were renamed, due to typos or other oddities:
  - `Barrels o Fun (MAP23)` -> `Barrels o' Fun (MAP23)`
  - `Wolfenstein2 (MAP31)` -> `Wolfenstein (MAP31)`
  - `Grosse2 (MAP32)` -> `Grosse (MAP32)`
  - `D'Sparil'S Keep (E3M8)` -> `D'Sparil's Keep (E3M8)`
  - `The Aquifier (E3M9)` -> `The Aquifer (E3M9)`
This commit is contained in:
Kaito Sinclaire
2025-03-29 09:32:33 -07:00
committed by GitHub
parent dd5481930a
commit c3e000e574
16 changed files with 739 additions and 583 deletions

View File

@@ -514,19 +514,19 @@ item_table: Dict[int, ItemDict] = {
'map': 7},
370259: {'classification': ItemClassification.progression,
'count': 1,
'name': 'The Aquifier (E3M9) - Blue key',
'name': 'The Aquifer (E3M9) - Blue key',
'doom_type': 79,
'episode': 3,
'map': 9},
370260: {'classification': ItemClassification.progression,
'count': 1,
'name': 'The Aquifier (E3M9) - Green key',
'name': 'The Aquifer (E3M9) - Green key',
'doom_type': 73,
'episode': 3,
'map': 9},
370261: {'classification': ItemClassification.progression,
'count': 1,
'name': 'The Aquifier (E3M9) - Yellow key',
'name': 'The Aquifer (E3M9) - Yellow key',
'doom_type': 80,
'episode': 3,
'map': 9},
@@ -1234,37 +1234,37 @@ item_table: Dict[int, ItemDict] = {
'map': 7},
370475: {'classification': ItemClassification.progression,
'count': 1,
'name': "D'Sparil'S Keep (E3M8)",
'name': "D'Sparil's Keep (E3M8)",
'doom_type': -1,
'episode': 3,
'map': 8},
370476: {'classification': ItemClassification.progression,
'count': 1,
'name': "D'Sparil'S Keep (E3M8) - Complete",
'name': "D'Sparil's Keep (E3M8) - Complete",
'doom_type': -2,
'episode': 3,
'map': 8},
370477: {'classification': ItemClassification.filler,
'count': 1,
'name': "D'Sparil'S Keep (E3M8) - Map Scroll",
'name': "D'Sparil's Keep (E3M8) - Map Scroll",
'doom_type': 35,
'episode': 3,
'map': 8},
370478: {'classification': ItemClassification.progression,
'count': 1,
'name': 'The Aquifier (E3M9)',
'name': 'The Aquifer (E3M9)',
'doom_type': -1,
'episode': 3,
'map': 9},
370479: {'classification': ItemClassification.progression,
'count': 1,
'name': 'The Aquifier (E3M9) - Complete',
'name': 'The Aquifer (E3M9) - Complete',
'doom_type': -2,
'episode': 3,
'map': 9},
370480: {'classification': ItemClassification.filler,
'count': 1,
'name': 'The Aquifier (E3M9) - Map Scroll',
'name': 'The Aquifer (E3M9) - Map Scroll',
'doom_type': 35,
'episode': 3,
'map': 9},
@@ -1635,8 +1635,8 @@ item_name_groups: Dict[str, Set[str]] = {
'Ammos': {'Crystal Geode', 'Energy Orb', 'Greater Runes', 'Inferno Orb', 'Pile of Mace Spheres', 'Quiver of Ethereal Arrows', },
'Armors': {'Enchanted Shield', 'Silver Shield', },
'Artifacts': {'Chaos Device', 'Morph Ovum', 'Mystic Urn', 'Quartz Flask', 'Ring of Invincibility', 'Shadowsphere', 'Timebomb of the Ancients', 'Tome of Power', 'Torch', },
'Keys': {'Ambulatory (E4M3) - Blue key', 'Ambulatory (E4M3) - Green key', 'Ambulatory (E4M3) - Yellow key', 'Blockhouse (E4M2) - Blue key', 'Blockhouse (E4M2) - Green key', 'Blockhouse (E4M2) - Yellow key', 'Catafalque (E4M1) - Green key', 'Catafalque (E4M1) - Yellow key', 'Colonnade (E5M6) - Blue key', 'Colonnade (E5M6) - Green key', 'Colonnade (E5M6) - Yellow key', 'Courtyard (E5M4) - Blue key', 'Courtyard (E5M4) - Green key', 'Courtyard (E5M4) - Yellow key', 'Foetid Manse (E5M7) - Blue key', 'Foetid Manse (E5M7) - Green key', 'Foetid Manse (E5M7) - Yellow key', 'Great Stair (E4M5) - Blue key', 'Great Stair (E4M5) - Green key', 'Great Stair (E4M5) - Yellow key', 'Halls of the Apostate (E4M6) - Blue key', 'Halls of the Apostate (E4M6) - Green key', 'Halls of the Apostate (E4M6) - Yellow key', 'Hydratyr (E5M5) - Blue key', 'Hydratyr (E5M5) - Green key', 'Hydratyr (E5M5) - Yellow key', 'Mausoleum (E4M9) - Yellow key', 'Ochre Cliffs (E5M1) - Blue key', 'Ochre Cliffs (E5M1) - Green key', 'Ochre Cliffs (E5M1) - Yellow key', 'Quay (E5M3) - Blue key', 'Quay (E5M3) - Green key', 'Quay (E5M3) - Yellow key', 'Ramparts of Perdition (E4M7) - Blue key', 'Ramparts of Perdition (E4M7) - Green key', 'Ramparts of Perdition (E4M7) - Yellow key', 'Rapids (E5M2) - Green key', 'Rapids (E5M2) - Yellow key', 'Shattered Bridge (E4M8) - Yellow key', "Skein of D'Sparil (E5M9) - Blue key", "Skein of D'Sparil (E5M9) - Green key", "Skein of D'Sparil (E5M9) - Yellow key", 'The Aquifier (E3M9) - Blue key', 'The Aquifier (E3M9) - Green key', 'The Aquifier (E3M9) - Yellow key', 'The Azure Fortress (E3M4) - Green key', 'The Azure Fortress (E3M4) - Yellow key', 'The Catacombs (E2M5) - Blue key', 'The Catacombs (E2M5) - Green key', 'The Catacombs (E2M5) - Yellow key', 'The Cathedral (E1M6) - Green key', 'The Cathedral (E1M6) - Yellow key', 'The Cesspool (E3M2) - Blue key', 'The Cesspool (E3M2) - Green key', 'The Cesspool (E3M2) - Yellow key', 'The Chasm (E3M7) - Blue key', 'The Chasm (E3M7) - Green key', 'The Chasm (E3M7) - Yellow key', 'The Citadel (E1M5) - Blue key', 'The Citadel (E1M5) - Green key', 'The Citadel (E1M5) - Yellow key', 'The Confluence (E3M3) - Blue key', 'The Confluence (E3M3) - Green key', 'The Confluence (E3M3) - Yellow key', 'The Crater (E2M1) - Green key', 'The Crater (E2M1) - Yellow key', 'The Crypts (E1M7) - Blue key', 'The Crypts (E1M7) - Green key', 'The Crypts (E1M7) - Yellow key', 'The Docks (E1M1) - Yellow key', 'The Dungeons (E1M2) - Blue key', 'The Dungeons (E1M2) - Green key', 'The Dungeons (E1M2) - Yellow key', 'The Gatehouse (E1M3) - Green key', 'The Gatehouse (E1M3) - Yellow key', 'The Glacier (E2M9) - Blue key', 'The Glacier (E2M9) - Green key', 'The Glacier (E2M9) - Yellow key', 'The Graveyard (E1M9) - Blue key', 'The Graveyard (E1M9) - Green key', 'The Graveyard (E1M9) - Yellow key', 'The Great Hall (E2M7) - Blue key', 'The Great Hall (E2M7) - Green key', 'The Great Hall (E2M7) - Yellow key', 'The Guard Tower (E1M4) - Green key', 'The Guard Tower (E1M4) - Yellow key', 'The Halls of Fear (E3M6) - Blue key', 'The Halls of Fear (E3M6) - Green key', 'The Halls of Fear (E3M6) - Yellow key', 'The Ice Grotto (E2M4) - Blue key', 'The Ice Grotto (E2M4) - Green key', 'The Ice Grotto (E2M4) - Yellow key', 'The Labyrinth (E2M6) - Blue key', 'The Labyrinth (E2M6) - Green key', 'The Labyrinth (E2M6) - Yellow key', 'The Lava Pits (E2M2) - Green key', 'The Lava Pits (E2M2) - Yellow key', 'The Ophidian Lair (E3M5) - Green key', 'The Ophidian Lair (E3M5) - Yellow key', 'The River of Fire (E2M3) - Blue key', 'The River of Fire (E2M3) - Green key', 'The River of Fire (E2M3) - Yellow key', 'The Storehouse (E3M1) - Green key', 'The Storehouse (E3M1) - Yellow key', },
'Levels': {'Ambulatory (E4M3)', 'Blockhouse (E4M2)', 'Catafalque (E4M1)', 'Colonnade (E5M6)', 'Courtyard (E5M4)', "D'Sparil'S Keep (E3M8)", 'Field of Judgement (E5M8)', 'Foetid Manse (E5M7)', 'Great Stair (E4M5)', 'Halls of the Apostate (E4M6)', "Hell's Maw (E1M8)", 'Hydratyr (E5M5)', 'Mausoleum (E4M9)', 'Ochre Cliffs (E5M1)', 'Quay (E5M3)', 'Ramparts of Perdition (E4M7)', 'Rapids (E5M2)', 'Sepulcher (E4M4)', 'Shattered Bridge (E4M8)', "Skein of D'Sparil (E5M9)", 'The Aquifier (E3M9)', 'The Azure Fortress (E3M4)', 'The Catacombs (E2M5)', 'The Cathedral (E1M6)', 'The Cesspool (E3M2)', 'The Chasm (E3M7)', 'The Citadel (E1M5)', 'The Confluence (E3M3)', 'The Crater (E2M1)', 'The Crypts (E1M7)', 'The Docks (E1M1)', 'The Dungeons (E1M2)', 'The Gatehouse (E1M3)', 'The Glacier (E2M9)', 'The Graveyard (E1M9)', 'The Great Hall (E2M7)', 'The Guard Tower (E1M4)', 'The Halls of Fear (E3M6)', 'The Ice Grotto (E2M4)', 'The Labyrinth (E2M6)', 'The Lava Pits (E2M2)', 'The Ophidian Lair (E3M5)', 'The Portals of Chaos (E2M8)', 'The River of Fire (E2M3)', 'The Storehouse (E3M1)', },
'Map Scrolls': {'Ambulatory (E4M3) - Map Scroll', 'Blockhouse (E4M2) - Map Scroll', 'Catafalque (E4M1) - Map Scroll', 'Colonnade (E5M6) - Map Scroll', 'Courtyard (E5M4) - Map Scroll', "D'Sparil'S Keep (E3M8) - Map Scroll", 'Field of Judgement (E5M8) - Map Scroll', 'Foetid Manse (E5M7) - Map Scroll', 'Great Stair (E4M5) - Map Scroll', 'Halls of the Apostate (E4M6) - Map Scroll', "Hell's Maw (E1M8) - Map Scroll", 'Hydratyr (E5M5) - Map Scroll', 'Mausoleum (E4M9) - Map Scroll', 'Ochre Cliffs (E5M1) - Map Scroll', 'Quay (E5M3) - Map Scroll', 'Ramparts of Perdition (E4M7) - Map Scroll', 'Rapids (E5M2) - Map Scroll', 'Sepulcher (E4M4) - Map Scroll', 'Shattered Bridge (E4M8) - Map Scroll', "Skein of D'Sparil (E5M9) - Map Scroll", 'The Aquifier (E3M9) - Map Scroll', 'The Azure Fortress (E3M4) - Map Scroll', 'The Catacombs (E2M5) - Map Scroll', 'The Cathedral (E1M6) - Map Scroll', 'The Cesspool (E3M2) - Map Scroll', 'The Chasm (E3M7) - Map Scroll', 'The Citadel (E1M5) - Map Scroll', 'The Confluence (E3M3) - Map Scroll', 'The Crater (E2M1) - Map Scroll', 'The Crypts (E1M7) - Map Scroll', 'The Docks (E1M1) - Map Scroll', 'The Dungeons (E1M2) - Map Scroll', 'The Gatehouse (E1M3) - Map Scroll', 'The Glacier (E2M9) - Map Scroll', 'The Graveyard (E1M9) - Map Scroll', 'The Great Hall (E2M7) - Map Scroll', 'The Guard Tower (E1M4) - Map Scroll', 'The Halls of Fear (E3M6) - Map Scroll', 'The Ice Grotto (E2M4) - Map Scroll', 'The Labyrinth (E2M6) - Map Scroll', 'The Lava Pits (E2M2) - Map Scroll', 'The Ophidian Lair (E3M5) - Map Scroll', 'The Portals of Chaos (E2M8) - Map Scroll', 'The River of Fire (E2M3) - Map Scroll', 'The Storehouse (E3M1) - Map Scroll', },
'Keys': {'Ambulatory (E4M3) - Blue key', 'Ambulatory (E4M3) - Green key', 'Ambulatory (E4M3) - Yellow key', 'Blockhouse (E4M2) - Blue key', 'Blockhouse (E4M2) - Green key', 'Blockhouse (E4M2) - Yellow key', 'Catafalque (E4M1) - Green key', 'Catafalque (E4M1) - Yellow key', 'Colonnade (E5M6) - Blue key', 'Colonnade (E5M6) - Green key', 'Colonnade (E5M6) - Yellow key', 'Courtyard (E5M4) - Blue key', 'Courtyard (E5M4) - Green key', 'Courtyard (E5M4) - Yellow key', 'Foetid Manse (E5M7) - Blue key', 'Foetid Manse (E5M7) - Green key', 'Foetid Manse (E5M7) - Yellow key', 'Great Stair (E4M5) - Blue key', 'Great Stair (E4M5) - Green key', 'Great Stair (E4M5) - Yellow key', 'Halls of the Apostate (E4M6) - Blue key', 'Halls of the Apostate (E4M6) - Green key', 'Halls of the Apostate (E4M6) - Yellow key', 'Hydratyr (E5M5) - Blue key', 'Hydratyr (E5M5) - Green key', 'Hydratyr (E5M5) - Yellow key', 'Mausoleum (E4M9) - Yellow key', 'Ochre Cliffs (E5M1) - Blue key', 'Ochre Cliffs (E5M1) - Green key', 'Ochre Cliffs (E5M1) - Yellow key', 'Quay (E5M3) - Blue key', 'Quay (E5M3) - Green key', 'Quay (E5M3) - Yellow key', 'Ramparts of Perdition (E4M7) - Blue key', 'Ramparts of Perdition (E4M7) - Green key', 'Ramparts of Perdition (E4M7) - Yellow key', 'Rapids (E5M2) - Green key', 'Rapids (E5M2) - Yellow key', 'Shattered Bridge (E4M8) - Yellow key', "Skein of D'Sparil (E5M9) - Blue key", "Skein of D'Sparil (E5M9) - Green key", "Skein of D'Sparil (E5M9) - Yellow key", 'The Aquifer (E3M9) - Blue key', 'The Aquifer (E3M9) - Green key', 'The Aquifer (E3M9) - Yellow key', 'The Azure Fortress (E3M4) - Green key', 'The Azure Fortress (E3M4) - Yellow key', 'The Catacombs (E2M5) - Blue key', 'The Catacombs (E2M5) - Green key', 'The Catacombs (E2M5) - Yellow key', 'The Cathedral (E1M6) - Green key', 'The Cathedral (E1M6) - Yellow key', 'The Cesspool (E3M2) - Blue key', 'The Cesspool (E3M2) - Green key', 'The Cesspool (E3M2) - Yellow key', 'The Chasm (E3M7) - Blue key', 'The Chasm (E3M7) - Green key', 'The Chasm (E3M7) - Yellow key', 'The Citadel (E1M5) - Blue key', 'The Citadel (E1M5) - Green key', 'The Citadel (E1M5) - Yellow key', 'The Confluence (E3M3) - Blue key', 'The Confluence (E3M3) - Green key', 'The Confluence (E3M3) - Yellow key', 'The Crater (E2M1) - Green key', 'The Crater (E2M1) - Yellow key', 'The Crypts (E1M7) - Blue key', 'The Crypts (E1M7) - Green key', 'The Crypts (E1M7) - Yellow key', 'The Docks (E1M1) - Yellow key', 'The Dungeons (E1M2) - Blue key', 'The Dungeons (E1M2) - Green key', 'The Dungeons (E1M2) - Yellow key', 'The Gatehouse (E1M3) - Green key', 'The Gatehouse (E1M3) - Yellow key', 'The Glacier (E2M9) - Blue key', 'The Glacier (E2M9) - Green key', 'The Glacier (E2M9) - Yellow key', 'The Graveyard (E1M9) - Blue key', 'The Graveyard (E1M9) - Green key', 'The Graveyard (E1M9) - Yellow key', 'The Great Hall (E2M7) - Blue key', 'The Great Hall (E2M7) - Green key', 'The Great Hall (E2M7) - Yellow key', 'The Guard Tower (E1M4) - Green key', 'The Guard Tower (E1M4) - Yellow key', 'The Halls of Fear (E3M6) - Blue key', 'The Halls of Fear (E3M6) - Green key', 'The Halls of Fear (E3M6) - Yellow key', 'The Ice Grotto (E2M4) - Blue key', 'The Ice Grotto (E2M4) - Green key', 'The Ice Grotto (E2M4) - Yellow key', 'The Labyrinth (E2M6) - Blue key', 'The Labyrinth (E2M6) - Green key', 'The Labyrinth (E2M6) - Yellow key', 'The Lava Pits (E2M2) - Green key', 'The Lava Pits (E2M2) - Yellow key', 'The Ophidian Lair (E3M5) - Green key', 'The Ophidian Lair (E3M5) - Yellow key', 'The River of Fire (E2M3) - Blue key', 'The River of Fire (E2M3) - Green key', 'The River of Fire (E2M3) - Yellow key', 'The Storehouse (E3M1) - Green key', 'The Storehouse (E3M1) - Yellow key', },
'Levels': {'Ambulatory (E4M3)', 'Blockhouse (E4M2)', 'Catafalque (E4M1)', 'Colonnade (E5M6)', 'Courtyard (E5M4)', "D'Sparil's Keep (E3M8)", 'Field of Judgement (E5M8)', 'Foetid Manse (E5M7)', 'Great Stair (E4M5)', 'Halls of the Apostate (E4M6)', "Hell's Maw (E1M8)", 'Hydratyr (E5M5)', 'Mausoleum (E4M9)', 'Ochre Cliffs (E5M1)', 'Quay (E5M3)', 'Ramparts of Perdition (E4M7)', 'Rapids (E5M2)', 'Sepulcher (E4M4)', 'Shattered Bridge (E4M8)', "Skein of D'Sparil (E5M9)", 'The Aquifer (E3M9)', 'The Azure Fortress (E3M4)', 'The Catacombs (E2M5)', 'The Cathedral (E1M6)', 'The Cesspool (E3M2)', 'The Chasm (E3M7)', 'The Citadel (E1M5)', 'The Confluence (E3M3)', 'The Crater (E2M1)', 'The Crypts (E1M7)', 'The Docks (E1M1)', 'The Dungeons (E1M2)', 'The Gatehouse (E1M3)', 'The Glacier (E2M9)', 'The Graveyard (E1M9)', 'The Great Hall (E2M7)', 'The Guard Tower (E1M4)', 'The Halls of Fear (E3M6)', 'The Ice Grotto (E2M4)', 'The Labyrinth (E2M6)', 'The Lava Pits (E2M2)', 'The Ophidian Lair (E3M5)', 'The Portals of Chaos (E2M8)', 'The River of Fire (E2M3)', 'The Storehouse (E3M1)', },
'Map Scrolls': {'Ambulatory (E4M3) - Map Scroll', 'Blockhouse (E4M2) - Map Scroll', 'Catafalque (E4M1) - Map Scroll', 'Colonnade (E5M6) - Map Scroll', 'Courtyard (E5M4) - Map Scroll', "D'Sparil's Keep (E3M8) - Map Scroll", 'Field of Judgement (E5M8) - Map Scroll', 'Foetid Manse (E5M7) - Map Scroll', 'Great Stair (E4M5) - Map Scroll', 'Halls of the Apostate (E4M6) - Map Scroll', "Hell's Maw (E1M8) - Map Scroll", 'Hydratyr (E5M5) - Map Scroll', 'Mausoleum (E4M9) - Map Scroll', 'Ochre Cliffs (E5M1) - Map Scroll', 'Quay (E5M3) - Map Scroll', 'Ramparts of Perdition (E4M7) - Map Scroll', 'Rapids (E5M2) - Map Scroll', 'Sepulcher (E4M4) - Map Scroll', 'Shattered Bridge (E4M8) - Map Scroll', "Skein of D'Sparil (E5M9) - Map Scroll", 'The Aquifer (E3M9) - Map Scroll', 'The Azure Fortress (E3M4) - Map Scroll', 'The Catacombs (E2M5) - Map Scroll', 'The Cathedral (E1M6) - Map Scroll', 'The Cesspool (E3M2) - Map Scroll', 'The Chasm (E3M7) - Map Scroll', 'The Citadel (E1M5) - Map Scroll', 'The Confluence (E3M3) - Map Scroll', 'The Crater (E2M1) - Map Scroll', 'The Crypts (E1M7) - Map Scroll', 'The Docks (E1M1) - Map Scroll', 'The Dungeons (E1M2) - Map Scroll', 'The Gatehouse (E1M3) - Map Scroll', 'The Glacier (E2M9) - Map Scroll', 'The Graveyard (E1M9) - Map Scroll', 'The Great Hall (E2M7) - Map Scroll', 'The Guard Tower (E1M4) - Map Scroll', 'The Halls of Fear (E3M6) - Map Scroll', 'The Ice Grotto (E2M4) - Map Scroll', 'The Labyrinth (E2M6) - Map Scroll', 'The Lava Pits (E2M2) - Map Scroll', 'The Ophidian Lair (E3M5) - Map Scroll', 'The Portals of Chaos (E2M8) - Map Scroll', 'The River of Fire (E2M3) - Map Scroll', 'The Storehouse (E3M1) - Map Scroll', },
'Weapons': {'Dragon Claw', 'Ethereal Crossbow', 'Firemace', 'Gauntlets of the Necromancer', 'Hellstaff', 'Phoenix Rod', },
}

View File

@@ -3633,300 +3633,300 @@ location_table: Dict[int, LocationDict] = {
'index': -1,
'doom_type': -1,
'region': "The Chasm (E3M7) Blue"},
371517: {'name': "D'Sparil'S Keep (E3M8) - Phoenix Rod",
371517: {'name': "D'Sparil's Keep (E3M8) - Phoenix Rod",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 55,
'doom_type': 2003,
'region': "D'Sparil'S Keep (E3M8) Main"},
371518: {'name': "D'Sparil'S Keep (E3M8) - Ethereal Crossbow",
'region': "D'Sparil's Keep (E3M8) Main"},
371518: {'name': "D'Sparil's Keep (E3M8) - Ethereal Crossbow",
'episode': 3,
'check_sanity': True,
'map': 8,
'index': 56,
'doom_type': 2001,
'region': "D'Sparil'S Keep (E3M8) Main"},
371519: {'name': "D'Sparil'S Keep (E3M8) - Dragon Claw",
'region': "D'Sparil's Keep (E3M8) Main"},
371519: {'name': "D'Sparil's Keep (E3M8) - Dragon Claw",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 57,
'doom_type': 53,
'region': "D'Sparil'S Keep (E3M8) Main"},
371520: {'name': "D'Sparil'S Keep (E3M8) - Gauntlets of the Necromancer",
'region': "D'Sparil's Keep (E3M8) Main"},
371520: {'name': "D'Sparil's Keep (E3M8) - Gauntlets of the Necromancer",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 58,
'doom_type': 2005,
'region': "D'Sparil'S Keep (E3M8) Main"},
371521: {'name': "D'Sparil'S Keep (E3M8) - Hellstaff",
'region': "D'Sparil's Keep (E3M8) Main"},
371521: {'name': "D'Sparil's Keep (E3M8) - Hellstaff",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 59,
'doom_type': 2004,
'region': "D'Sparil'S Keep (E3M8) Main"},
371522: {'name': "D'Sparil'S Keep (E3M8) - Bag of Holding",
'region': "D'Sparil's Keep (E3M8) Main"},
371522: {'name': "D'Sparil's Keep (E3M8) - Bag of Holding",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 63,
'doom_type': 8,
'region': "D'Sparil'S Keep (E3M8) Main"},
371523: {'name': "D'Sparil'S Keep (E3M8) - Mystic Urn",
'region': "D'Sparil's Keep (E3M8) Main"},
371523: {'name': "D'Sparil's Keep (E3M8) - Mystic Urn",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 64,
'doom_type': 32,
'region': "D'Sparil'S Keep (E3M8) Main"},
371524: {'name': "D'Sparil'S Keep (E3M8) - Ring of Invincibility",
'region': "D'Sparil's Keep (E3M8) Main"},
371524: {'name': "D'Sparil's Keep (E3M8) - Ring of Invincibility",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 65,
'doom_type': 84,
'region': "D'Sparil'S Keep (E3M8) Main"},
371525: {'name': "D'Sparil'S Keep (E3M8) - Shadowsphere",
'region': "D'Sparil's Keep (E3M8) Main"},
371525: {'name': "D'Sparil's Keep (E3M8) - Shadowsphere",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 66,
'doom_type': 75,
'region': "D'Sparil'S Keep (E3M8) Main"},
371526: {'name': "D'Sparil'S Keep (E3M8) - Silver Shield",
'region': "D'Sparil's Keep (E3M8) Main"},
371526: {'name': "D'Sparil's Keep (E3M8) - Silver Shield",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 67,
'doom_type': 85,
'region': "D'Sparil'S Keep (E3M8) Main"},
371527: {'name': "D'Sparil'S Keep (E3M8) - Enchanted Shield",
'region': "D'Sparil's Keep (E3M8) Main"},
371527: {'name': "D'Sparil's Keep (E3M8) - Enchanted Shield",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 68,
'doom_type': 31,
'region': "D'Sparil'S Keep (E3M8) Main"},
371528: {'name': "D'Sparil'S Keep (E3M8) - Tome of Power",
'region': "D'Sparil's Keep (E3M8) Main"},
371528: {'name': "D'Sparil's Keep (E3M8) - Tome of Power",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': 69,
'doom_type': 86,
'region': "D'Sparil'S Keep (E3M8) Main"},
371529: {'name': "D'Sparil'S Keep (E3M8) - Tome of Power 2",
'region': "D'Sparil's Keep (E3M8) Main"},
371529: {'name': "D'Sparil's Keep (E3M8) - Tome of Power 2",
'episode': 3,
'check_sanity': True,
'map': 8,
'index': 70,
'doom_type': 86,
'region': "D'Sparil'S Keep (E3M8) Main"},
371530: {'name': "D'Sparil'S Keep (E3M8) - Chaos Device",
'region': "D'Sparil's Keep (E3M8) Main"},
371530: {'name': "D'Sparil's Keep (E3M8) - Chaos Device",
'episode': 3,
'check_sanity': True,
'map': 8,
'index': 71,
'doom_type': 36,
'region': "D'Sparil'S Keep (E3M8) Main"},
371531: {'name': "D'Sparil'S Keep (E3M8) - Tome of Power 3",
'region': "D'Sparil's Keep (E3M8) Main"},
371531: {'name': "D'Sparil's Keep (E3M8) - Tome of Power 3",
'episode': 3,
'check_sanity': True,
'map': 8,
'index': 245,
'doom_type': 86,
'region': "D'Sparil'S Keep (E3M8) Main"},
371532: {'name': "D'Sparil'S Keep (E3M8) - Exit",
'region': "D'Sparil's Keep (E3M8) Main"},
371532: {'name': "D'Sparil's Keep (E3M8) - Exit",
'episode': 3,
'check_sanity': False,
'map': 8,
'index': -1,
'doom_type': -1,
'region': "D'Sparil'S Keep (E3M8) Main"},
371533: {'name': 'The Aquifier (E3M9) - Blue key',
'region': "D'Sparil's Keep (E3M8) Main"},
371533: {'name': 'The Aquifer (E3M9) - Blue key',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 12,
'doom_type': 79,
'region': "The Aquifier (E3M9) Green"},
371534: {'name': 'The Aquifier (E3M9) - Green key',
'region': "The Aquifer (E3M9) Green"},
371534: {'name': 'The Aquifer (E3M9) - Green key',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 13,
'doom_type': 73,
'region': "The Aquifier (E3M9) Yellow"},
371535: {'name': 'The Aquifier (E3M9) - Yellow key',
'region': "The Aquifer (E3M9) Yellow"},
371535: {'name': 'The Aquifer (E3M9) - Yellow key',
'episode': 3,
'check_sanity': True,
'map': 9,
'index': 14,
'doom_type': 80,
'region': "The Aquifier (E3M9) Main"},
371536: {'name': 'The Aquifier (E3M9) - Ethereal Crossbow',
'region': "The Aquifer (E3M9) Main"},
371536: {'name': 'The Aquifer (E3M9) - Ethereal Crossbow',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 141,
'doom_type': 2001,
'region': "The Aquifier (E3M9) Main"},
371537: {'name': 'The Aquifier (E3M9) - Phoenix Rod',
'region': "The Aquifer (E3M9) Main"},
371537: {'name': 'The Aquifer (E3M9) - Phoenix Rod',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 142,
'doom_type': 2003,
'region': "The Aquifier (E3M9) Yellow"},
371538: {'name': 'The Aquifier (E3M9) - Dragon Claw',
'region': "The Aquifer (E3M9) Yellow"},
371538: {'name': 'The Aquifer (E3M9) - Dragon Claw',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 143,
'doom_type': 53,
'region': "The Aquifier (E3M9) Green"},
371539: {'name': 'The Aquifier (E3M9) - Hellstaff',
'region': "The Aquifer (E3M9) Green"},
371539: {'name': 'The Aquifer (E3M9) - Hellstaff',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 144,
'doom_type': 2004,
'region': "The Aquifier (E3M9) Green"},
371540: {'name': 'The Aquifier (E3M9) - Gauntlets of the Necromancer',
'region': "The Aquifer (E3M9) Green"},
371540: {'name': 'The Aquifer (E3M9) - Gauntlets of the Necromancer',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 145,
'doom_type': 2005,
'region': "The Aquifier (E3M9) Green"},
371541: {'name': 'The Aquifier (E3M9) - Ring of Invincibility',
'region': "The Aquifer (E3M9) Green"},
371541: {'name': 'The Aquifer (E3M9) - Ring of Invincibility',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 148,
'doom_type': 84,
'region': "The Aquifier (E3M9) Yellow"},
371542: {'name': 'The Aquifier (E3M9) - Mystic Urn',
'region': "The Aquifer (E3M9) Yellow"},
371542: {'name': 'The Aquifer (E3M9) - Mystic Urn',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 149,
'doom_type': 32,
'region': "The Aquifier (E3M9) Green"},
371543: {'name': 'The Aquifier (E3M9) - Silver Shield',
'region': "The Aquifer (E3M9) Green"},
371543: {'name': 'The Aquifer (E3M9) - Silver Shield',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 151,
'doom_type': 85,
'region': "The Aquifier (E3M9) Main"},
371544: {'name': 'The Aquifier (E3M9) - Tome of Power',
'region': "The Aquifer (E3M9) Main"},
371544: {'name': 'The Aquifer (E3M9) - Tome of Power',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 152,
'doom_type': 86,
'region': "The Aquifier (E3M9) Main"},
371545: {'name': 'The Aquifier (E3M9) - Bag of Holding',
'region': "The Aquifer (E3M9) Main"},
371545: {'name': 'The Aquifer (E3M9) - Bag of Holding',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 153,
'doom_type': 8,
'region': "The Aquifier (E3M9) Yellow"},
371546: {'name': 'The Aquifier (E3M9) - Morph Ovum',
'region': "The Aquifer (E3M9) Yellow"},
371546: {'name': 'The Aquifer (E3M9) - Morph Ovum',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 154,
'doom_type': 30,
'region': "The Aquifier (E3M9) Green"},
371547: {'name': 'The Aquifier (E3M9) - Map Scroll',
'region': "The Aquifer (E3M9) Green"},
371547: {'name': 'The Aquifer (E3M9) - Map Scroll',
'episode': 3,
'check_sanity': True,
'map': 9,
'index': 155,
'doom_type': 35,
'region': "The Aquifier (E3M9) Green"},
371548: {'name': 'The Aquifier (E3M9) - Chaos Device',
'region': "The Aquifer (E3M9) Green"},
371548: {'name': 'The Aquifer (E3M9) - Chaos Device',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 156,
'doom_type': 36,
'region': "The Aquifier (E3M9) Yellow"},
371549: {'name': 'The Aquifier (E3M9) - Enchanted Shield',
'region': "The Aquifer (E3M9) Yellow"},
371549: {'name': 'The Aquifer (E3M9) - Enchanted Shield',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 157,
'doom_type': 31,
'region': "The Aquifier (E3M9) Green"},
371550: {'name': 'The Aquifier (E3M9) - Tome of Power 2',
'region': "The Aquifer (E3M9) Green"},
371550: {'name': 'The Aquifer (E3M9) - Tome of Power 2',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 158,
'doom_type': 86,
'region': "The Aquifier (E3M9) Green"},
371551: {'name': 'The Aquifier (E3M9) - Torch',
'region': "The Aquifer (E3M9) Green"},
371551: {'name': 'The Aquifer (E3M9) - Torch',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 159,
'doom_type': 33,
'region': "The Aquifier (E3M9) Main"},
371552: {'name': 'The Aquifier (E3M9) - Shadowsphere',
'region': "The Aquifer (E3M9) Main"},
371552: {'name': 'The Aquifer (E3M9) - Shadowsphere',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 160,
'doom_type': 75,
'region': "The Aquifier (E3M9) Green"},
371553: {'name': 'The Aquifier (E3M9) - Silver Shield 2',
'region': "The Aquifer (E3M9) Green"},
371553: {'name': 'The Aquifer (E3M9) - Silver Shield 2',
'episode': 3,
'check_sanity': True,
'map': 9,
'index': 374,
'doom_type': 85,
'region': "The Aquifier (E3M9) Green"},
371554: {'name': 'The Aquifier (E3M9) - Firemace',
'region': "The Aquifer (E3M9) Green"},
371554: {'name': 'The Aquifer (E3M9) - Firemace',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 478,
'doom_type': 2002,
'region': "The Aquifier (E3M9) Green"},
371555: {'name': 'The Aquifier (E3M9) - Firemace 2',
'region': "The Aquifer (E3M9) Green"},
371555: {'name': 'The Aquifer (E3M9) - Firemace 2',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 526,
'doom_type': 2002,
'region': "The Aquifier (E3M9) Green"},
371556: {'name': 'The Aquifier (E3M9) - Firemace 3',
'region': "The Aquifer (E3M9) Green"},
371556: {'name': 'The Aquifer (E3M9) - Firemace 3',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': 527,
'doom_type': 2002,
'region': "The Aquifier (E3M9) Green"},
371557: {'name': 'The Aquifier (E3M9) - Firemace 4',
'region': "The Aquifer (E3M9) Green"},
371557: {'name': 'The Aquifer (E3M9) - Firemace 4',
'episode': 3,
'check_sanity': True,
'map': 9,
'index': 528,
'doom_type': 2002,
'region': "The Aquifier (E3M9) Yellow"},
371558: {'name': 'The Aquifier (E3M9) - Exit',
'region': "The Aquifer (E3M9) Yellow"},
371558: {'name': 'The Aquifer (E3M9) - Exit',
'episode': 3,
'check_sanity': False,
'map': 9,
'index': -1,
'doom_type': -1,
'region': "The Aquifier (E3M9) Blue"},
'region': "The Aquifer (E3M9) Blue"},
371559: {'name': 'Catafalque (E4M1) - Yellow key',
'episode': 4,
'check_sanity': False,
@@ -5963,7 +5963,7 @@ location_table: Dict[int, LocationDict] = {
'map': 3,
'index': 213,
'doom_type': 2005,
'region': "Quay (E5M3) Main"},
'region': "Quay (E5M3) Blue"},
371850: {'name': 'Quay (E5M3) - Dragon Claw',
'episode': 5,
'check_sanity': False,
@@ -6145,7 +6145,7 @@ location_table: Dict[int, LocationDict] = {
'map': 4,
'index': 3,
'doom_type': 79,
'region': "Courtyard (E5M4) Main"},
'region': "Courtyard (E5M4) Green"},
371876: {'name': 'Courtyard (E5M4) - Yellow key',
'episode': 5,
'check_sanity': False,
@@ -6159,7 +6159,7 @@ location_table: Dict[int, LocationDict] = {
'map': 4,
'index': 21,
'doom_type': 73,
'region': "Courtyard (E5M4) Kakis"},
'region': "Courtyard (E5M4) Yellow"},
371878: {'name': 'Courtyard (E5M4) - Gauntlets of the Necromancer',
'episode': 5,
'check_sanity': False,
@@ -6187,14 +6187,14 @@ location_table: Dict[int, LocationDict] = {
'map': 4,
'index': 87,
'doom_type': 2004,
'region': "Courtyard (E5M4) Kakis"},
'region': "Courtyard (E5M4) Yellow"},
371882: {'name': 'Courtyard (E5M4) - Phoenix Rod',
'episode': 5,
'check_sanity': False,
'map': 4,
'index': 88,
'doom_type': 2003,
'region': "Courtyard (E5M4) Main"},
'region': "Courtyard (E5M4) Green"},
371883: {'name': 'Courtyard (E5M4) - Morph Ovum',
'episode': 5,
'check_sanity': False,
@@ -6229,7 +6229,7 @@ location_table: Dict[int, LocationDict] = {
'map': 4,
'index': 104,
'doom_type': 84,
'region': "Courtyard (E5M4) Kakis"},
'region': "Courtyard (E5M4) Yellow"},
371888: {'name': 'Courtyard (E5M4) - Shadowsphere',
'episode': 5,
'check_sanity': False,
@@ -6250,14 +6250,14 @@ location_table: Dict[int, LocationDict] = {
'map': 4,
'index': 107,
'doom_type': 35,
'region': "Courtyard (E5M4) Kakis"},
'region': "Courtyard (E5M4) Yellow"},
371891: {'name': 'Courtyard (E5M4) - Chaos Device',
'episode': 5,
'check_sanity': False,
'map': 4,
'index': 108,
'doom_type': 36,
'region': "Courtyard (E5M4) Main"},
'region': "Courtyard (E5M4) Green"},
371892: {'name': 'Courtyard (E5M4) - Tome of Power',
'episode': 5,
'check_sanity': False,
@@ -6278,7 +6278,7 @@ location_table: Dict[int, LocationDict] = {
'map': 4,
'index': 111,
'doom_type': 86,
'region': "Courtyard (E5M4) Kakis"},
'region': "Courtyard (E5M4) Yellow"},
371895: {'name': 'Courtyard (E5M4) - Torch',
'episode': 5,
'check_sanity': False,
@@ -6299,7 +6299,7 @@ location_table: Dict[int, LocationDict] = {
'map': 4,
'index': 219,
'doom_type': 85,
'region': "Courtyard (E5M4) Kakis"},
'region': "Courtyard (E5M4) Yellow"},
371898: {'name': 'Courtyard (E5M4) - Bag of Holding 3',
'episode': 5,
'check_sanity': False,
@@ -7247,23 +7247,23 @@ location_name_groups: Dict[str, Set[str]] = {
'Courtyard (E5M4) - Torch',
'Courtyard (E5M4) - Yellow key',
},
"D'Sparil'S Keep (E3M8)": {
"D'Sparil'S Keep (E3M8) - Bag of Holding",
"D'Sparil'S Keep (E3M8) - Chaos Device",
"D'Sparil'S Keep (E3M8) - Dragon Claw",
"D'Sparil'S Keep (E3M8) - Enchanted Shield",
"D'Sparil'S Keep (E3M8) - Ethereal Crossbow",
"D'Sparil'S Keep (E3M8) - Exit",
"D'Sparil'S Keep (E3M8) - Gauntlets of the Necromancer",
"D'Sparil'S Keep (E3M8) - Hellstaff",
"D'Sparil'S Keep (E3M8) - Mystic Urn",
"D'Sparil'S Keep (E3M8) - Phoenix Rod",
"D'Sparil'S Keep (E3M8) - Ring of Invincibility",
"D'Sparil'S Keep (E3M8) - Shadowsphere",
"D'Sparil'S Keep (E3M8) - Silver Shield",
"D'Sparil'S Keep (E3M8) - Tome of Power",
"D'Sparil'S Keep (E3M8) - Tome of Power 2",
"D'Sparil'S Keep (E3M8) - Tome of Power 3",
"D'Sparil's Keep (E3M8)": {
"D'Sparil's Keep (E3M8) - Bag of Holding",
"D'Sparil's Keep (E3M8) - Chaos Device",
"D'Sparil's Keep (E3M8) - Dragon Claw",
"D'Sparil's Keep (E3M8) - Enchanted Shield",
"D'Sparil's Keep (E3M8) - Ethereal Crossbow",
"D'Sparil's Keep (E3M8) - Exit",
"D'Sparil's Keep (E3M8) - Gauntlets of the Necromancer",
"D'Sparil's Keep (E3M8) - Hellstaff",
"D'Sparil's Keep (E3M8) - Mystic Urn",
"D'Sparil's Keep (E3M8) - Phoenix Rod",
"D'Sparil's Keep (E3M8) - Ring of Invincibility",
"D'Sparil's Keep (E3M8) - Shadowsphere",
"D'Sparil's Keep (E3M8) - Silver Shield",
"D'Sparil's Keep (E3M8) - Tome of Power",
"D'Sparil's Keep (E3M8) - Tome of Power 2",
"D'Sparil's Keep (E3M8) - Tome of Power 3",
},
'Field of Judgement (E5M8)': {
'Field of Judgement (E5M8) - Bag of Holding',
@@ -7641,33 +7641,33 @@ location_name_groups: Dict[str, Set[str]] = {
"Skein of D'Sparil (E5M9) - Torch",
"Skein of D'Sparil (E5M9) - Yellow key",
},
'The Aquifier (E3M9)': {
'The Aquifier (E3M9) - Bag of Holding',
'The Aquifier (E3M9) - Blue key',
'The Aquifier (E3M9) - Chaos Device',
'The Aquifier (E3M9) - Dragon Claw',
'The Aquifier (E3M9) - Enchanted Shield',
'The Aquifier (E3M9) - Ethereal Crossbow',
'The Aquifier (E3M9) - Exit',
'The Aquifier (E3M9) - Firemace',
'The Aquifier (E3M9) - Firemace 2',
'The Aquifier (E3M9) - Firemace 3',
'The Aquifier (E3M9) - Firemace 4',
'The Aquifier (E3M9) - Gauntlets of the Necromancer',
'The Aquifier (E3M9) - Green key',
'The Aquifier (E3M9) - Hellstaff',
'The Aquifier (E3M9) - Map Scroll',
'The Aquifier (E3M9) - Morph Ovum',
'The Aquifier (E3M9) - Mystic Urn',
'The Aquifier (E3M9) - Phoenix Rod',
'The Aquifier (E3M9) - Ring of Invincibility',
'The Aquifier (E3M9) - Shadowsphere',
'The Aquifier (E3M9) - Silver Shield',
'The Aquifier (E3M9) - Silver Shield 2',
'The Aquifier (E3M9) - Tome of Power',
'The Aquifier (E3M9) - Tome of Power 2',
'The Aquifier (E3M9) - Torch',
'The Aquifier (E3M9) - Yellow key',
'The Aquifer (E3M9)': {
'The Aquifer (E3M9) - Bag of Holding',
'The Aquifer (E3M9) - Blue key',
'The Aquifer (E3M9) - Chaos Device',
'The Aquifer (E3M9) - Dragon Claw',
'The Aquifer (E3M9) - Enchanted Shield',
'The Aquifer (E3M9) - Ethereal Crossbow',
'The Aquifer (E3M9) - Exit',
'The Aquifer (E3M9) - Firemace',
'The Aquifer (E3M9) - Firemace 2',
'The Aquifer (E3M9) - Firemace 3',
'The Aquifer (E3M9) - Firemace 4',
'The Aquifer (E3M9) - Gauntlets of the Necromancer',
'The Aquifer (E3M9) - Green key',
'The Aquifer (E3M9) - Hellstaff',
'The Aquifer (E3M9) - Map Scroll',
'The Aquifer (E3M9) - Morph Ovum',
'The Aquifer (E3M9) - Mystic Urn',
'The Aquifer (E3M9) - Phoenix Rod',
'The Aquifer (E3M9) - Ring of Invincibility',
'The Aquifer (E3M9) - Shadowsphere',
'The Aquifer (E3M9) - Silver Shield',
'The Aquifer (E3M9) - Silver Shield 2',
'The Aquifer (E3M9) - Tome of Power',
'The Aquifer (E3M9) - Tome of Power 2',
'The Aquifer (E3M9) - Torch',
'The Aquifer (E3M9) - Yellow key',
},
'The Azure Fortress (E3M4)': {
'The Azure Fortress (E3M4) - Bag of Holding',

View File

@@ -29,8 +29,8 @@ map_names: List[str] = [
'The Ophidian Lair (E3M5)',
'The Halls of Fear (E3M6)',
'The Chasm (E3M7)',
"D'Sparil'S Keep (E3M8)",
'The Aquifier (E3M9)',
"D'Sparil's Keep (E3M8)",
'The Aquifer (E3M9)',
'Catafalque (E4M1)',
'Blockhouse (E4M2)',
'Ambulatory (E4M3)',

View File

@@ -520,34 +520,34 @@ regions:List[RegionDict] = [
"episode":3,
"connections":[{"target":"The Chasm (E3M7) Yellow","pro":False}]},
# D'Sparil'S Keep (E3M8)
{"name":"D'Sparil'S Keep (E3M8) Main",
# D'Sparil's Keep (E3M8)
{"name":"D'Sparil's Keep (E3M8) Main",
"connects_to_hub":True,
"episode":3,
"connections":[]},
# The Aquifier (E3M9)
{"name":"The Aquifier (E3M9) Main",
# The Aquifer (E3M9)
{"name":"The Aquifer (E3M9) Main",
"connects_to_hub":True,
"episode":3,
"connections":[{"target":"The Aquifier (E3M9) Yellow","pro":False}]},
{"name":"The Aquifier (E3M9) Blue",
"connections":[{"target":"The Aquifer (E3M9) Yellow","pro":False}]},
{"name":"The Aquifer (E3M9) Blue",
"connects_to_hub":False,
"episode":3,
"connections":[]},
{"name":"The Aquifier (E3M9) Yellow",
{"name":"The Aquifer (E3M9) Yellow",
"connects_to_hub":False,
"episode":3,
"connections":[
{"target":"The Aquifier (E3M9) Green","pro":False},
{"target":"The Aquifier (E3M9) Main","pro":False}]},
{"name":"The Aquifier (E3M9) Green",
{"target":"The Aquifer (E3M9) Green","pro":False},
{"target":"The Aquifer (E3M9) Main","pro":False}]},
{"name":"The Aquifer (E3M9) Green",
"connects_to_hub":False,
"episode":3,
"connections":[
{"target":"The Aquifier (E3M9) Yellow","pro":False},
{"target":"The Aquifier (E3M9) Main","pro":False},
{"target":"The Aquifier (E3M9) Blue","pro":False}]},
{"target":"The Aquifer (E3M9) Yellow","pro":False},
{"target":"The Aquifer (E3M9) Main","pro":False},
{"target":"The Aquifer (E3M9) Blue","pro":False}]},
# Catafalque (E4M1)
{"name":"Catafalque (E4M1) Main",
@@ -795,16 +795,22 @@ regions:List[RegionDict] = [
"connects_to_hub":True,
"episode":5,
"connections":[
{"target":"Courtyard (E5M4) Kakis","pro":False},
{"target":"Courtyard (E5M4) Yellow","pro":False},
{"target":"Courtyard (E5M4) Blue","pro":False}]},
{"name":"Courtyard (E5M4) Blue",
"connects_to_hub":False,
"episode":5,
"connections":[{"target":"Courtyard (E5M4) Main","pro":False}]},
{"name":"Courtyard (E5M4) Kakis",
{"name":"Courtyard (E5M4) Yellow",
"connects_to_hub":False,
"episode":5,
"connections":[{"target":"Courtyard (E5M4) Main","pro":False}]},
"connections":[
{"target":"Courtyard (E5M4) Main","pro":False},
{"target":"Courtyard (E5M4) Green","pro":False}]},
{"name":"Courtyard (E5M4) Green",
"connects_to_hub":False,
"episode":5,
"connections":[{"target":"Courtyard (E5M4) Yellow","pro":False}]},
# Hydratyr (E5M5)
{"name":"Hydratyr (E5M5) Main",

View File

@@ -388,9 +388,9 @@ def set_episode3_rules(player, multiworld, pro):
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(multiworld.get_entrance("Hub -> D'Sparil'S Keep (E3M8) Main", player), lambda state:
state.has("D'Sparil'S Keep (E3M8)", player, 1) and
# D'Sparil's Keep (E3M8)
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
state.has("Dragon Claw", player, 1) and
@@ -398,23 +398,23 @@ def set_episode3_rules(player, multiworld, pro):
state.has("Firemace", player, 1) and
state.has("Hellstaff", player, 1))
# The Aquifier (E3M9)
set_rule(multiworld.get_entrance("Hub -> The Aquifier (E3M9) Main", player), lambda state:
state.has("The Aquifier (E3M9)", player, 1) and
# The Aquifer (E3M9)
set_rule(multiworld.get_entrance("Hub -> The Aquifer (E3M9) Main", player), lambda state:
state.has("The Aquifer (E3M9)", 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) and
state.has("Phoenix Rod", player, 1) and
state.has("Firemace", player, 1) and
state.has("Hellstaff", player, 1))
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(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(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(multiworld.get_entrance("The Aquifier (E3M9) Green -> The Aquifier (E3M9) Yellow", player), lambda state:
state.has("The Aquifier (E3M9) - Green key", player, 1))
set_rule(multiworld.get_entrance("The Aquifer (E3M9) Main -> The Aquifer (E3M9) Yellow", player), lambda state:
state.has("The Aquifer (E3M9) - Yellow key", player, 1))
set_rule(multiworld.get_entrance("The Aquifer (E3M9) Yellow -> The Aquifer (E3M9) Green", player), lambda state:
state.has("The Aquifer (E3M9) - Green key", player, 1))
set_rule(multiworld.get_entrance("The Aquifer (E3M9) Yellow -> The Aquifer (E3M9) Main", player), lambda state:
state.has("The Aquifer (E3M9) - Yellow key", player, 1))
set_rule(multiworld.get_entrance("The Aquifer (E3M9) Green -> The Aquifer (E3M9) Yellow", player), lambda state:
state.has("The Aquifer (E3M9) - Green key", player, 1))
def set_episode4_rules(player, multiworld, pro):
@@ -623,15 +623,17 @@ def set_episode5_rules(player, multiworld, pro):
(state.has("Phoenix Rod", player, 1) or
state.has("Firemace", player, 1) or
state.has("Hellstaff", player, 1)))
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(multiworld.get_entrance("Courtyard (E5M4) Main -> Courtyard (E5M4) Yellow", player), lambda state:
state.has("Courtyard (E5M4) - Yellow key", player, 1))
set_rule(multiworld.get_entrance("Courtyard (E5M4) Main -> Courtyard (E5M4) Blue", player), lambda state:
state.has("Courtyard (E5M4) - Blue key", player, 1))
set_rule(multiworld.get_entrance("Courtyard (E5M4) Blue -> Courtyard (E5M4) Main", player), lambda state:
state.has("Courtyard (E5M4) - Blue key", player, 1))
set_rule(multiworld.get_entrance("Courtyard (E5M4) Kakis -> Courtyard (E5M4) Main", player), lambda state:
state.has("Courtyard (E5M4) - Yellow key", player, 1) or
set_rule(multiworld.get_entrance("Courtyard (E5M4) Yellow -> Courtyard (E5M4) Main", player), lambda state:
state.has("Courtyard (E5M4) - Yellow key", player, 1))
set_rule(multiworld.get_entrance("Courtyard (E5M4) Yellow -> Courtyard (E5M4) Green", player), lambda state:
state.has("Courtyard (E5M4) - Green key", player, 1))
set_rule(multiworld.get_entrance("Courtyard (E5M4) Green -> Courtyard (E5M4) Yellow", player), lambda state:
state.has("Courtyard (E5M4) - Green key", player, 1))
# Hydratyr (E5M5)

View File

@@ -49,18 +49,18 @@ class HereticWorld(World):
location_name_to_id = {data["name"]: loc_id for loc_id, data in Locations.location_table.items()}
location_name_groups = Locations.location_name_groups
starting_level_for_episode: List[str] = [
"The Docks (E1M1)",
"The Crater (E2M1)",
"The Storehouse (E3M1)",
"Catafalque (E4M1)",
"Ochre Cliffs (E5M1)"
]
starting_level_for_episode: Dict[int, str] = {
1: "The Docks (E1M1)",
2: "The Crater (E2M1)",
3: "The Storehouse (E3M1)",
4: "Catafalque (E4M1)",
5: "Ochre Cliffs (E5M1)"
}
boss_level_for_episode: List[str] = [
all_boss_levels: List[str] = [
"Hell's Maw (E1M8)",
"The Portals of Chaos (E2M8)",
"D'Sparil'S Keep (E3M8)",
"D'Sparil's Keep (E3M8)",
"Shattered Bridge (E4M8)",
"Field of Judgement (E5M8)"
]
@@ -82,6 +82,7 @@ class HereticWorld(World):
def __init__(self, multiworld: MultiWorld, player: int):
self.included_episodes = [1, 1, 1, 0, 0]
self.location_count = 0
self.starting_levels = []
super().__init__(multiworld, player)
@@ -100,6 +101,14 @@ class HereticWorld(World):
if self.get_episode_count() == 0:
self.included_episodes[0] = 1
self.starting_levels = [level_name for (episode, level_name) in self.starting_level_for_episode.items()
if self.included_episodes[episode - 1]]
# For Solo Episode 1, place the Yellow Key for E1M1 early.
# Gives the generator five potential placements (plus the forced key) instead of only two.
if self.get_episode_count() == 1 and self.included_episodes[0]:
self.multiworld.early_items[self.player]["The Docks (E1M1) - Yellow key"] = 1
def create_regions(self):
pro = self.options.pro.value
check_sanity = self.options.check_sanity.value
@@ -154,7 +163,7 @@ class HereticWorld(World):
def completion_rule(self, state: CollectionState):
goal_levels = Maps.map_names
if self.options.goal.value:
goal_levels = self.boss_level_for_episode
goal_levels = self.all_boss_levels
for map_name in goal_levels:
if map_name + " - Exit" not in self.location_name_to_id:
@@ -203,7 +212,7 @@ class HereticWorld(World):
if item["episode"] != -1 and not self.included_episodes[item["episode"] - 1]:
continue
count = item["count"] if item["name"] not in self.starting_level_for_episode else item["count"] - 1
count = item["count"] if item["name"] not in self.starting_levels else item["count"] - 1
itempool += [self.create_item(item["name"]) for _ in range(count)]
# Bag(s) of Holding based on options
@@ -236,9 +245,8 @@ class HereticWorld(World):
self.location_count -= 1
# Give starting levels right away
for i in range(len(self.included_episodes)):
if self.included_episodes[i]:
self.multiworld.push_precollected(self.create_item(self.starting_level_for_episode[i]))
for map_name in self.starting_levels:
self.multiworld.push_precollected(self.create_item(map_name))
# Give Computer area maps if option selected
if self.options.start_with_map_scrolls.value: