Added PoD
Added Logic for Desert,Hera,Aga,PoD Revamped Logic for HC, Eastern
This commit is contained in:
@@ -901,6 +901,21 @@ class Door(object):
|
||||
bitmask += 0x80 if self.direction == Direction.Up else 0
|
||||
return [self.roomIndex, bitmask + self.quadrant, self.shiftX, self.shiftY]
|
||||
|
||||
def dir(self, direction, room, doorIndex, layer):
|
||||
self.direction = direction
|
||||
self.roomIndex = room
|
||||
self.doorIndex = doorIndex
|
||||
self.layer = layer
|
||||
return self
|
||||
|
||||
def ss(self, quadrant, shift_y, shift_x, zero_hz_cam=False, zero_vt_cam=False):
|
||||
self.quadrant = quadrant
|
||||
self.shiftY = shift_y
|
||||
self.shiftX = shift_x
|
||||
self.zeroHzCam = zero_hz_cam
|
||||
self.zeroVtCam = zero_vt_cam
|
||||
return self
|
||||
|
||||
def small_key(self):
|
||||
self.smallKey = True
|
||||
return self
|
||||
|
||||
101
DoorShuffle.py
101
DoorShuffle.py
@@ -3,10 +3,11 @@ import collections
|
||||
import logging
|
||||
|
||||
from BaseClasses import RegionType, DoorType, Direction, Sector, pol_idx
|
||||
from Dungeons import hyrule_castle_regions, eastern_regions, desert_regions, hera_regions, tower_regions
|
||||
from Dungeons import hyrule_castle_regions, eastern_regions, desert_regions, hera_regions, tower_regions, pod_regions
|
||||
from Dungeons import dungeon_regions
|
||||
from RoomData import DoorKind, PairedDoor
|
||||
|
||||
|
||||
def link_doors(world, player):
|
||||
|
||||
# Drop-down connections & push blocks
|
||||
@@ -25,6 +26,8 @@ def link_doors(world, player):
|
||||
connect_simple_door(world, exitName, regionName, player)
|
||||
for exitName, regionName in dungeon_warps:
|
||||
connect_simple_door(world, exitName, regionName, player)
|
||||
for ent, ext in ladders:
|
||||
connect_two_way(world, ent, ext, player)
|
||||
|
||||
if world.doorShuffle == 'vanilla':
|
||||
for entrance, ext in spiral_staircases:
|
||||
@@ -205,12 +208,14 @@ def within_dungeon(world, player):
|
||||
dungeon_region_starts_dp = ['Desert Back Lobby', 'Desert Main Lobby', 'Desert West Lobby', 'Desert East Lobby']
|
||||
dungeon_region_starts_th = ['Hera Lobby']
|
||||
dungeon_region_starts_at = ['Tower Lobby']
|
||||
dungeon_region_starts_pd = ['PoD Lobby']
|
||||
dungeon_region_lists = [
|
||||
(dungeon_region_starts_es, hyrule_castle_regions),
|
||||
(dungeon_region_starts_ep, eastern_regions),
|
||||
(dungeon_region_starts_dp, desert_regions),
|
||||
(dungeon_region_starts_th, hera_regions),
|
||||
(dungeon_region_starts_at, tower_regions),
|
||||
(dungeon_region_starts_pd, pod_regions),
|
||||
]
|
||||
for start_list, region_list in dungeon_region_lists:
|
||||
shuffle_dungeon(world, player, start_list, region_list)
|
||||
@@ -349,6 +354,8 @@ def doors_compatible(a, b):
|
||||
return doors_fit_mandatory_pair(straight_staircases, a, b)
|
||||
if a.type == DoorType.Interior:
|
||||
return doors_fit_mandatory_pair(interior_doors, a, b)
|
||||
if a.type == DoorType.Ladder:
|
||||
return doors_fit_mandatory_pair(ladders, a, b)
|
||||
if a.type == DoorType.Normal and (a.smallKey or b.smallKey or a.bigKey or b.bigKey):
|
||||
return doors_fit_mandatory_pair(key_doors, a, b)
|
||||
if a.type in [DoorType.Hole, DoorType.Warp, DoorType.Logical]:
|
||||
@@ -378,7 +385,8 @@ def cross_dungeon(world, player):
|
||||
dp = convert_to_sectors(dungeon_regions['Desert'], world, player)
|
||||
th = convert_to_sectors(dungeon_regions['Hera'], world, player)
|
||||
at = convert_to_sectors(dungeon_regions['Tower'], world, player)
|
||||
dungeon_split = split_up_sectors(hc + ep + dp + th + at, default_dungeon_sets)
|
||||
pd = convert_to_sectors(dungeon_regions['PoD'], world, player)
|
||||
dungeon_split = split_up_sectors(hc + ep + dp + th + at + pd, default_dungeon_sets)
|
||||
dp_split = split_up_sectors(dungeon_split.pop(2), desert_default_entrance_sets)
|
||||
dungeon_sectors = []
|
||||
# todo - adjust dungeon item pools
|
||||
@@ -398,8 +406,9 @@ def experiment(world, player):
|
||||
dp = convert_to_sectors(dungeon_regions['Desert'], world, player)
|
||||
th = convert_to_sectors(dungeon_regions['Hera'], world, player)
|
||||
at = convert_to_sectors(dungeon_regions['Tower'], world, player)
|
||||
pd = convert_to_sectors(dungeon_regions['PoD'], world, player)
|
||||
dungeon_sectors = []
|
||||
for idx, sector_list in enumerate([hc, ep, th, at]):
|
||||
for idx, sector_list in enumerate([hc, ep, th, at, pd]):
|
||||
dungeon_sectors.append((sector_list, entrance_sets[idx]))
|
||||
dp_split = split_up_sectors(dp, desert_default_entrance_sets)
|
||||
for idx, sector_list in enumerate(dp_split):
|
||||
@@ -421,6 +430,8 @@ def convert_to_sectors(region_names, world, player):
|
||||
sectors = []
|
||||
while len(region_list) > 0:
|
||||
region = region_list.pop()
|
||||
sector = None
|
||||
new_sector = True
|
||||
region_chunk = [region]
|
||||
exits = []
|
||||
exits.extend(region.exits)
|
||||
@@ -433,14 +444,21 @@ def convert_to_sectors(region_names, world, player):
|
||||
region_list.remove(connect_region)
|
||||
region_chunk.append(connect_region)
|
||||
exits.extend(connect_region.exits)
|
||||
if connect_region not in region_chunk:
|
||||
for existing in sectors:
|
||||
if connect_region in existing.regions:
|
||||
sector = existing
|
||||
new_sector = False
|
||||
else:
|
||||
door = world.check_for_door(ext.name, player)
|
||||
if door is not None:
|
||||
outstanding_doors.append(door)
|
||||
sector = Sector()
|
||||
if new_sector:
|
||||
sector = Sector()
|
||||
sector.regions.extend(region_chunk)
|
||||
sector.outstanding_doors.extend(outstanding_doors)
|
||||
sectors.append(sector)
|
||||
if new_sector:
|
||||
sectors.append(sector)
|
||||
return sectors
|
||||
|
||||
|
||||
@@ -645,6 +663,7 @@ def shuffle_dungeon_no_repeats(world, player, available_sectors, entrance_region
|
||||
# Check that we used everything, we failed otherwise
|
||||
if len(available_sectors) != 1:
|
||||
logger.warning('Failed to add all regions/doors to dungeon, generation will likely fail.')
|
||||
return available_sectors[0]
|
||||
|
||||
|
||||
def extend_reachable(search_regions, visited_regions, world, player):
|
||||
@@ -690,7 +709,7 @@ def find_all_compatible_door_in_list(door, doors):
|
||||
return result
|
||||
|
||||
|
||||
# this method also assumes that sectors have been build appropriately
|
||||
# this method also assumes that sectors have been built appropriately - so only randomizable doors get here
|
||||
def doors_compatible_ignore_keys(a, b):
|
||||
if a.type != b.type:
|
||||
return False
|
||||
@@ -763,7 +782,12 @@ logical_connections = [
|
||||
('Hyrule Dungeon North Abyss Catwalk Dropdown', 'Hyrule Dungeon North Abyss'),
|
||||
('Sewers Secret Room Push Block', 'Sewers Secret Room Blocked Path'),
|
||||
('Eastern Hint Tile Push Block', 'Eastern Compass Area'),
|
||||
('Hera Big Chest Landing Exit', 'Hera 4F')
|
||||
('Hera Big Chest Landing Exit', 'Hera 4F'),
|
||||
('PoD Arena Main Crystal Path', 'PoD Arena Crystal'),
|
||||
('PoD Arena Crystal Path', 'PoD Arena Main'),
|
||||
('PoD Arena Bridge Drop Down', 'PoD Arena Main'),
|
||||
('PoD Map Balcony Drop Down', 'PoD Sexy Statue'),
|
||||
('PoD Basement Ledge Drop Down', 'PoD Stalfos Basement'),
|
||||
]
|
||||
|
||||
spiral_staircases = [
|
||||
@@ -783,13 +807,20 @@ spiral_staircases = [
|
||||
('Tower Room 03 Up Stairs', 'Tower Lone Statue Down Stairs'),
|
||||
('Tower Dark Chargers Up Stairs', 'Tower Dual Statues Down Stairs'),
|
||||
('Tower Dark Archers Up Stairs', 'Tower Red Spears Down Stairs'),
|
||||
('Tower Pacifist Run Up Stairs','Tower Push Statue Down Stairs'),
|
||||
('Tower Pacifist Run Up Stairs', 'Tower Push Statue Down Stairs'),
|
||||
('PoD Left Cage Down Stairs', 'PoD Shooter Room Up Stairs'),
|
||||
('PoD Middle Cage Down Stairs', 'PoD Warp Room Up Stairs'),
|
||||
('PoD Basement Ledge Up Stairs', 'PoD Big Key Landing Down Stairs'),
|
||||
('PoD Compass Room W Down Stairs', 'PoD Dark Basement W Up Stairs'),
|
||||
('PoD Compass Room E Down Stairs', 'PoD Dark Basement E Up Stairs'),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
straight_staircases = [
|
||||
('Hyrule Castle Lobby North Stairs', 'Hyrule Castle Throne Room South Stairs'),
|
||||
('Sewers Rope Room North Stairs', 'Sewers Dark Cross South Stairs'),
|
||||
('Tower Catwalk North Stairs', 'Tower Antechamber South Stairs')
|
||||
('Tower Catwalk North Stairs', 'Tower Antechamber South Stairs'),
|
||||
('PoD Conveyor North Stairs', 'PoD Map Balcony South Stairs'),
|
||||
]
|
||||
|
||||
open_edges = [
|
||||
@@ -819,11 +850,24 @@ falldown_pits = [
|
||||
('Hera 5F Normal Holes', 'Hera 4F'),
|
||||
('Hera Boss Outer Hole', 'Hera 5F'),
|
||||
('Hera Boss Inner Hole', 'Hera 4F'),
|
||||
('PoD Pit Room Freefall', 'PoD Stalfos Basement'),
|
||||
('PoD Pit Room Bomb Hole', 'PoD Basement Ledge'),
|
||||
('PoD Big Key Landing Hole', 'PoD Stalfos Basement'),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
dungeon_warps = [
|
||||
('Eastern Fairies\' Warp', 'Eastern Courtyard'),
|
||||
('Hera Fairies\' Warp', 'Hera 5F')
|
||||
('Hera Fairies\' Warp', 'Hera 5F'),
|
||||
('PoD Warp Hint Warp', 'PoD Warp Room'),
|
||||
('PoD Warp Room Warp', 'PoD Warp Hint'),
|
||||
('PoD Stalfos Basement Warp', 'PoD Warp Room'),
|
||||
('PoD Callback Warp', 'PoD Dark Alley'),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
ladders = [
|
||||
('PoD Bow Statue Down Ladder', 'PoD Dark Pegs Up Ladder')
|
||||
]
|
||||
|
||||
interior_doors = [
|
||||
@@ -856,6 +900,18 @@ interior_doors = [
|
||||
('Tower Circle of Pots WS', 'Tower Pacifist Run ES'),
|
||||
('Tower Push Statue WS', 'Tower Catwalk ES'),
|
||||
('Tower Antechamber NW', 'Tower Altar SW'),
|
||||
('PoD Lobby N', 'PoD Middle Cage S'),
|
||||
('PoD Lobby NW', 'PoD Left Cage SW'),
|
||||
('PoD Lobby NE', 'PoD Middle Cage SE'),
|
||||
('PoD Warp Hint SE', 'PoD Jelly Hall NE'),
|
||||
('PoD Jelly Hall NW', 'PoD Mimics 1 SW'),
|
||||
('PoD Falling Bridge EN', 'PoD Compass Room WN'),
|
||||
('PoD Compass Room SE', 'PoD Harmless Hellway NE'),
|
||||
('PoD Mimics 2 NW', 'PoD Bow Statue SW'),
|
||||
('PoD Dark Pegs WN', 'PoD Lonely Turtle EN'),
|
||||
('PoD Lonely Turtle SW', 'PoD Turtle Party NW'),
|
||||
('PoD Turtle Party ES', 'PoD Callback WS'),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
key_doors = [
|
||||
@@ -872,6 +928,9 @@ key_doors = [
|
||||
('Desert Wall Slide NW', 'Desert Boss SW'),
|
||||
('Hera Lobby Key Stairs', 'Hera Tile Room Up Stairs'),
|
||||
('Hera Startile Corner NW', 'Hera Startile Wide SW'),
|
||||
('PoD Middle Cage N', 'PoD Pit Room S'),
|
||||
('PoD Arena Main NW', 'PoD Falling Bridge SW'),
|
||||
('PoD Falling Bridge WN', 'PoD Dark Maze EN'),
|
||||
]
|
||||
|
||||
default_door_connections = [
|
||||
@@ -901,15 +960,28 @@ default_door_connections = [
|
||||
('Eastern Attic Start WS', 'Eastern Attic Switches ES'),
|
||||
('Eastern Attic Switches WS', 'Eastern Eyegores ES'),
|
||||
('Desert Compass NW', 'Desert Cannonball S'),
|
||||
('Desert Beamos Hall NE', 'Desert Tiles 2 SE')
|
||||
('Desert Beamos Hall NE', 'Desert Tiles 2 SE'),
|
||||
('PoD Middle Cage N', 'PoD Pit Room S'),
|
||||
('PoD Pit Room NW', 'PoD Arena Main SW'),
|
||||
('PoD Pit Room NE', 'PoD Arena Bridge SE'),
|
||||
('PoD Arena Main NW', 'PoD Falling Bridge SW'),
|
||||
('PoD Arena Crystals E', 'PoD Sexy Statue W'),
|
||||
('PoD Mimics 1 NW', 'PoD Conveyor SW'),
|
||||
('PoD Map Balcony WS', 'PoD Arena Ledge ES'),
|
||||
('PoD Falling Bridge WN', 'PoD Dark Maze EN'),
|
||||
('PoD Dark Maze E', 'PoD Big Chest Balcony W'),
|
||||
('PoD Sexy Statue NW', 'PoD Mimics 2 SW'),
|
||||
]
|
||||
|
||||
|
||||
# ('', ''),
|
||||
default_one_way_connections = [
|
||||
('Sewers Pull Switch S', 'Sanctuary N'),
|
||||
('Eastern Eyegores NE', 'Eastern Boss SE'),
|
||||
('Desert Wall Slide NW', 'Desert Boss SW'),
|
||||
('Tower Altar NW', 'Tower Agahnim 1 SW')
|
||||
('Tower Altar NW', 'Tower Agahnim 1 SW'),
|
||||
('PoD Harmless Hellway SE', 'PoD Arena Main NE'),
|
||||
('PoD Dark Alley NE', 'PoD Boss SE'),
|
||||
]
|
||||
|
||||
# todo: these path rules are more complicated I think...
|
||||
@@ -942,7 +1014,8 @@ default_dungeon_sets = [
|
||||
['Eastern Lobby', 'Eastern Boss'],
|
||||
['Desert Back Lobby', 'Desert Boss', 'Desert Main Lobby', 'Desert West Lobby', 'Desert East Lobby'],
|
||||
['Hera Lobby', 'Hera Boss'],
|
||||
['Tower Lobby', 'Tower Agahnim 1']
|
||||
['Tower Lobby', 'Tower Agahnim 1'],
|
||||
['PoD Lobby', 'PoD Boss']
|
||||
]
|
||||
|
||||
|
||||
@@ -958,7 +1031,7 @@ entrance_sets = [
|
||||
['Eastern Lobby'],
|
||||
['Hera Lobby'],
|
||||
['Tower Lobby'],
|
||||
# ['PoD Lobby'],
|
||||
['PoD Lobby'],
|
||||
# ['Swamp Lobby'],
|
||||
# ['TT Lobby'],
|
||||
# ['Ice Lobby'],
|
||||
|
||||
132
Doors.py
132
Doors.py
@@ -216,40 +216,114 @@ def create_doors(world, player):
|
||||
create_door(player, 'Hera Boss Inner Hole', DoorType.Hole),
|
||||
|
||||
# Castle Tower
|
||||
create_dir_door(player, 'Tower Lobby NW', DoorType.Interior, Direction.North, 0xe0, Left, High),
|
||||
create_dir_door(player, 'Tower Gold Knights SW', DoorType.Interior, Direction.South, 0xe0, Left, High),
|
||||
create_dir_door(player, 'Tower Gold Knights EN', DoorType.Interior, Direction.East, 0xe0, Top, High),
|
||||
create_dir_door(player, 'Tower Room 03 WN', DoorType.Interior, Direction.West, 0xe0, Bot, High),
|
||||
create_spiral_stairs(player, 'Tower Room 03 Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xe0, 0, HTH, S, 0x1a, 0x6c).small_key(),
|
||||
create_dir_door(player, 'Tower Lobby NW', DoorType.Interior, Direction.North, 0xe0, Left, High).pos(1),
|
||||
create_dir_door(player, 'Tower Gold Knights SW', DoorType.Interior, Direction.South, 0xe0, Left, High).pos(1),
|
||||
create_dir_door(player, 'Tower Gold Knights EN', DoorType.Interior, Direction.East, 0xe0, Top, High).pos(0),
|
||||
create_dir_door(player, 'Tower Room 03 WN', DoorType.Interior, Direction.West, 0xe0, Bot, High).pos(0),
|
||||
create_spiral_stairs(player, 'Tower Room 03 Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xe0, 0, HTH, S, 0x1a, 0x6c).small_key().pos(2),
|
||||
create_spiral_stairs(player, 'Tower Lone Statue Down Stairs', DoorType.SpiralStairs, Direction.Down, 0xd0, 0, HTH, S, 0x11, 0x80),
|
||||
create_dir_door(player, 'Tower Lone Statue WN', DoorType.Interior, Direction.West, 0xd0, Top, High),
|
||||
create_dir_door(player, 'Tower Dark Maze EN', DoorType.Interior, Direction.East, 0xd0, Top, High),
|
||||
create_dir_door(player, 'Tower Dark Maze ES', DoorType.Interior, Direction.East, 0xd0, Bot, High).small_key(),
|
||||
create_dir_door(player, 'Tower Dark Chargers WS', DoorType.Interior, Direction.West, 0xd0, Bot, High).small_key(),
|
||||
create_dir_door(player, 'Tower Lone Statue WN', DoorType.Interior, Direction.West, 0xd0, Top, High).pos(1),
|
||||
create_dir_door(player, 'Tower Dark Maze EN', DoorType.Interior, Direction.East, 0xd0, Top, High).pos(1),
|
||||
create_dir_door(player, 'Tower Dark Maze ES', DoorType.Interior, Direction.East, 0xd0, Bot, High).small_key().pos(0),
|
||||
create_dir_door(player, 'Tower Dark Chargers WS', DoorType.Interior, Direction.West, 0xd0, Bot, High).small_key().pos(0),
|
||||
create_spiral_stairs(player, 'Tower Dark Chargers Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xd0, 2, HTH, X, 0x1b, 0x8c),
|
||||
create_spiral_stairs(player, 'Tower Dual Statues Down Stairs', DoorType.SpiralStairs, Direction.Down, 0xc0, 2, HTH, X, 0x12, 0xa0),
|
||||
create_dir_door(player, 'Tower Dual Statues WS', DoorType.Interior, Direction.West, 0xc0, Bot, High),
|
||||
create_dir_door(player, 'Tower Dark Pits ES', DoorType.Interior, Direction.East, 0xc0, Bot, High),
|
||||
create_dir_door(player, 'Tower Dark Pits EN', DoorType.Interior, Direction.East, 0xc0, Top, High),
|
||||
create_dir_door(player, 'Tower Dark Archers WS', DoorType.Interior, Direction.West, 0xc0, Top, High),
|
||||
create_spiral_stairs(player, 'Tower Dark Archers Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xc0, 0, HTH, S, 0x1b, 0x6c).small_key(),
|
||||
create_dir_door(player, 'Tower Dual Statues WS', DoorType.Interior, Direction.West, 0xc0, Bot, High).pos(1),
|
||||
create_dir_door(player, 'Tower Dark Pits ES', DoorType.Interior, Direction.East, 0xc0, Bot, High).pos(1),
|
||||
create_dir_door(player, 'Tower Dark Pits EN', DoorType.Interior, Direction.East, 0xc0, Top, High).pos(0),
|
||||
create_dir_door(player, 'Tower Dark Archers WN', DoorType.Interior, Direction.West, 0xc0, Top, High).pos(0),
|
||||
create_spiral_stairs(player, 'Tower Dark Archers Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xc0, 0, HTH, S, 0x1b, 0x6c).small_key().pos(2),
|
||||
create_spiral_stairs(player, 'Tower Red Spears Down Stairs', DoorType.SpiralStairs, Direction.Down, 0xb0, 0, HTH, S, 0x12, 0x80),
|
||||
create_dir_door(player, 'Tower Red Spears WN', DoorType.Interior, Direction.West, 0xb0, Top, High),
|
||||
create_dir_door(player, 'Tower Red Guards EN', DoorType.Interior, Direction.East, 0xb0, Top, High),
|
||||
create_dir_door(player, 'Tower Red Guards SW', DoorType.Interior, Direction.South, 0xb0, Left, High),
|
||||
create_dir_door(player, 'Tower Circle of Pots NW', DoorType.Interior, Direction.North, 0xb0, Left, High),
|
||||
create_dir_door(player, 'Tower Circle of Pots WS', DoorType.Interior, Direction.West, 0xb0, Bot, High).small_key(),
|
||||
create_dir_door(player, 'Tower Pacifist Run ES', DoorType.Interior, Direction.East, 0xb0, Bot, High).small_key(),
|
||||
create_dir_door(player, 'Tower Red Spears WN', DoorType.Interior, Direction.West, 0xb0, Top, High).pos(1),
|
||||
create_dir_door(player, 'Tower Red Guards EN', DoorType.Interior, Direction.East, 0xb0, Top, High).pos(1),
|
||||
create_dir_door(player, 'Tower Red Guards SW', DoorType.Interior, Direction.South, 0xb0, Left, High).pos(0),
|
||||
create_dir_door(player, 'Tower Circle of Pots NW', DoorType.Interior, Direction.North, 0xb0, Left, High).pos(0),
|
||||
create_dir_door(player, 'Tower Circle of Pots WS', DoorType.Interior, Direction.West, 0xb0, Bot, High).small_key().pos(2),
|
||||
create_dir_door(player, 'Tower Pacifist Run ES', DoorType.Interior, Direction.East, 0xb0, Bot, High).small_key().pos(2),
|
||||
create_spiral_stairs(player, 'Tower Pacifist Run Up Stairs', DoorType.SpiralStairs, Direction.Up, 0xb0, 2, LTH, X, 0x33, 0x8c),
|
||||
create_spiral_stairs(player, 'Tower Push Statue Down Stairs', DoorType.SpiralStairs, Direction.Down, 0x40, 0, HTL, X, 0x12, 0xa0),
|
||||
create_dir_door(player, 'Tower Push Statue WS', DoorType.Interior, Direction.West, 0x40, Bot, Low),
|
||||
create_dir_door(player, 'Tower Catwalk ES', DoorType.Interior, Direction.East, 0x40, Bot, Low),
|
||||
create_dir_door(player, 'Tower Push Statue WS', DoorType.Interior, Direction.West, 0x40, Bot, Low).pos(0),
|
||||
create_dir_door(player, 'Tower Catwalk ES', DoorType.Interior, Direction.East, 0x40, Bot, Low).pos(0),
|
||||
create_dir_door(player, 'Tower Catwalk North Stairs', DoorType.StraightStairs, Direction.North, 0x40, Left, High),
|
||||
create_dir_door(player, 'Tower Antechamber South Stairs', DoorType.StraightStairs, Direction.South, 0x30, Left, High),
|
||||
create_dir_door(player, 'Tower Antechamber NW', DoorType.Interior, Direction.North, 0x30, Left, High),
|
||||
create_dir_door(player, 'Tower Altar SW', DoorType.Interior, Direction.South, 0x30, Left, High),
|
||||
create_dir_door(player, 'Tower Antechamber NW', DoorType.Interior, Direction.North, 0x30, Left, High).pos(1),
|
||||
create_dir_door(player, 'Tower Altar SW', DoorType.Interior, Direction.South, 0x30, Left, High).pos(1),
|
||||
create_dir_door(player, 'Tower Altar NW', DoorType.Normal, Direction.North, 0x30, Left, High).pos(0),
|
||||
create_dir_door(player, 'Tower Agahnim 1 SW', DoorType.Normal, Direction.South, 0x20, Left, High).no_exit().trap(0x4).pos(0),
|
||||
|
||||
#Palace of Darkness
|
||||
create_door(player, 'PoD Lobby N', DoorType.Interior).dir(Direction.North, 0x4a, Mid, High),
|
||||
create_door(player, 'PoD Lobby NW', DoorType.Interior).dir(Direction.North, 0x4a, Left, High),
|
||||
create_door(player, 'PoD Lobby NE', DoorType.Interior).dir(Direction.North, 0x4a, Right, High),
|
||||
create_door(player, 'PoD Left Cage SW', DoorType.Interior).dir(Direction.North, 0x4a, Left, High),
|
||||
create_door(player, 'PoD Middle Cage S', DoorType.Interior).dir(Direction.North, 0x4a, Mid, High),
|
||||
create_door(player, 'PoD Middle Cage SE', DoorType.Interior).dir(Direction.North, 0x4a, Right, High),
|
||||
create_door(player, 'PoD Left Cage Down Stairs', DoorType.SpiralStairs).dir(Direction.Down, 0x4a, 1, HTH).ss(A, 0x12, 0x80, False, True),
|
||||
create_door(player, 'PoD Middle Cage Down Stairs', DoorType.SpiralStairs).dir(Direction.Down, 0x4a, 0, HTH).ss(S, 0x12, 0x80, False, True),
|
||||
create_door(player, 'PoD Middle Cage N', DoorType.Normal).dir(Direction.North, 0x4a, Mid, High).small_key().pos(2),
|
||||
create_door(player, 'PoD Shooter Room Up Stairs', DoorType.SpiralStairs).dir(Direction.Up, 0x09, 1, HTH).ss(A, 0x31, 0x69, True, True),
|
||||
create_door(player, 'PoD Warp Room Up Stairs', DoorType.SpiralStairs).dir(Direction.Up, 0x09, 0, HTH).ss(S, 0x30, 0x69, True, True),
|
||||
create_door(player, 'PoD Warp Room Warp', DoorType.Warp),
|
||||
create_door(player, 'PoD Pit Room S', DoorType.Normal).dir(Direction.South, 0x3a, Mid, High).small_key().pos(0),
|
||||
create_door(player, 'PoD Pit Room NW', DoorType.Normal).dir(Direction.North, 0x3a, Left, High).pos(1),
|
||||
create_door(player, 'PoD Pit Room NE', DoorType.Normal).dir(Direction.North, 0x3a, Right, High).pos(2),
|
||||
create_door(player, 'PoD Pit Room Freefall', DoorType.Hole),
|
||||
create_door(player, 'PoD Pit Room Bomb Hole', DoorType.Hole),
|
||||
create_door(player, 'PoD Big Key Landing Hole', DoorType.Hole),
|
||||
create_door(player, 'PoD Big Key Landing Down Stairs', DoorType.SpiralStairs).dir(Direction.Down, 0x3a, 0, HTH).ss(A, 0x11, 0x00),
|
||||
create_door(player, 'PoD Basement Ledge Up Stairs', DoorType.SpiralStairs).dir(Direction.Up, 0x0a, 0, HTH).ss(A, 0x1a, 0xec),
|
||||
create_door(player, 'PoD Basement Ledge Drop Down', DoorType.Logical),
|
||||
create_door(player, 'PoD Stalfos Basement Warp', DoorType.Warp),
|
||||
create_door(player, 'PoD Arena Main SW', DoorType.Normal).dir(Direction.South, 0x2a, Left, High).pos(4),
|
||||
create_door(player, 'PoD Arena Bridge SE', DoorType.Normal).dir(Direction.South, 0x2a, Right, High).pos(5),
|
||||
create_door(player, 'PoD Arena Main NW', DoorType.Normal).dir(Direction.North, 0x2a, Left, High).small_key().pos(1),
|
||||
create_door(player, 'PoD Arena Main NE', DoorType.Normal).dir(Direction.North, 0x2a, Right, High).no_exit().trap(0x4).pos(0),
|
||||
create_door(player, 'PoD Arena Main Crystal Path', DoorType.Logical),
|
||||
create_door(player, 'PoD Arena Crystals E', DoorType.Normal).dir(Direction.East, 0x2a, Mid, High).pos(3),
|
||||
create_door(player, 'PoD Arena Crystal Path', DoorType.Logical),
|
||||
create_door(player, 'PoD Arena Bridge Drop Down', DoorType.Logical),
|
||||
create_door(player, 'PoD Arena Ledge ES', DoorType.Normal).dir(Direction.East, 0x2a, Bot, High).pos(2),
|
||||
create_door(player, 'PoD Sexy Statue W', DoorType.Normal).dir(Direction.West, 0x2b, Mid, High).pos(3),
|
||||
create_door(player, 'PoD Sexy Statue NW', DoorType.Normal).dir(Direction.North, 0x2b, Left, High).trap(0x1).pos(2),
|
||||
create_door(player, 'PoD Map Balcony Drop Down', DoorType.Logical),
|
||||
create_door(player, 'PoD Map Balcony WS', DoorType.Normal).dir(Direction.West, 0x2b, Bot, High).pos(1),
|
||||
create_door(player, 'PoD Map Balcony South Stairs', DoorType.StraightStairs).dir(Direction.South, 0x2b, Left, High),
|
||||
create_door(player, 'PoD Conveyor North Stairs', DoorType.StraightStairs).dir(Direction.North, 0x3b, Left, High),
|
||||
create_door(player, 'PoD Conveyor SW', DoorType.Normal).dir(Direction.South, 0x3b, Left, High).pos(0),
|
||||
create_door(player, 'PoD Mimics 1 NW', DoorType.Normal).dir(Direction.North, 0x4b, Left, High).trap(0x4).pos(0),
|
||||
create_door(player, 'PoD Mimics 1 SW', DoorType.Interior).dir(Direction.South, 0x4b, Left, High),
|
||||
create_door(player, 'PoD Jelly Hall NW', DoorType.Interior).dir(Direction.North, 0x4b, Left, High),
|
||||
create_door(player, 'PoD Jelly Hall NE', DoorType.Interior).dir(Direction.North, 0x4b, Right, High),
|
||||
create_door(player, 'PoD Warp Hint SE', DoorType.Interior).dir(Direction.South, 0x4b, Right, High),
|
||||
create_door(player, 'PoD Warp Hint Warp', DoorType.Warp),
|
||||
create_door(player, 'PoD Falling Bridge SW', DoorType.Normal).dir(Direction.South, 0x1a, Left, High).small_key().pos(3),
|
||||
create_door(player, 'PoD Falling Bridge WN', DoorType.Normal).dir(Direction.West, 0x1a, Top, High).small_key().pos(1),
|
||||
create_door(player, 'PoD Falling Bridge EN', DoorType.Interior).dir(Direction.East, 0x1a, Top, High),
|
||||
create_door(player, 'PoD Big Chest Balcony W', DoorType.Normal).dir(Direction.West, 0x1a, Mid, High).pos(2),
|
||||
create_door(player, 'PoD Dark Maze EN', DoorType.Normal).dir(Direction.East, 0x19, Top, High).small_key().pos(1),
|
||||
create_door(player, 'PoD Dark Maze E', DoorType.Normal).dir(Direction.East, 0x19, Mid, High).pos(0),
|
||||
create_door(player, 'PoD Compass Room WN', DoorType.Interior).dir(Direction.West, 0x1a, Top, High),
|
||||
create_door(player, 'PoD Compass Room SE', DoorType.Interior).dir(Direction.North, 0x1a, Mid, High).small_key(),
|
||||
create_door(player, 'PoD Harmless Hellway NE', DoorType.Interior).dir(Direction.North, 0x1a, Right, High).small_key(),
|
||||
create_door(player, 'PoD Harmless Hellway SE', DoorType.Normal).dir(Direction.South, 0x1a, Right, High).pos(5),
|
||||
create_door(player, 'PoD Compass Room W Down Stairs', DoorType.SpiralStairs).dir(Direction.Down, 0x1a, 0, HTH).ss(S, 0x12, 0x50, True, True),
|
||||
create_door(player, 'PoD Compass Room E Down Stairs', DoorType.SpiralStairs).dir(Direction.Down, 0x1a, 1, HTH).ss(S, 0x11, 0xb0, True, True),
|
||||
create_door(player, 'PoD Dark Basement W Up Stairs', DoorType.SpiralStairs).dir(Direction.Up, 0x6a, 0, HTH).ss(S, 0x1b, 0x3c, True),
|
||||
create_door(player, 'PoD Dark Basement E Up Stairs', DoorType.SpiralStairs).dir(Direction.Up, 0x6a, 1, HTH).ss(S, 0x1b, 0x9c, True),
|
||||
create_door(player, 'PoD Dark Alley NE', DoorType.Normal).dir(Direction.North, 0x6a, Right, High).big_key().pos(0),
|
||||
create_door(player, 'PoD Mimics 2 SW', DoorType.Normal).dir(Direction.South, 0x1b, Left, High).pos(1),
|
||||
create_door(player, 'PoD Mimics 2 NW', DoorType.Interior).dir(Direction.North, 0x1b, Left, High),
|
||||
create_door(player, 'PoD Bow Statue SW', DoorType.Interior).dir(Direction.South, 0x1b, Left, High),
|
||||
create_door(player, 'PoD Bow Statue Down Ladder', DoorType.Ladder),
|
||||
create_door(player, 'PoD Dark Pegs Up Ladder', DoorType.Ladder),
|
||||
create_door(player, 'PoD Dark Pegs WN', DoorType.Interior).dir(Direction.West, 0x0b, Mid, High),
|
||||
create_door(player, 'PoD Lonely Turtle SW', DoorType.Interior).dir(Direction.South, 0x0b, Mid, High),
|
||||
create_door(player, 'PoD Lonely Turtle EN', DoorType.Interior).dir(Direction.East, 0x0b, Mid, High),
|
||||
create_door(player, 'PoD Turtle Party ES', DoorType.Interior).dir(Direction.East, 0x0b, Mid, High),
|
||||
create_door(player, 'PoD Turtle Party NW', DoorType.Interior).dir(Direction.North, 0x0b, Mid, High),
|
||||
create_door(player, 'PoD Callback WS', DoorType.Interior).dir(Direction.West, 0x0b, Mid, High),
|
||||
create_door(player, 'PoD Callback Warp', DoorType.Warp),
|
||||
create_door(player, 'PoD Boss SE', DoorType.Normal).dir(Direction.South, 0x5a, Right, High).no_exit().trap(0x4).pos(0),
|
||||
]
|
||||
create_paired_doors(world, player)
|
||||
|
||||
@@ -259,16 +333,16 @@ def create_paired_doors(world, player):
|
||||
PairedDoor('Sewers Secret Room Key Door S', 'Sewers Key Rat Key Door N'),
|
||||
# PairedDoor('', ''), # TR Pokey Key
|
||||
# PairedDoor('', ''), # TR Big key door by pipes
|
||||
# PairedDoor('', ''), # Pod Dark maze door
|
||||
# PairedDoor('', ''), # PoD Bombable by Big Chest
|
||||
# PairedDoor('', ''), # Pod key door by bridge
|
||||
PairedDoor('PoD Falling Bridge WN', 'PoD Dark Maze EN'), # Pod Dark maze door
|
||||
PairedDoor('PoD Dark Maze E', 'PoD Big Chest Balcony W'), # PoD Bombable by Big Chest
|
||||
PairedDoor('PoD Arena Main NW', 'PoD Falling Bridge SW'), # Pod key door by bridge
|
||||
PairedDoor('Sewers Dark Cross Key Door N', 'Sewers Dark Cross Key Door S'),
|
||||
# PairedDoor('', ''), # Swamp key door above big chest
|
||||
# PairedDoor('', ''), # Pod bombable by arena
|
||||
PairedDoor('PoD Map Balcony WS', 'PoD Arena Ledge ES'), # Pod bombable by arena
|
||||
# PairedDoor('', ''), # Swamp bombable to random pots
|
||||
# PairedDoor('', ''), # Swamp bombable to map chest
|
||||
# PairedDoor('', ''), # Swamp key door early room $38
|
||||
# PairedDoor('', ''), # Pod front key door
|
||||
PairedDoor('PoD Middle Cage N', 'PoD Pit Room S'),
|
||||
# PairedDoor('', ''), # GT moldorm key door
|
||||
# PairedDoor('', ''), # Ice BJ key door
|
||||
PairedDoor('Desert Tiles 2 SE', 'Desert Beamos Hall NE'),
|
||||
|
||||
14
Dungeons.py
14
Dungeons.py
@@ -19,9 +19,9 @@ def create_dungeons(world, player):
|
||||
EP = make_dungeon('Eastern Palace', 'Armos Knights', eastern_regions, ItemFactory('Big Key (Eastern Palace)', player), [], ItemFactory(['Map (Eastern Palace)', 'Compass (Eastern Palace)'], player))
|
||||
DP = make_dungeon('Desert Palace', 'Lanmolas', desert_regions, ItemFactory('Big Key (Desert Palace)', player), [ItemFactory('Small Key (Desert Palace)', player)], ItemFactory(['Map (Desert Palace)', 'Compass (Desert Palace)'], player))
|
||||
ToH = make_dungeon('Tower of Hera', 'Moldorm', hera_regions, ItemFactory('Big Key (Tower of Hera)', player), [ItemFactory('Small Key (Tower of Hera)', player)], ItemFactory(['Map (Tower of Hera)', 'Compass (Tower of Hera)'], player))
|
||||
PoD = make_dungeon('Palace of Darkness', 'Helmasaur King', pod_regions, ItemFactory('Big Key (Palace of Darkness)', player), ItemFactory(['Small Key (Palace of Darkness)'] * 6, player), ItemFactory(['Map (Palace of Darkness)', 'Compass (Palace of Darkness)'], player))
|
||||
|
||||
#still standard dungeons
|
||||
PoD = make_dungeon('Palace of Darkness', 'Helmasaur King', ['Palace of Darkness (Entrance)', 'Palace of Darkness (Center)', 'Palace of Darkness (Big Key Chest)', 'Palace of Darkness (Bonk Section)', 'Palace of Darkness (North)', 'Palace of Darkness (Maze)', 'Palace of Darkness (Harmless Hellway)', 'Palace of Darkness (Final Section)'], ItemFactory('Big Key (Palace of Darkness)', player), ItemFactory(['Small Key (Palace of Darkness)'] * 6, player), ItemFactory(['Map (Palace of Darkness)', 'Compass (Palace of Darkness)'], player))
|
||||
TT = make_dungeon('Thieves Town', 'Blind', ['Thieves Town (Entrance)', 'Thieves Town (Deep)', 'Blind Fight'], ItemFactory('Big Key (Thieves Town)', player), [ItemFactory('Small Key (Thieves Town)', player)], ItemFactory(['Map (Thieves Town)', 'Compass (Thieves Town)'], player))
|
||||
SW = make_dungeon('Skull Woods', 'Mothula', ['Skull Woods Final Section (Entrance)', 'Skull Woods First Section', 'Skull Woods Second Section', 'Skull Woods Second Section (Drop)', 'Skull Woods Final Section (Mothula)', 'Skull Woods First Section (Right)', 'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)'], ItemFactory('Big Key (Skull Woods)', player), ItemFactory(['Small Key (Skull Woods)'] * 2, player), ItemFactory(['Map (Skull Woods)', 'Compass (Skull Woods)'], player))
|
||||
SP = make_dungeon('Swamp Palace', 'Arrghus', ['Swamp Palace (Entrance)', 'Swamp Palace (First Room)', 'Swamp Palace (Starting Area)', 'Swamp Palace (Center)', 'Swamp Palace (North)'], ItemFactory('Big Key (Swamp Palace)', player), [ItemFactory('Small Key (Swamp Palace)', player)], ItemFactory(['Map (Swamp Palace)', 'Compass (Swamp Palace)'], player))
|
||||
@@ -205,13 +205,23 @@ tower_regions = [
|
||||
'Tower Altar', 'Tower Agahnim 1'
|
||||
]
|
||||
|
||||
pod_regions = [
|
||||
'PoD Lobby', 'PoD Left Cage', 'PoD Middle Cage', 'PoD Shooter Room', 'PoD Pit Room', 'PoD Arena Main',
|
||||
'PoD Arena Crystal', 'PoD Arena Bridge', 'PoD Arena Ledge', 'PoD Sexy Statue', 'PoD Map Balcony', 'PoD Conveyor',
|
||||
'PoD Mimics 1', 'PoD Jelly Hall', 'PoD Warp Hint', 'PoD Warp Room', 'PoD Stalfos Basement', 'PoD Basement Ledge',
|
||||
'PoD Big Key Landing', 'PoD Falling Bridge', 'PoD Dark Maze', 'PoD Big Chest Balcony', 'PoD Compass Room',
|
||||
'PoD Dark Basement', 'PoD Harmless Hellway', 'PoD Mimics 2', 'PoD Bow Statue', 'PoD Dark Pegs', 'PoD Lonely Turtle',
|
||||
'PoD Turtle Party', 'PoD Dark Alley', 'PoD Callback', 'PoD Boss'
|
||||
]
|
||||
|
||||
|
||||
dungeon_regions = {
|
||||
'Hyrule Castle': hyrule_castle_regions,
|
||||
'Eastern': eastern_regions,
|
||||
'Desert': desert_regions,
|
||||
'Hera': hera_regions,
|
||||
'Tower': tower_regions,
|
||||
# 'PoD':
|
||||
'PoD': pod_regions,
|
||||
# 'Swamp':
|
||||
# 'Skull':
|
||||
# 'TT':
|
||||
|
||||
@@ -2984,14 +2984,6 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
||||
('Turtle Rock (Dark Room) (South)', 'Turtle Rock (Eye Bridge)'),
|
||||
('Turtle Rock Dark Room (South)', 'Turtle Rock (Dark Room)'),
|
||||
('Turtle Rock (Trinexx)', 'Turtle Rock (Trinexx)'),
|
||||
('Palace of Darkness Bridge Room', 'Palace of Darkness (Center)'),
|
||||
('Palace of Darkness Bonk Wall', 'Palace of Darkness (Bonk Section)'),
|
||||
('Palace of Darkness Big Key Chest Staircase', 'Palace of Darkness (Big Key Chest)'),
|
||||
('Palace of Darkness (North)', 'Palace of Darkness (North)'),
|
||||
('Palace of Darkness Big Key Door', 'Palace of Darkness (Final Section)'),
|
||||
('Palace of Darkness Hammer Peg Drop', 'Palace of Darkness (Center)'),
|
||||
('Palace of Darkness Spike Statue Room Door', 'Palace of Darkness (Harmless Hellway)'),
|
||||
('Palace of Darkness Maze Door', 'Palace of Darkness (Maze)'),
|
||||
('Ganons Tower (Tile Room)', 'Ganons Tower (Tile Room)'),
|
||||
('Ganons Tower (Tile Room) Key Door', 'Ganons Tower (Compass Room)'),
|
||||
('Ganons Tower (Bottom) (East)', 'Ganons Tower (Bottom)'),
|
||||
@@ -3116,14 +3108,6 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia
|
||||
('Turtle Rock (Dark Room) (South)', 'Turtle Rock (Eye Bridge)'),
|
||||
('Turtle Rock Dark Room (South)', 'Turtle Rock (Dark Room)'),
|
||||
('Turtle Rock (Trinexx)', 'Turtle Rock (Trinexx)'),
|
||||
('Palace of Darkness Bridge Room', 'Palace of Darkness (Center)'),
|
||||
('Palace of Darkness Bonk Wall', 'Palace of Darkness (Bonk Section)'),
|
||||
('Palace of Darkness Big Key Chest Staircase', 'Palace of Darkness (Big Key Chest)'),
|
||||
('Palace of Darkness (North)', 'Palace of Darkness (North)'),
|
||||
('Palace of Darkness Big Key Door', 'Palace of Darkness (Final Section)'),
|
||||
('Palace of Darkness Hammer Peg Drop', 'Palace of Darkness (Center)'),
|
||||
('Palace of Darkness Spike Statue Room Door', 'Palace of Darkness (Harmless Hellway)'),
|
||||
('Palace of Darkness Maze Door', 'Palace of Darkness (Maze)'),
|
||||
('Ganons Tower (Tile Room)', 'Ganons Tower (Tile Room)'),
|
||||
('Ganons Tower (Tile Room) Key Door', 'Ganons Tower (Compass Room)'),
|
||||
('Ganons Tower (Bottom) (East)', 'Ganons Tower (Bottom)'),
|
||||
@@ -3557,7 +3541,7 @@ default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert Main L
|
||||
('Ice Palace Exit', 'Dark Lake Hylia Central Island'),
|
||||
('Misery Mire', 'Misery Mire (Entrance)'),
|
||||
('Misery Mire Exit', 'Dark Desert'),
|
||||
('Palace of Darkness', 'Palace of Darkness (Entrance)'),
|
||||
('Palace of Darkness', 'PoD Lobby'),
|
||||
('Palace of Darkness Exit', 'East Dark World'),
|
||||
('Swamp Palace', 'Swamp Palace (Entrance)'), # requires additional patch for flooding moat if moved
|
||||
('Swamp Palace Exit', 'South Dark World'),
|
||||
@@ -3610,7 +3594,7 @@ inverted_default_dungeon_connections = [('Desert Palace Entrance (South)', 'Dese
|
||||
('Ice Palace', 'Ice Palace (Entrance)'),
|
||||
('Misery Mire', 'Misery Mire (Entrance)'),
|
||||
('Misery Mire Exit', 'Dark Desert'),
|
||||
('Palace of Darkness', 'Palace of Darkness (Entrance)'),
|
||||
('Palace of Darkness', 'PoD Lobby'),
|
||||
('Palace of Darkness Exit', 'East Dark World'),
|
||||
('Swamp Palace', 'Swamp Palace (Entrance)'),
|
||||
('Swamp Palace Exit', 'South Dark World'),
|
||||
|
||||
48
Regions.py
48
Regions.py
@@ -240,16 +240,6 @@ def create_regions(world, player):
|
||||
'Turtle Rock - Eye Bridge - Top Left', 'Turtle Rock - Eye Bridge - Top Right'],
|
||||
['Turtle Rock Dark Room (South)', 'Turtle Rock (Trinexx)', 'Turtle Rock Isolated Ledge Exit']),
|
||||
create_dungeon_region(player, 'Turtle Rock (Trinexx)', 'Turtle Rock', ['Turtle Rock - Boss', 'Turtle Rock - Prize']),
|
||||
create_dungeon_region(player, 'Palace of Darkness (Entrance)', 'Palace of Darkness', ['Palace of Darkness - Shooter Room'], ['Palace of Darkness Bridge Room', 'Palace of Darkness Bonk Wall', 'Palace of Darkness Exit']),
|
||||
create_dungeon_region(player, 'Palace of Darkness (Center)', 'Palace of Darkness', ['Palace of Darkness - The Arena - Bridge', 'Palace of Darkness - Stalfos Basement'],
|
||||
['Palace of Darkness Big Key Chest Staircase', 'Palace of Darkness (North)', 'Palace of Darkness Big Key Door']),
|
||||
create_dungeon_region(player, 'Palace of Darkness (Big Key Chest)', 'Palace of Darkness', ['Palace of Darkness - Big Key Chest']),
|
||||
create_dungeon_region(player, 'Palace of Darkness (Bonk Section)', 'Palace of Darkness', ['Palace of Darkness - The Arena - Ledge', 'Palace of Darkness - Map Chest'], ['Palace of Darkness Hammer Peg Drop']),
|
||||
create_dungeon_region(player, 'Palace of Darkness (North)', 'Palace of Darkness', ['Palace of Darkness - Compass Chest', 'Palace of Darkness - Dark Basement - Left', 'Palace of Darkness - Dark Basement - Right'],
|
||||
['Palace of Darkness Spike Statue Room Door', 'Palace of Darkness Maze Door']),
|
||||
create_dungeon_region(player, 'Palace of Darkness (Maze)', 'Palace of Darkness', ['Palace of Darkness - Dark Maze - Top', 'Palace of Darkness - Dark Maze - Bottom', 'Palace of Darkness - Big Chest']),
|
||||
create_dungeon_region(player, 'Palace of Darkness (Harmless Hellway)', 'Palace of Darkness', ['Palace of Darkness - Harmless Hellway']),
|
||||
create_dungeon_region(player, 'Palace of Darkness (Final Section)', 'Palace of Darkness', ['Palace of Darkness - Boss', 'Palace of Darkness - Prize']),
|
||||
create_dungeon_region(player, 'Ganons Tower (Entrance)', 'Ganon\'s Tower', ['Ganons Tower - Bob\'s Torch', 'Ganons Tower - Hope Room - Left', 'Ganons Tower - Hope Room - Right'],
|
||||
['Ganons Tower (Tile Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower Big Key Door', 'Ganons Tower Exit']),
|
||||
create_dungeon_region(player, 'Ganons Tower (Tile Room)', 'Ganon\'s Tower', ['Ganons Tower - Tile Room'], ['Ganons Tower (Tile Room) Key Door']),
|
||||
@@ -393,13 +383,47 @@ def create_regions(world, player):
|
||||
create_dungeon_region(player, 'Tower Agahnim 1', 'Castle Tower', ['Agahnim 1'], ['Tower Agahnim 1 SW']),
|
||||
|
||||
# pod
|
||||
# tt
|
||||
create_dungeon_region(player, 'PoD Lobby', 'Palace of Darkness', None, ['PoD Lobby N', 'PoD Lobby NW', 'PoD Lobby NE', 'Palace of Darkness Exit']),
|
||||
create_dungeon_region(player, 'PoD Left Cage', 'Palace of Darkness', None, ['PoD Left Cage SW', 'PoD Left Cage Down Stairs']),
|
||||
create_dungeon_region(player, 'PoD Middle Cage', 'Palace of Darkness', None, ['PoD Middle Cage S', 'PoD Middle Cage SE', 'PoD Middle Cage N', 'PoD Middle Cage Down Stairs']),
|
||||
create_dungeon_region(player, 'PoD Shooter Room', 'Palace of Darkness', ['Palace of Darkness - Shooter Room'], ['PoD Shooter Room Up Stairs']),
|
||||
create_dungeon_region(player, 'PoD Pit Room', 'Palace of Darkness', None, ['PoD Pit Room S', 'PoD Pit Room NW', 'PoD Pit Room NE', 'PoD Pit Room Freefall', 'PoD Pit Room Bomb Hole']),
|
||||
create_dungeon_region(player, 'PoD Arena Main', 'Palace of Darkness', None, ['PoD Arena Main SW', 'PoD Arena Main NW', 'PoD Arena Main NE', 'PoD Arena Main Crystal Path']),
|
||||
create_dungeon_region(player, 'PoD Arena Crystal', 'Palace of Darkness', None, ['PoD Arena Crystals E', 'PoD Arena Crystal Path']),
|
||||
create_dungeon_region(player, 'PoD Arena Bridge', 'Palace of Darkness', ['Palace of Darkness - The Arena - Bridge'], ['PoD Arena Bridge SE', 'PoD Arena Bridge Drop Down']),
|
||||
create_dungeon_region(player, 'PoD Arena Ledge', 'Palace of Darkness', ['Palace of Darkness - The Arena - Ledge'], ['PoD Arena Ledge ES']),
|
||||
create_dungeon_region(player, 'PoD Sexy Statue', 'Palace of Darkness', None, ['PoD Sexy Statue W', 'PoD Sexy Statue NW']),
|
||||
create_dungeon_region(player, 'PoD Map Balcony', 'Palace of Darkness', ['Palace of Darkness - Map Chest'], ['PoD Map Balcony WS', 'PoD Map Balcony South Stairs', 'PoD Map Balcony Drop Down']),
|
||||
create_dungeon_region(player, 'PoD Conveyor', 'Palace of Darkness', None, ['PoD Conveyor North Stairs', 'PoD Conveyor SW']),
|
||||
create_dungeon_region(player, 'PoD Mimics 1', 'Palace of Darkness', None, ['PoD Mimics 1 NW', 'PoD Mimics 1 SW']),
|
||||
create_dungeon_region(player, 'PoD Jelly Hall', 'Palace of Darkness', None, ['PoD Jelly Hall NW', 'PoD Jelly Hall NE']),
|
||||
create_dungeon_region(player, 'PoD Warp Hint', 'Palace of Darkness', None, ['PoD Warp Hint SE', 'PoD Warp Hint Warp']),
|
||||
create_dungeon_region(player, 'PoD Warp Room', 'Palace of Darkness', None, ['PoD Warp Room Up Stairs', 'PoD Warp Room Warp']),
|
||||
create_dungeon_region(player, 'PoD Stalfos Basement', 'Palace of Darkness', ['Palace of Darkness - Stalfos Basement'], ['PoD Stalfos Basement Warp']),
|
||||
create_dungeon_region(player, 'PoD Basement Ledge', 'Palace of Darkness', None, ['PoD Basement Ledge Drop Down', 'PoD Basement Ledge Up Stairs']),
|
||||
create_dungeon_region(player, 'PoD Big Key Landing', 'Palace of Darkness', ['Palace of Darkness - Big Key Chest'], ['PoD Big Key Landing Down Stairs', 'PoD Big Key Landing Hole']),
|
||||
create_dungeon_region(player, 'PoD Falling Bridge', 'Palace of Darkness', None, ['PoD Falling Bridge SW', 'PoD Falling Bridge WN', 'PoD Falling Bridge EN']),
|
||||
create_dungeon_region(player, 'PoD Dark Maze', 'Palace of Darkness', ['Palace of Darkness - Dark Maze - Top', 'Palace of Darkness - Dark Maze - Bottom'], ['PoD Dark Maze EN', 'PoD Dark Maze E']),
|
||||
create_dungeon_region(player, 'PoD Big Chest Balcony', 'Palace of Darkness', ['Palace of Darkness - Big Chest'], ['PoD Big Chest Balcony W']),
|
||||
create_dungeon_region(player, 'PoD Compass Room', 'Palace of Darkness', ['Palace of Darkness - Compass Chest'], ['PoD Compass Room SE', 'PoD Compass Room WN', 'PoD Compass Room W Down Stairs', 'PoD Compass Room E Down Stairs']),
|
||||
create_dungeon_region(player, 'PoD Dark Basement', 'Palace of Darkness', ['Palace of Darkness - Dark Basement - Left', 'Palace of Darkness - Dark Basement - Right'], ['PoD Dark Basement W Up Stairs', 'PoD Dark Basement E Up Stairs']),
|
||||
create_dungeon_region(player, 'PoD Harmless Hellway', 'Palace of Darkness', ['Palace of Darkness - Harmless Hellway'], ['PoD Harmless Hellway NE', 'PoD Harmless Hellway SE']),
|
||||
create_dungeon_region(player, 'PoD Mimics 2', 'Palace of Darkness', None, ['PoD Mimics 2 SW', 'PoD Mimics 2 NW']),
|
||||
create_dungeon_region(player, 'PoD Bow Statue', 'Palace of Darkness', None, ['PoD Bow Statue SW', 'PoD Bow Statue Down Ladder']),
|
||||
create_dungeon_region(player, 'PoD Dark Pegs', 'Palace of Darkness', None, ['PoD Dark Pegs Up Ladder', 'PoD Dark Pegs WN']),
|
||||
create_dungeon_region(player, 'PoD Lonely Turtle', 'Palace of Darkness', None, ['PoD Lonely Turtle SW', 'PoD Lonely Turtle EN']),
|
||||
create_dungeon_region(player, 'PoD Turtle Party', 'Palace of Darkness', None, ['PoD Turtle Party ES', 'PoD Turtle Party NW']),
|
||||
create_dungeon_region(player, 'PoD Dark Alley', 'Palace of Darkness', None, ['PoD Dark Alley NE']),
|
||||
create_dungeon_region(player, 'PoD Callback', 'Palace of Darkness', None, ['PoD Callback WS', 'PoD Callback Warp']),
|
||||
create_dungeon_region(player, 'PoD Boss', 'Palace of Darkness', ['Palace of Darkness - Boss', 'Palace of Darkness - Prize'], ['PoD Boss SE']),
|
||||
|
||||
# swamp
|
||||
# sw
|
||||
# tt
|
||||
# ice
|
||||
# mire
|
||||
# tr
|
||||
# gt
|
||||
# sw
|
||||
]
|
||||
|
||||
for region_name, (room_id, shopkeeper, replaceable) in shop_table.items():
|
||||
|
||||
2
Rom.py
2
Rom.py
@@ -18,7 +18,7 @@ from EntranceShuffle import door_addresses
|
||||
|
||||
|
||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||
RANDOMIZERBASEHASH = 'b26631cd0d874e979d660727cb3a1f58'
|
||||
RANDOMIZERBASEHASH = '6f23a17f80179af941518585f2b27d52'
|
||||
|
||||
|
||||
class JsonRom(object):
|
||||
|
||||
184
Rules.py
184
Rules.py
@@ -168,7 +168,6 @@ def global_rules(world, player):
|
||||
set_rule(world.get_location('Master Sword Pedestal', player), lambda state: state.has('Red Pendant', player) and state.has('Blue Pendant', player) and state.has('Green Pendant', player))
|
||||
set_rule(world.get_location('Sahasrahla', player), lambda state: state.has('Green Pendant', player))
|
||||
set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has_beam_sword(player) or state.has('Beat Agahnim 1', player)) # barrier gets removed after killing agahnim, relevant for entrance shuffle
|
||||
# set_rule(world.get_entrance('Agahnim 1', player), lambda state: state.has_sword(player) and state.has_key('Small Key (Agahnims Tower)', player, 2))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Agahnim 1', player))
|
||||
set_rule(world.get_location('Castle Tower - Dark Maze', player), lambda state: state.has_key('Small Key (Agahnims Tower)', player))
|
||||
set_rule(world.get_entrance('Top of Pyramid', player), lambda state: state.has('Beat Agahnim 1', player))
|
||||
@@ -260,8 +259,9 @@ def global_rules(world, player):
|
||||
# TODO: Can these replace other rules?
|
||||
|
||||
# Hyrule Castle: Can't get keys from guards unless you can kill said guards.
|
||||
add_rule(world.get_location('Hyrule Castle - Map Guard Key Drop', player), lambda state: state.can_kill_most_things(player))
|
||||
add_rule(world.get_location('Hyrule Castle - Boomerang Guard Key Drop', player), lambda state: state.can_kill_most_things(player))
|
||||
# Aerinon's note: You can use bombs? - That's usually assumed. In Standard, you get uncle weapon
|
||||
# add_rule(world.get_location('Hyrule Castle - Map Guard Key Drop', player), lambda state: state.can_kill_most_things(player))
|
||||
# add_rule(world.get_location('Hyrule Castle - Boomerang Guard Key Drop', player), lambda state: state.can_kill_most_things(player))
|
||||
|
||||
# Hyrule Castle: There are three keys and we don't know how we shuffled, so we
|
||||
# need three keys to be accessible before you use any of these doors.
|
||||
@@ -269,20 +269,6 @@ def global_rules(world, player):
|
||||
for door in ['Sewers Key Rat Key Door N', 'Sewers Secret Room Key Door S',
|
||||
'Sewers Dark Cross Key Door N', 'Sewers Dark Cross Key Door S', 'Hyrule Dungeon Armory Interior Key Door N', 'Hyrule Dungeon Armory Interior Key Door S', 'Hyrule Dungeon Map Room Key Door S', 'Hyrule Dungeon North Abyss Key Door N']:
|
||||
set_rule(world.get_entrance(door, player), lambda state: state.has_key('Small Key (Escape)', player, 3))
|
||||
|
||||
# Sewers: All sorts of things need lamps
|
||||
# TODO: Need to play nice with other complicated lamp rules
|
||||
set_rule(world.get_entrance('Sewers Behind Tapestry S', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Behind Tapestry Down Stairs', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Rope Room Up Stairs', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Rope Room North Stairs', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Dark Cross South Stairs', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Dark Cross Key Door N', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Dark Cross Key Door S', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_location('Sewers - Dark Cross', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Water W', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Key Rat E', player), lambda state: state.has('Lamp', player))
|
||||
set_rule(world.get_entrance('Sewers Key Rat Key Door N', player), lambda state: state.has('Lamp', player))
|
||||
|
||||
# Eastern Palace
|
||||
# The stalfos room and eyegore with a key can be killed with pots.
|
||||
@@ -295,6 +281,8 @@ def global_rules(world, player):
|
||||
set_rule(world.get_entrance('Eastern Eyegores NE', player), lambda state: state.can_shoot_arrows(player))
|
||||
# Big key rules
|
||||
set_rule(world.get_location('Eastern Palace - Big Chest', player), lambda state: state.has('Big Key (Eastern Palace)', player))
|
||||
if world.accessibility == 'locations':
|
||||
forbid_item(world.get_location('Eastern Palace - Big Chest', player), 'Big Key (Eastern Palace)', player)
|
||||
set_rule(world.get_entrance('Eastern Big Key NE', player), lambda state: state.has('Big Key (Eastern Palace)', player))
|
||||
set_rule(world.get_entrance('Eastern Courtyard N', player), lambda state: state.has('Big Key (Eastern Palace)', player))
|
||||
# There are two keys and we don't know how we shuffled, so careful with key doors.
|
||||
@@ -303,44 +291,46 @@ def global_rules(world, player):
|
||||
set_rule(world.get_entrance(door, player), lambda state: state.has_key('Small Key (Eastern Palace)', player, 2))
|
||||
|
||||
# Boss rules. Same as below but no BK or arrow requirement.
|
||||
set_rule(world.get_location('Eastern Palace - Boss', player), lambda state: world.get_location('Eastern Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state))
|
||||
set_rule(world.get_location('Eastern Palace - Prize', player), lambda state: world.get_location('Eastern Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Eastern Palace - Prize', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Eastern Palace - Boss', player))
|
||||
|
||||
# Desert
|
||||
set_rule(world.get_location('Desert Palace - Big Chest', player), lambda state: state.has('Big Key (Desert Palace)', player))
|
||||
if world.accessibility == 'locations':
|
||||
forbid_item(world.get_location('Desert Palace - Big Chest', player), 'Big Key (Desert Palace)', player)
|
||||
set_rule(world.get_location('Desert Palace - Torch', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Desert Wall Slide NW', player), lambda state: state.has_fire_source(player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Desert Palace - Prize', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Desert Palace - Boss', player))
|
||||
# TODO: Key logic for desert
|
||||
|
||||
# Tower of Hera
|
||||
set_rule(world.get_location('Tower of Hera - Big Chest', player), lambda state: state.has('Big Key (Tower of Hera)', player))
|
||||
if world.accessibility == 'locations':
|
||||
forbid_item(world.get_location('Tower of Hera - Big Chest', player), 'Big Key (Tower of Hera)', player)
|
||||
set_rule(world.get_location('Tower of Hera - Big Key Chest', player), lambda state: state.has_fire_source(player))
|
||||
set_rule(world.get_entrance('Hera Startile Corner NW', player), lambda state: state.has('Big Key (Tower of Hera)', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Boss', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Prize', player))
|
||||
# TODO: Key logic for hera
|
||||
|
||||
set_rule(world.get_entrance('Tower Altar NW', player), lambda state: state.has_sword(player))
|
||||
|
||||
set_rule(world.get_entrance('PoD Mimics 1 NW', player), lambda state: state.can_shoot_arrows(player))
|
||||
set_rule(world.get_entrance('PoD Mimics 2 NW', player), lambda state: state.can_shoot_arrows(player))
|
||||
set_rule(world.get_entrance('PoD Bow Statue Down Ladder', player), lambda state: state.can_shoot_arrows(player))
|
||||
set_rule(world.get_entrance('PoD Dark Alley NE', player), lambda state: state.has('Big Key (Palace of Darkness)', player))
|
||||
set_rule(world.get_location('Palace of Darkness - Big Chest', player), lambda state: state.has('Big Key (Palace of Darkness)', player))
|
||||
if world.accessibility == 'locations':
|
||||
forbid_item(world.get_location('Palace of Darkness - Big Chest', player), 'Big Key (Palace of Darkness)', player)
|
||||
set_rule(world.get_entrance('PoD Map Balcony Drop Down', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('PoD Dark Pegs WN', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('PoD Dark Pegs Up Ladder', player), lambda state: state.has('Hammer', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Boss', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Prize', player))
|
||||
# TODO: Key logic for pod
|
||||
|
||||
# End of door rando rules.
|
||||
|
||||
# set_rule(world.get_entrance('Sewers Door', player), lambda state: state.has_key('Small Key (Escape)', player))
|
||||
# set_rule(world.get_entrance('Sewers Back Door', player), lambda state: state.has_key('Small Key (Escape)', player))
|
||||
|
||||
# set_rule(world.get_location('Eastern Palace - Boss', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state))
|
||||
# set_rule(world.get_location('Eastern Palace - Prize', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state))
|
||||
# for location in ['Eastern Palace - Boss', 'Eastern Palace - Big Chest']:
|
||||
# forbid_item(world.get_location(location, player), 'Big Key (Eastern Palace)', player)
|
||||
|
||||
set_rule(world.get_location('Desert Palace - Big Chest', player), lambda state: state.has('Big Key (Desert Palace)', player))
|
||||
set_rule(world.get_location('Desert Palace - Torch', player), lambda state: state.has_Boots(player))
|
||||
# set_rule(world.get_entrance('Desert Palace East Wing', player), lambda state: state.has_key('Small Key (Desert Palace)', player))
|
||||
set_rule(world.get_location('Desert Palace - Prize', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Prize', player).parent_region.dungeon.boss.can_defeat(state))
|
||||
set_rule(world.get_location('Desert Palace - Boss', player), lambda state: state.has_key('Small Key (Desert Palace)', player) and state.has('Big Key (Desert Palace)', player) and state.has_fire_source(player) and world.get_location('Desert Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state))
|
||||
for location in ['Desert Palace - Boss', 'Desert Palace - Big Chest']:
|
||||
forbid_item(world.get_location(location, player), 'Big Key (Desert Palace)', player)
|
||||
|
||||
for location in ['Desert Palace - Boss', 'Desert Palace - Big Key Chest', 'Desert Palace - Compass Chest']:
|
||||
forbid_item(world.get_location(location, player), 'Small Key (Desert Palace)', player)
|
||||
|
||||
# set_rule(world.get_entrance('Tower of Hera Small Key Door', player), lambda state: state.has_key('Small Key (Tower of Hera)', player) or item_name(state, 'Tower of Hera - Big Key Chest', player) == ('Small Key (Tower of Hera)', player))
|
||||
# set_rule(world.get_entrance('Tower of Hera Big Key Door', player), lambda state: state.has('Big Key (Tower of Hera)', player))
|
||||
set_rule(world.get_location('Tower of Hera - Big Chest', player), lambda state: state.has('Big Key (Tower of Hera)', player))
|
||||
set_rule(world.get_location('Tower of Hera - Big Key Chest', player), lambda state: state.has_fire_source(player))
|
||||
if world.accessibility != 'locations':
|
||||
set_always_allow(world.get_location('Tower of Hera - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Tower of Hera)' and item.player == player)
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Boss', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Prize', player))
|
||||
for location in ['Tower of Hera - Boss', 'Tower of Hera - Big Chest', 'Tower of Hera - Compass Chest']:
|
||||
forbid_item(world.get_location(location, player), 'Big Key (Tower of Hera)', player)
|
||||
# for location in ['Tower of Hera - Big Key Chest']:
|
||||
# forbid_item(world.get_location(location, player), 'Small Key (Tower of Hera)', player)
|
||||
|
||||
set_rule(world.get_entrance('Swamp Palace Moat', player), lambda state: state.has('Flippers', player) and state.has('Open Floodgate', player))
|
||||
add_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
|
||||
@@ -431,29 +421,6 @@ def global_rules(world, player):
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Boss', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Prize', player))
|
||||
|
||||
set_rule(world.get_entrance('Palace of Darkness Bonk Wall', player), lambda state: state.can_shoot_arrows(player))
|
||||
set_rule(world.get_entrance('Palace of Darkness Hammer Peg Drop', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Palace of Darkness Bridge Room', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 1)) # If we can reach any other small key door, we already have back door access to this area
|
||||
set_rule(world.get_entrance('Palace of Darkness Big Key Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) and state.has('Big Key (Palace of Darkness)', player) and state.can_shoot_arrows(player) and state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Palace of Darkness (North)', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 4))
|
||||
set_rule(world.get_location('Palace of Darkness - Big Chest', player), lambda state: state.has('Big Key (Palace of Darkness)', player))
|
||||
|
||||
set_rule(world.get_entrance('Palace of Darkness Big Key Chest Staircase', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Big Key Chest', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 3)))
|
||||
if world.accessibility != 'locations':
|
||||
set_always_allow(world.get_location('Palace of Darkness - Big Key Chest', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5))
|
||||
else:
|
||||
forbid_item(world.get_location('Palace of Darkness - Big Key Chest', player), 'Small Key (Palace of Darkness)', player)
|
||||
|
||||
set_rule(world.get_entrance('Palace of Darkness Spike Statue Room Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6) or (item_name(state, 'Palace of Darkness - Harmless Hellway', player) in [('Small Key (Palace of Darkness)', player)] and state.has_key('Small Key (Palace of Darkness)', player, 4)))
|
||||
if world.accessibility != 'locations':
|
||||
set_always_allow(world.get_location('Palace of Darkness - Harmless Hellway', player), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and item.player == player and state.has_key('Small Key (Palace of Darkness)', player, 5))
|
||||
else:
|
||||
forbid_item(world.get_location('Palace of Darkness - Harmless Hellway', player), 'Small Key (Palace of Darkness)', player)
|
||||
|
||||
set_rule(world.get_entrance('Palace of Darkness Maze Door', player), lambda state: state.has_key('Small Key (Palace of Darkness)', player, 6))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Boss', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Prize', player))
|
||||
|
||||
# these key rules are conservative, you might be able to get away with more lenient rules
|
||||
randomizer_room_chests = ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right', 'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right']
|
||||
compass_room_chests = ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right', 'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right']
|
||||
@@ -952,15 +919,46 @@ def no_glitches_rules(world, player):
|
||||
add_conditional_lamp('Misery Mire (Vitreous)', 'Misery Mire (Entrance)', 'Entrance')
|
||||
add_conditional_lamp('Turtle Rock (Dark Room) (North)', 'Turtle Rock (Entrance)', 'Entrance')
|
||||
add_conditional_lamp('Turtle Rock (Dark Room) (South)', 'Turtle Rock (Entrance)', 'Entrance')
|
||||
add_conditional_lamp('Palace of Darkness Big Key Door', 'Palace of Darkness (Entrance)', 'Entrance')
|
||||
add_conditional_lamp('Palace of Darkness Maze Door', 'Palace of Darkness (Entrance)', 'Entrance')
|
||||
add_conditional_lamp('Palace of Darkness - Dark Basement - Left', 'Palace of Darkness (Entrance)', 'Location')
|
||||
add_conditional_lamp('Palace of Darkness - Dark Basement - Right', 'Palace of Darkness (Entrance)', 'Location')
|
||||
# todo: more lamp
|
||||
# if :
|
||||
# add_conditional_lamp('Agahnim 1', 'Agahnims Tower', 'Entrance')
|
||||
# add_conditional_lamp('Castle Tower - Dark Maze', 'Agahnims Tower', 'Location')
|
||||
if world.mode == 'inverted':
|
||||
|
||||
add_conditional_lamp('PoD Dark Alley NE', 'PoD Dark Alley', 'Entrance')
|
||||
add_conditional_lamp('PoD Callback WS', 'PoD Callback', 'Entrance')
|
||||
add_conditional_lamp('PoD Callback Warp', 'PoD Callback', 'Entrance')
|
||||
add_conditional_lamp('PoD Turtle Party ES', 'PoD Turtle Party', 'Entrance')
|
||||
add_conditional_lamp('PoD Turtle Party NW', 'PoD Turtle Party', 'Entrance')
|
||||
add_conditional_lamp('PoD Lonely Turtle SW', 'PoD Lonely Turtle', 'Entrance')
|
||||
add_conditional_lamp('PoD Lonely Turtle EN', 'PoD Lonely Turtle', 'Entrance')
|
||||
add_conditional_lamp('PoD Dark Pegs Up Ladder', 'PoD Dark Pegs', 'Entrance')
|
||||
add_conditional_lamp('PoD Dark Pegs WN', 'PoD Dark Pegs', 'Entrance')
|
||||
add_conditional_lamp('PoD Dark Basement W Up Stairs', 'PoD Dark Basement', 'Entrance')
|
||||
add_conditional_lamp('PoD Dark Basement E Up Stairs', 'PoD Dark Basement', 'Entrance')
|
||||
add_conditional_lamp('PoD Dark Maze EN', 'PoD Dark Maze', 'Entrance')
|
||||
add_conditional_lamp('PoD Dark Maze E', 'PoD Dark Maze', 'Entrance')
|
||||
add_conditional_lamp('Palace of Darkness - Dark Basement - Left', 'PoD Dark Basement', 'Location')
|
||||
add_conditional_lamp('Palace of Darkness - Dark Basement - Right', 'PoD Dark Basement', 'Location')
|
||||
add_conditional_lamp('Palace of Darkness - Dark Maze - Top', 'PoD Dark Maze', 'Location')
|
||||
add_conditional_lamp('Palace of Darkness - Dark Maze - Bottom', 'PoD Dark Maze', 'Location')
|
||||
add_conditional_lamp('Eastern Dark Square NW', 'Eastern Dark Square', 'Entrance')
|
||||
add_conditional_lamp('Eastern Dark Square Key Door WN', 'Eastern Dark Square', 'Entrance')
|
||||
add_conditional_lamp('Eastern Darkness S', 'Eastern Darkness', 'Entrance')
|
||||
add_conditional_lamp('Eastern Darkness Up Stairs', 'Eastern Darkness', 'Entrance')
|
||||
add_conditional_lamp('Eastern Palace - Dark Square Pot Key', 'Eastern Dark Square', 'Location')
|
||||
add_conditional_lamp('Eastern Palace - Dark Eyegore Key Drop', 'Eastern Darkness', 'Location')
|
||||
if world.mode != 'inverted':
|
||||
add_conditional_lamp('Tower Lone Statue Down Stairs', 'Tower Lone Statue', 'Entrance')
|
||||
add_conditional_lamp('Tower Lone Statue WN', 'Tower Lone Statue', 'Entrance')
|
||||
add_conditional_lamp('Tower Dark Maze EN', 'Tower Dark Maze', 'Entrance')
|
||||
add_conditional_lamp('Tower Dark Maze ES', 'Tower Dark Maze', 'Entrance')
|
||||
add_conditional_lamp('Tower Dark Chargers WS', 'Tower Dark Chargers', 'Entrance')
|
||||
add_conditional_lamp('Tower Dark Chargers Up Stairs', 'Tower Dark Chargers', 'Entrance')
|
||||
add_conditional_lamp('Tower Dual Statues Down Stairs', 'Tower Dual Statues', 'Entrance')
|
||||
add_conditional_lamp('Tower Dual Statues WS', 'Tower Dual Statues', 'Entrance')
|
||||
add_conditional_lamp('Tower Dark Pits ES', 'Tower Dark Pits', 'Entrance')
|
||||
add_conditional_lamp('Tower Dark Pits EN', 'Tower Dark Pits', 'Entrance')
|
||||
add_conditional_lamp('Tower Dark Archers WS', 'Tower Dark Archers', 'Entrance')
|
||||
add_conditional_lamp('Tower Dark Archers Up Stairs', 'Tower Dark Archers', 'Entrance')
|
||||
add_conditional_lamp('Castle Tower - Dark Maze', 'Tower Dark Maze', 'Location')
|
||||
add_conditional_lamp('Castle Tower - Dark Archer Key Drop', 'Tower Dark Archers', 'Location')
|
||||
else:
|
||||
add_conditional_lamp('Agahnim 1', 'Inverted Agahnims Tower', 'Entrance')
|
||||
add_conditional_lamp('Castle Tower - Dark Maze', 'Inverted Agahnims Tower', 'Location')
|
||||
add_conditional_lamp('Old Man', 'Old Man Cave', 'Location')
|
||||
@@ -969,15 +967,19 @@ def no_glitches_rules(world, player):
|
||||
add_conditional_lamp('Death Mountain Return Cave Exit (West)', 'Death Mountain Return Cave', 'Entrance')
|
||||
add_conditional_lamp('Old Man House Front to Back', 'Old Man House', 'Entrance')
|
||||
add_conditional_lamp('Old Man House Back to Front', 'Old Man House', 'Entrance')
|
||||
# todo: lamp requirements
|
||||
# add_conditional_lamp('Eastern Palace - Big Key Chest', 'Eastern Palace', 'Location')
|
||||
# add_conditional_lamp('Eastern Palace - Boss', 'Eastern Palace', 'Location')
|
||||
# add_conditional_lamp('Eastern Palace - Prize', 'Eastern Palace', 'Location')
|
||||
|
||||
# if not world.sewer_light_cone:
|
||||
# add_lamp_requirement(world.get_location('Sewers - Dark Cross', player), player)
|
||||
# add_lamp_requirement(world.get_entrance('Sewers Back Door', player), player)
|
||||
# add_lamp_requirement(world.get_entrance('Throne Room', player), player)
|
||||
if not world.sewer_light_cone:
|
||||
add_lamp_requirement(world.get_location('Sewers - Dark Cross', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Behind Tapestry S', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Behind Tapestry Down Stairs', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Rope Room Up Stairs', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Rope Room North Stairs', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Dark Cross South Stairs', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Dark Cross Key Door N', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Dark Cross Key Door S', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Water W', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Key Rat E', player), player)
|
||||
add_lamp_requirement(world.get_entrance('Sewers Key Rat Key Door N', player), player)
|
||||
|
||||
|
||||
def open_rules(world, player):
|
||||
|
||||
@@ -8,6 +8,7 @@ RecordStairType: {
|
||||
SpiralWarp: {
|
||||
lda $040c : cmp.b #$ff : beq .abort ; abort if not in dungeon
|
||||
cmp #$14 : beq .check ; hera is okay
|
||||
cmp #$0c : beq .check ; pod is okay
|
||||
cmp #$0A : bcs .abort ; abort if not supported yet -- todo: this needs to be altered/removed as more dungeons are implemented
|
||||
.check
|
||||
lda $045e : cmp #$5e : beq .gtg ; abort if not spiral - intended room is in A!
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user