diff --git a/DoorShuffle.py b/DoorShuffle.py index 9ca2227a..fbbabef3 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -3630,13 +3630,17 @@ logical_connections = [ ('Hyrule Castle Throne Room Tapestry', 'Hyrule Castle Behind Tapestry'), ('Hyrule Castle Tapestry Backwards', 'Hyrule Castle Throne Room'), ('Sewers Secret Room Push Block', 'Sewers Secret Room Blocked Path'), + ('Eastern Hint Tile Push Block', 'Eastern Hint Tile'), ('Eastern Map Balcony Hook Path', 'Eastern Map Room'), ('Eastern Map Room Drop Down', 'Eastern Map Balcony'), + ('Eastern Palace Boss', 'Eastern Boss Spoils'), + ('Desert Main Lobby Left Path', 'Desert Left Alcove'), ('Desert Main Lobby Right Path', 'Desert Right Alcove'), ('Desert Left Alcove Path', 'Desert Main Lobby'), ('Desert Right Alcove Path', 'Desert Main Lobby'), + ('Desert Palace Boss', 'Desert Boss Spoils'), ('Hera Lobby to Front Barrier - Blue', 'Hera Front'), ('Hera Front to Lobby Barrier - Blue', 'Hera Lobby'), @@ -3666,6 +3670,7 @@ logical_connections = [ ('Hera Big Chest Hook Path', 'Hera Big Chest Landing'), ('Hera Big Chest Landing Exit', 'Hera 4F'), ('Hera 5F Orange Path', 'Hera 5F Pot Block'), + ('Tower of Hera Boss', 'Hera Boss Spoils'), ('PoD Pit Room Block Path N', 'PoD Pit Room Blocked'), ('PoD Pit Room Block Path S', 'PoD Pit Room'), @@ -3717,6 +3722,8 @@ logical_connections = [ ('PoD Dark Pegs Middle Ranged Crystal Exit', 'PoD Dark Pegs Middle'), ('PoD Dark Pegs Middle to Left Bypass', 'PoD Dark Pegs Left'), ('PoD Dark Pegs Left Ranged Crystal Exit', 'PoD Dark Pegs Left'), + ('Palace of Darkness Boss', 'PoD Boss Spoils'), + ('Swamp Lobby Moat', 'Swamp Entrance'), ('Swamp Entrance Moat', 'Swamp Lobby'), ('Swamp Trench 1 Approach Dry', 'Swamp Trench 1 Nexus'), @@ -3759,12 +3766,15 @@ logical_connections = [ ('Swamp Drain Right Switch', 'Swamp Drain Left'), ('Swamp Flooded Spot Ladder', 'Swamp Flooded Room'), ('Swamp Flooded Room Ladder', 'Swamp Flooded Spot'), + ('Swamp Palace Boss', 'Swamp Boss Spoils'), ('Skull Pot Circle Star Path', 'Skull Map Room'), ('Skull Big Chest Hookpath', 'Skull 1 Lobby'), ('Skull Back Drop Star Path', 'Skull Small Hall'), ('Skull 2 West Lobby Pits', 'Skull 2 West Lobby Ledge'), ('Skull 2 West Lobby Ledge Pits', 'Skull 2 West Lobby'), + ('Skull Woods Boss', 'Skull Boss Spoils'), + ('Thieves Rail Ledge Drop Down', 'Thieves BK Corner'), ('Thieves Hellway Orange Barrier', 'Thieves Hellway S Crystal'), ('Thieves Hellway Crystal Orange Barrier', 'Thieves Hellway'), @@ -3780,6 +3790,7 @@ logical_connections = [ ('Thieves Conveyor Block Path', 'Thieves Conveyor Bridge'), ("Thieves Blind's Cell Door", "Thieves Blind's Cell Interior"), ("Thieves Blind's Cell Exit", "Thieves Blind's Cell"), + ('Thieves Town Boss', 'Thieves Boss Spoils'), ('Ice Cross Bottom Push Block Left', 'Ice Floor Switch'), ('Ice Cross Right Push Block Top', 'Ice Bomb Drop'), @@ -3800,6 +3811,7 @@ logical_connections = [ ('Ice Big Chest Landing Push Blocks', 'Ice Big Chest View'), ('Ice Refill to Crystal', 'Ice Refill - Crystal'), ('Ice Refill Crystal Exit', 'Ice Refill'), + ('Ice Palace Boss', 'Ice Boss Spoils'), ('Mire Lobby Gap', 'Mire Post-Gap'), ('Mire Post-Gap Gap', 'Mire Lobby'), @@ -3835,6 +3847,7 @@ logical_connections = [ ('Mire South Fish Blue Barrier', 'Mire Fishbone'), ('Mire Fishbone Blue Barrier', 'Mire South Fish'), ('Mire Fishbone Blue Barrier Bypass', 'Mire South Fish'), + ('Misery Mire Boss', 'Mire Boss Spoils'), ('TR Main Lobby Gap', 'TR Lobby Ledge'), ('TR Lobby Ledge Gap', 'TR Main Lobby'), @@ -3882,6 +3895,7 @@ logical_connections = [ ('TR Crystal Maze End Ranged Crystal Exit', 'TR Crystal Maze End'), ('TR Final Abyss Balcony Path', 'TR Final Abyss Ledge'), ('TR Final Abyss Ledge Path', 'TR Final Abyss Balcony'), + ('Turtle Rock Boss', 'TR Boss Spoils'), ('GT Blocked Stairs Block Path', 'GT Big Chest'), ('GT Speed Torch South Path', 'GT Speed Torch'), diff --git a/Doors.py b/Doors.py index 4c9611fc..defdcbf0 100644 --- a/Doors.py +++ b/Doors.py @@ -188,6 +188,7 @@ def create_doors(world, player): create_door(player, 'Eastern Duo Eyegores SE', Intr).dir(So, 0xd8, Right, High).pos(1), create_door(player, 'Eastern Duo Eyegores NE', Nrml).dir(No, 0xd8, Right, High).trap(0x4).pos(0), create_door(player, 'Eastern Boss SE', Nrml).dir(So, 0xc8, Right, High).no_exit().trap(0x4).pos(0), + create_door(player, 'Eastern Palace Boss', Lgcl), # Desert Palace create_door(player, 'Desert Main Lobby S', Nrml).dir(So, 0x84, Mid, High).pos(0).portal(Z, 0x22), @@ -251,6 +252,7 @@ def create_doors(world, player): create_door(player, 'Desert Wall Slide SE', Intr).dir(So, 0x43, Right, High).small_key().pos(1), create_door(player, 'Desert Wall Slide NW', Nrml).dir(No, 0x43, Left, High).big_key().pos(0).no_entrance(), create_door(player, 'Desert Boss SW', Nrml).dir(So, 0x33, Left, High).no_exit().trap(0x4).pos(0).portal(Z, 0x00), + create_door(player, 'Desert Palace Boss', Lgcl), # Hera create_door(player, 'Hera Lobby S', Nrml).dir(So, 0x77, Mid, Low).pos(0).portal(Z, 0x22, 1), @@ -316,6 +318,7 @@ def create_doors(world, player): create_door(player, 'Hera Boss Down Stairs', Sprl).dir(Dn, 0x07, 0, HTH).ss(S, 0x61, 0xb0).kill(), create_door(player, 'Hera Boss Outer Hole', Hole), create_door(player, 'Hera Boss Inner Hole', Hole), + create_door(player, 'Tower of Hera Boss', Lgcl), # Castle Tower create_door(player, 'Tower Lobby S', Nrml).dir(So, 0xe0, Left, High).pos(3).portal(Z, 0x00), @@ -475,6 +478,7 @@ def create_doors(world, player): create_door(player, 'PoD Callback WS', Intr).dir(We, 0x0b, Mid, High).pos(1), create_door(player, 'PoD Callback Warp', Warp), create_door(player, 'PoD Boss SE', Nrml).dir(So, 0x5a, Right, High).no_exit().trap(0x4).pos(0), + create_door(player, 'Palace of Darkness Boss', Lgcl), create_door(player, 'Swamp Lobby S', Nrml).dir(So, 0x28, Mid, High).pos(1).portal(Z, 0x22), create_door(player, 'Swamp Lobby Moat', Lgcl), @@ -589,6 +593,7 @@ def create_doors(world, player): create_door(player, 'Swamp T SW', Intr).dir(So, 0x16, Left, High).small_key().pos(1), create_door(player, 'Swamp T NW', Nrml).dir(No, 0x16, Left, High).pos(3), create_door(player, 'Swamp Boss SW', Nrml).dir(So, 0x06, Left, High).no_exit().trap(0x4).pos(0), + create_door(player, 'Swamp Palace Boss', Lgcl), create_door(player, 'Skull 1 Lobby S', Nrml).dir(So, 0x58, Left, High).pos(4).portal(Z, 0x00), create_door(player, 'Skull 1 Lobby WS', Nrml).dir(We, 0x58, Bot, High).small_key().pos(1), @@ -640,6 +645,7 @@ def create_doors(world, player): create_door(player, 'Skull Spike Corner ES', Intr).dir(Ea, 0x39, Bot, High).small_key().pos(1), create_door(player, 'Skull Final Drop WS', Intr).dir(We, 0x39, Bot, High).small_key().pos(1), create_door(player, 'Skull Final Drop Hole', Hole), + create_door(player, 'Skull Woods Boss', Lgcl), create_door(player, 'Thieves Lobby S', Nrml).dir(So, 0xdb, Mid, High).pos(1).portal(Z, 0x22), create_door(player, 'Thieves Lobby N Edge', Open).dir(No, 0xdb, None, Low).edge(7, A, 0x10), @@ -721,6 +727,7 @@ def create_doors(world, player): create_door(player, 'Thieves Big Chest Room ES', Intr).dir(Ea, 0x44, Bot, High).small_key().pos(1), create_door(player, 'Thieves Conveyor Block WN', Intr).dir(We, 0x44, Top, High).pos(0), create_door(player, 'Thieves Trap EN', Intr).dir(Ea, 0x44, Left, Top).pos(0), + create_door(player, 'Thieves Town Boss', Lgcl), create_door(player, 'Ice Lobby SE', Nrml).dir(So, 0x0e, Right, High).pos(2).portal(X, 0x00), create_door(player, 'Ice Lobby WS', Intr).dir(We, 0x0e, Bot, High).pos(1), @@ -826,6 +833,7 @@ def create_doors(world, player): create_door(player, 'Ice Fairy Warp', Warp), create_door(player, 'Ice Antechamber NE', Nrml).dir(No, 0xce, Right, High).trap(0x4).pos(0), create_door(player, 'Ice Antechamber Hole', Hole), + create_door(player, 'Ice Palace Boss', Lgcl), create_door(player, 'Mire Lobby S', Nrml).dir(So, 0x98, Left, High).pos(0).portal(Z, 0x20), create_door(player, 'Mire Lobby Gap', Lgcl), @@ -962,6 +970,7 @@ def create_doors(world, player): create_door(player, 'Mire Antechamber Orange Barrier', Lgcl), create_door(player, 'Mire Antechamber NW', Nrml).dir(No, 0xa0, Left, High).big_key().pos(0), create_door(player, 'Mire Boss SW', Nrml).dir(So, 0x90, Left, High).no_exit().trap(0x4).pos(0), + create_door(player, 'Misery Mire Boss', Lgcl), create_door(player, 'TR Main Lobby SE', Nrml).dir(So, 0xd6, Right, High).pos(1).portal(X, 0x02), create_door(player, 'TR Lobby Ledge NE', Nrml).dir(No, 0xd6, Right, High).pos(2), @@ -1075,6 +1084,7 @@ def create_doors(world, player): create_door(player, 'TR Final Abyss Ledge Path', Lgcl), create_door(player, 'TR Final Abyss NW', Nrml).dir(No, 0xb4, Left, High).big_key().pos(0), create_door(player, 'TR Boss SW', Nrml).dir(So, 0xa4, Left, High).no_exit().trap(0x4).pos(0).portal(Z, 0x00), + create_door(player, 'Turtle Rock Boss', Lgcl), create_door(player, 'GT Lobby S', Nrml).dir(So, 0x0c, Mid, High).pos(0).portal(Z, 0x22), create_door(player, 'GT Lobby Left Down Stairs', Sprl).dir(Dn, 0x0c, 1, HTL).ss(A, 0x0f, 0x80), diff --git a/Dungeons.py b/Dungeons.py index 3284617e..7ffe518c 100644 --- a/Dungeons.py +++ b/Dungeons.py @@ -65,7 +65,7 @@ eastern_regions = [ 'Eastern Compass Room', 'Eastern Hint Tile', 'Eastern Hint Tile Blocked Path', 'Eastern Courtyard', 'Eastern Fairies', 'Eastern Map Valley', 'Eastern Dark Square', 'Eastern Dark Pots', 'Eastern Big Key', 'Eastern Darkness', 'Eastern Rupees', 'Eastern Attic Start', 'Eastern False Switches', 'Eastern Cannonball Hell', - 'Eastern Single Eyegore', 'Eastern Duo Eyegores', 'Eastern Boss', 'Eastern Portal' + 'Eastern Single Eyegore', 'Eastern Duo Eyegores', 'Eastern Boss', 'Eastern Boss Spoils', 'Eastern Portal' ] desert_regions = [ @@ -74,7 +74,7 @@ desert_regions = [ 'Desert North Hall', 'Desert Map Room', 'Desert Sandworm Corner', 'Desert Bonk Torch', 'Desert Circle of Pots', 'Desert Big Chest Room', 'Desert West Wing', 'Desert West Lobby', 'Desert Fairy Fountain', 'Desert Back Lobby', 'Desert Tiles 1', 'Desert Bridge', 'Desert Four Statues', 'Desert Beamos Hall', 'Desert Tiles 2', - 'Desert Wall Slide', 'Desert Boss', 'Desert West Portal', 'Desert South Portal', 'Desert East Portal', + 'Desert Wall Slide', 'Desert Boss', 'Desert Boss Spoils', 'Desert West Portal', 'Desert South Portal', 'Desert East Portal', 'Desert Back Portal' ] @@ -84,7 +84,7 @@ hera_regions = [ 'Hera Back - Ranged Crystal', 'Hera Basement Cage', 'Hera Basement Cage - Crystal', 'Hera Tile Room', 'Hera Tridorm', 'Hera Tridorm - Crystal', 'Hera Torches', 'Hera Beetles', 'Hera Startile Corner', 'Hera Startile Wide', 'Hera Startile Wide - Crystal', 'Hera 4F', 'Hera Big Chest Landing', 'Hera 5F', - 'Hera 5F Pot Block', 'Hera Fairies', 'Hera Boss', 'Hera Portal' + 'Hera 5F Pot Block', 'Hera Fairies', 'Hera Boss', 'Hera Boss Spoils', 'Hera Portal' ] tower_regions = [ @@ -105,7 +105,7 @@ pod_regions = [ 'PoD Bow Statue Left', 'PoD Bow Statue Left - Crystal', 'PoD Bow Statue Right', 'PoD Bow Statue Right - Ranged Crystal', 'PoD Dark Pegs Landing', 'PoD Dark Pegs Right', 'PoD Dark Pegs Middle', 'PoD Dark Pegs Left', 'PoD Dark Pegs Landing - Ranged Crystal', 'PoD Dark Pegs Middle - Ranged Crystal', 'PoD Dark Pegs Left - Ranged Crystal', 'PoD Lonely Turtle', 'PoD Turtle Party', - 'PoD Dark Alley', 'PoD Callback', 'PoD Boss', 'Palace of Darkness Portal' + 'PoD Dark Alley', 'PoD Callback', 'PoD Boss', 'PoD Boss Spoils', 'Palace of Darkness Portal' ] swamp_regions = [ @@ -119,7 +119,7 @@ swamp_regions = [ 'Swamp West Ledge', 'Swamp Barrier Ledge', 'Swamp Barrier', 'Swamp Attic', 'Swamp Push Statue', 'Swamp Shooters', 'Swamp Left Elbow', 'Swamp Right Elbow', 'Swamp Drain Left', 'Swamp Drain Right', 'Swamp Flooded Room', 'Swamp Flooded Spot', 'Swamp Basement Shallows', 'Swamp Waterfall Room', 'Swamp Refill', 'Swamp Behind Waterfall', - 'Swamp C', 'Swamp Waterway', 'Swamp I', 'Swamp T', 'Swamp Boss', 'Swamp Portal' + 'Swamp C', 'Swamp Waterway', 'Swamp I', 'Swamp T', 'Swamp Boss', 'Swamp Boss Spoils', 'Swamp Portal' ] skull_regions = [ @@ -127,7 +127,7 @@ skull_regions = [ 'Skull Pot Prison', 'Skull Compass Room', 'Skull Left Drop', 'Skull 2 East Lobby', 'Skull Big Key', 'Skull Lone Pot', 'Skull Small Hall', 'Skull Back Drop', 'Skull 2 West Lobby', 'Skull 2 West Lobby Ledge', 'Skull X Room', 'Skull 3 Lobby', 'Skull East Bridge', 'Skull West Bridge Nook', 'Skull Star Pits', - 'Skull Torch Room', 'Skull Vines', 'Skull Spike Corner', 'Skull Final Drop', 'Skull Boss', + 'Skull Torch Room', 'Skull Vines', 'Skull Spike Corner', 'Skull Final Drop', 'Skull Boss', 'Skull Boss Spoils', 'Skull 1 Portal', 'Skull 2 East Portal', 'Skull 2 West Portal', 'Skull 3 Portal' ] @@ -139,7 +139,7 @@ thieves_regions = [ 'Thieves Attic', 'Thieves Attic Hint', 'Thieves Attic Switch', '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 Blind's Cell Interior", 'Thieves Conveyor Bridge', - 'Thieves Conveyor Block', 'Thieves Big Chest Room', 'Thieves Trap', 'Thieves Town Portal' + 'Thieves Conveyor Block', 'Thieves Big Chest Room', 'Thieves Trap', 'Thieves Boss Spoils', 'Thieves Town Portal' ] ice_regions = [ @@ -152,7 +152,7 @@ ice_regions = [ 'Ice Hookshot Balcony', 'Ice Spikeball', 'Ice Lonely Freezor', 'Iced T', 'Ice Catwalk', 'Ice Many Pots', 'Ice Crystal Right', 'Ice Crystal Left', 'Ice Crystal Block', 'Ice Big Chest View', 'Ice Big Chest Landing', 'Ice Backwards Room', 'Ice Anti-Fairy', 'Ice Switch Room', 'Ice Refill', 'Ice Refill - Crystal', - 'Ice Fairy', 'Ice Antechamber', 'Ice Boss', 'Ice Portal' + 'Ice Fairy', 'Ice Antechamber', 'Ice Boss', 'Ice Boss Spoils', 'Ice Portal' ] mire_regions = [ @@ -168,7 +168,7 @@ mire_regions = [ 'Mire Key Rupees', 'Mire Block X', 'Mire Tall Dark and Roomy', 'Mire Tall Dark and Roomy - Ranged Crystal', 'Mire Crystal Right', 'Mire Crystal Mid', 'Mire Crystal Left', 'Mire Crystal Top', 'Mire Shooter Rupees', 'Mire Falling Foes', 'Mire Firesnake Skip', 'Mire Antechamber', - 'Mire Boss', 'Mire Portal' + 'Mire Boss', 'Mire Boss Spoils', 'Mire Portal' ] tr_regions = [ @@ -182,7 +182,7 @@ tr_regions = [ 'TR Crystaroller Top - Crystal', 'TR Crystaroller Chest', 'TR Crystaroller Middle - Ranged Crystal', 'TR Crystaroller Bottom - Ranged Crystal', 'TR Dark Ride', 'TR Dark Ride Ledges', 'TR Dash Bridge', 'TR Eye Bridge', 'TR Crystal Maze Start', 'TR Crystal Maze Start - Crystal', 'TR Crystal Maze Interior', 'TR Crystal Maze End', - 'TR Crystal Maze End - Ranged Crystal', 'TR Final Abyss Balcony', 'TR Final Abyss Ledge', 'TR Boss', + 'TR Crystal Maze End - Ranged Crystal', 'TR Final Abyss Balcony', 'TR Final Abyss Ledge', 'TR Boss', 'TR Boss Spoils', 'Turtle Rock Main Portal', 'Turtle Rock Lazy Eyes Portal', 'Turtle Rock Chest Portal', 'Turtle Rock Eye Bridge Portal' ] diff --git a/ItemList.py b/ItemList.py index 16130fc9..926dd7e4 100644 --- a/ItemList.py +++ b/ItemList.py @@ -194,10 +194,17 @@ def generate_itempool(world, player): if world.timer in ['ohko', 'timed-ohko']: world.can_take_damage = False + def set_event_item(location_name, item_name=None): + location = world.get_location(location_name, player) + if item_name: + world.push_item(location, ItemFactory(item_name, player), False) + location.event = True + location.locked = True + if world.goal[player] in ['pedestal', 'triforcehunt']: - world.push_item(world.get_location('Ganon', player), ItemFactory('Nothing', player), False) + set_event_item('Ganon', 'Nothing') else: - world.push_item(world.get_location('Ganon', player), ItemFactory('Triforce', player), False) + set_event_item('Ganon', 'Triforce') if world.goal[player] in ['triforcehunt', 'trinity']: region = world.get_region('Hyrule Castle Courtyard', player) @@ -233,75 +240,45 @@ def generate_itempool(world, player): old_man.forced_item = old_man.item old_man.skip = True - world.get_location('Ganon', player).event = True - world.get_location('Ganon', player).locked = True - world.push_item(world.get_location('Agahnim 1', player), ItemFactory('Beat Agahnim 1', player), False) - world.get_location('Agahnim 1', player).event = True - world.get_location('Agahnim 1', player).locked = True - world.push_item(world.get_location('Agahnim 2', player), ItemFactory('Beat Agahnim 2', player), False) - world.get_location('Agahnim 2', player).event = True - world.get_location('Agahnim 2', player).locked = True - world.push_item(world.get_location('Lost Old Man', player), ItemFactory('Escort Old Man', player), False) - world.get_location('Lost Old Man', player).event = True - world.get_location('Lost Old Man', player).locked = True - world.push_item(world.get_location('Old Man Drop Off', player), ItemFactory('Return Old Man', player), False) - world.get_location('Old Man Drop Off', player).event = True - world.get_location('Old Man Drop Off', player).locked = True - world.push_item(world.get_location('Dark Blacksmith Ruins', player), ItemFactory('Pick Up Purple Chest', player), False) - world.get_location('Dark Blacksmith Ruins', player).event = True - world.get_location('Dark Blacksmith Ruins', player).locked = True - world.push_item(world.get_location('Middle Aged Man', player), ItemFactory('Deliver Purple Chest', player), False) - world.get_location('Middle Aged Man', player).event = True - world.get_location('Middle Aged Man', player).locked = True - world.push_item(world.get_location('Frog', player), ItemFactory('Get Frog', player), False) - world.get_location('Frog', player).event = True - world.get_location('Frog', player).locked = True - world.push_item(world.get_location('Missing Smith', player), ItemFactory('Return Smith', player), False) - world.get_location('Missing Smith', player).event = True - world.get_location('Missing Smith', player).locked = True - world.push_item(world.get_location('Floodgate', player), ItemFactory('Open Floodgate', player), False) - world.get_location('Floodgate', player).event = True - world.get_location('Floodgate', player).locked = True - world.push_item(world.get_location('Big Bomb', player), ItemFactory('Pick Up Big Bomb', player), False) - world.get_location('Big Bomb', player).event = True - world.get_location('Big Bomb', player).locked = True - world.push_item(world.get_location('Pyramid Crack', player), ItemFactory('Detonate Big Bomb', player), False) - world.get_location('Pyramid Crack', player).event = True - world.get_location('Pyramid Crack', player).locked = True - world.push_item(world.get_location('Trench 1 Switch', player), ItemFactory('Trench 1 Filled', player), False) - world.get_location('Trench 1 Switch', player).event = True - world.get_location('Trench 1 Switch', player).locked = True - world.push_item(world.get_location('Trench 2 Switch', player), ItemFactory('Trench 2 Filled', player), False) - world.get_location('Trench 2 Switch', player).event = True - world.get_location('Trench 2 Switch', player).locked = True - 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('Turtle Medallion Pad', player), ItemFactory('Turtle Opened', player), False) - world.get_location('Turtle Medallion Pad', player).event = True - world.get_location('Turtle Medallion Pad', 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 - world.push_item(world.get_location('Ice Block Drop', player), ItemFactory('Convenient Block', player), False) - world.get_location('Ice Block Drop', player).event = True - world.get_location('Ice Block Drop', player).locked = True - world.push_item(world.get_location('Skull Star Tile', player), ItemFactory('Hidden Pits', player), False) - world.get_location('Skull Star Tile', player).event = True - world.get_location('Skull Star Tile', player).locked = True + event_items = { + 'Agahnim 1': 'Beat Agahnim 1', + 'Agahnim 2': 'Beat Agahnim 2', + 'Eastern Palace - Boss Kill': 'Beat Boss', + 'Desert Palace - Boss Kill': 'Beat Boss', + 'Tower of Hera - Boss Kill': 'Beat Boss', + 'Palace of Darkness - Boss Kill': 'Beat Boss', + 'Swamp Palace - Boss Kill': 'Beat Boss', + 'Skull Woods - Boss Kill': 'Beat Boss', + 'Thieves\' Town - Boss Kill': 'Beat Boss', + 'Ice Palace - Boss Kill': 'Beat Boss', + 'Misery Mire - Boss Kill': 'Beat Boss', + 'Turtle Rock - Boss Kill': 'Beat Boss', + 'Lost Old Man': 'Escort Old Man', + 'Old Man Drop Off': 'Return Old Man', + 'Floodgate': 'Open Floodgate', + 'Big Bomb': 'Pick Up Big Bomb', + 'Pyramid Crack': 'Detonate Big Bomb', + 'Frog': 'Get Frog', + 'Missing Smith': 'Return Smith', + 'Dark Blacksmith Ruins': 'Pick Up Purple Chest', + 'Middle Aged Man': 'Deliver Purple Chest', + 'Trench 1 Switch': 'Trench 1 Filled', + 'Trench 2 Switch': 'Trench 2 Filled', + 'Swamp Drain': 'Drained Swamp', + 'Turtle Medallion Pad': 'Turtle Opened', + 'Attic Cracked Floor': 'Shining Light', + 'Suspicious Maiden': 'Maiden Rescued', + 'Revealing Light': 'Maiden Unmasked', + 'Ice Block Drop': 'Convenient Block', + 'Skull Star Tile': 'Hidden Pits' + } + + for loc, item in event_items.items(): + set_event_item(loc, item) + if world.mode[player] == 'standard': - world.push_item(world.get_location('Zelda Pickup', player), ItemFactory('Zelda Herself', player), False) - world.get_location('Zelda Pickup', player).event = True - world.get_location('Zelda Pickup', player).locked = True - world.push_item(world.get_location('Zelda Drop Off', player), ItemFactory('Zelda Delivered', player), False) - world.get_location('Zelda Drop Off', player).event = True - world.get_location('Zelda Drop Off', player).locked = True + set_event_item('Zelda Pickup', 'Zelda Herself') + set_event_item('Zelda Drop Off', 'Zelda Delivered') # set up item pool skip_pool_adjustments = False diff --git a/Items.py b/Items.py index e9a056b5..8a4f9c14 100644 --- a/Items.py +++ b/Items.py @@ -177,6 +177,7 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche 'Small Heart': (False, False, None, 0x42, 10, 'Just a little\npiece of love!', 'and the heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a heart'), 'Apples': (False, False, None, 0xD1, 30, 'Just a few pieces of fruit!', 'and the juicy fruit', 'the fruity kid', 'the fruit stand', 'expired fruit', 'bottle boy has fruit again', 'an apple hoard'), 'Fairy': (False, False, None, 0xD2, 50, 'Just a pixie!', 'and the pixie', 'the pixie kid', 'pixie for sale', 'pixie fungus', 'bottle boy has pixie again', 'a pixie'), + 'Beat Boss': (True, False, 'Event', 999, None, None, None, None, None, None, None, None), 'Beat Agahnim 1': (True, False, 'Event', 999, None, None, None, None, None, None, None, None), 'Beat Agahnim 2': (True, False, 'Event', 999, None, None, None, None, None, None, None, None), 'Get Frog': (True, False, 'Event', 999, None, None, None, None, None, None, None, None), diff --git a/Regions.py b/Regions.py index db9ad299..d828104e 100644 --- a/Regions.py +++ b/Regions.py @@ -489,7 +489,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Eastern Cannonball Hell', 'Eastern Palace', None, ['Eastern Cannonball Hell ES', 'Eastern Cannonball Hell WS']), create_dungeon_region(player, 'Eastern Single Eyegore', 'Eastern Palace', None, ['Eastern Single Eyegore ES', 'Eastern Single Eyegore NE']), create_dungeon_region(player, 'Eastern Duo Eyegores', 'Eastern Palace', None, ['Eastern Duo Eyegores SE', 'Eastern Duo Eyegores NE']), - create_dungeon_region(player, 'Eastern Boss', 'Eastern Palace', ['Eastern Palace - Boss', 'Eastern Palace - Prize'], ['Eastern Boss SE']), + create_dungeon_region(player, 'Eastern Boss', 'Eastern Palace', None, ['Eastern Boss SE', 'Eastern Palace Boss']), + create_dungeon_region(player, 'Eastern Boss Spoils', 'Eastern Palace', ['Eastern Palace - Boss', 'Eastern Palace - Prize', 'Eastern Palace - Boss Kill']), # Desert Palace create_dungeon_region(player, 'Desert Main Lobby', 'Desert Palace', None, ['Desert Main Lobby S', 'Desert Main Lobby N Edge', 'Desert Main Lobby Left Path', 'Desert Main Lobby Right Path']), @@ -518,7 +519,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Desert Beamos Hall', 'Desert Palace', ['Desert Palace - Beamos Hall Pot Key'], ['Desert Beamos Hall WS', 'Desert Beamos Hall NE']), create_dungeon_region(player, 'Desert Tiles 2', 'Desert Palace', ['Desert Palace - Desert Tiles 2 Pot Key'], ['Desert Tiles 2 SE', 'Desert Tiles 2 NE']), create_dungeon_region(player, 'Desert Wall Slide', 'Desert Palace', None, ['Desert Wall Slide SE', 'Desert Wall Slide NW']), - create_dungeon_region(player, 'Desert Boss', 'Desert Palace', ['Desert Palace - Boss', 'Desert Palace - Prize'], ['Desert Boss SW']), + create_dungeon_region(player, 'Desert Boss', 'Desert Palace', None, ['Desert Boss SW', 'Desert Palace Boss']), + create_dungeon_region(player, 'Desert Boss Spoils', 'Desert Palace', ['Desert Palace - Boss', 'Desert Palace - Prize', 'Desert Palace - Boss Kill']), # Hera create_dungeon_region(player, 'Hera Lobby', 'Tower of Hera', None, ['Hera Lobby S', 'Hera Lobby to Crystal', 'Hera Lobby to Front Barrier - Blue']), @@ -546,7 +548,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Hera 5F', 'Tower of Hera', None, ['Hera 5F Down Stairs', 'Hera 5F Up Stairs', 'Hera 5F Star Hole', 'Hera 5F Pothole Chain', 'Hera 5F Normal Holes', 'Hera 5F Orange Path']), create_dungeon_region(player, 'Hera 5F Pot Block', 'Tower of Hera', None), create_dungeon_region(player, 'Hera Fairies', 'Tower of Hera', None, ['Hera Fairies\' Warp']), - create_dungeon_region(player, 'Hera Boss', 'Tower of Hera', ['Tower of Hera - Boss', 'Tower of Hera - Prize'], ['Hera Boss Down Stairs', 'Hera Boss Outer Hole', 'Hera Boss Inner Hole']), + create_dungeon_region(player, 'Hera Boss', 'Tower of Hera', None, ['Hera Boss Down Stairs', 'Hera Boss Outer Hole', 'Hera Boss Inner Hole', 'Tower of Hera Boss']), + create_dungeon_region(player, 'Hera Boss Spoils', 'Tower of Hera', ['Tower of Hera - Boss', 'Tower of Hera - Prize', 'Tower of Hera - Boss Kill']), # AgaTower create_dungeon_region(player, 'Tower Lobby', 'Castle Tower', None, ['Tower Lobby NW', 'Tower Lobby S']), @@ -621,7 +624,8 @@ def create_dungeon_regions(world, player): 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']), + create_dungeon_region(player, 'PoD Boss', 'Palace of Darkness', None, ['PoD Boss SE', 'Palace of Darkness Boss']), + create_dungeon_region(player, 'PoD Boss Spoils', 'Palace of Darkness', ['Palace of Darkness - Boss', 'Palace of Darkness - Prize', 'Palace of Darkness - Boss Kill']), # swamp create_dungeon_region(player, 'Swamp Lobby', 'Swamp Palace', None, ['Swamp Lobby S', 'Swamp Lobby Moat']), @@ -674,7 +678,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Swamp Waterway', 'Swamp Palace', ['Swamp Palace - Waterway Pot Key'], ['Swamp Waterway NE', 'Swamp Waterway N', 'Swamp Waterway NW']), create_dungeon_region(player, 'Swamp I', 'Swamp Palace', None, ['Swamp I S']), create_dungeon_region(player, 'Swamp T', 'Swamp Palace', None, ['Swamp T SW', 'Swamp T NW']), - create_dungeon_region(player, 'Swamp Boss', 'Swamp Palace', ['Swamp Palace - Boss', 'Swamp Palace - Prize'], ['Swamp Boss SW']), + create_dungeon_region(player, 'Swamp Boss', 'Swamp Palace', None, ['Swamp Boss SW', 'Swamp Palace Boss']), + create_dungeon_region(player, 'Swamp Boss Spoils', 'Swamp Palace', ['Swamp Palace - Boss', 'Swamp Palace - Prize', 'Swamp Palace - Boss Kill']), # sw create_dungeon_region(player, 'Skull 1 Lobby', 'Skull Woods', None, ['Skull 1 Lobby S', 'Skull 1 Lobby WS', 'Skull 1 Lobby ES']), @@ -702,7 +707,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Skull Vines', 'Skull Woods', None, ['Skull Vines EN', 'Skull Vines NW']), create_dungeon_region(player, 'Skull Spike Corner', 'Skull Woods', ['Skull Woods - Spike Corner Key Drop'], ['Skull Spike Corner SW', 'Skull Spike Corner ES']), create_dungeon_region(player, 'Skull Final Drop', 'Skull Woods', None, ['Skull Final Drop WS', 'Skull Final Drop Hole']), - create_dungeon_region(player, 'Skull Boss', 'Skull Woods', ['Skull Woods - Boss', 'Skull Woods - Prize']), + create_dungeon_region(player, 'Skull Boss', 'Skull Woods', None, ['Skull Woods Boss']), + create_dungeon_region(player, 'Skull Boss Spoils', 'Skull Woods', ['Skull Woods - Boss', 'Skull Woods - Prize', 'Skull Woods - Boss Kill']), # tt create_dungeon_region(player, 'Thieves Lobby', 'Thieves\' Town', ['Thieves\' Town - Map Chest'], ['Thieves Lobby S', 'Thieves Lobby N Edge', 'Thieves Lobby NE Edge', 'Thieves Lobby E']), @@ -712,8 +718,9 @@ def create_dungeon_regions(world, player): 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 ES 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 Boss', 'Thieves\' Town', ['Thieves\' Town - Boss', 'Thieves\' Town - Prize'], ['Revealing Light', 'Thieves Boss SE']), + create_dungeon_region(player, 'Thieves Boss', 'Thieves\' Town', ['Revealing Light'], ['Thieves Boss SE', 'Thieves Town Boss']), + create_dungeon_region(player, 'Thieves Boss Spoils', 'Thieves\' Town', ['Thieves\' Town - Boss', 'Thieves\' Town - Prize', 'Thieves\' Town - Boss Kill']), #create_dungeon_region(player, 'Thieves Revealing Light', 'Thieves\' Town', ['Revealing Light'], ['Thieves Boss Room']), 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']), @@ -791,7 +798,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Ice Refill - Crystal', 'Ice Palace', None, ['Ice Refill Crystal Exit']), create_dungeon_region(player, 'Ice Fairy', 'Ice Palace', None, ['Ice Fairy Warp']), create_dungeon_region(player, 'Ice Antechamber', 'Ice Palace', None, ['Ice Antechamber NE', 'Ice Antechamber Hole']), - create_dungeon_region(player, 'Ice Boss', 'Ice Palace', ['Ice Palace - Boss', 'Ice Palace - Prize']), + create_dungeon_region(player, 'Ice Boss', 'Ice Palace', None, ['Ice Palace Boss']), + create_dungeon_region(player, 'Ice Boss Spoils', 'Ice Palace', ['Ice Palace - Boss', 'Ice Palace - Prize', 'Ice Palace - Boss Kill']), # mire create_dungeon_region(player, 'Mire Lobby', 'Misery Mire', None, ['Mire Lobby S', 'Mire Lobby Gap']), @@ -855,7 +863,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Mire Falling Foes', 'Misery Mire', None, ['Mire Falling Foes ES', 'Mire Falling Foes Up Stairs']), create_dungeon_region(player, 'Mire Firesnake Skip', 'Misery Mire', None, ['Mire Firesnake Skip Down Stairs', 'Mire Firesnake Skip Orange Barrier']), create_dungeon_region(player, 'Mire Antechamber', 'Misery Mire', None, ['Mire Antechamber Orange Barrier', 'Mire Antechamber NW']), - create_dungeon_region(player, 'Mire Boss', 'Misery Mire', ['Misery Mire - Boss', 'Misery Mire - Prize'], ['Mire Boss SW']), + create_dungeon_region(player, 'Mire Boss', 'Misery Mire', None, ['Mire Boss SW', 'Misery Mire Boss']), + create_dungeon_region(player, 'Mire Boss Spoils', 'Misery Mire', ['Misery Mire - Boss', 'Misery Mire - Prize', 'Misery Mire - Boss Kill']), # tr create_dungeon_region(player, 'TR Main Lobby', 'Turtle Rock', None, ['TR Main Lobby Gap', 'TR Main Lobby SE']), @@ -912,7 +921,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'TR Crystal Maze End - Ranged Crystal', 'Turtle Rock', None, ['TR Crystal Maze End Ranged Crystal Exit']), create_dungeon_region(player, 'TR Final Abyss Balcony', 'Turtle Rock', None, ['TR Final Abyss South Stairs', 'TR Final Abyss Balcony Path']), create_dungeon_region(player, 'TR Final Abyss Ledge', 'Turtle Rock', None, ['TR Final Abyss NW', 'TR Final Abyss Ledge Path']), - create_dungeon_region(player, 'TR Boss', 'Turtle Rock', ['Turtle Rock - Boss', 'Turtle Rock - Prize'], ['TR Boss SW']), + create_dungeon_region(player, 'TR Boss', 'Turtle Rock', None, ['TR Boss SW', 'Turtle Rock Boss']), + create_dungeon_region(player, 'TR Boss Spoils', 'Turtle Rock', ['Turtle Rock - Boss', 'Turtle Rock - Prize', 'Turtle Rock - Boss Kill']), # gt create_dungeon_region(player, 'GT Lobby', 'Ganon\'s Tower', None, ['GT Lobby Left Down Stairs', 'GT Lobby Up Stairs', 'GT Lobby Right Down Stairs', 'GT Lobby S']), @@ -1235,7 +1245,10 @@ def adjust_locations(world, player): for l in ['Ganon', 'Agahnim 1', 'Agahnim 2', 'Frog', 'Missing Smith', 'Dark Blacksmith Ruins', 'Middle Aged Man', 'Floodgate', 'Trench 1 Switch', 'Trench 2 Switch', 'Swamp Drain', 'Turtle Medallion Pad', 'Attic Cracked Floor', 'Suspicious Maiden', 'Revealing Light', 'Big Bomb', 'Pyramid Crack', - 'Ice Block Drop', 'Lost Old Man', 'Old Man Drop Off', 'Zelda Pickup', 'Zelda Drop Off', 'Skull Star Tile']: + 'Ice Block Drop', 'Lost Old Man', 'Old Man Drop Off', 'Zelda Pickup', 'Zelda Drop Off', 'Skull Star Tile', + 'Eastern Palace - Boss Kill', 'Desert Palace - Boss Kill', 'Tower of Hera - Boss Kill', + 'Palace of Darkness - Boss Kill', 'Swamp Palace - Boss Kill', 'Skull Woods - Boss Kill', + 'Thieves\' Town - Boss Kill', 'Ice Palace - Boss Kill', 'Misery Mire - Boss Kill', 'Turtle Rock - Boss Kill']: location = world.get_location_unsafe(l, player) if location: location.type = LocationType.Logical @@ -1623,6 +1636,16 @@ location_table = {'Mushroom': (0x180013, 0x186df8, False, 'in the woods'), 'Ganon': (None, None, False, 'from me'), 'Agahnim 1': (None, None, False, 'from Ganon\'s wizardry form'), 'Agahnim 2': (None, None, False, 'from Ganon\'s wizardry form'), + 'Eastern Palace - Boss Kill': (None, None, False, None), + 'Desert Palace - Boss Kill': (None, None, False, None), + 'Tower of Hera - Boss Kill': (None, None, False, None), + 'Palace of Darkness - Boss Kill': (None, None, False, None), + 'Swamp Palace - Boss Kill': (None, None, False, None), + 'Thieves\' Town - Boss Kill': (None, None, False, None), + 'Skull Woods - Boss Kill': (None, None, False, None), + 'Ice Palace - Boss Kill': (None, None, False, None), + 'Misery Mire - Boss Kill': (None, None, False, None), + 'Turtle Rock - Boss Kill': (None, None, False, None), 'Lost Old Man': (None, None, False, None), 'Old Man Drop Off': (None, None, False, None), 'Floodgate': (None, None, False, None), diff --git a/Rules.py b/Rules.py index 1fbf8870..5106e2b5 100644 --- a/Rules.py +++ b/Rules.py @@ -63,7 +63,7 @@ def set_rules(world, player): if world.goal[player] == 'dungeons': # require all dungeons to beat ganon - add_rule(world.get_location('Ganon', player), lambda state: state.can_reach('Master Sword Pedestal', 'Location', player) and state.has_beaten_aga(player) and state.has('Beat Agahnim 2', player) and state.has_crystals(7, player)) + add_rule(world.get_location('Ganon', player), lambda state: state.has_beaten_aga(player) and state.has('Beat Agahnim 2', player) and state.has('Beat Boss', player, 10)) elif world.goal[player] in ['crystals', 'ganon']: add_rule(world.get_location('Ganon', player), lambda state: state.has_crystals(world.crystals_needed_for_ganon[player], player)) if world.goal[player] == 'ganon': @@ -148,9 +148,11 @@ def set_rule(spot, rule): spot.access_rule = rule -def set_defeat_dungeon_boss_rule(location): - # Lambda required to defer evaluation of dungeon.boss since it will change later if boos shuffle is used - set_rule(location, lambda state: location.parent_region.dungeon.boss.can_defeat(state)) +def set_defeat_dungeon_boss_rule(entrance): + # Lambda required to defer evaluation of dungeon.boss since it will change later if boss shuffle is used + set_rule(entrance, lambda state: entrance.parent_region.dungeon.boss.can_defeat(state)) + if entrance.parent_region.dungeon.name == 'Thieves Town': + add_rule(entrance, lambda state: entrance.parent_region.dungeon.boss.name != 'Blind' or state.has('Maiden Unmasked', entrance.player)) def set_always_allow(spot, rule): @@ -424,20 +426,17 @@ def global_rules(world, player): set_rule(world.get_entrance('Eastern Map Balcony Hook Path', player), lambda state: state.has('Hookshot', player)) # Boss rules. Same as below but no BK or arrow requirement. - set_defeat_dungeon_boss_rule(world.get_location('Eastern Palace - Prize', player)) - set_defeat_dungeon_boss_rule(world.get_location('Eastern Palace - Boss', player)) + set_defeat_dungeon_boss_rule(world.get_entrance('Eastern Palace Boss', player)) # Desert 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)) + set_defeat_dungeon_boss_rule(world.get_entrance('Desert Palace Boss', player)) # Tower of Hera 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 Big Chest Hook Path', player), lambda state: state.has('Hookshot', 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)) + set_defeat_dungeon_boss_rule(world.get_entrance('Tower of Hera Boss', player)) # Castle Tower set_rule(world.get_entrance('Tower Altar NW', player), lambda state: state.has_sword(player)) @@ -452,8 +451,7 @@ def global_rules(world, player): set_rule(world.get_entrance('PoD Dark Pegs Right to Landing', player), lambda state: state.has('Hammer', player)) set_rule(world.get_entrance('PoD Turtle Party NW', player), lambda state: state.has('Hammer', player)) set_rule(world.get_entrance('PoD Turtle Party ES', 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)) + set_defeat_dungeon_boss_rule(world.get_entrance('Palace of Darkness Boss', player)) set_rule(world.get_entrance('Swamp Lobby Moat', player), lambda state: state.has('Flippers', player) and state.has('Open Floodgate', player)) set_rule(world.get_entrance('Swamp Entrance Moat', player), lambda state: state.has('Flippers', player) and state.has('Open Floodgate', player)) @@ -489,8 +487,7 @@ def global_rules(world, player): set_rule(world.get_entrance('Swamp Waterway N', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Swamp Waterway NE', player), lambda state: state.has('Flippers', player)) set_rule(world.get_location('Swamp Palace - Waterway Pot Key', player), lambda state: state.has('Flippers', player)) - set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Prize', player)) + set_defeat_dungeon_boss_rule(world.get_entrance('Swamp Palace Boss', player)) set_rule(world.get_entrance('Skull Big Chest Hookpath', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('Skull Torch Room WN', player), lambda state: state.has('Fire Rod', player)) @@ -513,8 +510,7 @@ def global_rules(world, player): set_rule(world.get_entrance('Skull 2 West Lobby Pits', player), lambda state: state.has_Boots(player) or hidden_pits_rule(state)) set_rule(world.get_entrance('Skull 2 West Lobby Ledge Pits', player), hidden_pits_rule) - set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Prize', player)) + set_defeat_dungeon_boss_rule(world.get_entrance('Skull Woods Boss', player)) # blind can't have the small key? - not necessarily true anymore - but likely still @@ -529,8 +525,7 @@ def global_rules(world, 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)) + set_defeat_dungeon_boss_rule(world.get_entrance('Thieves Town Boss', player)) set_rule(world.get_entrance('Ice Lobby WS', player), lambda state: state.can_melt_things(player)) if is_trapped('Ice Lobby SE'): @@ -556,8 +551,7 @@ def global_rules(world, player): if is_trapped('Ice Switch Room NE'): set_rule(world.get_entrance('Ice Switch Room NE', player), lambda state: state.has('Cane of Somaria', player) or state.has('Convenient Block', player)) - set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Prize', player)) + set_defeat_dungeon_boss_rule(world.get_entrance('Ice Palace Boss', player)) set_rule(world.get_entrance('Mire Lobby Gap', player), lambda state: state.has_Boots(player) or state.has('Hookshot', player)) set_rule(world.get_entrance('Mire Post-Gap Gap', player), lambda state: state.has_Boots(player) or state.has('Hookshot', player)) @@ -587,8 +581,7 @@ def global_rules(world, player): # set_rule(world.get_entrance('Mire Dark Shooters SE', player), # lambda state: state.has('Cane of Somaria', player)) - set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Boss', player)) - set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Prize', player)) + set_defeat_dungeon_boss_rule(world.get_entrance('Misery Mire Boss', player)) set_rule(world.get_entrance('TR Main Lobby Gap', player), lambda state: state.has('Cane of Somaria', player)) set_rule(world.get_entrance('TR Lobby Ledge Gap', player), lambda state: state.has('Cane of Somaria', player)) @@ -618,8 +611,7 @@ def global_rules(world, player): set_rule(world.get_location('Turtle Rock - Eye Bridge - Bottom Right', player), lambda state: state.can_avoid_lasers(player)) set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Left', player), lambda state: state.can_avoid_lasers(player)) set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Right', player), lambda state: state.can_avoid_lasers(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_defeat_dungeon_boss_rule(world.get_entrance('Turtle Rock Boss', player)) set_rule(world.get_location('Ganons Tower - Bob\'s Torch', player), lambda state: state.has_Boots(player)) set_rule(world.get_entrance('GT Hope Room EN', player), lambda state: state.has('Cane of Somaria', player))