Add Ganons Tower and Pyramid to the shuffle pool in non-ganon goal modes.
This commit is contained in:
parent
6464b516f8
commit
de37916379
|
@ -41,6 +41,12 @@ def link_entrances(world):
|
||||||
dungeon_exits.append(('Hyrule Castle Exit (South)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)'))
|
dungeon_exits.append(('Hyrule Castle Exit (South)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)'))
|
||||||
lw_entrances.append('Hyrule Castle Entrance (South)')
|
lw_entrances.append('Hyrule Castle Entrance (South)')
|
||||||
|
|
||||||
|
if world.goal == 'ganon':
|
||||||
|
ret.append(connect_two_way(world, 'Ganons Tower', 'Ganons Tower Exit'))
|
||||||
|
else:
|
||||||
|
dw_entrances.append('Ganons Tower')
|
||||||
|
dungeon_exits.append('Ganons Tower Exit')
|
||||||
|
|
||||||
if world.mode == 'standard':
|
if world.mode == 'standard':
|
||||||
# rest of hyrule castle must be in light world to avoid fake darkworld stuff, so it has to be the one connected to east exit of desert
|
# rest of hyrule castle must be in light world to avoid fake darkworld stuff, so it has to be the one connected to east exit of desert
|
||||||
ret.append(connect_mandatory_exits(world, lw_entrances, [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], list(LW_Dungeon_Entrances_Must_Exit)))
|
ret.append(connect_mandatory_exits(world, lw_entrances, [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], list(LW_Dungeon_Entrances_Must_Exit)))
|
||||||
|
@ -211,6 +217,12 @@ def link_entrances(world):
|
||||||
caves.append(('Hyrule Castle Exit (South)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)'))
|
caves.append(('Hyrule Castle Exit (South)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)'))
|
||||||
lw_entrances.append('Hyrule Castle Entrance (South)')
|
lw_entrances.append('Hyrule Castle Entrance (South)')
|
||||||
|
|
||||||
|
if world.goal == 'ganon':
|
||||||
|
ret.append(connect_two_way(world, 'Ganons Tower', 'Ganons Tower Exit'))
|
||||||
|
else:
|
||||||
|
dw_entrances.append('Ganons Tower')
|
||||||
|
caves.append('Ganons Tower Exit')
|
||||||
|
|
||||||
# we randomize which world requirements we fulfill first so we get better dungeon distribution
|
# we randomize which world requirements we fulfill first so we get better dungeon distribution
|
||||||
if random.randint(0, 1) == 0:
|
if random.randint(0, 1) == 0:
|
||||||
ret.append(connect_mandatory_exits(world, lw_entrances, caves, lw_must_exits))
|
ret.append(connect_mandatory_exits(world, lw_entrances, caves, lw_must_exits))
|
||||||
|
@ -313,6 +325,18 @@ def link_entrances(world):
|
||||||
hole_targets.append(('Hyrule Castle Secret Entrance Exit', 'Hyrule Castle Secret Entrance'))
|
hole_targets.append(('Hyrule Castle Secret Entrance Exit', 'Hyrule Castle Secret Entrance'))
|
||||||
lw_entrances.append('Hyrule Castle Secret Entrance Stairs')
|
lw_entrances.append('Hyrule Castle Secret Entrance Stairs')
|
||||||
|
|
||||||
|
if world.goal == 'ganon':
|
||||||
|
ret.append(connect_two_way(world, 'Ganons Tower', 'Ganons Tower Exit'))
|
||||||
|
ret.append(connect_two_way(world, 'Pyramid Entrance', 'Pyramid Exit'))
|
||||||
|
ret.append(connect_entrance(world, 'Pyramid Hole', 'Pyramid'))
|
||||||
|
else:
|
||||||
|
dw_entrances.append('Ganons Tower')
|
||||||
|
caves.append('Ganons Tower Exit')
|
||||||
|
dw_hole_entrances.append('Pyramid Hole')
|
||||||
|
hole_targets.append(('Pyramid Exit', 'Pyramid'))
|
||||||
|
dw_entrances_must_exits.append('Pyramid Entrance')
|
||||||
|
dw_doors.extend(['Ganons Tower', 'Pyramid Entrance'])
|
||||||
|
|
||||||
random.shuffle(lw_hole_entrances)
|
random.shuffle(lw_hole_entrances)
|
||||||
random.shuffle(dw_hole_entrances)
|
random.shuffle(dw_hole_entrances)
|
||||||
random.shuffle(hole_targets)
|
random.shuffle(hole_targets)
|
||||||
|
@ -533,6 +557,18 @@ def link_entrances(world):
|
||||||
entrances.append('Hyrule Castle Secret Entrance Stairs')
|
entrances.append('Hyrule Castle Secret Entrance Stairs')
|
||||||
caves.append('Hyrule Castle Secret Entrance Exit')
|
caves.append('Hyrule Castle Secret Entrance Exit')
|
||||||
|
|
||||||
|
if world.goal == 'ganon':
|
||||||
|
ret.append(connect_two_way(world, 'Ganons Tower', 'Ganons Tower Exit'))
|
||||||
|
ret.append(connect_two_way(world, 'Pyramid Entrance', 'Pyramid Exit'))
|
||||||
|
ret.append(connect_entrance(world, 'Pyramid Hole', 'Pyramid'))
|
||||||
|
else:
|
||||||
|
entrances.append('Ganons Tower')
|
||||||
|
caves.extend(['Ganons Tower Exit', 'Pyramid Exit'])
|
||||||
|
hole_entrances.append('Pyramid Hole')
|
||||||
|
hole_targets.append('Pyramid')
|
||||||
|
entrances_must_exits.append('Pyramid Entrance')
|
||||||
|
doors.extend(['Ganons Tower', 'Pyramid Entrance'])
|
||||||
|
|
||||||
random.shuffle(hole_entrances)
|
random.shuffle(hole_entrances)
|
||||||
random.shuffle(hole_targets)
|
random.shuffle(hole_targets)
|
||||||
random.shuffle(entrances)
|
random.shuffle(entrances)
|
||||||
|
@ -699,6 +735,7 @@ def connect_two_way(world, entrancename, exitname):
|
||||||
|
|
||||||
def scramble_holes(world):
|
def scramble_holes(world):
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
hole_entrances = [('Kakariko Well Cave', 'Kakariko Well Drop'),
|
hole_entrances = [('Kakariko Well Cave', 'Kakariko Well Drop'),
|
||||||
('Bat Cave Cave', 'Bat Cave Drop'),
|
('Bat Cave Cave', 'Bat Cave Drop'),
|
||||||
('North Fairy Cave', 'North Fairy Cave Drop'),
|
('North Fairy Cave', 'North Fairy Cave Drop'),
|
||||||
|
@ -713,6 +750,13 @@ def scramble_holes(world):
|
||||||
('Lumberjack Tree Exit', 'Lumberjack Tree (top)'),
|
('Lumberjack Tree Exit', 'Lumberjack Tree (top)'),
|
||||||
('Sanctuary Exit', 'Sewer Drop')]
|
('Sanctuary Exit', 'Sewer Drop')]
|
||||||
|
|
||||||
|
if world.goal == 'ganon':
|
||||||
|
ret.append(connect_two_way(world, 'Pyramid Entrance', 'Pyramid Exit'))
|
||||||
|
ret.append(connect_entrance(world, 'Pyramid Hole', 'Pyramid'))
|
||||||
|
else:
|
||||||
|
hole_entrances.append(('Pyramid Entrance', 'Pyramid Hole'))
|
||||||
|
hole_targets.append(('Pyramid Exit', 'Pyramid'))
|
||||||
|
|
||||||
if world.mode == 'standard':
|
if world.mode == 'standard':
|
||||||
# cannot move uncle cave
|
# cannot move uncle cave
|
||||||
ret.append(connect_two_way(world, 'Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Secret Entrance Exit'))
|
ret.append(connect_two_way(world, 'Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Secret Entrance Exit'))
|
||||||
|
@ -836,9 +880,17 @@ def simple_shuffle_dungeons(world):
|
||||||
|
|
||||||
ret.append(skull_woods_shuffle(world))
|
ret.append(skull_woods_shuffle(world))
|
||||||
|
|
||||||
|
dungeon_entrances = ['Eastern Palace', 'Tower of Hera', 'Thieves Town', 'Skull Woods Final Section', 'Palace of Darkness', 'Ice Palace', 'Misery Mire', 'Swamp Palace']
|
||||||
|
dungeon_exits = ['Eastern Palace Exit', 'Tower of Hera Exit', 'Thieves Town Exit', 'Skull Woods Final Section Exit', 'Dark Palace Exit', 'Ice Palace Exit', 'Misery Mire Exit', 'Swamp Palace Exit']
|
||||||
|
|
||||||
|
if world.goal == 'ganon':
|
||||||
|
ret.append(connect_two_way(world, 'Ganons Tower', 'Ganons Tower Exit'))
|
||||||
|
else:
|
||||||
|
dungeon_entrances.append('Ganons Tower')
|
||||||
|
dungeon_exits.append('Ganons Tower Exit')
|
||||||
|
|
||||||
# shuffle up single entrance dungeons
|
# shuffle up single entrance dungeons
|
||||||
ret.append(connect_random(world, ['Eastern Palace', 'Tower of Hera', 'Thieves Town', 'Skull Woods Final Section', 'Palace of Darkness', 'Ice Palace', 'Misery Mire', 'Swamp Palace'],
|
ret.append(connect_random(world, dungeon_entrances, dungeon_exits, True))
|
||||||
['Eastern Palace Exit', 'Tower of Hera Exit', 'Thieves Town Exit', 'Skull Woods Final Section Exit', 'Dark Palace Exit', 'Ice Palace Exit', 'Misery Mire Exit', 'Swamp Palace Exit'], True))
|
|
||||||
|
|
||||||
# mix up 4 door dungeons
|
# mix up 4 door dungeons
|
||||||
multi_dungeons = ['Desert', 'Turtle Rock']
|
multi_dungeons = ['Desert', 'Turtle Rock']
|
||||||
|
@ -1261,8 +1313,6 @@ mandatory_connections = [('Links House', 'Links House'), # unshuffled. For now
|
||||||
('Dark Palace Hammer Peg Drop', 'Dark Palace (Center)'),
|
('Dark Palace Hammer Peg Drop', 'Dark Palace (Center)'),
|
||||||
('Dark Palace Spike Statue Room Door', 'Dark Palace (Spike Statue Room)'),
|
('Dark Palace Spike Statue Room Door', 'Dark Palace (Spike Statue Room)'),
|
||||||
('Dark Palace Maze Door', 'Dark Palace (Maze)'),
|
('Dark Palace Maze Door', 'Dark Palace (Maze)'),
|
||||||
('Ganons Tower', 'Ganons Tower (Entrance)'), # not shuffled, for now
|
|
||||||
('Ganons Tower Exit', 'Dark Death Mountain (Top)'),
|
|
||||||
('Ganons Tower (Tile Room)', 'Ganons Tower (Tile Room)'),
|
('Ganons Tower (Tile Room)', 'Ganons Tower (Tile Room)'),
|
||||||
('Ganons Tower (Tile Room) Key Door', 'Ganons Tower (Compass Room)'),
|
('Ganons Tower (Tile Room) Key Door', 'Ganons Tower (Compass Room)'),
|
||||||
('Ganons Tower (Bottom) (East)', 'Ganons Tower (Bottom)'),
|
('Ganons Tower (Bottom) (East)', 'Ganons Tower (Bottom)'),
|
||||||
|
@ -1275,10 +1325,7 @@ mandatory_connections = [('Links House', 'Links House'), # unshuffled. For now
|
||||||
('Ganons Tower Torch Rooms', 'Ganons Tower (Before Moldorm)'),
|
('Ganons Tower Torch Rooms', 'Ganons Tower (Before Moldorm)'),
|
||||||
('Ganons Tower Moldorm Door', 'Ganons Tower (Moldorm)'),
|
('Ganons Tower Moldorm Door', 'Ganons Tower (Moldorm)'),
|
||||||
('Ganons Tower Moldorm Gap', 'Agahnim 2'),
|
('Ganons Tower Moldorm Gap', 'Agahnim 2'),
|
||||||
('Pyramid Hole', 'Pyramid'), # not shuffled, for now
|
|
||||||
('Ganon Drop', 'Bottom of Pyramid'),
|
('Ganon Drop', 'Bottom of Pyramid'),
|
||||||
('Pyramid Exit', 'Pyramid Ledge'),
|
|
||||||
('Pyramid Entrance', 'Bottom of Pyramid'),
|
|
||||||
('Pyramid Drop', 'East Dark World')
|
('Pyramid Drop', 'East Dark World')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1427,7 +1474,11 @@ default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing'),
|
||||||
('Hookshot Cave Exit (South)', 'Dark Death Mountain (Top)'),
|
('Hookshot Cave Exit (South)', 'Dark Death Mountain (Top)'),
|
||||||
('Hookshot Cave Exit (North)', 'Death Mountain Floating Island'),
|
('Hookshot Cave Exit (North)', 'Death Mountain Floating Island'),
|
||||||
('Hookshot Cave Back Entrance', 'Hookshot Cave'),
|
('Hookshot Cave Back Entrance', 'Hookshot Cave'),
|
||||||
('Mimic Cave Mirror Spot', 'Mimic Cave')
|
('Mimic Cave Mirror Spot', 'Mimic Cave'),
|
||||||
|
|
||||||
|
('Pyramid Hole', 'Pyramid'),
|
||||||
|
('Pyramid Exit', 'Pyramid Ledge'),
|
||||||
|
('Pyramid Entrance', 'Bottom of Pyramid')
|
||||||
]
|
]
|
||||||
|
|
||||||
# non shuffled dungeons
|
# non shuffled dungeons
|
||||||
|
@ -1484,8 +1535,10 @@ default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert Palace
|
||||||
('Dark Death Mountain Ledge (West)', 'Turtle Rock (Second Section)'),
|
('Dark Death Mountain Ledge (West)', 'Turtle Rock (Second Section)'),
|
||||||
('Dark Death Mountain Ledge (East)', 'Turtle Rock (Big Chest)'),
|
('Dark Death Mountain Ledge (East)', 'Turtle Rock (Big Chest)'),
|
||||||
('Turtle Rock Isolated Ledge Exit', 'Dark Death Mountain Isolated Ledge'),
|
('Turtle Rock Isolated Ledge Exit', 'Dark Death Mountain Isolated Ledge'),
|
||||||
('Turtle Rock Isolated Ledge Entrance', 'Turtle Rock (Eye Bridge)')
|
('Turtle Rock Isolated Ledge Entrance', 'Turtle Rock (Eye Bridge)'),
|
||||||
|
|
||||||
|
('Ganons Tower', 'Ganons Tower (Entrance)'),
|
||||||
|
('Ganons Tower Exit', 'Dark Death Mountain (Top)')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
5
Rules.py
5
Rules.py
|
@ -21,8 +21,9 @@ def set_rules(world):
|
||||||
raise NotImplementedError('Not implemented yet')
|
raise NotImplementedError('Not implemented yet')
|
||||||
|
|
||||||
if world.goal == 'dungeons':
|
if world.goal == 'dungeons':
|
||||||
# require altar for ganon to enforce getting everything
|
# require all dungeons to beat ganon
|
||||||
add_rule(world.get_location('Ganon'), lambda state: state.can_reach('Altar', 'Location') and state.has('Beat Agahnim 1'))
|
add_rule(world.get_location('Ganon'), lambda state: state.can_reach('Altar', 'Location') and state.has('Beat Agahnim 1') and state.has('Beat Agahnim 2') and state.has('Crystal 1') and state.has('Crystal 2')
|
||||||
|
and state.has('Crystal 3') and state.has('Crystal 4') and state.has('Crystal 5') and state.has('Crystal 6') and state.has('Crystal 7'))
|
||||||
|
|
||||||
set_big_bomb_rules(world)
|
set_big_bomb_rules(world)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue