Thieves Town
This commit is contained in:
@@ -190,7 +190,7 @@ def fix_big_key_doors_with_ugly_smalls(world, player):
|
||||
|
||||
|
||||
def remove_ugly_small_key_doors(world, player):
|
||||
for d in ['Eastern Compass Area SW', 'Eastern Darkness S']:
|
||||
for d in ['Eastern Compass Area SW', 'Eastern Darkness S', 'Thieves Hallway SE']:
|
||||
door = world.get_door(d, player)
|
||||
room = world.get_room(door.roomIndex, player)
|
||||
room.change(door.doorListPos, DoorKind.Normal)
|
||||
@@ -199,7 +199,7 @@ def remove_ugly_small_key_doors(world, player):
|
||||
|
||||
|
||||
def unpair_big_key_doors(world, player):
|
||||
problematic_bk_doors = ['Eastern Courtyard N', 'Eastern Big Key NE']
|
||||
problematic_bk_doors = ['Eastern Courtyard N', 'Eastern Big Key NE', 'Thieves BK Corner NE']
|
||||
for paired_door in world.paired_doors[player]:
|
||||
if paired_door.door_a in problematic_bk_doors or paired_door.door_b in problematic_bk_doors:
|
||||
paired_door.pair = False
|
||||
@@ -1517,7 +1517,7 @@ def determine_required_paths(world):
|
||||
'Palace of Darkness': ['PoD Boss'],
|
||||
'Swamp Palace': ['Swamp Boss'],
|
||||
'Skull Woods': ['Skull Boss'],
|
||||
# 'Thieves Town': [],
|
||||
'Thieves Town': ['Thieves Boss', ('Thieves Blind\'s Cell', 'Thieves Boss')],
|
||||
}
|
||||
if world.shuffle == 'vanilla':
|
||||
# paths['Skull Woods'].remove('Skull Boss') # is this necessary?
|
||||
@@ -1526,6 +1526,8 @@ def determine_required_paths(world):
|
||||
if world.mode == 'standard':
|
||||
paths['Hyrule Castle'].append('Hyrule Dungeon Cellblock')
|
||||
paths['Hyrule Castle'].append('Sanctuary')
|
||||
if world.doorShuffle in ['basic', 'experimental']:
|
||||
paths['Thieves Town'].append('Thieves Attic Window')
|
||||
return paths
|
||||
|
||||
|
||||
@@ -1575,20 +1577,27 @@ def check_required_paths(paths, world, player):
|
||||
for dungeon_name in paths.keys():
|
||||
sector, entrances = world.dungeon_layouts[player][dungeon_name]
|
||||
if len(paths[dungeon_name]) > 0:
|
||||
check_paths = convert_regions(paths[dungeon_name], world, player)
|
||||
start_regions = convert_regions(entrances, world, player)
|
||||
state = ExplorationState()
|
||||
for region in start_regions:
|
||||
state.visit_region(region)
|
||||
state.add_all_doors_check_unattached(region, world, player)
|
||||
explore_state(state, world, player)
|
||||
valid, bad_region = check_if_regions_visited(state, check_paths)
|
||||
if not valid:
|
||||
if check_for_pinball_fix(state, bad_region, world, player):
|
||||
explore_state(state, world, player)
|
||||
valid, bad_region = check_if_regions_visited(state, check_paths)
|
||||
if not valid:
|
||||
raise Exception('%s cannot reach %s' % (dungeon_name, bad_region.name))
|
||||
states_to_explore = defaultdict(list)
|
||||
for path in paths[dungeon_name]:
|
||||
if type(path) is tuple:
|
||||
states_to_explore[tuple([path[0]])].append(path[1])
|
||||
else:
|
||||
states_to_explore[tuple(entrances)].append(path)
|
||||
for start_regs, dest_regs in states_to_explore.items():
|
||||
check_paths = convert_regions(dest_regs, world, player)
|
||||
start_regions = convert_regions(start_regs, world, player)
|
||||
state = ExplorationState()
|
||||
for region in start_regions:
|
||||
state.visit_region(region)
|
||||
state.add_all_doors_check_unattached(region, world, player)
|
||||
explore_state(state, world, player)
|
||||
valid, bad_region = check_if_regions_visited(state, check_paths)
|
||||
if not valid:
|
||||
if check_for_pinball_fix(state, bad_region, world, player):
|
||||
explore_state(state, world, player)
|
||||
valid, bad_region = check_if_regions_visited(state, check_paths)
|
||||
if not valid:
|
||||
raise Exception('%s cannot reach %s' % (dungeon_name, bad_region.name))
|
||||
|
||||
|
||||
def explore_state(state, world, player):
|
||||
@@ -1674,6 +1683,14 @@ logical_connections = [
|
||||
('Skull Pot Circle Star Path', 'Skull Map Room'),
|
||||
('Skull Big Chest Hookpath', 'Skull 1 Lobby'),
|
||||
('Skull Back Drop Star Path', 'Skull Small Hall'),
|
||||
('Thieves Hellway Orange Barrier', 'Thieves Hellway S Crystal'),
|
||||
('Thieves Hellway Crystal Orange Barrier', 'Thieves Hellway'),
|
||||
('Thieves Hellway Blue Barrier', 'Thieves Hellway N Crystal'),
|
||||
('Thieves Hellway Crystal Blue Barrier', 'Thieves Hellway'),
|
||||
('Thieves Basement Block Path', 'Thieves Blocked Entry'),
|
||||
('Thieves Blocked Entry Path', 'Thieves Basement Block'),
|
||||
('Thieves Conveyor Bridge Block Path', 'Thieves Conveyor Block'),
|
||||
('Thieves Conveyor Block Path', 'Thieves Conveyor Bridge'),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
@@ -1706,8 +1723,8 @@ spiral_staircases = [
|
||||
('Swamp Left Elbow Down Stairs', 'Swamp Drain Left Up Stairs'),
|
||||
('Swamp Right Elbow Down Stairs', 'Swamp Drain Right Up Stairs'),
|
||||
('Swamp Behind Waterfall Up Stairs', 'Swamp C Down Stairs'),
|
||||
# ('', ''),
|
||||
# ('', ''),
|
||||
('Thieves Spike Switch Up Stairs', 'Thieves Attic Down Stairs'),
|
||||
('Thieves Conveyor Maze Down Stairs', 'Thieves Basement Block Up Stairs'),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
@@ -1730,7 +1747,15 @@ open_edges = [
|
||||
('Desert East Wing N Edge', 'Desert Arrow Pot Corner S Edge'),
|
||||
('Desert Arrow Pot Corner W Edge', 'Desert North Hall E Edge'),
|
||||
('Desert North Hall W Edge', 'Desert Sandworm Corner S Edge'),
|
||||
('Desert Sandworm Corner E Edge', 'Desert West Wing N Edge')
|
||||
('Desert Sandworm Corner E Edge', 'Desert West Wing N Edge'),
|
||||
('Thieves Lobby N Edge', 'Thieves Ambush S Edge'),
|
||||
('Thieves Lobby NE Edge', 'Thieves Ambush SE Edge'),
|
||||
('Thieves Ambush ES Edge', 'Thieves BK Corner WS Edge'),
|
||||
('Thieves Ambush EN Edge', 'Thieves BK Corner WN Edge'),
|
||||
('Thieves BK Corner S Edge', 'Thieves Compass Room N Edge'),
|
||||
('Thieves BK Corner SW Edge', 'Thieves Compass Room NW Edge'),
|
||||
('Thieves Compass Room WS Edge', 'Thieves Big Chest Nook WS Edge'),
|
||||
('Thieves Cricket Hall Left Edge', 'Thieves Cricket Hall Right Edge')
|
||||
]
|
||||
|
||||
falldown_pits = [
|
||||
@@ -1838,6 +1863,18 @@ interior_doors = [
|
||||
('Skull Star Pits WS', 'Skull Torch Room ES'),
|
||||
('Skull Torch Room EN', 'Skull Vines WN'),
|
||||
('Skull Spike Corner WS', 'Skull Final Drop ES'),
|
||||
('Thieves Hallway WS', 'Thieves Pot Alcove Mid ES'),
|
||||
('Thieves Conveyor Maze SW', 'Thieves Pot Alcove Top NW'),
|
||||
('Thieves Conveyor Maze EN', 'Thieves Hallway WN'),
|
||||
('Thieves Spike Track NE', 'Thieves Triple Bypass SE'),
|
||||
('Thieves Spike Track WS', 'Thieves Hellway Crystal ES'),
|
||||
('Thieves Hellway Crystal EN', 'Thieves Triple Bypass WN'),
|
||||
('Thieves Attic ES', 'Thieves Cricket Hall Left WS'),
|
||||
('Thieves Cricket Hall Right ES', 'Thieves Attic Window WS'),
|
||||
('Thieves Blocked Entry SW', 'Thieves Lonely Zazak NW'),
|
||||
('Thieves Lonely Zazak ES', 'Thieves Blind\'s Cell WS'),
|
||||
('Thieves Conveyor Bridge WS', 'Thieves Big Chest Room ES'),
|
||||
('Thieves Conveyor Block WN', 'Thieves Trap EN'),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
@@ -1916,6 +1953,17 @@ default_door_connections = [
|
||||
('Skull 2 East Lobby WS', 'Skull Small Hall ES'),
|
||||
('Skull 3 Lobby NW', 'Skull Star Pits SW'),
|
||||
('Skull Vines NW', 'Skull Spike Corner SW'),
|
||||
('Thieves Lobby E', 'Thieves Compass Room W'),
|
||||
('Thieves Ambush E', 'Thieves BK Corner W'),
|
||||
('Thieves BK Corner NW', 'Thieves Pot Alcove Bottom SW'),
|
||||
('Thieves BK Corner NE', 'Thieves Hallway SE'),
|
||||
('Thieves Pot Alcove Mid WS', 'Thieves Spike Track ES'),
|
||||
('Thieves Hellway NW', 'Thieves Spike Switch SW'),
|
||||
('Thieves Triple Bypass EN', 'Thieves Conveyor Maze WN'),
|
||||
('Thieves Basement Block WN', 'Thieves Conveyor Bridge EN'),
|
||||
('Thieves Lonely Zazak WS', 'Thieves Conveyor Bridge ES'),
|
||||
# ('', ''),
|
||||
# ('', ''),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
@@ -1928,6 +1976,8 @@ default_one_way_connections = [
|
||||
('PoD Harmless Hellway SE', 'PoD Arena Main NE'),
|
||||
('PoD Dark Alley NE', 'PoD Boss SE'),
|
||||
('Swamp T NW', 'Swamp Boss SW'),
|
||||
('Thieves Hallway NE', 'Thieves Boss SE'),
|
||||
# ('', ''),
|
||||
]
|
||||
|
||||
# todo: these path rules are more complicated I think...
|
||||
|
||||
99
Doors.py
99
Doors.py
@@ -484,6 +484,88 @@ def create_doors(world, player):
|
||||
create_door(player, 'Skull Spike Corner WS', Intr).dir(Direction.West, 0x39, Bot, High).small_key().pos(1),
|
||||
create_door(player, 'Skull Final Drop ES', Intr).dir(Direction.East, 0x39, Bot, High).small_key().pos(1),
|
||||
create_door(player, 'Skull Final Drop Hole', Hole),
|
||||
|
||||
create_door(player, 'Thieves Lobby N Edge', Open).dir(Direction.North, 0xdb, None, Low),
|
||||
create_door(player, 'Thieves Lobby NE Edge', Open).dir(Direction.North, 0xdb, None, Low),
|
||||
create_door(player, 'Thieves Lobby E', Nrml).dir(Direction.East, 0xdb, Mid, High).no_exit().trap(0x4).pos(0),
|
||||
create_door(player, 'Thieves Big Chest Nook WS Edge', Open).dir(Direction.West, 0xdb, None, Low),
|
||||
create_door(player, 'Thieves Ambush S Edge', Open).dir(Direction.South, 0xcb, None, Low),
|
||||
create_door(player, 'Thieves Ambush SE Edge', Open).dir(Direction.South, 0xcb, None, Low),
|
||||
create_door(player, 'Thieves Ambush ES Edge', Open).dir(Direction.East, 0xcb, None, Low),
|
||||
create_door(player, 'Thieves Ambush EN Edge', Open).dir(Direction.East, 0xcb, None, Low),
|
||||
create_door(player, 'Thieves Ambush E', Nrml).dir(Direction.East, 0xcb, Mid, High).pos(0),
|
||||
create_door(player, 'Thieves BK Corner WN Edge', Open).dir(Direction.West, 0xcc, None, Low),
|
||||
create_door(player, 'Thieves BK Corner WS Edge', Open).dir(Direction.West, 0xcc, None, Low),
|
||||
create_door(player, 'Thieves BK Corner S Edge', Open).dir(Direction.South, 0xcc, None, Low),
|
||||
create_door(player, 'Thieves BK Corner SW Edge', Open).dir(Direction.South, 0xcc, None, Low),
|
||||
create_door(player, 'Thieves BK Corner W', Nrml).dir(Direction.West, 0xcc, Mid, High).pos(2),
|
||||
create_door(player, 'Thieves BK Corner NW', Nrml).dir(Direction.North, 0xcc, Left, High).pos(1),
|
||||
create_door(player, 'Thieves BK Corner NE', Nrml).dir(Direction.North, 0xcc, Right, High).big_key().pos(0),
|
||||
create_door(player, 'Thieves Compass Room NW Edge', Open).dir(Direction.North, 0xdc, None, Low),
|
||||
create_door(player, 'Thieves Compass Room N Edge', Open).dir(Direction.North, 0xdc, None, Low),
|
||||
create_door(player, 'Thieves Compass Room WS Edge', Open).dir(Direction.West, 0xdc, None, Low),
|
||||
create_door(player, 'Thieves Compass Room W', Nrml).dir(Direction.West, 0xdc, Mid, High).pos(0),
|
||||
create_door(player, 'Thieves Hallway SE', Nrml).dir(Direction.South, 0xbc, Right, High).small_key().pos(1),
|
||||
create_door(player, 'Thieves Hallway NE', Nrml).dir(Direction.North, 0xbc, Right, High).pos(7),
|
||||
create_door(player, 'Thieves Pot Alcove Mid WS', Nrml).dir(Direction.West, 0xbc, Bot, High).pos(5),
|
||||
create_door(player, 'Thieves Pot Alcove Bottom SW', Nrml).dir(Direction.South, 0xbc, Left, High).pos(3),
|
||||
create_door(player, 'Thieves Conveyor Maze WN', Nrml).dir(Direction.West, 0xbc, Top, High).pos(4),
|
||||
create_door(player, 'Thieves Hallway WS', Intr).dir(Direction.West, 0xbc, Bot, High).small_key().pos(0),
|
||||
create_door(player, 'Thieves Pot Alcove Mid ES', Intr).dir(Direction.East, 0xbc, Bot, High).small_key().pos(0),
|
||||
create_door(player, 'Thieves Conveyor Maze SW', Intr).dir(Direction.South, 0xbc, Left, High).pos(6),
|
||||
create_door(player, 'Thieves Pot Alcove Top NW', Intr).dir(Direction.North, 0xbc, Left, High).pos(6),
|
||||
create_door(player, 'Thieves Conveyor Maze EN', Intr).dir(Direction.East, 0xbc, Top, High).pos(2),
|
||||
create_door(player, 'Thieves Hallway WN', Intr).dir(Direction.West, 0xbc, Top, High).no_exit().pos(2),
|
||||
create_door(player, 'Thieves Conveyor Maze Down Stairs', Sprl).dir(Direction.Down, 0xbc, 0, HTH).ss(A, 0x11, 0x80, True, True),
|
||||
create_door(player, 'Thieves Boss SE', Nrml).dir(Direction.South, 0xac, Right, High).no_exit().trap(0x4).pos(0),
|
||||
create_door(player, 'Thieves Spike Track ES', Nrml).dir(Direction.East, 0xbb, Bot, High).pos(5),
|
||||
create_door(player, 'Thieves Hellway NW', Nrml).dir(Direction.North, 0xbb, Left, High).pos(0),
|
||||
create_door(player, 'Thieves Triple Bypass EN', Nrml).dir(Direction.East, 0xbb, Top, High).pos(4),
|
||||
create_door(player, 'Thieves Hellway Orange Barrier', Lgcl),
|
||||
create_door(player, 'Thieves Hellway Crystal Orange Barrier', Lgcl),
|
||||
create_door(player, 'Thieves Hellway Blue Barrier', Lgcl),
|
||||
create_door(player, 'Thieves Hellway Crystal Blue Barrier', Lgcl),
|
||||
create_door(player, 'Thieves Spike Track WS', Intr).dir(Direction.West, 0xbb, Bot, High).pos(2),
|
||||
create_door(player, 'Thieves Hellway Crystal ES', Intr).dir(Direction.East, 0xbb, Bot, High).pos(2),
|
||||
create_door(player, 'Thieves Spike Track NE', Intr).dir(Direction.North, 0xbb, Right, High).pos(3),
|
||||
create_door(player, 'Thieves Triple Bypass SE', Intr).dir(Direction.South, 0xbb, Right, High).pos(3),
|
||||
create_door(player, 'Thieves Hellway Crystal EN', Intr).dir(Direction.East, 0xbb, Top, High).pos(1),
|
||||
create_door(player, 'Thieves Triple Bypass WN', Intr).dir(Direction.West, 0xbb, Top, High).pos(1),
|
||||
create_door(player, 'Thieves Spike Switch SW', Nrml).dir(Direction.South, 0xab, Left, High).pos(1),
|
||||
create_door(player, 'Thieves Spike Switch Up Stairs', Sprl).dir(Direction.Up, 0xab, 0, HTH).ss(Z, 0x1a, 0x6c, True, True).small_key().pos(0),
|
||||
create_door(player, 'Thieves Attic Down Stairs', Sprl).dir(Direction.Down, 0x64, 0, HTH).ss(Z, 0x11, 0x80, True, True),
|
||||
create_door(player, 'Thieves Attic ES', Intr).dir(Direction.East, 0x64, Bot, High).pos(0),
|
||||
create_door(player, 'Thieves Cricket Hall Left WS', Intr).dir(Direction.West, 0x64, Bot, High).pos(0),
|
||||
create_door(player, 'Thieves Cricket Hall Left Edge', Open).dir(Direction.East, 0x64, None, High),
|
||||
create_door(player, 'Thieves Cricket Hall Right Edge', Open).dir(Direction.West, 0x65, None, High),
|
||||
create_door(player, 'Thieves Cricket Hall Right ES', Intr).dir(Direction.East, 0x65, Bot, High).pos(0),
|
||||
create_door(player, 'Thieves Attic Window WS', Intr).dir(Direction.West, 0x65, Bot, High).pos(0),
|
||||
create_door(player, 'Thieves Basement Block Up Stairs', Sprl).dir(Direction.Up, 0x45, 0, HTH).ss(A, 0x1a, 0x6c, True, True),
|
||||
create_door(player, 'Thieves Basement Block WN', Nrml).dir(Direction.West, 0x45, Top, High).trap(0x4).pos(0),
|
||||
create_door(player, 'Thieves Basement Block Path', Lgcl),
|
||||
create_door(player, 'Thieves Blocked Entry Path', Lgcl),
|
||||
create_door(player, 'Thieves Lonely Zazak WS', Nrml).dir(Direction.West, 0x45, Bot, High).pos(2),
|
||||
create_door(player, 'Thieves Blocked Entry SW', Intr).dir(Direction.South, 0x45, Left, High).pos(1),
|
||||
create_door(player, 'Thieves Lonely Zazak NW', Intr).dir(Direction.North, 0x45, Left, High).pos(1),
|
||||
create_door(player, 'Thieves Lonely Zazak ES', Intr).dir(Direction.East, 0x45, Right, High).pos(3),
|
||||
create_door(player, 'Thieves Blind\'s Cell WS', Intr).dir(Direction.West, 0x45, Right, High).pos(3),
|
||||
create_door(player, 'Thieves Conveyor Bridge EN', Nrml).dir(Direction.East, 0x44, Top, High).pos(2),
|
||||
create_door(player, 'Thieves Conveyor Bridge ES', Nrml).dir(Direction.East, 0x44, Bot, High).pos(3),
|
||||
create_door(player, 'Thieves Conveyor Bridge Block Path', Lgcl),
|
||||
create_door(player, 'Thieves Conveyor Block Path', Lgcl),
|
||||
create_door(player, 'Thieves Conveyor Bridge WS', Intr).dir(Direction.West, 0x44, Bot, High).small_key().pos(1),
|
||||
create_door(player, 'Thieves Big Chest Room ES', Intr).dir(Direction.East, 0x44, Bot, High).small_key().pos(1),
|
||||
create_door(player, 'Thieves Conveyor Block WN', Intr).dir(Direction.West, 0x44, Top, High).pos(0),
|
||||
create_door(player, 'Thieves Trap EN', Intr).dir(Direction.East, 0x44, Left, Top).pos(0),
|
||||
|
||||
# Door Templates
|
||||
# create_door(player, '', Nrml).dir(Direction.North, 0x00, Mid, High).pos(),
|
||||
# create_door(player, '', Intr).dir(Direction.North, 0x00, Left, High).pos(),
|
||||
# create_door(player, '', Sprl).dir(Direction.North, 0x00, 0, High).ss(),
|
||||
# create_door(player, '', Open).dir(Direction.North, 0x00, None, High),
|
||||
# create_door(player, '', Lgcl),
|
||||
# create_door(player, '', Hole),
|
||||
# create_door(player, '', Warp),
|
||||
]
|
||||
create_paired_doors(world, player)
|
||||
|
||||
@@ -539,6 +621,17 @@ def create_doors(world, player):
|
||||
world.get_door('Swamp Barrier Ledge - Orange', player).barrier(CrystalBarrier.Orange)
|
||||
world.get_door('Swamp Barrier - Orange', player).barrier(CrystalBarrier.Orange)
|
||||
|
||||
world.get_door('Thieves Spike Switch Up Stairs', player).c_switch()
|
||||
world.get_door('Thieves Spike Switch SW', player).c_switch()
|
||||
world.get_door('Thieves Attic ES', player).barrier(CrystalBarrier.Blue)
|
||||
world.get_door('Thieves Hellway Blue Barrier', player).barrier(CrystalBarrier.Blue)
|
||||
world.get_door('Thieves Hellway Crystal Blue Barrier', player).barrier(CrystalBarrier.Blue)
|
||||
world.get_door('Thieves Triple Bypass SE', player).barrier(CrystalBarrier.Blue)
|
||||
world.get_door('Thieves Triple Bypass WN', player).barrier(CrystalBarrier.Blue)
|
||||
world.get_door('Thieves Triple Bypass EN', player).barrier(CrystalBarrier.Blue)
|
||||
world.get_door('Thieves Hellway Orange Barrier', player).barrier(CrystalBarrier.Orange)
|
||||
world.get_door('Thieves Hellway Crystal Orange Barrier', player).barrier(CrystalBarrier.Orange)
|
||||
|
||||
|
||||
def create_paired_doors(world, player):
|
||||
world.paired_doors[player] = [
|
||||
@@ -573,13 +666,13 @@ def create_paired_doors(world, player):
|
||||
PairedDoor('Eastern Big Key NE', 'Eastern Compass Area SW'),
|
||||
# PairedDoor('', ''), # TR somaria hub to pokey
|
||||
PairedDoor('Eastern Dark Square Key Door WN', 'Eastern Cannonball Ledge Key Door EN'),
|
||||
# PairedDoor('', ''), # TT random bomb to pots
|
||||
# PairedDoor('', ''), # TT big key door
|
||||
PairedDoor('Thieves BK Corner NW', 'Thieves Pot Alcove Bottom SW'), # TT random bomb to pots
|
||||
PairedDoor('Thieves BK Corner NW', 'Thieves Hallway SE'), # TT big key door
|
||||
# PairedDoor('', ''), # Ice last key door to crystal switch
|
||||
# PairedDoor('', ''), # mire hub key door to attic
|
||||
# PairedDoor('', ''), # mire hub key door to map
|
||||
# PairedDoor('', ''), # tr last key door to switch maze
|
||||
# PairedDoor('', '') # TT dashable above
|
||||
PairedDoor('Thieves Ambush E', 'Thieves BK Corner W') # TT dashable above
|
||||
]
|
||||
|
||||
|
||||
|
||||
18
Dungeons.py
18
Dungeons.py
@@ -20,7 +20,7 @@ def create_dungeons(world, 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))
|
||||
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))
|
||||
TT = make_dungeon('Thieves Town', 'Blind', thieves_regions, 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_regions, 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_regions, ItemFactory('Big Key (Swamp Palace)', player), [ItemFactory('Small Key (Swamp Palace)', player)], ItemFactory(['Map (Swamp Palace)', 'Compass (Swamp Palace)'], player))
|
||||
IP = make_dungeon('Ice Palace', 'Kholdstare', ['Ice Palace (Entrance)', 'Ice Palace (Main)', 'Ice Palace (East)', 'Ice Palace (East Top)', 'Ice Palace (Kholdstare)'], ItemFactory('Big Key (Ice Palace)', player), ItemFactory(['Small Key (Ice Palace)'] * 2, player), ItemFactory(['Map (Ice Palace)', 'Compass (Ice Palace)'], player))
|
||||
@@ -153,7 +153,6 @@ def fill_dungeons_restrictive(world, shuffled_locations):
|
||||
fill_restrictive(world, all_state_base, shuffled_locations, dungeon_items)
|
||||
|
||||
|
||||
|
||||
dungeon_music_addresses = {'Eastern Palace - Prize': [0x1559A],
|
||||
'Desert Palace - Prize': [0x1559B, 0x1559C, 0x1559D, 0x1559E],
|
||||
'Tower of Hera - Prize': [0x155C5, 0x1107A, 0x10B8C],
|
||||
@@ -232,6 +231,17 @@ skull_regions = [
|
||||
'Skull Spike Corner', 'Skull Final Drop', 'Skull Boss'
|
||||
]
|
||||
|
||||
thieves_regions = [
|
||||
'Thieves Lobby', 'Thieves Ambush', 'Thieves BK Corner', 'Thieves Compass Room', 'Thieves Big Chest Nook',
|
||||
'Thieves Hallway', 'Thieves Boss', 'Thieves Pot Alcove Mid', 'Thieves Pot Alcove Bottom', 'Thieves Pot Alcove Top',
|
||||
'Thieves Conveyor Maze', 'Thieves Spike Track', 'Thieves Hellway', 'Thieves Hellway N Crystal',
|
||||
'Thieves Hellway S Crystal', 'Thieves Triple Bypass', 'Thieves Spike Switch', 'Thieves Attic',
|
||||
'Thieves Cricket Hall Left', 'Thieves Cricket Hall Right', 'Thieves Attic Window', 'Thieves Basement Block',
|
||||
'Thieves Blocked Entry', 'Thieves Lonely Zazak', 'Thieves Blind\'s Cell', 'Thieves Conveyor Bridge',
|
||||
'Thieves Conveyor Block', 'Thieves Big Chest Room', 'Thieves Trap'
|
||||
]
|
||||
|
||||
|
||||
dungeon_regions = {
|
||||
'Hyrule Castle': hyrule_castle_regions,
|
||||
'Eastern Palace': eastern_regions,
|
||||
@@ -241,7 +251,7 @@ dungeon_regions = {
|
||||
'Palace of Darkness': pod_regions,
|
||||
'Swamp Palace': swamp_regions,
|
||||
'Skull Woods': skull_regions,
|
||||
# 'TT':
|
||||
'Thieves Town': thieves_regions,
|
||||
# 'Ice':
|
||||
# 'Mire':
|
||||
# 'TR':
|
||||
@@ -258,7 +268,7 @@ region_starts = {
|
||||
'Swamp Palace': ['Swamp Lobby'],
|
||||
'Skull Woods': ['Skull 1 Lobby', 'Skull 2 East Lobby', 'Skull 2 West Lobby', 'Skull 3 Lobby', 'Skull Pot Circle',
|
||||
'Skull Pinball', 'Skull Left Drop', 'Skull Back Drop'],
|
||||
# ['TT Lobby'],
|
||||
'Thieves Town': ['Thieves Lobby'],
|
||||
# ['Ice Lobby'],
|
||||
# ['Mire Lobby'],
|
||||
# ['TR Main Lobby', 'TR Eye Trap', 'TR Big Chest', 'TR Laser Bridge'],
|
||||
|
||||
@@ -2947,8 +2947,6 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
||||
('Cave 45 Mirror Spot', 'Cave 45 Ledge'),
|
||||
('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'),
|
||||
|
||||
('Thieves Town Big Key Door', 'Thieves Town (Deep)'),
|
||||
('Blind Fight', 'Blind Fight'),
|
||||
('Ice Palace Entrance Room', 'Ice Palace (Main)'),
|
||||
('Ice Palace (East)', 'Ice Palace (East)'),
|
||||
('Ice Palace (East Top)', 'Ice Palace (East Top)'),
|
||||
@@ -3062,7 +3060,6 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia
|
||||
('Swamp Palace Small Key Door', 'Swamp Palace (Starting Area)'),
|
||||
('Swamp Palace (Center)', 'Swamp Palace (Center)'),
|
||||
('Swamp Palace (North)', 'Swamp Palace (North)'),
|
||||
('Thieves Town Big Key Door', 'Thieves Town (Deep)'),
|
||||
('Skull Woods Torch Room', 'Skull Woods Final Section (Mothula)'),
|
||||
('Skull Woods First Section South Door', 'Skull Woods First Section (Right)'),
|
||||
('Skull Woods First Section West Door', 'Skull Woods First Section (Left)'),
|
||||
@@ -3509,7 +3506,7 @@ default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert Main L
|
||||
('Agahnims Tower', 'Tower Lobby'),
|
||||
('Agahnims Tower Exit', 'Hyrule Castle Ledge'),
|
||||
|
||||
('Thieves Town', 'Thieves Town (Entrance)'),
|
||||
('Thieves Town', 'Thieves Lobby'),
|
||||
('Thieves Town Exit', 'West Dark World'),
|
||||
('Skull Woods First Section Hole (East)', 'Skull Pinball'),
|
||||
('Skull Woods First Section Hole (West)', 'Skull Left Drop'),
|
||||
@@ -3563,7 +3560,7 @@ inverted_default_dungeon_connections = [('Desert Palace Entrance (South)', 'Dese
|
||||
('Hyrule Castle Exit (South)', 'Light World'),
|
||||
('Hyrule Castle Exit (West)', 'Hyrule Castle Ledge'),
|
||||
('Hyrule Castle Exit (East)', 'Hyrule Castle Ledge'),
|
||||
('Thieves Town', 'Thieves Town (Entrance)'),
|
||||
('Thieves Town', 'Thieves Lobby'),
|
||||
('Thieves Town Exit', 'West Dark World'),
|
||||
('Skull Woods First Section Hole (East)', 'Skull Woods First Section (Right)'),
|
||||
('Skull Woods First Section Hole (West)', 'Skull Woods First Section (Left)'),
|
||||
|
||||
@@ -183,6 +183,15 @@ def generate_itempool(world, player):
|
||||
world.push_item(world.get_location('Swamp Drain', player), ItemFactory('Drained Swamp', player), False)
|
||||
world.get_location('Swamp Drain', player).event = True
|
||||
world.get_location('Swamp Drain', player).locked = True
|
||||
world.push_item(world.get_location('Attic Cracked Floor', player), ItemFactory('Shining Light', player), False)
|
||||
world.get_location('Attic Cracked Floor', player).event = True
|
||||
world.get_location('Attic Cracked Floor', player).locked = True
|
||||
world.push_item(world.get_location('Suspicious Maiden', player), ItemFactory('Maiden Rescued', player), False)
|
||||
world.get_location('Suspicious Maiden', player).event = True
|
||||
world.get_location('Suspicious Maiden', player).locked = True
|
||||
world.push_item(world.get_location('Revealing Light', player), ItemFactory('Maiden Unmasked', player), False)
|
||||
world.get_location('Revealing Light', player).event = True
|
||||
world.get_location('Revealing Light', player).locked = True
|
||||
|
||||
# set up item pool
|
||||
if world.custom:
|
||||
|
||||
3
Items.py
3
Items.py
@@ -175,4 +175,7 @@ item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher cla
|
||||
'Trench 1 Filled': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||
'Trench 2 Filled': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||
'Drained Swamp': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||
'Shining Light': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||
'Maiden Rescued': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||
'Maiden Unmasked': (True, False, 'Event', None, None, None, None, None, None, None, None),
|
||||
}
|
||||
|
||||
3
Main.py
3
Main.py
@@ -91,7 +91,8 @@ def main(args, seed=None):
|
||||
# todo: remove this later. this is for debugging
|
||||
for player in range(1, world.players + 1):
|
||||
all_state = world.get_all_state(keys=True)
|
||||
for bossregion in ['Eastern Boss', 'Desert Boss', 'Hera Boss', 'Tower Agahnim 1', 'PoD Boss', 'Swamp Boss', 'Skull Boss']:
|
||||
for bossregion in ['Eastern Boss', 'Desert Boss', 'Hera Boss', 'Tower Agahnim 1', 'PoD Boss', 'Swamp Boss',
|
||||
'Skull Boss', 'Thieves Boss']:
|
||||
if world.get_region(bossregion, player) not in all_state.reachable_regions[player]:
|
||||
raise Exception(bossregion + ' missing from generation')
|
||||
|
||||
|
||||
52
Regions.py
52
Regions.py
@@ -193,15 +193,6 @@ def create_regions(world, player):
|
||||
create_lw_region(player, 'Mimic Cave Ledge', None, ['Mimic Cave']),
|
||||
create_cave_region(player, 'Mimic Cave', 'Mimic Cave', ['Mimic Cave']),
|
||||
|
||||
create_dungeon_region(player, 'Thieves Town (Entrance)', 'Thieves\' Town', ['Thieves\' Town - Big Key Chest',
|
||||
'Thieves\' Town - Map Chest',
|
||||
'Thieves\' Town - Compass Chest',
|
||||
'Thieves\' Town - Ambush Chest'], ['Thieves Town Big Key Door', 'Thieves Town Exit']),
|
||||
create_dungeon_region(player, 'Thieves Town (Deep)', 'Thieves\' Town', ['Thieves\' Town - Attic',
|
||||
'Thieves\' Town - Big Chest',
|
||||
'Thieves\' Town - Blind\'s Cell'], ['Blind Fight']),
|
||||
create_dungeon_region(player, 'Blind Fight', 'Thieves\' Town', ['Thieves\' Town - Boss', 'Thieves\' Town - Prize']),
|
||||
|
||||
create_dungeon_region(player, 'Ice Palace (Entrance)', 'Ice Palace', None, ['Ice Palace Entrance Room', 'Ice Palace Exit']),
|
||||
create_dungeon_region(player, 'Ice Palace (Main)', 'Ice Palace', ['Ice Palace - Compass Chest', 'Ice Palace - Freezor Chest',
|
||||
'Ice Palace - Big Chest', 'Ice Palace - Iced T Room'], ['Ice Palace (East)', 'Ice Palace (Kholdstare)']),
|
||||
@@ -480,6 +471,37 @@ def create_regions(world, player):
|
||||
create_dungeon_region(player, 'Skull Boss', 'Skull Woods', ['Skull Woods - Boss', 'Skull Woods - Prize']),
|
||||
|
||||
# tt
|
||||
create_dungeon_region(player, 'Thieves Lobby', 'Thieves\' Town', ['Thieves\' Town - Map Chest'], ['Thieves Town Exit', 'Thieves Lobby N Edge', 'Thieves Lobby NE Edge', 'Thieves Lobby E']),
|
||||
create_dungeon_region(player, 'Thieves Ambush', 'Thieves\' Town', ['Thieves\' Town - Ambush Chest'], ['Thieves Ambush S Edge', 'Thieves Ambush SE Edge', 'Thieves Ambush ES Edge', 'Thieves Ambush EN Edge', 'Thieves Ambush E']),
|
||||
create_dungeon_region(player, 'Thieves BK Corner', 'Thieves\' Town', None, ['Thieves BK Corner WN Edge', 'Thieves BK Corner WS Edge', 'Thieves BK Corner S Edge', 'Thieves BK Corner SW Edge',
|
||||
'Thieves BK Corner W', 'Thieves BK Corner NW', 'Thieves BK Corner NE']),
|
||||
create_dungeon_region(player, 'Thieves Compass Room', 'Thieves\' Town', ['Thieves\' Town - Compass Chest'], ['Thieves Compass Room NW Edge', 'Thieves Compass Room N Edge', 'Thieves Compass Room WS Edge', 'Thieves Compass Room W']),
|
||||
create_dungeon_region(player, 'Thieves Big Chest Nook', 'Thieves\' Town', ['Thieves\' Town - Big Key Chest'], ['Thieves Big Chest Nook WS Edge']),
|
||||
create_dungeon_region(player, 'Thieves Hallway', 'Thieves\' Town', ['Thieves\' Town - Hallway Pot Key'], ['Thieves Hallway SE', 'Thieves Hallway NE', 'Thieves Hallway WN', 'Thieves Hallway WS']),
|
||||
create_dungeon_region(player, 'Thieves Boss', 'Thieves\' Town', ['Revealing Light', 'Thieves\' Town - Boss', 'Thieves\' Town - Prize'], ['Thieves Boss SE']),
|
||||
create_dungeon_region(player, 'Thieves Pot Alcove Mid', 'Thieves\' Town', None, ['Thieves Pot Alcove Mid ES', 'Thieves Pot Alcove Mid WS']),
|
||||
create_dungeon_region(player, 'Thieves Pot Alcove Bottom', 'Thieves\' Town', None, ['Thieves Pot Alcove Bottom SW']),
|
||||
create_dungeon_region(player, 'Thieves Pot Alcove Top', 'Thieves\' Town', None, ['Thieves Pot Alcove Top NW']),
|
||||
create_dungeon_region(player, 'Thieves Conveyor Maze', 'Thieves\' Town', None, ['Thieves Conveyor Maze SW', 'Thieves Conveyor Maze EN', 'Thieves Conveyor Maze WN', 'Thieves Conveyor Maze Down Stairs']),
|
||||
create_dungeon_region(player, 'Thieves Spike Track', 'Thieves\' Town', None, ['Thieves Spike Track WS', 'Thieves Spike Track ES', 'Thieves Spike Track NE']),
|
||||
create_dungeon_region(player, 'Thieves Hellway', 'Thieves\' Town', None, ['Thieves Hellway Orange Barrier', 'Thieves Hellway NW', 'Thieves Hellway Blue Barrier']),
|
||||
create_dungeon_region(player, 'Thieves Hellway N Crystal', 'Thieves\' Town', None, ['Thieves Hellway Crystal Blue Barrier', 'Thieves Hellway Crystal EN']),
|
||||
create_dungeon_region(player, 'Thieves Hellway S Crystal', 'Thieves\' Town', None, ['Thieves Hellway Crystal Orange Barrier', 'Thieves Hellway Crystal ES']),
|
||||
create_dungeon_region(player, 'Thieves Triple Bypass', 'Thieves\' Town', None, ['Thieves Triple Bypass WN', 'Thieves Triple Bypass EN', 'Thieves Triple Bypass SE']),
|
||||
create_dungeon_region(player, 'Thieves Spike Switch', 'Thieves\' Town', ['Thieves\' Town - Spike Switch Pot Key'], ['Thieves Spike Switch SW', 'Thieves Spike Switch Up Stairs']),
|
||||
create_dungeon_region(player, 'Thieves Attic', 'Thieves\' Town', None, ['Thieves Attic Down Stairs', 'Thieves Attic ES']),
|
||||
create_dungeon_region(player, 'Thieves Cricket Hall Left', 'Thieves\' Town', None, ['Thieves Cricket Hall Left WS', 'Thieves Cricket Hall Left Edge']),
|
||||
create_dungeon_region(player, 'Thieves Cricket Hall Right', 'Thieves\' Town', None, ['Thieves Cricket Hall Right Edge', 'Thieves Cricket Hall Right ES']),
|
||||
create_dungeon_region(player, 'Thieves Attic Window', 'Thieves\' Town', ['Thieves\' Town - Attic', 'Attic Cracked Floor'], ['Thieves Attic Window WS']),
|
||||
create_dungeon_region(player, 'Thieves Basement Block', 'Thieves\' Town', None, ['Thieves Basement Block Up Stairs', 'Thieves Basement Block WN', 'Thieves Basement Block Path']),
|
||||
create_dungeon_region(player, 'Thieves Blocked Entry', 'Thieves\' Town', None, ['Thieves Blocked Entry Path', 'Thieves Blocked Entry SW']),
|
||||
create_dungeon_region(player, 'Thieves Lonely Zazak', 'Thieves\' Town', None, ['Thieves Lonely Zazak WS', 'Thieves Lonely Zazak ES', 'Thieves Lonely Zazak NW']),
|
||||
create_dungeon_region(player, 'Thieves Blind\'s Cell', 'Thieves\' Town', ['Thieves\' Town - Blind\'s Cell', 'Suspicious Maiden'], ['Thieves Blind\'s Cell WS']),
|
||||
create_dungeon_region(player, 'Thieves Conveyor Bridge', 'Thieves\' Town', None, ['Thieves Conveyor Bridge EN', 'Thieves Conveyor Bridge ES', 'Thieves Conveyor Bridge WS', 'Thieves Conveyor Bridge Block Path']),
|
||||
create_dungeon_region(player, 'Thieves Conveyor Block', 'Thieves\' Town', None, ['Thieves Conveyor Block Path', 'Thieves Conveyor Block WN']),
|
||||
create_dungeon_region(player, 'Thieves Big Chest Room', 'Thieves\' Town', ['Thieves\' Town - Big Chest'], ['Thieves Big Chest Room ES']),
|
||||
create_dungeon_region(player, 'Thieves Trap', 'Thieves\' Town', None, ['Thieves Trap EN']),
|
||||
|
||||
# ice
|
||||
# mire
|
||||
# tr
|
||||
@@ -611,13 +633,18 @@ key_only_locations = {
|
||||
'Swamp Palace - Trench 2 Pot Key': 'Small Key (Swamp Palace)',
|
||||
'Swamp Palace - Waterway Pot Key': 'Small Key (Swamp Palace)',
|
||||
'Skull Woods - West Lobby Pot Key': 'Small Key (Skull Woods)',
|
||||
'Skull Woods - Spike Corner Key Drop': 'Small Key (Skull Woods)'
|
||||
'Skull Woods - Spike Corner Key Drop': 'Small Key (Skull Woods)',
|
||||
'Thieves\' Town - Hallway Pot Key': 'Small Key (Thieves Town)',
|
||||
'Thieves\' Town - Spike Switch Pot Key': 'Small Key (Thieves Town)'
|
||||
}
|
||||
|
||||
dungeon_events = [
|
||||
'Trench 1 Switch',
|
||||
'Trench 2 Switch',
|
||||
'Swamp Drain'
|
||||
'Swamp Drain',
|
||||
'Attic Cracked Floor',
|
||||
'Suspicious Maiden',
|
||||
'Revealing Light'
|
||||
]
|
||||
|
||||
flooded_keys = {
|
||||
@@ -858,6 +885,9 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
|
||||
'Trench 1 Switch': (None, False, None),
|
||||
'Trench 2 Switch': (None, False, None),
|
||||
'Swamp Drain': (None, False, None),
|
||||
'Attic Cracked Floor': (None, False, None),
|
||||
'Suspicious Maiden': (None, False, None),
|
||||
'Revealing Light': (None, False, None),
|
||||
'Eastern Palace - Prize': ([0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], True, 'Eastern Palace'),
|
||||
'Desert Palace - Prize': ([0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], True, 'Desert Palace'),
|
||||
'Tower of Hera - Prize': ([0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], True, 'Tower of Hera'),
|
||||
|
||||
2
Rom.py
2
Rom.py
@@ -18,7 +18,7 @@ from EntranceShuffle import door_addresses
|
||||
|
||||
|
||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||
RANDOMIZERBASEHASH = '6da98d111b266fcbfa429950228e3181'
|
||||
RANDOMIZERBASEHASH = '78b74698bf286f0cc6d9c2563dd7d59e'
|
||||
|
||||
|
||||
class JsonRom(object):
|
||||
|
||||
30
Rules.py
30
Rules.py
@@ -360,23 +360,27 @@ def global_rules(world, player):
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Prize', player))
|
||||
generate_key_logic('Skull Woods', 'Small Key (Skull Woods)', world, player)
|
||||
|
||||
set_rule(world.get_entrance('Thieves BK Corner NE', player), lambda state: state.has('Big Key (Thieves Town)', player))
|
||||
# blind can't have the small key? - not necessarily true anymore - but likely still
|
||||
set_rule(world.get_location('Thieves\' Town - Big Chest', player), lambda state: (state.has('Big Key (Thieves Town)') and state.has('Hammer', player)))
|
||||
if world.accessibility == 'locations':
|
||||
forbid_item(world.get_location('Thieves\' Town - Big Chest', player), 'Big Key (Thieves Town)', player)
|
||||
for entrance in ['Thieves Basement Block Path', 'Thieves Blocked Entry Path', 'Thieves Conveyor Block Path', 'Thieves Conveyor Bridge Block Path']:
|
||||
set_rule(world.get_entrance(entrance, player), lambda state: state.can_lift_rocks(player))
|
||||
for location in ['Thieves\' Town - Blind\'s Cell', 'Thieves\' Town - Boss']:
|
||||
forbid_item(world.get_location(location, player), 'Big Key (Thieves Town)', player)
|
||||
forbid_item(world.get_location('Thieves\' Town - Blind\'s Cell', player), 'Big Key (Thieves Town)', player)
|
||||
for location in ['Suspicious Maiden', 'Thieves\' Town - Blind\'s Cell']:
|
||||
set_rule(world.get_location(location, player), lambda state: state.has('Big Key (Thieves Town)', player))
|
||||
set_rule(world.get_location('Revealing Light', player), lambda state: state.has('Shining Light', player) and state.has('Maiden Rescued', player))
|
||||
set_rule(world.get_location('Thieves\' Town - Boss', player), lambda state: state.has('Maiden Unmasked', player) and world.get_location('Thieves\' Town - Boss', player).parent_region.dungeon.boss.can_defeat(state))
|
||||
set_rule(world.get_location('Thieves\' Town - Prize', player), lambda state: state.has('Maiden Unmasked', player) and world.get_location('Thieves\' Town - Prize', player).parent_region.dungeon.boss.can_defeat(state))
|
||||
generate_key_logic('Thieves Town', 'Small Key (Thieves Town)', world, player)
|
||||
|
||||
# End of door rando rules.
|
||||
|
||||
add_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
|
||||
|
||||
set_rule(world.get_entrance('Thieves Town Big Key Door', player), lambda state: state.has('Big Key (Thieves Town)', player))
|
||||
set_rule(world.get_entrance('Blind Fight', player), lambda state: state.has_key('Small Key (Thieves Town)', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Boss', player))
|
||||
set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Prize', player))
|
||||
set_rule(world.get_location('Thieves\' Town - Big Chest', player), lambda state: (state.has_key('Small Key (Thieves Town)', player) or item_name(state, 'Thieves\' Town - Big Chest', player) == ('Small Key (Thieves Town)', player)) and state.has('Hammer', player))
|
||||
if world.accessibility != 'locations':
|
||||
set_always_allow(world.get_location('Thieves\' Town - Big Chest', player), lambda state, item: item.name == 'Small Key (Thieves Town)' and item.player == player and state.has('Hammer', player))
|
||||
set_rule(world.get_location('Thieves\' Town - Attic', player), lambda state: state.has_key('Small Key (Thieves Town)', player))
|
||||
for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Big Chest', 'Thieves\' Town - Blind\'s Cell', 'Thieves\' Town - Boss']:
|
||||
forbid_item(world.get_location(location, player), 'Big Key (Thieves Town)', player)
|
||||
for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Boss']:
|
||||
forbid_item(world.get_location(location, player), 'Small Key (Thieves Town)', player)
|
||||
|
||||
set_rule(world.get_entrance('Ice Palace Entrance Room', player), lambda state: state.can_melt_things(player))
|
||||
set_rule(world.get_location('Ice Palace - Big Chest', player), lambda state: state.has('Big Key (Ice Palace)', player))
|
||||
set_rule(world.get_entrance('Ice Palace (Kholdstare)', player), lambda state: state.can_lift_rocks(player) and state.has('Hammer', player) and state.has('Big Key (Ice Palace)', player) and (state.has_key('Small Key (Ice Palace)', player, 2) or (state.has('Cane of Somaria', player) and state.has_key('Small Key (Ice Palace)', player, 1))))
|
||||
|
||||
@@ -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 #$16 : beq .check ; thieves is okay
|
||||
cmp #$0e : 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