Move exit points of PoD, SW and TR down so you cannot get stuck in them when exiting through them before opening them.

This commit is contained in:
LLCoolDave 2017-06-24 19:11:00 +02:00
parent 54b63355b3
commit dcef154609
5 changed files with 24 additions and 25 deletions

View File

@ -38,6 +38,9 @@ class World(object):
self.fix_trock_doors = self.shuffle != 'vanilla'
self.save_and_quite_from_boss = False
self.check_beatable_only = check_beatable_only
self.fix_skullwoods_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']
self.fix_palaceofdarkness_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']
self.fix_trock_exit = self.shuffle not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']
def get_region(self, regionname):
if isinstance(regionname, Region):

View File

@ -1215,25 +1215,18 @@ mandatory_connections = [('Links House', 'Links House'), # unshuffled. For now
('Dark Death Mountain Drop (West)', 'Dark Death Mountain (West Bottom)'),
('East Death Mountain (Top) Mirror Spot', 'East Death Mountain (Top)'),
('Turtle Rock Teleporter', 'Turtle Rock (Top)'),
('Turtle Rock Open Skull', 'Turtle Rock Skull'),
('Turtle Rock Skull Reverse', 'Dark Death Mountain (Top)'),
('Turtle Rock Skull Mirror Spot', 'Turtle Rock (Top)'),
('Turtle Rock Drop', 'Dark Death Mountain (Top)'),
('Floating Island Drop', 'Dark Death Mountain (Top)'),
('East Death Mountain Teleporter', 'Dark Death Mountain (East Bottom)'),
('Isolated Ledge Mirror Spot', 'Fairy Ascension Ledge'),
('Spiral Cave Mirror Spot', 'Spiral Cave Ledge'),
('Palace of Darkness Pay Kiki', 'Palace of Darkness Kiki Door'),
('Palace of Darkness Kiki Door Reverse', 'East Dark World'),
('Swamp Palace Moat', 'Swamp Palace (First Room)'),
('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 Burn Skull', 'Skull Woods Skull'),
('Skull Woods Skull Reverse', 'Skull Woods Forest (West)'),
('Skull Woods First Section (Right)', 'Skull Woods First Section'), # exist only for unique hole reference points
('Skull Woods First Section (Left)', 'Skull Woods First Section'),
('Skull Woods First Section (Top)', 'Skull Woods First Section'),
@ -1474,7 +1467,7 @@ default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert Palace
('Skull Woods Second Section Exit (East)', 'Skull Woods Forest'),
('Skull Woods Second Section Exit (West)', 'Skull Woods Forest (West)'),
('Skull Woods Final Section', 'Skull Woods Final Section (Entrance)'),
('Skull Woods Final Section Exit', 'Skull Woods Skull'),
('Skull Woods Final Section Exit', 'Skull Woods Forest (West)'),
('Ice Palace', 'Ice Palace (Entrance)'),
('Ice Palace Exit', 'Dark Lake Hylia Central Island'),
('Misery Mire', 'Misery Mire (Entrance)'),

View File

@ -131,9 +131,8 @@ def create_regions(world):
create_region('Tower of Hera (Basement)', ['[dungeon-L3-1F] Tower of Hera - Basement']),
create_region('Tower of Hera (Top)', ['[dungeon-L3-1F] Tower of Hera - 4F [small chest]', '[dungeon-L3-1F] Tower of Hera - Big Chest', 'Moldorm - Heart Container', 'Moldorm - Pendant']),
create_region('East Dark World', ['Piece of Heart (Pyramid)', 'Catfish'], ['Pyramid Fairy', 'South Dark World Bridge', 'West Dark World Gap', 'Palace of Darkness Pay Kiki', 'Dark Lake Hylia Drop (East)', 'Dark Lake Hylia Teleporter',
create_region('East Dark World', ['Piece of Heart (Pyramid)', 'Catfish'], ['Pyramid Fairy', 'South Dark World Bridge', 'West Dark World Gap', 'Palace of Darkness', 'Dark Lake Hylia Drop (East)', 'Dark Lake Hylia Teleporter',
'Hyrule Castle Ledge Mirror Spot', 'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Dark World Potion Shop', 'Pyramid Hole']),
create_region('Palace of Darkness Kiki Door', None, ['Palace of Darkness', 'Palace of Darkness Kiki Door Reverse']),
create_region('Palace of Darkness Hint'),
create_region('East Dark World Hint'),
create_region('South Dark World', ['Flute Boy', 'Piece of Heart (Digging Game)', 'Bombos Tablet'], ['Dark Lake Hylia Drop (South)', 'Dark Swamp Cave', 'Swamp Palace', 'Village of Outcasts Heavy Rock',
@ -162,15 +161,14 @@ def create_regions(world):
create_region('Bumper Cave Ledge', ['Piece of Heart (Bumper Cave)'], ['Bumper Cave Ledge Drop', 'Bumper Cave (Top)', 'Bumper Cave Ledge Mirror Spot']),
create_region('Skull Woods Forest', None, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)', 'Skull Woods First Section Door',
'Skull Woods Second Section Door (East)']),
create_region('Skull Woods Forest (West)', None, ['Skull Woods Second Section Hole', 'Skull Woods Second Section Door (West)', 'Skull Woods Burn Skull']),
create_region('Skull Woods Skull', None, ['Skull Woods Skull Reverse', 'Skull Woods Final Section']),
create_region('Skull Woods Forest (West)', None, ['Skull Woods Second Section Hole', 'Skull Woods Second Section Door (West)', 'Skull Woods Final Section']),
create_region('Dark Desert', None, ['Misery Mire', 'Dark Desert Cave', 'Desert Ledge (West) Mirror Spot', 'Desert Ledge Mirror Spot', 'Desert Palace Stairs Mirror Spot', 'Desert Palace Entrance (North) Mirror Spot',
'Dark Desert Hint', 'Dark Desert Fairy']),
create_region('Dark Desert Cave', ['[cave-071] Misery Mire West Area [left chest]', '[cave-071] Misery Mire West Area [right chest]']),
create_region('Dark Desert Hint'),
create_region('Dark Death Mountain (West Bottom)', None, ['Spike Cave', 'Spectacle Rock Mirror Spot', 'Dark Death Mountain Fairy']),
create_region('Dark Death Mountain (Top)', None, ['Dark Death Mountain Drop (East)', 'Dark Death Mountain Drop (West)', 'Ganons Tower', 'Dark Death Mountain Ascend (Top)', 'Hookshot Cave',
'East Death Mountain (Top) Mirror Spot']),
'East Death Mountain (Top) Mirror Spot', 'Turtle Rock']),
create_region('Dark Death Mountain Ledge', None, ['Dark Death Mountain Ledge (East)', 'Dark Death Mountain Ledge (West)', 'Mimic Cave Mirror Spot', 'Spiral Cave Mirror Spot']),
create_region('Dark Death Mountain Isolated Ledge', None, ['Isolated Ledge Mirror Spot', 'Turtle Rock Isolated Ledge Entrance']),
create_region('Dark Death Mountain (East Bottom)', None, ['Dark Death Mountain Ascend (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Fairy Ascension Mirror Spot']),
@ -180,8 +178,7 @@ def create_regions(world):
create_region('Hookshot Cave', ['[cave-056] Hookshot Cave [top right chest]', '[cave-056] Hookshot Cave [top left chest]', '[cave-056] Hookshot Cave [bottom right chest]', '[cave-056] Hookshot Cave [bottom left chest]'],
['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']),
create_region('Death Mountain Floating Island', ['Piece of Heart (Death Mountain - Floating Island)'], ['Floating Island Drop', 'Hookshot Cave Back Entrance']),
create_region('Turtle Rock (Top)', None, ['Turtle Rock Open Skull', 'Turtle Rock Drop']),
create_region('Turtle Rock Skull', None, ['Turtle Rock', 'Turtle Rock Skull Reverse', 'Turtle Rock Skull Mirror Spot']),
create_region('Turtle Rock (Top)', None, ['Turtle Rock Drop']),
create_region('Mimic Cave', ['[cave-013] Mimic Cave']),
create_region('Swamp Palace (Entrance)', None, ['Swamp Palace Moat', 'Swamp Palace Exit']),

13
Rom.py
View File

@ -272,6 +272,19 @@ def patch_rom(world, rom, hashtable, quickswap=False, beep='normal', sprite=None
write_byte(rom, 0xFEE41, 0x0E) # preopen bombable exit
write_byte(rom, 0xFE465, 0x1E) # remove small key door on backside of big key door
# Thanks to Zarby89 for finding these values
# fix skull woods exit point
if world.fix_skullwoods_exit:
write_byte(rom, 0x15E0D, 0xF8)
# fix palace of darkness exit point
if world.fix_palaceofdarkness_exit:
write_byte(rom, 0x15E03, 0x40)
# fix turtle rock exit point
if world.fix_trock_exit:
write_byte(rom, 0x15E1D, 0x34)
# enable quick item swapping with L and R (ported by Amazing Ampharos)
if quickswap:
write_bytes(rom, 0x107fb, [0x22, 0x50, 0xFF, 0x1F])

View File

@ -110,9 +110,6 @@ def global_rules(world):
set_rule(world.get_entrance('7 Chest Cave Push Block Reverse'), lambda state: state.has('Mirror')) # can erase block
set_rule(world.get_entrance('Death Mountain (Top)'), lambda state: state.has('Hammer'))
set_rule(world.get_entrance('Turtle Rock Teleporter'), lambda state: state.can_lift_heavy_rocks() and state.has('Hammer'))
set_rule(world.get_entrance('Turtle Rock Skull Mirror Spot'), lambda state: state.has_Mirror() and state.has('Hammer')) # if stuck, can mirror and hammer the pegs
set_rule(world.get_entrance('Turtle Rock'), lambda state: state.can_reach('Turtle Rock Open Skull', 'Entrance'))
set_rule(world.get_entrance('Turtle Rock Skull Reverse'), lambda state: state.can_reach('Turtle Rock Open Skull', 'Entrance'))
set_rule(world.get_location('Ether Tablet'), lambda state: state.has('Book of Mudora') and state.has_beam_sword())
set_rule(world.get_entrance('East Death Mountain (Top)'), lambda state: state.has('Hammer'))
@ -124,9 +121,7 @@ def global_rules(world):
set_rule(world.get_entrance('South Dark World Bridge'), lambda state: state.has('Hammer') and state.has_Pearl())
set_rule(world.get_entrance('Bonk Fairy (Dark)'), lambda state: state.has_Boots())
set_rule(world.get_entrance('West Dark World Gap'), lambda state: state.has_Pearl() and state.has('Hookshot') and (state.has('Flippers') or state.has('Hammer') or state.can_lift_rocks()))
set_rule(world.get_entrance('Palace of Darkness Pay Kiki'), lambda state: state.has_Pearl())
set_rule(world.get_entrance('Palace of Darkness'), lambda state: state.can_reach('Palace of Darkness Pay Kiki', 'Entrance'))
set_rule(world.get_entrance('Palace of Darkness Kiki Door Reverse'), lambda state: state.can_reach('Palace of Darkness Pay Kiki', 'Entrance')) # prevent soft lock when coming from behind, not required
set_rule(world.get_entrance('Palace of Darkness'), lambda state: state.has_Pearl())
set_rule(world.get_entrance('Hyrule Castle Ledge Mirror Spot'), lambda state: state.has_Mirror())
set_rule(world.get_entrance('Dark Lake Hylia Drop (East)'), lambda state: (state.has_Pearl() and state.has('Flippers') or state.has_Mirror())) # Overworld Bunny Revival
set_rule(world.get_location('Bombos Tablet'), lambda state: state.has('Book of Mudora') and state.has_beam_sword() and state.has_Mirror())
@ -149,9 +144,7 @@ def global_rules(world):
set_rule(world.get_entrance('Dark World Shop'), lambda state: state.has('Hammer'))
set_rule(world.get_entrance('Bumper Cave Exit (Top)'), lambda state: state.has('Cape'))
set_rule(world.get_entrance('Bumper Cave Exit (Bottom)'), lambda state: state.has('Cape') or state.has('Hookshot'))
set_rule(world.get_entrance('Skull Woods Burn Skull'), lambda state: state.has('Fire Rod'))
set_rule(world.get_entrance('Skull Woods Final Section'), lambda state: state.can_reach('Skull Woods Burn Skull', 'Entrance')) # prevent soft lock when coming from behind, not required
set_rule(world.get_entrance('Skull Woods Skull Reverse'), lambda state: state.can_reach('Skull Woods Burn Skull', 'Entrance'))
set_rule(world.get_entrance('Skull Woods Final Section'), lambda state: state.has('Fire Rod'))
set_rule(world.get_entrance('Misery Mire'), lambda state: state.has_Pearl() and state.has_sword() and state.has_misery_mire_medallion()) # sword required to cast magic (!)
set_rule(world.get_entrance('Desert Ledge (West) Mirror Spot'), lambda state: state.has_Mirror())
set_rule(world.get_entrance('Desert Ledge Mirror Spot'), lambda state: state.has_Mirror())
@ -180,7 +173,7 @@ def global_rules(world):
set_rule(world.get_location('[cave-056] Hookshot Cave [bottom right chest]'), lambda state: state.has('Hookshot') or state.has('Pegasus Boots'))
set_rule(world.get_location('[cave-056] Hookshot Cave [bottom left chest]'), lambda state: state.has('Hookshot'))
set_rule(world.get_location('Piece of Heart (Death Mountain - Floating Island)'), lambda state: state.has_Mirror())
set_rule(world.get_entrance('Turtle Rock'), lambda state: state.has_Pearl() and state.has_sword() and state.has_turtle_rock_medallion()) # sword required to cast magic (!)
set_rule(world.get_entrance('Turtle Rock'), lambda state: state.has_Pearl() and state.has_sword() and state.has_turtle_rock_medallion() and state.can_reach('Turtle Rock (Top)', 'Region')) # sword required to cast magic (!)
set_rule(world.get_location('[cave-013] Mimic Cave'), lambda state: state.has('Hammer'))
set_rule(world.get_entrance('Sewers Door'), lambda state: state.has('Small Key (Escape)'))