Merge branch 'OverworldShuffleDev' into OverworldShuffle
This commit is contained in:
+5
-2
@@ -3092,7 +3092,7 @@ class Spoiler(object):
|
||||
outfile.write('Entrance Shuffle:'.ljust(line_width) + '%s\n' % self.metadata['shuffle'][player])
|
||||
if self.metadata['shuffle'][player] != 'vanilla':
|
||||
outfile.write('Shuffle GT/Ganon:'.ljust(line_width) + '%s\n' % yn(self.metadata['shuffleganon'][player]))
|
||||
outfile.write('Shuffle Links:'.ljust(line_width) + '%s\n' % yn(self.metadata['shufflelinks'][player]))
|
||||
outfile.write('Shuffle Link\'s House:'.ljust(line_width) + '%s\n' % yn(self.metadata['shufflelinks'][player]))
|
||||
outfile.write('Shuffle Tavern:'.ljust(line_width) + '%s\n' % yn(self.metadata['shuffletavern'][player]))
|
||||
outfile.write('Pyramid Hole Pre-opened:'.ljust(line_width) + '%s\n' % self.metadata['open_pyramid'][player])
|
||||
if self.metadata['shuffle'][player] != 'vanilla' or self.metadata['ow_mixed'][player]:
|
||||
@@ -3380,6 +3380,9 @@ class Pot(object):
|
||||
item = self.item if not self.indicator else self.standing_item_code
|
||||
return [self.x, high_byte, item]
|
||||
|
||||
def get_region(self, world, player):
|
||||
return world.get_region(self.room, 1)
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.x == other.x and self.y == other.y and self.room == other.room
|
||||
|
||||
@@ -3485,7 +3488,7 @@ class Settings(object):
|
||||
| (counter_mode[w.dungeon_counters[p]] << 1) | (1 if w.experimental[p] else 0),
|
||||
|
||||
((8 if w.crystals_ganon_orig[p] == "random" else int(w.crystals_ganon_orig[p])) << 3)
|
||||
| (0x4 if w.open_pyramid[p] else 0) | access_mode[w.accessibility[p]],
|
||||
| (0x4 if w.is_pyramid_open(p) else 0) | access_mode[w.accessibility[p]],
|
||||
|
||||
(0x80 if w.bigkeyshuffle[p] else 0)
|
||||
| (0x20 if w.mapshuffle[p] else 0) | (0x10 if w.compassshuffle[p] else 0)
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# Changelog
|
||||
|
||||
## 0.3.0.6
|
||||
- \~Merged in DR v1.2.0.15~
|
||||
- Fixed Tower of Hera music silence issue
|
||||
- Improved GT crystal cutscene
|
||||
- Fixed issue with bonk drop items causing duplicate sprite spawns
|
||||
- Changed bonk prizes to not mark as collected unless it is visible on screen
|
||||
|
||||
## 0.3.0.5
|
||||
- Major reorganization to GUI Options
|
||||
- Corrected various fake world behavior in glitched modes
|
||||
|
||||
+12
-12
@@ -436,7 +436,6 @@ def pair_existing_key_doors(world, player, door_a, door_b):
|
||||
|
||||
|
||||
def choose_portals(world, player):
|
||||
|
||||
if world.doorShuffle[player] != ['vanilla']:
|
||||
shuffle_flag = world.doorShuffle[player] != 'basic'
|
||||
allowed = {}
|
||||
@@ -3286,7 +3285,8 @@ def remove_pair_type_if_present(door, world, player):
|
||||
|
||||
def find_inaccessible_regions(world, player):
|
||||
world.inaccessible_regions[player] = []
|
||||
start_regions = ['Links House' if not world.is_bombshop_start(player) else 'Big Bomb Shop', 'Sanctuary' if world.mode[player] != 'inverted' else 'Dark Sanctuary Hint']
|
||||
start_regions = ['Links House' if not world.is_bombshop_start(player) else 'Big Bomb Shop']
|
||||
start_regions.append('Sanctuary' if world.mode[player] != 'inverted' else 'Dark Sanctuary Hint')
|
||||
regs = convert_regions(start_regions, world, player)
|
||||
if all(all(not e.connected_region for e in r.exits) for r in regs):
|
||||
# if attempting to find inaccessible regions before any connections made above, assume eventual access to Pyramid S&Q
|
||||
@@ -3328,9 +3328,10 @@ def find_accessible_entrances(world, player, builder):
|
||||
hc_std = True
|
||||
start_regions = ['Hyrule Castle Courtyard']
|
||||
else:
|
||||
start_regions = ['Links House' if not world.is_bombshop_start(player) else 'Big Bomb Shop', 'Sanctuary' if world.mode[player] != 'inverted' else 'Dark Sanctuary Hint']
|
||||
if world.is_tile_swapped(0x1b, player):
|
||||
start_regions.append('Hyrule Castle Ledge')
|
||||
start_regions = ['Links House' if not world.is_bombshop_start(player) else 'Big Bomb Shop']
|
||||
start_regions.append('Sanctuary' if world.mode[player] != 'inverted' else 'Dark Sanctuary Hint')
|
||||
start_regions.append('Pyramid Area' if not world.is_tile_swapped(0x1b, player) else 'Hyrule Castle Ledge')
|
||||
|
||||
regs = convert_regions(start_regions, world, player)
|
||||
visited_regions = set()
|
||||
visited_entrances = []
|
||||
@@ -3350,12 +3351,12 @@ def find_accessible_entrances(world, player, builder):
|
||||
if connect not in queue and connect not in visited_regions:
|
||||
queue.append(connect)
|
||||
for ext in next_region.exits:
|
||||
if hc_std and ext.name == 'Hyrule Castle Main Gate (North)': # just skip it
|
||||
if hc_std and ext.name in ['Hyrule Castle Main Gate (North)', 'Castle Gate Teleporter (Inner)', 'Hyrule Castle Ledge Drop']: # just skip it
|
||||
continue
|
||||
connect = ext.connected_region
|
||||
if connect is None or ext.door and ext.door.blocked:
|
||||
continue
|
||||
if world.mode[player] == 'standard' and builder.name == 'Hyrule Castle' and (ext.name.startswith('Flute From') or ext.name in ['Hyrule Castle Main Gate (North)', 'Top of Pyramid (Inner)', 'Inverted Pyramid Entrance']):
|
||||
if world.mode[player] == 'standard' and builder.name == 'Hyrule Castle' and (ext.name.startswith('Flute From') or ext.name in ['Hyrule Castle Main Gate (North)', 'Castle Gate Teleporter (Inner)', 'Inverted Pyramid Entrance']):
|
||||
continue
|
||||
if connect.name in entrances and connect not in visited_entrances:
|
||||
visited_entrances.append(connect.name)
|
||||
@@ -3388,10 +3389,7 @@ def create_doors_for_inaccessible_region(inaccessible_region, world, player):
|
||||
region = world.get_region(inaccessible_region, player)
|
||||
for ext in region.exits:
|
||||
create_door(world, player, ext.name, region.name)
|
||||
if ext.connected_region is None:
|
||||
# TODO: Since Open/Inverted regions are merged into one world model, some exits are left disconnected intentionally
|
||||
logging.getLogger('').debug('Exit not connected to any region: %s', ext.name)
|
||||
elif ext.connected_region.name.endswith(' Portal'):
|
||||
if ext.connected_region and ext.connected_region.name.endswith(' Portal'):
|
||||
for more_exts in ext.connected_region.exits:
|
||||
create_door(world, player, more_exts.name, ext.connected_region.name)
|
||||
|
||||
@@ -3401,7 +3399,7 @@ def create_door(world, player, entName, region_name):
|
||||
connect = entrance.connected_region
|
||||
if connect is not None:
|
||||
for ext in connect.exits:
|
||||
if ext.connected_region is not None and ext.connected_region.name == region_name:
|
||||
if ext.connected_region and ext.connected_region.name == region_name:
|
||||
d = Door(player, ext.name, DoorType.Logical, ext),
|
||||
world.doors += d
|
||||
connect_door_only(world, ext.name, ext.connected_region, player)
|
||||
@@ -3814,6 +3812,8 @@ logical_connections = [
|
||||
('GT Blocked Stairs Block Path', 'GT Big Chest'),
|
||||
('GT Speed Torch South Path', 'GT Speed Torch'),
|
||||
('GT Speed Torch North Path', 'GT Speed Torch Upper'),
|
||||
('GT Conveyor Cross Hammer Path', 'GT Conveyor Cross Across Pits'),
|
||||
('GT Conveyor Cross Hookshot Path', 'GT Conveyor Cross'),
|
||||
('GT Hookshot East-Mid Path', 'GT Hookshot Mid Platform'),
|
||||
('GT Hookshot Mid-East Path', 'GT Hookshot East Platform'),
|
||||
('GT Hookshot North-Mid Path', 'GT Hookshot Mid Platform'),
|
||||
|
||||
@@ -1115,6 +1115,8 @@ def create_doors(world, player):
|
||||
create_door(player, 'GT Invisible Catwalk NE', Nrml).dir(No, 0x9c, Right, High).pos(2),
|
||||
create_door(player, 'GT Conveyor Cross EN', Nrml).dir(Ea, 0x8b, Top, High).pos(2),
|
||||
create_door(player, 'GT Conveyor Cross WN', Intr).dir(We, 0x8b, Top, High).pos(0),
|
||||
create_door(player, 'GT Conveyor Cross Hammer Path', Lgcl),
|
||||
create_door(player, 'GT Conveyor Cross Hookshot Path', Lgcl),
|
||||
create_door(player, 'GT Hookshot EN', Intr).dir(Ea, 0x8b, Top, High).pos(0),
|
||||
create_door(player, 'GT Hookshot East-Mid Path', Lgcl),
|
||||
create_door(player, 'GT Hookshot Mid-East Path', Lgcl),
|
||||
|
||||
+8
-6
@@ -190,10 +190,11 @@ gt_regions = [
|
||||
'GT Tile Room', 'GT Speed Torch', 'GT Speed Torch Upper', 'GT Pots n Blocks', 'GT Crystal Conveyor',
|
||||
'GT Crystal Conveyor Corner', 'GT Crystal Conveyor Left', 'GT Crystal Conveyor - Ranged Crystal',
|
||||
'GT Crystal Conveyor Corner - Ranged Crystal', 'GT Compass Room', 'GT Invisible Bridges', 'GT Invisible Catwalk',
|
||||
'GT Conveyor Cross', 'GT Hookshot East Platform', 'GT Hookshot Mid Platform', 'GT Hookshot North Platform',
|
||||
'GT Hookshot South Platform', 'GT Hookshot South Entry', 'GT Hookshot South Entry - Ranged Crystal', 'GT Map Room',
|
||||
'GT Double Switch Entry', 'GT Double Switch Pot Corners - Ranged Switches', 'GT Double Switch Pot Corners',
|
||||
'GT Double Switch Left', 'GT Double Switch Left - Crystal', 'GT Double Switch Entry - Ranged Switches',
|
||||
'GT Conveyor Cross', 'GT Conveyor Cross Across Pits', 'GT Hookshot East Platform', 'GT Hookshot Mid Platform',
|
||||
'GT Hookshot North Platform', 'GT Hookshot South Platform', 'GT Hookshot South Entry',
|
||||
'GT Hookshot South Entry - Ranged Crystal', 'GT Map Room', 'GT Double Switch Entry',
|
||||
'GT Double Switch Pot Corners - Ranged Switches', 'GT Double Switch Pot Corners', 'GT Double Switch Left',
|
||||
'GT Double Switch Left - Crystal', 'GT Double Switch Entry - Ranged Switches',
|
||||
'GT Double Switch Exit', 'GT Spike Crystal Left',
|
||||
'GT Spike Crystal Right', 'GT Warp Maze - Left Section', 'GT Warp Maze - Mid Section',
|
||||
'GT Warp Maze - Right Section', 'GT Warp Maze - Pit Section', 'GT Warp Maze - Pit Exit Warp Spot',
|
||||
@@ -204,8 +205,9 @@ gt_regions = [
|
||||
'GT Dash Hall', 'GT Hidden Spikes', 'GT Cannonball Bridge', 'GT Refill', 'GT Gauntlet 1', 'GT Gauntlet 2',
|
||||
'GT Gauntlet 3', 'GT Gauntlet 4', 'GT Gauntlet 5', 'GT Beam Dash', 'GT Lanmolas 2', 'GT Quad Pot', 'GT Wizzrobes 1',
|
||||
'GT Dashing Bridge', 'GT Wizzrobes 2', 'GT Conveyor Bridge', 'GT Torch Cross', 'GT Staredown', 'GT Falling Torches',
|
||||
'GT Mini Helmasaur Room', 'GT Bomb Conveyor', 'GT Crystal Circles', 'GT Crystal Inner Circle', 'GT Crystal Circles - Ranged Crystal',
|
||||
'GT Left Moldorm Ledge', 'GT Right Moldorm Ledge', 'GT Moldorm', 'GT Moldorm Pit', 'GT Validation', 'GT Validation Door',
|
||||
'GT Mini Helmasaur Room', 'GT Bomb Conveyor', 'GT Crystal Circles', 'GT Crystal Inner Circle',
|
||||
'GT Crystal Circles - Ranged Crystal', 'GT Left Moldorm Ledge', 'GT Right Moldorm Ledge', 'GT Moldorm',
|
||||
'GT Moldorm Pit', 'GT Validation', 'GT Validation Door',
|
||||
'GT Frozen Over', 'GT Brightly Lit Hall', 'GT Agahnim 2', 'Ganons Tower Portal'
|
||||
]
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ Ice Palace: Ice Palace
|
||||
Skull Woods Final Section: The back of Skull Woods
|
||||
Death Mountain Return Cave (West): The SW DM Foothills Cave
|
||||
Mimic Cave: Mimic Ledge
|
||||
Dark World Hammer Peg Cave: The rows of pegs
|
||||
Hammer Peg Cave: The rows of pegs
|
||||
Pyramid Fairy: The crack on the pyramid
|
||||
Eastern Palace: Eastern Palace
|
||||
Elder House (East): Elder House
|
||||
@@ -145,7 +145,7 @@ Chicken House: The chicken lady's house
|
||||
Tavern North: A backdoor
|
||||
Aginahs Cave: The open desert cave
|
||||
Sahasrahlas Hut: The house near armos
|
||||
Cave Shop (Lake Hylia): The cave NW Lake Hylia
|
||||
Lake Hylia Shop: The cave NW Lake Hylia
|
||||
Blacksmiths Hut: The old smithery
|
||||
Sick Kids House: The central house in Kakariko
|
||||
Lost Woods Gamble: A tree trunk door
|
||||
@@ -188,19 +188,19 @@ Dark World Shop: The hammer sealed building
|
||||
Red Shield Shop: The fenced in building
|
||||
Mire Shed: The western hut in the mire
|
||||
East Dark World Hint: The dark cave near the eastmost portal
|
||||
Dark Desert Hint: The cave east of the mire
|
||||
Mire Hint: The cave east of the mire
|
||||
Spike Cave: The ledge cave on west dark DM
|
||||
Palace of Darkness Hint: The building south of Kiki
|
||||
Dark Lake Hylia Ledge Spike Cave: The rock SE dark Lake Hylia
|
||||
Cave Shop (Dark Death Mountain): The base of east dark DM
|
||||
Dark World Potion Shop: The building near the catfish
|
||||
Dark Death Mountain Shop: The base of east dark DM
|
||||
Dark Potion Shop: The building near the catfish
|
||||
Archery Game: The old archery game
|
||||
Dark World Lumberjack Shop: The northmost Dark World building
|
||||
Dark Lumberjack Shop: The northmost Dark World building
|
||||
Hype Cave: The cave south of the old bomb shop
|
||||
Brewery: The Village of Outcasts building with no door
|
||||
Dark Lake Hylia Ledge Hint: The open cave SE dark Lake Hylia
|
||||
Chest Game: The westmost building in the Village of Outcasts
|
||||
Dark Desert Fairy: The eastern hut in the mire
|
||||
Mire Fairy: The eastern hut in the mire
|
||||
Dark Lake Hylia Ledge Fairy: The sealed cave SE dark Lake Hylia
|
||||
Fortune Teller (Dark): The building NE the Village of Outcasts
|
||||
Sanctuary: Sanctuary
|
||||
|
||||
+47
-47
@@ -671,7 +671,7 @@ def link_entrances(world, player):
|
||||
world.ganon_at_pyramid[player] = False
|
||||
|
||||
# check for Ganon's Tower location
|
||||
if world.get_entrance('Ganons Tower' if not world.is_atgt_swapped(player) else 'Agahnims Tower', player).connected_region.name != 'Ganons Tower Portal' if not invFlag else 'GT Lobby':
|
||||
if world.get_entrance('Ganons Tower' if not world.is_atgt_swapped(player) else 'Agahnims Tower', player).connected_region.name != 'Ganons Tower Portal':
|
||||
world.ganonstower_vanilla[player] = False
|
||||
|
||||
|
||||
@@ -1943,7 +1943,7 @@ Entrance_Pool_Base = ['Links House',
|
||||
'Desert Fairy',
|
||||
'Dark Lake Hylia Fairy',
|
||||
'Dark Lake Hylia Ledge Fairy',
|
||||
'Dark Desert Fairy',
|
||||
'Mire Fairy',
|
||||
'Dark Death Mountain Fairy',
|
||||
'Fortune Teller (Light)',
|
||||
'Lake Hylia Fortune Teller',
|
||||
@@ -1951,8 +1951,8 @@ Entrance_Pool_Base = ['Links House',
|
||||
'Chicken House',
|
||||
'Aginahs Cave',
|
||||
'Sahasrahlas Hut',
|
||||
'Cave Shop (Lake Hylia)',
|
||||
'Cave Shop (Dark Death Mountain)',
|
||||
'Lake Hylia Shop',
|
||||
'Dark Death Mountain Shop',
|
||||
'Capacity Upgrade',
|
||||
'Blacksmiths Hut',
|
||||
'Sick Kids House',
|
||||
@@ -1983,21 +1983,21 @@ Entrance_Pool_Base = ['Links House',
|
||||
'Big Bomb Shop',
|
||||
'Dark World Shop',
|
||||
'Dark Lake Hylia Shop',
|
||||
'Dark World Lumberjack Shop',
|
||||
'Dark World Potion Shop',
|
||||
'Dark Lumberjack Shop',
|
||||
'Dark Potion Shop',
|
||||
'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Dark Lake Hylia Ledge Hint',
|
||||
'Hype Cave',
|
||||
'Brewery',
|
||||
'C-Shaped House',
|
||||
'Chest Game',
|
||||
'Dark World Hammer Peg Cave',
|
||||
'Hammer Peg Cave',
|
||||
'Red Shield Shop',
|
||||
'Dark Sanctuary Hint',
|
||||
'Fortune Teller (Dark)',
|
||||
'Archery Game',
|
||||
'Mire Shed',
|
||||
'Dark Desert Hint',
|
||||
'Mire Hint',
|
||||
'Spike Cave',
|
||||
'Mimic Cave',
|
||||
'Kakariko Well Drop',
|
||||
@@ -2079,11 +2079,11 @@ Exit_Pool_Base = ['Links House Exit',
|
||||
'Bonk Fairy (Light)',
|
||||
'Bonk Fairy (Dark)',
|
||||
'Lake Hylia Healer Fairy',
|
||||
'Swamp Healer Fairy',
|
||||
'Light Hype Fairy',
|
||||
'Desert Healer Fairy',
|
||||
'Dark Lake Hylia Healer Fairy',
|
||||
'Dark Lake Hylia Ledge Healer Fairy',
|
||||
'Dark Desert Healer Fairy',
|
||||
'Mire Healer Fairy',
|
||||
'Dark Death Mountain Healer Fairy',
|
||||
'Fortune Teller (Light)',
|
||||
'Lake Hylia Fortune Teller',
|
||||
@@ -2091,8 +2091,8 @@ Exit_Pool_Base = ['Links House Exit',
|
||||
'Chicken House',
|
||||
'Aginahs Cave',
|
||||
'Sahasrahlas Hut',
|
||||
'Cave Shop (Lake Hylia)',
|
||||
'Cave Shop (Dark Death Mountain)',
|
||||
'Lake Hylia Shop',
|
||||
'Dark Death Mountain Shop',
|
||||
'Capacity Upgrade',
|
||||
'Blacksmiths Hut',
|
||||
'Sick Kids House',
|
||||
@@ -2123,21 +2123,21 @@ Exit_Pool_Base = ['Links House Exit',
|
||||
'Big Bomb Shop',
|
||||
'Village of Outcasts Shop',
|
||||
'Dark Lake Hylia Shop',
|
||||
'Dark World Lumberjack Shop',
|
||||
'Dark World Potion Shop',
|
||||
'Dark Lumberjack Shop',
|
||||
'Dark Potion Shop',
|
||||
'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Dark Lake Hylia Ledge Hint',
|
||||
'Hype Cave',
|
||||
'Brewery',
|
||||
'C-Shaped House',
|
||||
'Chest Game',
|
||||
'Dark World Hammer Peg Cave',
|
||||
'Hammer Peg Cave',
|
||||
'Red Shield Shop',
|
||||
'Dark Sanctuary Hint',
|
||||
'Fortune Teller (Dark)',
|
||||
'Archery Game',
|
||||
'Mire Shed',
|
||||
'Dark Desert Hint',
|
||||
'Mire Hint',
|
||||
'Spike Cave',
|
||||
'Mimic Cave',
|
||||
'Kakariko Well (top)',
|
||||
@@ -2170,7 +2170,7 @@ mandatory_connections = [('Lost Woods Hideout (top to bottom)', 'Lost Woods Hide
|
||||
('Death Mountain Return Cave E', 'Death Mountain Return Cave (right)'),
|
||||
('Death Mountain Return Cave W', 'Death Mountain Return Cave (left)'),
|
||||
('Spiral Cave (top to bottom)', 'Spiral Cave (Bottom)'),
|
||||
('Light World Death Mountain Shop', 'Light World Death Mountain Shop'),
|
||||
('Paradox Shop', 'Paradox Shop'),
|
||||
('Paradox Cave Push Block Reverse', 'Paradox Cave Chest Area'),
|
||||
('Paradox Cave Push Block', 'Paradox Cave Front'),
|
||||
('Paradox Cave Chest Area NE', 'Paradox Cave Bomb Area'),
|
||||
@@ -2209,10 +2209,10 @@ default_connections = [('Bonk Fairy (Light)', 'Bonk Fairy (Light)'),
|
||||
('Dark Sanctuary Hint', 'Dark Sanctuary Hint'),
|
||||
('Fortune Teller (Dark)', 'Fortune Teller (Dark)'),
|
||||
('Archery Game', 'Archery Game'),
|
||||
('Dark Desert Fairy', 'Dark Desert Healer Fairy')
|
||||
('Mire Fairy', 'Mire Healer Fairy')
|
||||
]
|
||||
|
||||
default_takeany_connections = [('Light Hype Fairy', 'Swamp Healer Fairy'),
|
||||
default_takeany_connections = [('Light Hype Fairy', 'Light Hype Fairy'),
|
||||
('Desert Fairy', 'Desert Healer Fairy'),
|
||||
('Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Healer Fairy'),
|
||||
('Bonk Fairy (Dark)', 'Bonk Fairy (Dark)'),
|
||||
@@ -2229,7 +2229,7 @@ default_pot_connections = [('Lumberjack House', 'Lumberjack House'),
|
||||
('Hookshot Fairy', 'Hookshot Fairy'),
|
||||
('Palace of Darkness Hint', 'Palace of Darkness Hint'),
|
||||
('Dark Lake Hylia Ledge Spike Cave', 'Dark Lake Hylia Ledge Spike Cave'),
|
||||
('Dark Desert Hint', 'Dark Desert Hint')
|
||||
('Mire Hint', 'Mire Hint')
|
||||
]
|
||||
|
||||
default_connector_connections = [('Old Man Cave (West)', 'Old Man Cave Exit (West)'),
|
||||
@@ -2284,18 +2284,18 @@ default_item_connections = [('Links House', 'Links House Exit'),
|
||||
('C-Shaped House', 'C-Shaped House'),
|
||||
('Brewery', 'Brewery'),
|
||||
('Pyramid Fairy', 'Pyramid Fairy'),
|
||||
('Dark World Hammer Peg Cave', 'Dark World Hammer Peg Cave'),
|
||||
('Hammer Peg Cave', 'Hammer Peg Cave'),
|
||||
('Big Bomb Shop', 'Big Bomb Shop'),
|
||||
('Mire Shed', 'Mire Shed'),
|
||||
('Hype Cave', 'Hype Cave')
|
||||
]
|
||||
|
||||
default_shop_connections = [('Kakariko Shop', 'Kakariko Shop'),
|
||||
('Cave Shop (Lake Hylia)', 'Cave Shop (Lake Hylia)'),
|
||||
('Lake Hylia Shop', 'Lake Hylia Shop'),
|
||||
('Capacity Upgrade', 'Capacity Upgrade'),
|
||||
('Dark World Lumberjack Shop', 'Dark World Lumberjack Shop'),
|
||||
('Cave Shop (Dark Death Mountain)', 'Cave Shop (Dark Death Mountain)'),
|
||||
('Dark World Potion Shop', 'Dark World Potion Shop'),
|
||||
('Dark Lumberjack Shop', 'Dark Lumberjack Shop'),
|
||||
('Dark Death Mountain Shop', 'Dark Death Mountain Shop'),
|
||||
('Dark Potion Shop', 'Dark Potion Shop'),
|
||||
('Dark World Shop', 'Village of Outcasts Shop'),
|
||||
('Red Shield Shop', 'Red Shield Shop'),
|
||||
('Dark Lake Hylia Shop', 'Dark Lake Hylia Shop')
|
||||
@@ -2449,7 +2449,7 @@ door_addresses = {'Links House': (0x00, (0x0104, 0x2c
|
||||
'Chicken House': (0x4A, (0x0108, 0x18, 0x1120, 0x0837, 0x0106, 0x0888, 0x0188, 0x08a4, 0x0193, 0x07, 0xf9, 0x1530, 0x0000), 0x00),
|
||||
'Aginahs Cave': (0x70, (0x010a, 0x30, 0x0656, 0x0cc6, 0x02aa, 0x0d18, 0x0328, 0x0d33, 0x032f, 0x08, 0xf8, 0x0000, 0x0000), 0x00),
|
||||
'Sahasrahlas Hut': (0x44, (0x0105, 0x1e, 0x0610, 0x06d4, 0x0c76, 0x0727, 0x0cf0, 0x0743, 0x0cfb, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Cave Shop (Lake Hylia)': (0x57, (0x0112, 0x35, 0x0022, 0x0c00, 0x0b1a, 0x0c26, 0x0b98, 0x0c6d, 0x0b9f, 0x00, 0x00, 0x0000, 0x0000), 0x00),
|
||||
'Lake Hylia Shop': (0x57, (0x0112, 0x35, 0x0022, 0x0c00, 0x0b1a, 0x0c26, 0x0b98, 0x0c6d, 0x0b9f, 0x00, 0x00, 0x0000, 0x0000), 0x00),
|
||||
'Capacity Upgrade': (0x5C, (0x0115, 0x35, 0x0a46, 0x0d36, 0x0c2a, 0x0d88, 0x0ca8, 0x0da3, 0x0caf, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Kakariko Well Drop': ([0xDB85C, 0xDB85D], None),
|
||||
'Blacksmiths Hut': (0x63, (0x0121, 0x22, 0x010c, 0x081a, 0x0466, 0x0868, 0x04d8, 0x0887, 0x04e3, 0x06, 0xfa, 0x041A, 0x0000), 0x00),
|
||||
@@ -2492,19 +2492,19 @@ door_addresses = {'Links House': (0x00, (0x0104, 0x2c
|
||||
'Brewery': (0x47, (0x0106, 0x58, 0x16a8, 0x08e4, 0x013e, 0x0938, 0x01b8, 0x0953, 0x01c3, 0x0a, 0xf6, 0x1AB6, 0x0000), 0x02),
|
||||
'C-Shaped House': (0x53, (0x011c, 0x58, 0x09d8, 0x0744, 0x02ce, 0x0797, 0x0348, 0x07b3, 0x0353, 0x0a, 0xf6, 0x0DE8, 0x0000), 0x00),
|
||||
'Chest Game': (0x46, (0x0106, 0x58, 0x078a, 0x0705, 0x004e, 0x0758, 0x00c8, 0x0774, 0x00d3, 0x09, 0xf7, 0x0B98, 0x0000), 0x00),
|
||||
'Dark World Hammer Peg Cave': (0x7E, (0x0127, 0x62, 0x0894, 0x091e, 0x0492, 0x09a6, 0x0508, 0x098b, 0x050f, 0x00, 0x00, 0x0000, 0x0000), 0x20),
|
||||
'Hammer Peg Cave': (0x7E, (0x0127, 0x62, 0x0894, 0x091e, 0x0492, 0x09a6, 0x0508, 0x098b, 0x050f, 0x00, 0x00, 0x0000, 0x0000), 0x20),
|
||||
'Red Shield Shop': (0x74, (0x0110, 0x5a, 0x079a, 0x06e8, 0x04d6, 0x0738, 0x0548, 0x0755, 0x0553, 0x08, 0xf8, 0x0AA8, 0x0000), 0x00),
|
||||
'Dark Sanctuary Hint': (0x59, (0x0112, 0x53, 0x001e, 0x0400, 0x06e2, 0x0446, 0x0758, 0x046d, 0x075f, 0x00, 0x00, 0x0000, 0x0000), 0x00),
|
||||
'Fortune Teller (Dark)': (0x65, (0x0122, 0x51, 0x0610, 0x04b4, 0x027e, 0x0507, 0x02f8, 0x0523, 0x0303, 0x0a, 0xf6, 0x091E, 0x0000), 0x00),
|
||||
'Dark World Shop': (0x5F, (0x010f, 0x58, 0x1058, 0x0814, 0x02be, 0x0868, 0x0338, 0x0883, 0x0343, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Dark World Lumberjack Shop': (0x56, (0x010f, 0x42, 0x041c, 0x0074, 0x04e2, 0x00c7, 0x0558, 0x00e3, 0x055f, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Dark World Potion Shop': (0x6E, (0x010f, 0x56, 0x080e, 0x04f4, 0x0c66, 0x0548, 0x0cd8, 0x0563, 0x0ce3, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Dark Lumberjack Shop': (0x56, (0x010f, 0x42, 0x041c, 0x0074, 0x04e2, 0x00c7, 0x0558, 0x00e3, 0x055f, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Dark Potion Shop': (0x6E, (0x010f, 0x56, 0x080e, 0x04f4, 0x0c66, 0x0548, 0x0cd8, 0x0563, 0x0ce3, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Archery Game': (0x58, (0x0111, 0x69, 0x069e, 0x0ac4, 0x02ea, 0x0b18, 0x0368, 0x0b33, 0x036f, 0x0a, 0xf6, 0x09AC, 0x0000), 0x00),
|
||||
'Mire Shed': (0x5E, (0x010d, 0x70, 0x0384, 0x0c69, 0x001e, 0x0cb6, 0x0098, 0x0cd6, 0x00a3, 0x07, 0xf9, 0x0000, 0x0000), 0x00),
|
||||
'Dark Desert Hint': (0x61, (0x0114, 0x70, 0x0654, 0x0cc5, 0x02aa, 0x0d16, 0x0328, 0x0d32, 0x032f, 0x09, 0xf7, 0x0000, 0x0000), 0x00),
|
||||
'Dark Desert Fairy': (0x55, (0x0115, 0x70, 0x03a8, 0x0c6a, 0x013a, 0x0cb7, 0x01b8, 0x0cd7, 0x01bf, 0x06, 0xfa, 0x0000, 0x0000), 0x00),
|
||||
'Mire Hint': (0x61, (0x0114, 0x70, 0x0654, 0x0cc5, 0x02aa, 0x0d16, 0x0328, 0x0d32, 0x032f, 0x09, 0xf7, 0x0000, 0x0000), 0x00),
|
||||
'Mire Fairy': (0x55, (0x0115, 0x70, 0x03a8, 0x0c6a, 0x013a, 0x0cb7, 0x01b8, 0x0cd7, 0x01bf, 0x06, 0xfa, 0x0000, 0x0000), 0x00),
|
||||
'Spike Cave': (0x40, (0x0117, 0x43, 0x0ed4, 0x01e4, 0x08aa, 0x0236, 0x0928, 0x0253, 0x092f, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Cave Shop (Dark Death Mountain)': (0x6D, (0x0112, 0x45, 0x0ee0, 0x01e3, 0x0d00, 0x0236, 0x0daa, 0x0252, 0x0d7d, 0x0b, 0xf5, 0x0000, 0x0000), 0x00),
|
||||
'Dark Death Mountain Shop': (0x6D, (0x0112, 0x45, 0x0ee0, 0x01e3, 0x0d00, 0x0236, 0x0daa, 0x0252, 0x0d7d, 0x0b, 0xf5, 0x0000, 0x0000), 0x00),
|
||||
'Dark Death Mountain Fairy': (0x6F, (0x0115, 0x43, 0x1400, 0x0294, 0x0600, 0x02e8, 0x0678, 0x0303, 0x0685, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Mimic Cave': (0x4E, (0x010c, 0x05, 0x07e0, 0x0103, 0x0d00, 0x0156, 0x0d78, 0x0172, 0x0d7d, 0x0b, 0xf5, 0x0000, 0x0000), 0x00),
|
||||
'Big Bomb Shop': (0x52, (0x011c, 0x6c, 0x0506, 0x0a9a, 0x0832, 0x0ae7, 0x08b8, 0x0b07, 0x08bf, 0x06, 0xfa, 0x0816, 0x0000), 0x00),
|
||||
@@ -2584,11 +2584,11 @@ exit_ids = {'Links House Exit': (0x01, 0x00),
|
||||
'Bonk Fairy (Light)': 0x71,
|
||||
'Bonk Fairy (Dark)': 0x71,
|
||||
'Lake Hylia Healer Fairy': 0x5E,
|
||||
'Swamp Healer Fairy': 0x5E,
|
||||
'Light Hype Fairy': 0x5E,
|
||||
'Desert Healer Fairy': 0x5E,
|
||||
'Dark Lake Hylia Healer Fairy': 0x5E,
|
||||
'Dark Lake Hylia Ledge Healer Fairy': 0x5E,
|
||||
'Dark Desert Healer Fairy': 0x5E,
|
||||
'Mire Healer Fairy': 0x5E,
|
||||
'Dark Death Mountain Healer Fairy': 0x5E,
|
||||
'Fortune Teller (Light)': 0x65,
|
||||
'Lake Hylia Fortune Teller': 0x65,
|
||||
@@ -2597,8 +2597,8 @@ exit_ids = {'Links House Exit': (0x01, 0x00),
|
||||
'Chicken House': 0x4B,
|
||||
'Aginahs Cave': 0x4D,
|
||||
'Sahasrahlas Hut': 0x45,
|
||||
'Cave Shop (Lake Hylia)': 0x58,
|
||||
'Cave Shop (Dark Death Mountain)': 0x58,
|
||||
'Lake Hylia Shop': 0x58,
|
||||
'Dark Death Mountain Shop': 0x58,
|
||||
'Capacity Upgrade': 0x5D,
|
||||
'Blacksmiths Hut': 0x64,
|
||||
'Sick Kids House': 0x40,
|
||||
@@ -2629,21 +2629,21 @@ exit_ids = {'Links House Exit': (0x01, 0x00),
|
||||
'Big Bomb Shop': 0x53,
|
||||
'Village of Outcasts Shop': 0x60,
|
||||
'Dark Lake Hylia Shop': 0x60,
|
||||
'Dark World Lumberjack Shop': 0x60,
|
||||
'Dark World Potion Shop': 0x60,
|
||||
'Dark Lumberjack Shop': 0x60,
|
||||
'Dark Potion Shop': 0x60,
|
||||
'Dark Lake Hylia Ledge Spike Cave': 0x70,
|
||||
'Dark Lake Hylia Ledge Hint': 0x6A,
|
||||
'Hype Cave': 0x3D,
|
||||
'Brewery': 0x48,
|
||||
'C-Shaped House': 0x54,
|
||||
'Chest Game': 0x47,
|
||||
'Dark World Hammer Peg Cave': 0x83,
|
||||
'Hammer Peg Cave': 0x83,
|
||||
'Red Shield Shop': 0x57,
|
||||
'Dark Sanctuary Hint': 0x5A,
|
||||
'Fortune Teller (Dark)': 0x66,
|
||||
'Archery Game': 0x59,
|
||||
'Mire Shed': 0x5F,
|
||||
'Dark Desert Hint': 0x62,
|
||||
'Mire Hint': 0x62,
|
||||
'Spike Cave': 0x41,
|
||||
'Mimic Cave': 0x4F,
|
||||
'Kakariko Well (top)': 0x80,
|
||||
@@ -2730,7 +2730,7 @@ ow_prize_table = {'Links House': (0x8b1, 0xb2d),
|
||||
'Chicken House': (0x120, 0x880),
|
||||
'Aginahs Cave': (0x2e0, 0xd00),
|
||||
'Sahasrahlas Hut': (0xcf0, 0x6c0),
|
||||
'Cave Shop (Lake Hylia)': (0xbc0, 0xc00),
|
||||
'Lake Hylia Shop': (0xbc0, 0xc00),
|
||||
'Capacity Upgrade': (0xca0, 0xda0),
|
||||
'Kakariko Well Drop': None,
|
||||
'Blacksmiths Hut': (0x4a0, 0x880),
|
||||
@@ -2770,19 +2770,19 @@ ow_prize_table = {'Links House': (0x8b1, 0xb2d),
|
||||
'Hype Cave': (0x940, 0xc80),
|
||||
'Bonk Fairy (Dark)': (0x740, 0xa80),
|
||||
'Brewery': (0x170, 0x980), 'C-Shaped House': (0x310, 0x7a0), 'Chest Game': (0x800, 0x7a0),
|
||||
'Dark World Hammer Peg Cave': (0x4c0, 0x940),
|
||||
'Hammer Peg Cave': (0x4c0, 0x940),
|
||||
'Red Shield Shop': (0x500, 0x680),
|
||||
'Dark Sanctuary Hint': (0x720, 0x4a0),
|
||||
'Fortune Teller (Dark)': (0x2c0, 0x4c0),
|
||||
'Dark World Shop': (0x2e0, 0x880),
|
||||
'Dark World Lumberjack Shop': (0x4e0, 0x0d0),
|
||||
'Dark World Potion Shop': (0xc80, 0x4c0),
|
||||
'Dark Lumberjack Shop': (0x4e0, 0x0d0),
|
||||
'Dark Potion Shop': (0xc80, 0x4c0),
|
||||
'Archery Game': (0x2f0, 0xaf0),
|
||||
'Mire Shed': (0x060, 0xc90),
|
||||
'Dark Desert Hint': (0x2e0, 0xd00),
|
||||
'Dark Desert Fairy': (0x1c0, 0xc90),
|
||||
'Mire Hint': (0x2e0, 0xd00),
|
||||
'Mire Fairy': (0x1c0, 0xc90),
|
||||
'Spike Cave': (0x860, 0x180),
|
||||
'Cave Shop (Dark Death Mountain)': (0xd80, 0x180),
|
||||
'Dark Death Mountain Shop': (0xd80, 0x180),
|
||||
'Dark Death Mountain Fairy': (0x620, 0x2c0),
|
||||
'Mimic Cave': (0xc80, 0x180),
|
||||
'Big Bomb Shop': (0x8b1, 0xb2d),
|
||||
|
||||
+6
-9
@@ -494,15 +494,15 @@ def generate_itempool(world, player):
|
||||
take_any_locations = [
|
||||
'Snitch Lady (East)', 'Snitch Lady (West)', 'Bush Covered House', 'Light World Bomb Hut',
|
||||
'Fortune Teller (Light)', 'Lake Hylia Fortune Teller', 'Lumberjack House', 'Bonk Fairy (Light)',
|
||||
'Bonk Fairy (Dark)', 'Lake Hylia Healer Fairy', 'Swamp Healer Fairy', 'Desert Healer Fairy',
|
||||
'Dark Lake Hylia Healer Fairy', 'Dark Lake Hylia Ledge Healer Fairy', 'Dark Desert Healer Fairy',
|
||||
'Bonk Fairy (Dark)', 'Lake Hylia Healer Fairy', 'Light Hype Fairy', 'Desert Healer Fairy',
|
||||
'Dark Lake Hylia Healer Fairy', 'Dark Lake Hylia Ledge Healer Fairy', 'Mire Healer Fairy',
|
||||
'Dark Death Mountain Healer Fairy', 'Long Fairy Cave', 'Good Bee Cave', '20 Rupee Cave',
|
||||
'Kakariko Gamble Game', '50 Rupee Cave', 'Lost Woods Gamble', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'East Dark World Hint', 'Archery Game', 'Dark Lake Hylia Ledge Hint',
|
||||
'Dark Lake Hylia Ledge Spike Cave', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint', 'Dark Desert Hint']
|
||||
'Dark Lake Hylia Ledge Spike Cave', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint', 'Mire Hint']
|
||||
|
||||
fixed_take_anys = [
|
||||
'Desert Healer Fairy', 'Swamp Healer Fairy', 'Dark Death Mountain Healer Fairy',
|
||||
'Desert Healer Fairy', 'Light Hype Fairy', 'Dark Death Mountain Healer Fairy',
|
||||
'Dark Lake Hylia Ledge Healer Fairy', 'Bonk Fairy (Dark)']
|
||||
|
||||
|
||||
@@ -966,7 +966,7 @@ def balance_prices(world, player):
|
||||
def check_hints(world, player):
|
||||
if world.shuffle[player] in ['simple', 'restricted', 'full', 'lite', 'lean', 'crossed', 'insanity']:
|
||||
for shop, location_list in shop_to_location_table.items():
|
||||
if shop in ['Capacity Upgrade', 'Light World Death Mountain Shop', 'Potion Shop']:
|
||||
if shop in ['Capacity Upgrade', 'Paradox Shop', 'Potion Shop']:
|
||||
continue # near the queen, near potions, and near 7 chests are fine
|
||||
for loc_name in location_list: # other shops are indistinguishable in ER
|
||||
world.get_location(loc_name, player).hint_text = f'for sale'
|
||||
@@ -1144,10 +1144,7 @@ def get_pool_core(world, player, progressive, shuffle, difficulty, treasure_hunt
|
||||
if world.keyshuffle[player] == 'universal':
|
||||
pool.extend(diff.retro)
|
||||
if door_shuffle != 'vanilla': # door shuffle needs more keys for universal keys
|
||||
replace = 'Rupees (20)' if difficulty == 'normal' else 'Rupees (5)'
|
||||
indices = [i for i, x in enumerate(pool) if x == replace]
|
||||
for i in range(0, min(10, len(indices))):
|
||||
pool[indices[i]] = 'Small Key (Universal)'
|
||||
pool.extend(['Small Key (Universal)'] * 5) # reduce to 5 for now
|
||||
if mode == 'standard':
|
||||
if door_shuffle == 'vanilla':
|
||||
key_location = random.choice(['Secret Passage', 'Hyrule Castle - Boomerang Chest', 'Hyrule Castle - Map Chest', 'Hyrule Castle - Zelda\'s Chest', 'Sewers - Dark Cross'])
|
||||
|
||||
+1
-1
@@ -1421,7 +1421,7 @@ def prize_relevance(key_layout, dungeon_entrance, is_atgt_swapped):
|
||||
|
||||
def prize_relevance_sig2(start_regions, d_name, dungeon_entrance, is_atgt_swapped):
|
||||
if len(start_regions) > 1 and dungeon_entrance and dungeon_table[d_name].prize:
|
||||
if dungeon_entrance.name == ('Agahmins Tower' if is_atgt_swapped else 'Ganons Tower'):
|
||||
if dungeon_entrance.name == ('Agahnims Tower' if is_atgt_swapped else 'Ganons Tower'):
|
||||
return 'GT'
|
||||
elif dungeon_entrance.name == 'Pyramid Fairy':
|
||||
return 'BigBomb'
|
||||
|
||||
@@ -36,7 +36,7 @@ from source.overworld.EntranceShuffle2 import link_entrances_new
|
||||
from source.tools.BPS import create_bps_from_data
|
||||
from source.classes.CustomSettings import CustomSettings
|
||||
|
||||
version_number = '1.2.0.14'
|
||||
version_number = '1.2.0.15'
|
||||
version_branch = '-u'
|
||||
__version__ = f'{version_number}{version_branch}'
|
||||
|
||||
@@ -267,6 +267,7 @@ def main(args, seed=None, fish=None):
|
||||
set_rules(world, player)
|
||||
|
||||
district_item_pool_config(world)
|
||||
dungeon_tracking(world)
|
||||
fill_specific_items(world)
|
||||
for player in range(1, world.players + 1):
|
||||
if world.shopsanity[player]:
|
||||
@@ -279,7 +280,6 @@ def main(args, seed=None, fish=None):
|
||||
massage_item_pool(world)
|
||||
if args.print_custom_yaml:
|
||||
world.settings.record_item_pool(world)
|
||||
dungeon_tracking(world)
|
||||
logger.info(world.fish.translate("cli", "cli", "placing.dungeon.prizes"))
|
||||
|
||||
fill_prizes(world)
|
||||
|
||||
+2
-2
@@ -1707,8 +1707,8 @@ OWExitTypes = {
|
||||
'East Death Mountain Teleporter',
|
||||
'TR Pegs Teleporter',
|
||||
'Kakariko Teleporter',
|
||||
'Top of Pyramid',
|
||||
'Top of Pyramid (Inner)',
|
||||
'Castle Gate Teleporter',
|
||||
'Castle Gate Teleporter (Inner)',
|
||||
'East Hyrule Teleporter',
|
||||
'Desert Teleporter',
|
||||
'South Hyrule Teleporter',
|
||||
|
||||
@@ -37,7 +37,7 @@ def get_invalid_mirror_bunny_entrances():
|
||||
yield 'Hype Cave'
|
||||
yield 'Bonk Fairy (Dark)'
|
||||
yield 'Thieves Town'
|
||||
yield 'Dark World Hammer Peg Cave'
|
||||
yield 'Hammer Peg Cave'
|
||||
yield 'Brewery'
|
||||
yield 'Hookshot Cave'
|
||||
yield 'Dark Lake Hylia Ledge Fairy'
|
||||
@@ -359,7 +359,7 @@ boots_clips_local = [ # (name, from_region, to_region)
|
||||
|
||||
('Floating Island Clip', 'East Death Mountain (Top East)', 'Death Mountain Floating Island'),
|
||||
('Floating Island Return Clip', 'Death Mountain Floating Island', 'East Death Mountain (Top East)'),
|
||||
#('DW Floating Island Clip', 'East Dark Death Mountain (Bottom)', 'Dark Death Mountain Floating Island'), #cannot guarantee camera correction
|
||||
#('DW Floating Island Clip', 'East Dark Death Mountain (Bottom)', 'Death Mountain Floating Island'), #cannot guarantee camera correction
|
||||
('EDM East Dropdown Clip', 'East Death Mountain (Top East)', 'East Death Mountain (Bottom Left)'),
|
||||
('EDM Hammer Bypass Teleport', 'East Death Mountain (Top West)', 'East Death Mountain (Top East)'),
|
||||
('EDDM West Dropdown Clip', 'East Dark Death Mountain (Top)', 'East Dark Death Mountain (Bottom Left)'),
|
||||
|
||||
+3
-3
@@ -7,7 +7,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType
|
||||
from OverworldGlitchRules import create_owg_connections
|
||||
from Utils import bidict
|
||||
|
||||
version_number = '0.3.0.5'
|
||||
version_number = '0.3.0.6'
|
||||
# branch indicator is intentionally different across branches
|
||||
version_branch = ''
|
||||
|
||||
@@ -1506,8 +1506,8 @@ ow_connections = {
|
||||
('Graveyard Ladder (Bottom)', 'Graveyard Ledge')
|
||||
]),
|
||||
0x1b: ([
|
||||
('Top of Pyramid', 'Pyramid Area'),
|
||||
('Top of Pyramid (Inner)', 'Pyramid Area')
|
||||
('Castle Gate Teleporter', 'Pyramid Area'),
|
||||
('Castle Gate Teleporter (Inner)', 'Pyramid Area')
|
||||
], [
|
||||
('Post Aga Inverted Teleporter', 'Hyrule Castle Area')
|
||||
]),
|
||||
|
||||
+10
-10
@@ -788,12 +788,12 @@ vanilla_pots = {
|
||||
0x108: [Pot(166, 19, PotItem.Chicken, 'Chicken House', obj=RoomObject(0x03EFA9, [0x4F, 0x9F, 0xFA]))],
|
||||
0x10C: [Pot(88, 14, PotItem.Heart, 'Hookshot Fairy', obj=RoomObject(0x03F329, [0xB3, 0x73, 0xFA]))],
|
||||
# note: these addresses got moved thanks to waterfall fairy edit
|
||||
0x114: [Pot(92, 4, PotItem.Heart, 'Dark Desert Hint', obj=RoomObject(0x03F79A, [0xBB, 0x23, 0xFA])),
|
||||
Pot(96, 4, PotItem.Heart, 'Dark Desert Hint', obj=RoomObject(0x03F79D, [0xC3, 0x23, 0xFA])),
|
||||
Pot(92, 5, PotItem.Bomb, 'Dark Desert Hint', obj=RoomObject(0x03F7A0, [0xBB, 0x2B, 0xFA])),
|
||||
Pot(96, 5, PotItem.Bomb, 'Dark Desert Hint', obj=RoomObject(0x03F7A3, [0xC3, 0x2B, 0xFA])),
|
||||
Pot(92, 10, PotItem.FiveArrows, 'Dark Desert Hint', obj=RoomObject(0x03F7A6, [0xBB, 0x53, 0xFA])),
|
||||
Pot(96, 10, PotItem.Heart, 'Dark Desert Hint', obj=RoomObject(0x03F7A9, [0xC3, 0x53, 0xFA]))],
|
||||
0x114: [Pot(92, 4, PotItem.Heart, 'Mire Hint', obj=RoomObject(0x03F79A, [0xBB, 0x23, 0xFA])),
|
||||
Pot(96, 4, PotItem.Heart, 'Mire Hint', obj=RoomObject(0x03F79D, [0xC3, 0x23, 0xFA])),
|
||||
Pot(92, 5, PotItem.Bomb, 'Mire Hint', obj=RoomObject(0x03F7A0, [0xBB, 0x2B, 0xFA])),
|
||||
Pot(96, 5, PotItem.Bomb, 'Mire Hint', obj=RoomObject(0x03F7A3, [0xC3, 0x2B, 0xFA])),
|
||||
Pot(92, 10, PotItem.FiveArrows, 'Mire Hint', obj=RoomObject(0x03F7A6, [0xBB, 0x53, 0xFA])),
|
||||
Pot(96, 10, PotItem.Heart, 'Mire Hint', obj=RoomObject(0x03F7A9, [0xC3, 0x53, 0xFA]))],
|
||||
0x117: [Pot(138, 3, PotItem.Heart, 'Spike Cave', obj=RoomObject(0x03FCB2, [0x17, 0x1F, 0xFA])), # 0x38A -> 38A
|
||||
Pot(142, 3, PotItem.Heart, 'Spike Cave', obj=RoomObject(0x03FCB8, [0x1F, 0x1F, 0xFA])),
|
||||
Pot(166, 3, PotItem.Heart, 'Spike Cave', obj=RoomObject(0x03FCC1, [0x4F, 0x1F, 0xFA])),
|
||||
@@ -851,10 +851,10 @@ vanilla_pots = {
|
||||
Pot(100, 22, PotItem.Heart, 'Dark Lake Hylia Ledge Spike Cave', obj=RoomObject(0x0AB62A, [0xCB, 0xB3, 0xFA])),
|
||||
Pot(88, 28, PotItem.Heart, 'Dark Lake Hylia Ledge Spike Cave', obj=RoomObject(0x0AB633, [0xB3, 0xE3, 0xFA])),
|
||||
Pot(100, 28, PotItem.Heart, 'Dark Lake Hylia Ledge Spike Cave', obj=RoomObject(0x0AB636, [0xCB, 0xE3, 0xFA]))],
|
||||
0x127: [Pot(24, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2B801A, [0x33, 0xCB, 0xFA])),
|
||||
Pot(28, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2B801D, [0x3B, 0xCB, 0xFA])),
|
||||
Pot(32, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2B8020, [0x43, 0xCB, 0xFA])),
|
||||
Pot(36, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2B8023, [0x4B, 0xCB, 0xFA]))],
|
||||
0x127: [Pot(24, 25, PotItem.Nothing, 'Hammer Peg Cave', obj=RoomObject(0x2B801A, [0x33, 0xCB, 0xFA])),
|
||||
Pot(28, 25, PotItem.Nothing, 'Hammer Peg Cave', obj=RoomObject(0x2B801D, [0x3B, 0xCB, 0xFA])),
|
||||
Pot(32, 25, PotItem.Nothing, 'Hammer Peg Cave', obj=RoomObject(0x2B8020, [0x43, 0xCB, 0xFA])),
|
||||
Pot(36, 25, PotItem.Nothing, 'Hammer Peg Cave', obj=RoomObject(0x2B8023, [0x4B, 0xCB, 0xFA]))],
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -109,6 +109,17 @@ These are now independent of retro mode and have three options: None, Random, an
|
||||
|
||||
# Bug Fixes and Notes
|
||||
|
||||
* 1.2.0.15u
|
||||
* GUI reorganization
|
||||
* Logic fix for pots in GT conveyor cross
|
||||
* Auto option for pyramid open (trinity or ER + crystals goal)
|
||||
* World model refactor (combining inverted and normal world models)
|
||||
* Partitioned fix for lamp logic and links house
|
||||
* Fix starting flute logic
|
||||
* Reduced universal keys in pool slightly for non-vanilla dungeons
|
||||
* Fake world fix finally
|
||||
* Some extra restrictions on links house placement for lite/lean
|
||||
* Collection_rate works in customizer files
|
||||
* 1.2.0.14u
|
||||
* Small fix for key logic validation (got rid of a false negative)
|
||||
* Customized doors in ice cross work properly now
|
||||
|
||||
+52
-50
@@ -62,9 +62,9 @@ def create_regions(world, player):
|
||||
create_lw_region(player, 'Kakariko Southwest', None, ['Kakariko Southwest Bush (South)', 'Light World Bomb Hut']),
|
||||
create_lw_region(player, 'Kakariko Grass Yard', None, ['Kakariko Yard Bush (North)', 'Bush Covered House']),
|
||||
create_lw_region(player, 'Forgotten Forest Area', None, ['Forgotten Forest NW', 'Forgotten Forest NE', 'Forgotten Forest ES']),
|
||||
create_lw_region(player, 'Hyrule Castle Area', None, ['Hyrule Castle Secret Entrance Drop', 'Hyrule Castle Main Gate (South)', 'Hyrule Castle Inner East Rock', 'Hyrule Castle Southwest Bush (North)', 'Top of Pyramid', 'Hyrule Castle WN', 'Hyrule Castle SE']),
|
||||
create_lw_region(player, 'Hyrule Castle Area', None, ['Hyrule Castle Secret Entrance Drop', 'Hyrule Castle Main Gate (South)', 'Hyrule Castle Inner East Rock', 'Hyrule Castle Southwest Bush (North)', 'Castle Gate Teleporter', 'Hyrule Castle WN', 'Hyrule Castle SE']),
|
||||
create_lw_region(player, 'Hyrule Castle Southwest', None, ['Hyrule Castle Southwest Bush (South)', 'Hyrule Castle SW']),
|
||||
create_lw_region(player, 'Hyrule Castle Courtyard', None, ['Hyrule Castle Courtyard Bush (South)', 'Hyrule Castle Main Gate (North)', 'Hyrule Castle Entrance (South)', 'Top of Pyramid (Inner)']),
|
||||
create_lw_region(player, 'Hyrule Castle Courtyard', None, ['Hyrule Castle Courtyard Bush (South)', 'Hyrule Castle Main Gate (North)', 'Hyrule Castle Entrance (South)', 'Castle Gate Teleporter (Inner)']),
|
||||
create_lw_region(player, 'Hyrule Castle Courtyard Northeast', None, ['Hyrule Castle Courtyard Bush (North)', 'Hyrule Castle Secret Entrance Stairs']),
|
||||
create_lw_region(player, 'Hyrule Castle Ledge', None, ['Hyrule Castle Ledge Drop', 'Hyrule Castle Ledge Courtyard Drop', 'Inverted Pyramid Entrance', 'Hyrule Castle Entrance (West)', 'Agahnims Tower', 'Hyrule Castle Entrance (East)', 'Inverted Pyramid Hole'], 'the castle rampart'),
|
||||
create_lw_region(player, 'Hyrule Castle East Entry', None, ['Hyrule Castle Outer East Rock', 'Hyrule Castle ES']),
|
||||
@@ -111,7 +111,7 @@ def create_regions(world, player):
|
||||
create_lw_region(player, 'C Whirlpool Outer Area', None, ['C Whirlpool Rock (Top)', 'C Whirlpool WC', 'C Whirlpool NW']),
|
||||
create_lw_region(player, 'Statues Area', None, ['Statues Water Entry', 'Light Hype Fairy', 'Statues NC', 'Statues WN', 'Statues WS', 'Statues SC']),
|
||||
create_lw_region(player, 'Statues Water', None, ['Statues Landing', 'Statues WC'], 'Light World', Terrain.Water),
|
||||
create_lw_region(player, 'Lake Hylia Area', None, ['Lake Hylia Water Drop', 'Lake Hylia Fortune Teller', 'Cave Shop (Lake Hylia)', 'Lake Hylia NW']),
|
||||
create_lw_region(player, 'Lake Hylia Area', None, ['Lake Hylia Water Drop', 'Lake Hylia Fortune Teller', 'Lake Hylia Shop', 'Lake Hylia NW']),
|
||||
create_lw_region(player, 'Lake Hylia South Shore', None, ['Lake Hylia South Water Drop', 'Mini Moldorm Cave', 'Lake Hylia WS', 'Lake Hylia ES']),
|
||||
create_lw_region(player, 'Lake Hylia Northeast Bank', None, ['Lake Hylia Northeast Water Drop', 'Lake Hylia NE']),
|
||||
create_lw_region(player, 'Lake Hylia Central Island', None, ['Lake Hylia Central Water Drop', 'Capacity Upgrade', 'Lake Hylia Teleporter']),
|
||||
@@ -135,12 +135,12 @@ def create_regions(world, player):
|
||||
create_dw_region(player, 'Skull Woods Forest (West)', None, ['Skull Woods Second Section Hole', 'Skull Woods Second Section Door (West)', 'Skull Woods Final Section'], 'a deep, dark forest'),
|
||||
create_dw_region(player, 'Skull Woods Forgotten Path (Southwest)', None, ['Skull Woods Forgotten Bush (West)', 'Skull Woods SW']),
|
||||
create_dw_region(player, 'Skull Woods Forgotten Path (Northeast)', None, ['Skull Woods Forgotten Bush (East)', 'Skull Woods EN']),
|
||||
create_dw_region(player, 'Dark Lumberjack Area', None, ['Dark World Lumberjack Shop', 'Dark Lumberjack WN', 'Dark Lumberjack SW']),
|
||||
create_dw_region(player, 'Dark Lumberjack Area', None, ['Dark Lumberjack Shop', 'Dark Lumberjack WN', 'Dark Lumberjack SW']),
|
||||
create_dw_region(player, 'West Dark Death Mountain (Top)', None, ['Dark Death Mountain Drop (West)', 'GT Entry Approach', 'West Dark Death Mountain EN']),
|
||||
create_dw_region(player, 'GT Approach', None, ['GT Entry Leave', 'Ganons Tower']),
|
||||
create_dw_region(player, 'West Dark Death Mountain (Bottom)', None, ['Spike Cave', 'Dark Death Mountain Fairy', 'Dark Death Mountain Teleporter (West)', 'West Dark Death Mountain ES']),
|
||||
create_dw_region(player, 'East Dark Death Mountain (Top)', None, ['Dark Death Mountain Drop (East)', 'Superbunny Cave (Top)', 'Hookshot Cave', 'East Dark Death Mountain WN', 'East Dark Death Mountain EN']),
|
||||
create_dw_region(player, 'East Dark Death Mountain (Bottom)', None, ['East Dark Death Mountain Bushes', 'Superbunny Cave (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Dark Death Mountain Teleporter (East)']),
|
||||
create_dw_region(player, 'East Dark Death Mountain (Bottom)', None, ['East Dark Death Mountain Bushes', 'Superbunny Cave (Bottom)', 'Dark Death Mountain Shop', 'Dark Death Mountain Teleporter (East)']),
|
||||
create_dw_region(player, 'East Dark Death Mountain (Bushes)', None, []),
|
||||
create_dw_region(player, 'East Dark Death Mountain (Bottom Left)', None, ['East Dark Death Mountain WS']),
|
||||
create_dw_region(player, 'Dark Death Mountain Ledge', None, ['Dark Death Mountain Ledge (East)', 'Dark Death Mountain Ledge (West)'], 'a dark ledge'),
|
||||
@@ -164,7 +164,7 @@ def create_regions(world, player):
|
||||
create_dw_region(player, 'Qirn Jump Area', None, ['Qirn Jump Water Drop', 'Qirn Jump WC', 'Qirn Jump SW']),
|
||||
create_dw_region(player, 'Qirn Jump East Bank', None, ['Qirn Jump East Water Drop', 'Qirn Jump SE', 'Qirn Jump EC', 'Qirn Jump ES']),
|
||||
create_dw_region(player, 'Qirn Jump Water', None, ['Qirn Jump Pier', 'Qirn Jump Whirlpool', 'Qirn Jump EN', 'Qirn Jump SC'], 'Dark World', Terrain.Water),
|
||||
create_dw_region(player, 'Dark Witch Area', None, ['Dark Witch Water Drop', 'Dark Witch Rock (South)', 'Dark World Potion Shop', 'Dark Witch WC', 'Dark Witch WS']),
|
||||
create_dw_region(player, 'Dark Witch Area', None, ['Dark Witch Water Drop', 'Dark Witch Rock (South)', 'Dark Potion Shop', 'Dark Witch WC', 'Dark Witch WS']),
|
||||
create_dw_region(player, 'Dark Witch Northeast', None, ['Dark Witch Northeast Water Drop', 'Dark Witch Rock (North)', 'Dark Witch EC']),
|
||||
create_dw_region(player, 'Dark Witch Water', None, ['Dark Witch WN', 'Dark Witch EN'], 'Dark World', Terrain.Water),
|
||||
create_dw_region(player, 'Catfish Approach Area', None, ['Catfish Approach Rocks (West)', 'Catfish Approach Bottom Ledge Drop', 'Catfish Approach Water Drop', 'Catfish Approach WC']),
|
||||
@@ -186,7 +186,7 @@ def create_regions(world, player):
|
||||
create_dw_region(player, 'Palace of Darkness Area', None, ['Palace of Darkness Hint', 'Palace of Darkness', 'Palace of Darkness SW', 'Palace of Darkness SE']),
|
||||
create_dw_region(player, 'Darkness Cliff', None, ['Dark Dunes Ledge Drop', 'Hammer Bridge North Ledge Drop', 'Dark Tree Line Ledge Drop', 'Palace of Darkness Ledge Drop']),
|
||||
create_dw_region(player, 'Hammer Pegs Entry', None, ['Peg Area Rocks (West)', 'Hammer Pegs WS']),
|
||||
create_dw_region(player, 'Hammer Pegs Area', ['Dark Blacksmith Ruins'], ['Peg Area Rocks (East)', 'Dark World Hammer Peg Cave']),
|
||||
create_dw_region(player, 'Hammer Pegs Area', ['Dark Blacksmith Ruins'], ['Peg Area Rocks (East)', 'Hammer Peg Cave']),
|
||||
create_dw_region(player, 'Dark Dunes Area', None, ['Dark Dunes NW', 'Dark Dunes WN', 'Dark Dunes SC']),
|
||||
create_dw_region(player, 'Dig Game Area', ['Digging Game'], ['Dig Game To Ledge Drop', 'Dig Game ES']),
|
||||
create_dw_region(player, 'Dig Game Ledge', None, ['Dig Game Ledge Drop', 'Dig Game EC']),
|
||||
@@ -205,7 +205,7 @@ def create_regions(world, player):
|
||||
create_dw_region(player, 'Dark Tree Line Area', None, ['Dark Lake Hylia Fairy', 'Dark Tree Line WN', 'Dark Tree Line NW', 'Dark Tree Line SE']),
|
||||
create_dw_region(player, 'Dark Tree Line Water', None, ['Dark Tree Line WC', 'Dark Tree Line SC'], 'Dark World', Terrain.Water),
|
||||
create_dw_region(player, 'Palace of Darkness Nook Area', None, ['East Dark World Hint', 'East Dark World Teleporter', 'Palace of Darkness Nook NE']),
|
||||
create_dw_region(player, 'Misery Mire Area', None, ['Mire Shed', 'Misery Mire', 'Dark Desert Fairy', 'Dark Desert Hint']),
|
||||
create_dw_region(player, 'Misery Mire Area', None, ['Mire Shed', 'Misery Mire', 'Mire Fairy', 'Mire Hint']),
|
||||
create_dw_region(player, 'Misery Mire Teleporter Ledge', None, ['Misery Mire Teleporter Ledge Drop', 'Misery Mire Teleporter']),
|
||||
create_dw_region(player, 'Mire Northeast Cliffs', None, ['Mire Cliff Ledge Drop', 'Dark Checkerboard Cliff Ledge Drop', 'Archery Game Cliff Ledge Drop', 'Stumpy Approach Cliff Ledge Drop', 'Mire C Whirlpool Cliff Ledge Drop', 'Swamp Nook Cliff Ledge Drop', 'Swamp Cliff Ledge Drop', 'Mirror To Bombos Tablet Ledge']),
|
||||
create_dw_region(player, 'Stumpy Approach Area', None, ['Stumpy Approach Bush (South)', 'Stumpy Approach NW', 'Stumpy Approach EC']),
|
||||
@@ -246,19 +246,20 @@ def create_regions(world, player):
|
||||
create_cave_region(player, 'Spectacle Rock Cave (Top)', 'a connector', ['Spectacle Rock Cave'], ['Spectacle Rock Cave Drop', 'Spectacle Rock Cave Exit (Top)']),
|
||||
create_cave_region(player, 'Spectacle Rock Cave (Bottom)', 'a connector', None, ['Spectacle Rock Cave Exit']),
|
||||
create_cave_region(player, 'Spectacle Rock Cave (Peak)', 'a connector', None, ['Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave Exit (Peak)']),
|
||||
create_cave_region(player, 'Hookshot Fairy', 'fairies deep in a cave'),
|
||||
create_cave_region(player, 'Paradox Cave Front', 'a connector', None, ['Paradox Cave Push Block Reverse', 'Paradox Cave Exit (Bottom)', 'Light World Death Mountain Shop']),
|
||||
create_cave_region(player, 'Paradox Cave Chest Area', 'a connector', ['Paradox Cave Lower - Far Left', 'Paradox Cave Lower - Left', 'Paradox Cave Lower - Right', 'Paradox Cave Lower - Far Right', 'Paradox Cave Lower - Middle'],
|
||||
['Paradox Cave Push Block', 'Paradox Cave Bomb Jump', 'Paradox Cave Chest Area NE']),
|
||||
create_cave_region(player, 'Paradox Cave Bomb Area', 'a connector', ['Paradox Cave Upper - Left', 'Paradox Cave Upper - Right']),
|
||||
create_cave_region(player, 'Paradox Cave', 'a connector', None, ['Paradox Cave Exit (Middle)', 'Paradox Cave Exit (Top)', 'Paradox Cave Drop']),
|
||||
create_cave_region(player, 'Light World Death Mountain Shop', 'a common shop', ['Paradox Shop - Left', 'Paradox Shop - Middle', 'Paradox Shop - Right']),
|
||||
create_cave_region(player, 'Fairy Ascension Cave (Bottom)', 'a connector', None, ['Fairy Ascension Cave Climb', 'Fairy Ascension Cave Exit (Bottom)']),
|
||||
create_cave_region(player, 'Fairy Ascension Cave (Drop)', 'a connector', None, ['Fairy Ascension Cave Pots']),
|
||||
create_cave_region(player, 'Fairy Ascension Cave (Top)', 'a connector', None, ['Fairy Ascension Cave Exit (Top)', 'Fairy Ascension Cave Drop']),
|
||||
create_cave_region(player, 'Spiral Cave (Top)', 'a connector', ['Spiral Cave'], ['Spiral Cave (top to bottom)', 'Spiral Cave Exit (Top)']),
|
||||
create_cave_region(player, 'Spiral Cave (Bottom)', 'a connector', None, ['Spiral Cave Exit']),
|
||||
create_cave_region(player, 'Mimic Cave', 'Mimic Cave', ['Mimic Cave']),
|
||||
create_cave_region(player, 'Fairy Ascension Cave (Bottom)', 'a connector', None, ['Fairy Ascension Cave Climb', 'Fairy Ascension Cave Exit (Bottom)']),
|
||||
create_cave_region(player, 'Fairy Ascension Cave (Drop)', 'a connector', None, ['Fairy Ascension Cave Pots']),
|
||||
create_cave_region(player, 'Fairy Ascension Cave (Top)', 'a connector', None, ['Fairy Ascension Cave Exit (Top)', 'Fairy Ascension Cave Drop']),
|
||||
create_cave_region(player, 'Hookshot Fairy', 'fairies deep in a cave'),
|
||||
create_cave_region(player, 'Paradox Cave Front', 'a connector', None, ['Paradox Cave Push Block Reverse', 'Paradox Cave Exit (Bottom)', 'Paradox Shop']),
|
||||
create_cave_region(player, 'Paradox Cave Chest Area', 'a connector', ['Paradox Cave Lower - Far Left', 'Paradox Cave Lower - Left',
|
||||
'Paradox Cave Lower - Right', 'Paradox Cave Lower - Far Right', 'Paradox Cave Lower - Middle'],
|
||||
['Paradox Cave Push Block', 'Paradox Cave Bomb Jump', 'Paradox Cave Chest Area NE']),
|
||||
create_cave_region(player, 'Paradox Cave Bomb Area', 'a connector', ['Paradox Cave Upper - Left', 'Paradox Cave Upper - Right']),
|
||||
create_cave_region(player, 'Paradox Cave', 'a connector', None, ['Paradox Cave Exit (Middle)', 'Paradox Cave Exit (Top)', 'Paradox Cave Drop']),
|
||||
create_cave_region(player, 'Paradox Shop', 'a common shop', ['Paradox Shop - Left', 'Paradox Shop - Middle', 'Paradox Shop - Right']),
|
||||
create_cave_region(player, 'Waterfall of Wishing', 'a cave with two chests', ['Waterfall Fairy - Left', 'Waterfall Fairy - Right']),
|
||||
create_cave_region(player, 'Fortune Teller (Light)', 'a fortune teller'),
|
||||
create_cave_region(player, 'Bonk Rock Cave', 'a cave with a chest', ['Bonk Rock Cave']),
|
||||
@@ -267,16 +268,16 @@ def create_regions(world, player):
|
||||
create_cave_region(player, 'Kings Grave', 'a cave with a chest', ['King\'s Tomb']),
|
||||
create_cave_region(player, 'North Fairy Cave', 'a drop\'s exit', None, ['North Fairy Cave Exit']),
|
||||
create_cave_region(player, 'Potion Shop', 'the potion shop', ['Potion Shop', 'Potion Shop - Left', 'Potion Shop - Middle', 'Potion Shop - Right']),
|
||||
create_cave_region(player, 'Kakariko Well (top)', 'a drop', ['Kakariko Well - Left', 'Kakariko Well - Middle', 'Kakariko Well - Right',
|
||||
'Kakariko Well - Bottom'], ['Kakariko Well (top to bottom)', 'Kakariko Well (top to back)']),
|
||||
create_cave_region(player, 'Kakariko Well (top)', 'a drop', ['Kakariko Well - Left', 'Kakariko Well - Middle', 'Kakariko Well - Right', 'Kakariko Well - Bottom'],
|
||||
['Kakariko Well (top to bottom)', 'Kakariko Well (top to back)']),
|
||||
create_cave_region(player, 'Kakariko Well (back)', 'a drop', ['Kakariko Well - Top']),
|
||||
create_cave_region(player, 'Kakariko Well (bottom)', 'a drop\'s exit', None, ['Kakariko Well Exit']),
|
||||
create_cave_region(player, 'Blinds Hideout', 'a bounty of five items', [ "Blind's Hideout - Left", "Blind's Hideout - Right",
|
||||
"Blind's Hideout - Far Left", "Blind's Hideout - Far Right"], ['Blinds Hideout N']),
|
||||
create_cave_region(player, 'Blinds Hideout (Top)', 'a bounty of five items', ["Blind's Hideout - Top"]),
|
||||
create_cave_region(player, 'Elder House', 'a connector', None, ['Elder House Exit (East)', 'Elder House Exit (West)']),
|
||||
create_cave_region(player, 'Snitch Lady (West)', 'a boring house'),
|
||||
create_cave_region(player, 'Snitch Lady (East)', 'a boring house'),
|
||||
create_cave_region(player, 'Snitch Lady (West)', 'a boring house'),
|
||||
create_cave_region(player, 'Chicken House', 'a house with a chest', ['Chicken House']),
|
||||
create_cave_region(player, 'Sick Kids House', 'the sick kid', ['Sick Kid']),
|
||||
create_cave_region(player, 'Bush Covered House', 'the grass man'),
|
||||
@@ -301,60 +302,60 @@ def create_regions(world, player):
|
||||
create_cave_region(player, 'Checkerboard Cave', 'a cave with an item', ['Checkerboard Cave']),
|
||||
create_cave_region(player, 'Aginahs Cave', 'a cave with a chest', ['Aginah\'s Cave']),
|
||||
create_cave_region(player, 'Cave 45', 'a cave with an item', ['Cave 45']),
|
||||
create_cave_region(player, 'Swamp Healer Fairy', 'a fairy fountain'),
|
||||
create_cave_region(player, 'Light Hype Fairy', 'a fairy fountain'),
|
||||
create_cave_region(player, 'Lake Hylia Fortune Teller', 'a fortune teller'),
|
||||
create_cave_region(player, 'Cave Shop (Lake Hylia)', 'a common shop', ['Lake Hylia Shop - Left', 'Lake Hylia Shop - Middle', 'Lake Hylia Shop - Right']),
|
||||
create_cave_region(player, 'Lake Hylia Shop', 'a common shop', ['Lake Hylia Shop - Left', 'Lake Hylia Shop - Middle', 'Lake Hylia Shop - Right']),
|
||||
create_cave_region(player, 'Capacity Upgrade', 'the queen of fairies', ['Capacity Upgrade - Left', 'Capacity Upgrade - Right']),
|
||||
create_cave_region(player, 'Mini Moldorm Cave', 'a bounty of five items', ['Mini Moldorm Cave - Far Left', 'Mini Moldorm Cave - Left',
|
||||
'Mini Moldorm Cave - Right', 'Mini Moldorm Cave - Far Right', 'Mini Moldorm Cave - Generous Guy']),
|
||||
create_cave_region(player, 'Ice Rod Cave', 'a cave with a chest', ['Ice Rod Cave']),
|
||||
create_cave_region(player, 'Good Bee Cave', 'a cold bee'),
|
||||
create_cave_region(player, '20 Rupee Cave', 'a cave with some cash'),
|
||||
create_cave_region(player, 'Desert Healer Fairy', 'a fairy fountain'),
|
||||
create_cave_region(player, '50 Rupee Cave', 'a cave with some cash'),
|
||||
create_cave_region(player, 'Dam', 'the dam', ['Floodgate', 'Floodgate Chest']),
|
||||
create_cave_region(player, 'Mini Moldorm Cave', 'a bounty of five items', ['Mini Moldorm Cave - Far Left', 'Mini Moldorm Cave - Left', 'Mini Moldorm Cave - Right',
|
||||
'Mini Moldorm Cave - Far Right', 'Mini Moldorm Cave - Generous Guy']),
|
||||
|
||||
create_cave_region(player, 'Dark World Lumberjack Shop', 'a common shop', ['Dark Lumberjack Shop - Left', 'Dark Lumberjack Shop - Middle', 'Dark Lumberjack Shop - Right']),
|
||||
create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']),
|
||||
create_cave_region(player, 'Dark Lumberjack Shop', 'a common shop', ['Dark Lumberjack Shop - Left', 'Dark Lumberjack Shop - Middle', 'Dark Lumberjack Shop - Right']),
|
||||
create_cave_region(player, 'Dark Death Mountain Healer Fairy', 'a fairy fountain'),
|
||||
create_cave_region(player, 'Hookshot Cave (Front)', 'a connector', None,
|
||||
['Hookshot Cave Front to Middle', 'Hookshot Cave Front Exit', 'Hookshot Cave Bonk Path', 'Hookshot Cave Hook Path']),
|
||||
create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']),
|
||||
create_cave_region(player, 'Hookshot Cave (Front)', 'a connector', None, ['Hookshot Cave Front Exit', 'Hookshot Cave Front to Middle',
|
||||
'Hookshot Cave Bonk Path', 'Hookshot Cave Hook Path']),
|
||||
create_cave_region(player, 'Hookshot Cave (Bonk Islands)', 'a connector', ['Hookshot Cave - Bottom Right']),
|
||||
create_cave_region(player, 'Hookshot Cave (Hook Islands)', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Left']),
|
||||
create_cave_region(player, 'Hookshot Cave (Back)', 'a connector', None, ['Hookshot Cave Back to Middle', 'Hookshot Cave Back Exit']),
|
||||
create_cave_region(player, 'Hookshot Cave (Middle)', 'a connector', None, ['Hookshot Cave Middle to Back', 'Hookshot Cave Middle to Front']),
|
||||
create_cave_region(player, 'Hookshot Cave (Back)', 'a connector', None, ['Hookshot Cave Back to Middle', 'Hookshot Cave Back Exit']),
|
||||
create_cave_region(player, 'Superbunny Cave (Top)', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], ['Superbunny Cave Exit (Top)']),
|
||||
create_cave_region(player, 'Superbunny Cave (Bottom)', 'a connector', None, ['Superbunny Cave Climb', 'Superbunny Cave Exit (Bottom)']),
|
||||
create_cave_region(player, 'Cave Shop (Dark Death Mountain)', 'a common shop', ['Dark Death Mountain Shop - Left', 'Dark Death Mountain Shop - Middle', 'Dark Death Mountain Shop - Right']),
|
||||
create_cave_region(player, 'Dark Death Mountain Shop', 'a common shop', ['Dark Death Mountain Shop - Left', 'Dark Death Mountain Shop - Middle', 'Dark Death Mountain Shop - Right']),
|
||||
create_cave_region(player, 'Bumper Cave (bottom)', 'a connector', None, ['Bumper Cave Exit (Bottom)', 'Bumper Cave Bottom to Top']),
|
||||
create_cave_region(player, 'Bumper Cave (top)', 'a connector', None, ['Bumper Cave Exit (Top)', 'Bumper Cave Top To Bottom']),
|
||||
create_cave_region(player, 'Fortune Teller (Dark)', 'a fortune teller'),
|
||||
create_cave_region(player, 'Dark Sanctuary Hint', 'a storyteller', None, ['Dark Sanctuary Hint Exit']),
|
||||
create_cave_region(player, 'Dark World Potion Shop', 'a common shop', ['Dark Potion Shop - Left', 'Dark Potion Shop - Middle', 'Dark Potion Shop - Right']),
|
||||
create_cave_region(player, 'Village of Outcasts Shop', 'a common shop', ['Village of Outcasts Shop - Left', 'Village of Outcasts Shop - Middle', 'Village of Outcasts Shop - Right']),
|
||||
create_cave_region(player, 'Dark Potion Shop', 'a common shop', ['Dark Potion Shop - Left', 'Dark Potion Shop - Middle', 'Dark Potion Shop - Right']),
|
||||
create_cave_region(player, 'Chest Game', 'a game of 16 chests', ['Chest Game']),
|
||||
create_cave_region(player, 'C-Shaped House', 'a house with a chest', ['C-Shaped House']),
|
||||
create_cave_region(player, 'Brewery', 'a house with a chest', ['Brewery']),
|
||||
create_cave_region(player, 'Village of Outcasts Shop', 'a common shop', ['Village of Outcasts Shop - Left', 'Village of Outcasts Shop - Middle', 'Village of Outcasts Shop - Right']),
|
||||
create_cave_region(player, 'Red Shield Shop', 'the rare shop', ['Red Shield Shop - Left', 'Red Shield Shop - Middle', 'Red Shield Shop - Right']),
|
||||
create_cave_region(player, 'Pyramid Fairy', 'a cave with two chests', ['Pyramid Fairy - Left', 'Pyramid Fairy - Right']),
|
||||
create_cave_region(player, 'Pyramid', 'a drop\'s exit', ['Ganon'], ['Ganon Drop']),
|
||||
create_cave_region(player, 'Bottom of Pyramid', 'a drop\'s exit', None, ['Pyramid Exit']),
|
||||
create_cave_region(player, 'Palace of Darkness Hint', 'a storyteller'),
|
||||
create_cave_region(player, 'Dark World Hammer Peg Cave', 'a cave with an item', ['Peg Cave']),
|
||||
create_cave_region(player, 'Hammer Peg Cave', 'a cave with an item', ['Peg Cave']),
|
||||
create_cave_region(player, 'Archery Game', 'a game of skill'),
|
||||
create_cave_region(player, 'Bonk Fairy (Dark)', 'a fairy fountain'),
|
||||
create_cave_region(player, 'Big Bomb Shop', 'the bomb shop', ['Big Bomb'], ['Big Bomb Shop Exit']),
|
||||
create_cave_region(player, 'Dark Lake Hylia Healer Fairy', 'a fairy fountain'),
|
||||
create_cave_region(player, 'East Dark World Hint', 'a storyteller'),
|
||||
create_cave_region(player, 'Mire Shed', 'a cave with two chests', ['Mire Shed - Left', 'Mire Shed - Right']),
|
||||
create_cave_region(player, 'Mire Healer Fairy', 'a fairy fountain'),
|
||||
create_cave_region(player, 'Mire Hint', 'a storyteller'),
|
||||
create_cave_region(player, 'Hype Cave', 'a bounty of five items', ['Hype Cave - Top', 'Hype Cave - Middle Right', 'Hype Cave - Middle Left',
|
||||
'Hype Cave - Bottom', 'Hype Cave - Generous Guy']),
|
||||
create_cave_region(player, 'Dark Lake Hylia Shop', 'a common shop', ['Dark Lake Hylia Shop - Left', 'Dark Lake Hylia Shop - Middle', 'Dark Lake Hylia Shop - Right']),
|
||||
create_cave_region(player, 'Dark Lake Hylia Ledge Healer Fairy', 'a fairy fountain'),
|
||||
create_cave_region(player, 'Dark Lake Hylia Ledge Hint', 'a storyteller'),
|
||||
create_cave_region(player, 'Dark Lake Hylia Ledge Spike Cave', 'a spiky hint'),
|
||||
create_cave_region(player, 'Mire Shed', 'a cave with two chests', ['Mire Shed - Left', 'Mire Shed - Right']),
|
||||
create_cave_region(player, 'Dark Desert Healer Fairy', 'a fairy fountain'),
|
||||
create_cave_region(player, 'Dark Desert Hint', 'a storyteller')
|
||||
create_cave_region(player, 'Dark Lake Hylia Ledge Spike Cave', 'a spiky hint')
|
||||
]
|
||||
|
||||
|
||||
@@ -908,7 +909,8 @@ def create_dungeon_regions(world, player):
|
||||
['GT Compass Room EN', 'GT Compass Room Warp']),
|
||||
create_dungeon_region(player, 'GT Invisible Bridges', 'Ganon\'s Tower', None, ['GT Invisible Bridges WS']),
|
||||
create_dungeon_region(player, 'GT Invisible Catwalk', 'Ganon\'s Tower', None, ['GT Invisible Catwalk ES', 'GT Invisible Catwalk WS', 'GT Invisible Catwalk NW', 'GT Invisible Catwalk NE']),
|
||||
create_dungeon_region(player, 'GT Conveyor Cross', 'Ganon\'s Tower', ['Ganons Tower - Conveyor Cross Pot Key'], ['GT Conveyor Cross EN', 'GT Conveyor Cross WN']),
|
||||
create_dungeon_region(player, 'GT Conveyor Cross', 'Ganon\'s Tower', ['Ganons Tower - Conveyor Cross Pot Key'], ['GT Conveyor Cross EN', 'GT Conveyor Cross Hammer Path']),
|
||||
create_dungeon_region(player, 'GT Conveyor Cross Across Pits', 'Ganon\'s Tower', None, ['GT Conveyor Cross Hookshot Path', 'GT Conveyor Cross WN']),
|
||||
create_dungeon_region(player, 'GT Hookshot East Platform', 'Ganon\'s Tower', None, ['GT Hookshot EN', 'GT Hookshot East-Mid Path']),
|
||||
create_dungeon_region(player, 'GT Hookshot Mid Platform', 'Ganon\'s Tower', None, ['GT Hookshot Mid-East Path', 'GT Hookshot Mid-South Path', 'GT Hookshot Mid-North Path']),
|
||||
create_dungeon_region(player, 'GT Hookshot North Platform', 'Ganon\'s Tower', None, ['GT Hookshot NW', 'GT Hookshot North-Mid Path']),
|
||||
@@ -1137,7 +1139,7 @@ def create_shops(world, player):
|
||||
for region_name, (room_id, type, shopkeeper, custom, locked, inventory, sram) in shop_table.items():
|
||||
if world.mode[player] == 'inverted':
|
||||
if (0x35 not in world.owswaps[player][0] and region_name == 'Dark Lake Hylia Shop') \
|
||||
or (0x35 in world.owswaps[player][0] and region_name == 'Cave Shop (Lake Hylia)'):
|
||||
or (0x35 in world.owswaps[player][0] and region_name == 'Lake Hylia Shop'):
|
||||
locked = True
|
||||
inventory = [('Blue Potion', 160), ('Blue Shield', 50), ('Bombs (10)', 50)]
|
||||
custom = True
|
||||
@@ -1319,16 +1321,16 @@ bonk_table_by_location = {y: x for x, y in bonk_table_by_location_id.items()}
|
||||
_basic_shop_defaults = [('Red Potion', 150), ('Small Heart', 10), ('Bombs (10)', 50)]
|
||||
_dark_world_shop_defaults = [('Red Potion', 150), ('Blue Shield', 50), ('Bombs (10)', 50)]
|
||||
shop_table = {
|
||||
'Cave Shop (Dark Death Mountain)': (0x0112, ShopType.Shop, 0xC1, False, False, _basic_shop_defaults, 0),
|
||||
'Dark Death Mountain Shop': (0x0112, ShopType.Shop, 0xC1, False, False, _basic_shop_defaults, 0),
|
||||
'Red Shield Shop': (0x0110, ShopType.Shop, 0xC1, False, False,
|
||||
[('Red Shield', 500), ('Bee', 10), ('Arrows (10)', 30)], 3),
|
||||
'Dark Lake Hylia Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 6),
|
||||
'Dark World Lumberjack Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 9),
|
||||
'Dark Lumberjack Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 9),
|
||||
'Village of Outcasts Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 12),
|
||||
'Dark World Potion Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 15),
|
||||
'Light World Death Mountain Shop': (0x00FF, ShopType.Shop, 0xA0, False, False, _basic_shop_defaults, 18),
|
||||
'Dark Potion Shop': (0x010F, ShopType.Shop, 0xC1, False, False, _dark_world_shop_defaults, 15),
|
||||
'Paradox Shop': (0x00FF, ShopType.Shop, 0xA0, False, False, _basic_shop_defaults, 18),
|
||||
'Kakariko Shop': (0x011F, ShopType.Shop, 0xA0, False, False, _basic_shop_defaults, 21),
|
||||
'Cave Shop (Lake Hylia)': (0x0112, ShopType.Shop, 0xA0, False, False, _basic_shop_defaults, 24),
|
||||
'Lake Hylia Shop': (0x0112, ShopType.Shop, 0xA0, False, False, _basic_shop_defaults, 24),
|
||||
'Potion Shop': (0x0109, ShopType.Shop, 0xFF, False, True,
|
||||
[('Red Potion', 120), ('Green Potion', 60), ('Blue Potion', 160)], 27),
|
||||
'Capacity Upgrade': (0x0115, ShopType.UpgradeShop, 0x04, True, True,
|
||||
@@ -1337,15 +1339,15 @@ shop_table = {
|
||||
|
||||
|
||||
shop_to_location_table = {
|
||||
'Cave Shop (Dark Death Mountain)': ['Dark Death Mountain Shop - Left', 'Dark Death Mountain Shop - Middle', 'Dark Death Mountain Shop - Right'],
|
||||
'Dark Death Mountain Shop': ['Dark Death Mountain Shop - Left', 'Dark Death Mountain Shop - Middle', 'Dark Death Mountain Shop - Right'],
|
||||
'Red Shield Shop': ['Red Shield Shop - Left', 'Red Shield Shop - Middle', 'Red Shield Shop - Right'],
|
||||
'Dark Lake Hylia Shop': ['Dark Lake Hylia Shop - Left', 'Dark Lake Hylia Shop - Middle', 'Dark Lake Hylia Shop - Right'],
|
||||
'Dark World Lumberjack Shop': ['Dark Lumberjack Shop - Left', 'Dark Lumberjack Shop - Middle', 'Dark Lumberjack Shop - Right'],
|
||||
'Dark Lumberjack Shop': ['Dark Lumberjack Shop - Left', 'Dark Lumberjack Shop - Middle', 'Dark Lumberjack Shop - Right'],
|
||||
'Village of Outcasts Shop': ['Village of Outcasts Shop - Left', 'Village of Outcasts Shop - Middle', 'Village of Outcasts Shop - Right'],
|
||||
'Dark World Potion Shop': ['Dark Potion Shop - Left', 'Dark Potion Shop - Middle', 'Dark Potion Shop - Right'],
|
||||
'Light World Death Mountain Shop': ['Paradox Shop - Left', 'Paradox Shop - Middle', 'Paradox Shop - Right'],
|
||||
'Dark Potion Shop': ['Dark Potion Shop - Left', 'Dark Potion Shop - Middle', 'Dark Potion Shop - Right'],
|
||||
'Paradox Shop': ['Paradox Shop - Left', 'Paradox Shop - Middle', 'Paradox Shop - Right'],
|
||||
'Kakariko Shop': ['Kakariko Shop - Left', 'Kakariko Shop - Middle', 'Kakariko Shop - Right'],
|
||||
'Cave Shop (Lake Hylia)': ['Lake Hylia Shop - Left', 'Lake Hylia Shop - Middle', 'Lake Hylia Shop - Right'],
|
||||
'Lake Hylia Shop': ['Lake Hylia Shop - Left', 'Lake Hylia Shop - Middle', 'Lake Hylia Shop - Right'],
|
||||
'Potion Shop': ['Potion Shop - Left', 'Potion Shop - Middle', 'Potion Shop - Right'],
|
||||
'Capacity Upgrade': ['Capacity Upgrade - Left', 'Capacity Upgrade - Right'],
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127
|
||||
|
||||
|
||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||
RANDOMIZERBASEHASH = '92c16c60f26218c9aec838ce204c0b1e'
|
||||
RANDOMIZERBASEHASH = '544b8d7dd202c6e8a9e70b31af5bae3d'
|
||||
|
||||
|
||||
class JsonRom(object):
|
||||
@@ -2881,7 +2881,7 @@ InconvenientDungeonEntrances = {'Turtle Rock': 'Turtle Rock Main',
|
||||
|
||||
InconvenientOtherEntrances = {'Death Mountain Return Cave (West)': 'The SW DM foothills cave',
|
||||
'Mimic Cave': 'Mimic Ledge',
|
||||
'Dark World Hammer Peg Cave': 'The rows of pegs',
|
||||
'Hammer Peg Cave': 'The rows of pegs',
|
||||
'Pyramid Fairy': 'The crack on the pyramid'
|
||||
}
|
||||
|
||||
@@ -2950,15 +2950,15 @@ ItemEntrances = {'Blinds Hideout': 'Blind\'s old house',
|
||||
'Chest Game': 'The westmost building in the Village of Outcasts'
|
||||
}
|
||||
|
||||
ShopEntrances = {'Cave Shop (Lake Hylia)': 'The cave NW Lake Hylia',
|
||||
ShopEntrances = {'Lake Hylia Shop': 'The cave NW Lake Hylia',
|
||||
'Kakariko Shop': 'The old Kakariko shop',
|
||||
'Capacity Upgrade': 'The cave on the island',
|
||||
'Dark Lake Hylia Shop': 'The building NW dark Lake Hylia',
|
||||
'Dark World Shop': 'The hammer sealed building',
|
||||
'Red Shield Shop': 'The fenced in building',
|
||||
'Cave Shop (Dark Death Mountain)': 'The base of east dark DM',
|
||||
'Dark World Potion Shop': 'The building near the catfish',
|
||||
'Dark World Lumberjack Shop': 'The northmost Dark World building'
|
||||
'Dark Death Mountain Shop': 'The base of east dark DM',
|
||||
'Dark Potion Shop': 'The building near the catfish',
|
||||
'Dark Lumberjack Shop': 'The northmost Dark World building'
|
||||
}
|
||||
|
||||
OtherEntrances = {'Lake Hylia Fairy': 'A cave NE of Lake Hylia',
|
||||
@@ -2984,12 +2984,12 @@ OtherEntrances = {'Lake Hylia Fairy': 'A cave NE of Lake Hylia',
|
||||
'Dark Lake Hylia Fairy': 'The cave NE dark Lake Hylia',
|
||||
'Dark Death Mountain Fairy': 'The SW cave on dark DM',
|
||||
'East Dark World Hint': 'The dark cave near the eastmost portal',
|
||||
'Dark Desert Hint': 'The cave east of the mire',
|
||||
'Mire Hint': 'The cave east of the mire',
|
||||
'Palace of Darkness Hint': 'The building south of Kiki',
|
||||
'Dark Lake Hylia Ledge Spike Cave': 'The rock SE dark Lake Hylia',
|
||||
'Archery Game': 'The old archery game',
|
||||
'Dark Lake Hylia Ledge Hint': 'The open cave SE dark Lake Hylia',
|
||||
'Dark Desert Fairy': 'The eastern hut in the mire',
|
||||
'Mire Fairy': 'The eastern hut in the mire',
|
||||
'Dark Lake Hylia Ledge Fairy': 'The sealed cave SE dark Lake Hylia',
|
||||
'Fortune Teller (Dark)': 'The building NE the Village of Outcasts'
|
||||
}
|
||||
|
||||
@@ -21,20 +21,19 @@ def set_rules(world, player):
|
||||
return
|
||||
|
||||
global_rules(world, player)
|
||||
default_rules(world, player)
|
||||
ow_inverted_rules(world, player)
|
||||
|
||||
ow_bunny_rules(world, player)
|
||||
if world.swords[player] == 'swordless':
|
||||
swordless_rules(world, player)
|
||||
|
||||
ow_bunny_rules(world, player)
|
||||
ow_terrain_rules(world, player)
|
||||
|
||||
if world.mode[player] == 'standard':
|
||||
if not world.is_copied_world:
|
||||
standard_rules(world, player)
|
||||
elif world.mode[player] == 'open' or world.mode[player] == 'inverted':
|
||||
open_rules(world, player)
|
||||
else:
|
||||
raise NotImplementedError('Not implemented yet')
|
||||
misc_key_rules(world, player)
|
||||
|
||||
bomb_rules(world, player)
|
||||
pot_rules(world, player)
|
||||
@@ -195,8 +194,11 @@ def global_rules(world, player):
|
||||
#for exit in world.get_region('Flute Sky', player).exits:
|
||||
# exit.hide_path = True
|
||||
|
||||
# s&q regions. link's house entrance is set to true so the filler knows the chest inside can always be reached
|
||||
set_rule(world.get_entrance('Old Man S&Q', player), lambda state: state.has('Return Old Man', player))
|
||||
set_rule(world.get_entrance('Other World S&Q', player), lambda state: state.has_Mirror(player) and state.has_beaten_aga(player))
|
||||
|
||||
# flute rules
|
||||
set_rule(world.get_entrance('Flute Spot 1', player), lambda state: state.can_flute(player))
|
||||
set_rule(world.get_entrance('Flute Spot 2', player), lambda state: state.can_flute(player))
|
||||
set_rule(world.get_entrance('Flute Spot 3', player), lambda state: state.can_flute(player))
|
||||
@@ -206,25 +208,44 @@ def global_rules(world, player):
|
||||
set_rule(world.get_entrance('Flute Spot 7', player), lambda state: state.can_flute(player))
|
||||
set_rule(world.get_entrance('Flute Spot 8', player), lambda state: state.can_flute(player))
|
||||
|
||||
set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
|
||||
set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player))
|
||||
# overworld location rules
|
||||
set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
|
||||
set_rule(world.get_location('Old Man', player), lambda state: state.has('Return Old Man', player))
|
||||
set_rule(world.get_location('Old Man Drop Off', player), lambda state: state.has('Escort Old Man', player))
|
||||
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
|
||||
set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player))
|
||||
set_rule(world.get_location('Middle Aged Man', player), lambda state: state.has('Pick Up Purple Chest', player)) # Can S&Q with chest
|
||||
set_rule(world.get_location('Purple Chest', player), lambda state: state.has('Deliver Purple Chest', player)) # Can S&Q with chest
|
||||
set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player))
|
||||
set_rule(world.get_location('Turtle Medallion Pad', player), lambda state: state.has_sword(player) and state.has_turtle_rock_medallion(player)) # sword required to cast magic (!)
|
||||
set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player))
|
||||
set_rule(world.get_location('Big Bomb', player), lambda state: state.has('Crystal 5', player) and state.has('Crystal 6', player))
|
||||
set_rule(world.get_location('Pyramid Crack', player), lambda state: state.has('Pick Up Big Bomb', player))
|
||||
set_rule(world.get_entrance('Pyramid Crack', player), lambda state: state.has('Detonate Big Bomb', player))
|
||||
set_rule(world.get_location('Master Sword Pedestal', player), lambda state: state.has('Red Pendant', player) and state.has('Blue Pendant', player) and state.has('Green Pendant', player))
|
||||
set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player))
|
||||
|
||||
# bonk items
|
||||
if world.shuffle_bonk_drops[player]:
|
||||
if not world.is_copied_world:
|
||||
from Regions import bonk_prize_table
|
||||
for location_name, (_, _, aga_required, _, _, _) in bonk_prize_table.items():
|
||||
loc = world.get_location(location_name, player)
|
||||
if location_name == 'Cold Fairy Statue':
|
||||
set_rule(loc, lambda state: state.can_use_bombs(player) and state.can_collect_bonkdrops(player))
|
||||
elif not aga_required:
|
||||
set_rule(loc, lambda state: state.can_collect_bonkdrops(player))
|
||||
else:
|
||||
set_rule(loc, lambda state: state.can_collect_bonkdrops(player) and state.has_beaten_aga(player))
|
||||
add_bunny_rule(loc, player)
|
||||
|
||||
# underworld location rules
|
||||
set_rule(world.get_location('Mimic Cave', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_location('Potion Shop', player), lambda state: state.has('Mushroom', player) and state.can_reach('Potion Shop Area', 'Region', player))
|
||||
set_rule(world.get_location('Sick Kid', player), lambda state: state.has_bottle(player))
|
||||
set_rule(world.get_location('Sahasrahla', player), lambda state: state.has('Green Pendant', player))
|
||||
set_rule(world.get_location('Missing Smith', player), lambda state: state.has('Get Frog', player))
|
||||
set_rule(world.get_location('Blacksmith', player), lambda state: state.has('Return Smith', player))
|
||||
set_rule(world.get_location('Magic Bat', player), lambda state: state.has('Magic Powder', player))
|
||||
set_rule(world.get_location('Sick Kid', player), lambda state: state.has_bottle(player))
|
||||
set_rule(world.get_location('Library', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_location('Mimic Cave', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_location('Sahasrahla', player), lambda state: state.has('Green Pendant', player))
|
||||
|
||||
set_rule(world.get_location('Spike Cave', player), lambda state:
|
||||
state.has('Hammer', player) and state.can_lift_rocks(player) and
|
||||
((state.has('Cape', player) and state.can_extend_magic(player, 16, True)) or
|
||||
@@ -233,13 +254,102 @@ def global_rules(world, player):
|
||||
(state.world.can_take_damage and (state.has_Boots(player) or state.has_hearts(player, 4))))))
|
||||
)
|
||||
|
||||
set_rule(world.get_location('Hookshot Cave - Top Right', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_location('Hookshot Cave - Top Left', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_location('Hookshot Cave - Bottom Right', player), lambda state: state.has('Hookshot', player) or state.has('Pegasus Boots', player))
|
||||
set_rule(world.get_location('Hookshot Cave - Bottom Left', player), lambda state: state.has('Hookshot', player))
|
||||
|
||||
# underworld rules
|
||||
set_rule(world.get_entrance('Paradox Cave Push Block Reverse', player), lambda state: state.has_Mirror(player)) # can erase block - overridden in noglitches
|
||||
set_rule(world.get_entrance('Hookshot Cave Bonk Path', player), lambda state: state.has('Hookshot', player) or state.has('Pegasus Boots', player))
|
||||
set_rule(world.get_entrance('Hookshot Cave Hook Path', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('Bumper Cave Bottom to Top', player), lambda state: state.has('Cape', player))
|
||||
set_rule(world.get_entrance('Bumper Cave Top To Bottom', player), lambda state: state.has('Cape', player) or state.has('Hookshot', player))
|
||||
|
||||
# terrain rules
|
||||
set_rule(world.get_entrance('DM Hammer Bridge (West)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('DM Hammer Bridge (East)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('DM Broken Bridge (West)', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('DM Broken Bridge (East)', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('Fairy Ascension Rocks (North)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Fairy Ascension Rocks (South)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('TR Pegs Ledge Entry', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Mountain Entry Entrance Rock (West)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Mountain Entry Entrance Rock (East)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Lost Woods Pass Hammer (North)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Lost Woods Pass Hammer (South)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Lost Woods Pass Rock (North)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Lost Woods Pass Rock (South)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Kings Grave Outer Rocks', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Kings Grave Inner Rocks', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Potion Shop Rock (South)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Potion Shop Rock (North)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Zora Approach Rocks (West)', player), lambda state: state.can_lift_heavy_rocks(player) or state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Zora Approach Rocks (East)', player), lambda state: state.can_lift_heavy_rocks(player) or state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Hyrule Castle Inner East Rock', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Hyrule Castle Outer East Rock', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Bat Cave Ledge Peg', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Bat Cave Ledge Peg (East)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Desert Palace Statue Move', player), lambda state: state.has('Book of Mudora', player))
|
||||
set_rule(world.get_entrance('Desert Ledge Outer Rocks', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Desert Ledge Inner Rocks', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('C Whirlpool Rock (Bottom)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('C Whirlpool Rock (Top)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('C Whirlpool Pegs (Left)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('C Whirlpool Pegs (Right)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Desert Pass Rocks (North)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Desert Pass Rocks (South)', player), lambda state: state.can_lift_rocks(player))
|
||||
|
||||
set_rule(world.get_entrance('Skull Woods Bush Rock (West)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Skull Woods Bush Rock (East)', player), lambda state: state.can_lift_rocks(player))
|
||||
# this more like an ohko rule - dependent on bird being present too - so enemizer could turn this off?
|
||||
set_rule(world.get_entrance('Bumper Cave Ledge Drop', player), lambda state: (state.has('Cape', player) or state.has('Cane of Byrna', player) or state.has_sword(player)))
|
||||
set_rule(world.get_entrance('Bumper Cave Entrance Rock', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Skull Woods Pass Rock (North)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Skull Woods Pass Rock (South)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Dark Witch Rock (North)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Dark Witch Rock (South)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Catfish Approach Rocks (West)', player), lambda state: state.can_lift_heavy_rocks(player) or state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Catfish Approach Rocks (East)', player), lambda state: state.can_lift_heavy_rocks(player) or state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Village of Outcasts Pegs', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Grassy Lawn Pegs', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Hammer Rock (South)', player), lambda state: state.can_lift_rocks(player) or state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Hammer Rock (North)', player), lambda state: state.can_lift_rocks(player) or state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Hookshot Gap', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('Peg Area Rocks (West)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Peg Area Rocks (East)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Dig Game To Ledge Drop', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Frog Rock (Inner)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Frog Rock (Outer)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Archery Game Rock (North)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Archery Game Rock (South)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Hammer Bridge Pegs (North)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Hammer Bridge Pegs (South)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Rock (Bottom)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Rock (Top)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Pegs (Left)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Pegs (Right)', player), lambda state: state.has('Hammer', player))
|
||||
|
||||
# entrance rules
|
||||
# Caution: If king's grave is relaxed at all to account for reaching it via a two way cave's exit in insanity mode, then the bomb shop logic will need to be updated (that would involve create a small ledge-like Region for it)
|
||||
# TODO: Not sure if this ^ is true anymore since Kings Grave is its own region now
|
||||
set_rule(world.get_entrance('Lumberjack Tree Tree', player), lambda state: state.has_Boots(player) and state.has_beaten_aga(player))
|
||||
set_rule(world.get_entrance('Bonk Rock Cave', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Sanctuary Grave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Kings Grave', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Bonk Fairy (Light)', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Checkerboard Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('20 Rupee Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('50 Rupee Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Hookshot Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_location('Pyramid Crack', player), lambda state: state.has('Pick Up Big Bomb', player))
|
||||
set_rule(world.get_entrance('Pyramid Crack', player), lambda state: state.has('Detonate Big Bomb', player))
|
||||
set_rule(world.get_entrance('Hammer Peg Cave', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Bonk Fairy (Dark)', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
|
||||
set_rule(world.get_entrance('Skull Woods Final Section', player), lambda state: state.has('Fire Rod', player))
|
||||
set_rule(world.get_entrance('Misery Mire', player), lambda state: state.has_sword(player) and state.has_misery_mire_medallion(player)) # sword required to cast magic (!)
|
||||
set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has('Turtle Opened', player))
|
||||
|
||||
if not world.is_atgt_swapped(player):
|
||||
set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has_beam_sword(player))
|
||||
set_rule(world.get_entrance('Ganons Tower' if not world.is_atgt_swapped(player) else 'Agahnims Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player))
|
||||
|
||||
# Start of door rando rules
|
||||
# TODO: Do these need to flag off when door rando is off? - some of them, yes
|
||||
@@ -435,8 +545,8 @@ def global_rules(world, 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))
|
||||
set_rule(world.get_entrance('GT Conveyor Cross WN', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('GT Conveyor Cross EN', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('GT Conveyor Cross Hammer Path', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('GT Conveyor Cross Hookshot Path', player), lambda state: state.has('Hookshot', player))
|
||||
if not world.get_door('GT Speed Torch SE', player).entranceFlag:
|
||||
set_rule(world.get_entrance('GT Speed Torch SE', player), lambda state: state.has('Fire Rod', player))
|
||||
set_rule(world.get_entrance('GT Hookshot South-Mid Path', player), lambda state: state.has('Hookshot', player))
|
||||
@@ -682,7 +792,7 @@ def global_rules(world, player):
|
||||
def bomb_rules(world, player):
|
||||
# todo: kak well, pod hint (bonkable pots), hookshot pot, spike cave pots
|
||||
bonkable_doors = ['Two Brothers House Exit (West)', 'Two Brothers House Exit (East)'] # Technically this is incorrectly defined, but functionally the same as what is intended.
|
||||
bombable_doors = ['Ice Rod Cave', 'Light World Bomb Hut', 'Light World Death Mountain Shop', 'Mini Moldorm Cave',
|
||||
bombable_doors = ['Ice Rod Cave', 'Light World Bomb Hut', 'Paradox Shop', 'Mini Moldorm Cave',
|
||||
'Hookshot Cave Back to Middle', 'Hookshot Cave Front to Middle', 'Hookshot Cave Middle to Front',
|
||||
'Hookshot Cave Middle to Back', 'Dark Lake Hylia Ledge Fairy', 'Hype Cave', 'Brewery',
|
||||
'Paradox Cave Chest Area NE', 'Blinds Hideout N', 'Kakariko Well (top to back)',
|
||||
@@ -815,7 +925,7 @@ def pot_rules(world, player):
|
||||
(state.has('Cane of Byrna', player) and
|
||||
(state.can_extend_magic(player, 12, True) or
|
||||
(state.world.can_take_damage and (state.has_Boots(player) or state.has_hearts(player, 4)))))))
|
||||
for l in world.get_region('Dark Desert Hint', player).locations:
|
||||
for l in world.get_region('Mire Hint', player).locations:
|
||||
if l.type == LocationType.Pot:
|
||||
add_rule(l, lambda state: state.can_use_bombs(player))
|
||||
for l in world.get_region('Palace of Darkness Hint', player).locations:
|
||||
@@ -845,170 +955,11 @@ def pot_rules(world, player):
|
||||
add_rule(l, lambda state: state.can_hit_crystal(player))
|
||||
|
||||
|
||||
def default_rules(world, player):
|
||||
set_rule(world.get_entrance('Other World S&Q', player), lambda state: state.has_Mirror(player) and state.has_beaten_aga(player))
|
||||
|
||||
# Underworld Logic
|
||||
set_rule(world.get_entrance('Old Man Cave Exit (West)', player), lambda state: False) # drop cannot be climbed up
|
||||
set_rule(world.get_entrance('Paradox Cave Push Block Reverse', player), lambda state: state.has_Mirror(player)) # can erase block, overwritten in noglitches
|
||||
set_rule(world.get_entrance('Bumper Cave Bottom to Top', player), lambda state: state.has('Cape', player))
|
||||
set_rule(world.get_entrance('Bumper Cave Top To Bottom', player), lambda state: state.has('Cape', player) or state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('Superbunny Cave Exit (Bottom)', player), lambda state: False) # Cannot get to bottom exit from top. Just exists for shuffling
|
||||
|
||||
# Item Access
|
||||
set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_location('Potion Shop', player), lambda state: state.has('Mushroom', player))
|
||||
set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player))
|
||||
set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
|
||||
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
|
||||
set_rule(world.get_location('Turtle Medallion Pad', player), lambda state: state.has_sword(player) and state.has_turtle_rock_medallion(player)) # sword required to cast magic (!)
|
||||
|
||||
# Bonk Item Access
|
||||
if world.shuffle_bonk_drops[player]:
|
||||
if not world.is_copied_world:
|
||||
from Regions import bonk_prize_table
|
||||
for location_name, (_, _, aga_required, _, _, _) in bonk_prize_table.items():
|
||||
loc = world.get_location(location_name, player)
|
||||
if location_name == 'Cold Fairy Statue':
|
||||
set_rule(loc, lambda state: state.can_use_bombs(player) and state.can_collect_bonkdrops(player))
|
||||
elif not aga_required:
|
||||
set_rule(loc, lambda state: state.can_collect_bonkdrops(player))
|
||||
else:
|
||||
set_rule(loc, lambda state: state.can_collect_bonkdrops(player) and state.has_beaten_aga(player))
|
||||
add_bunny_rule(loc, player)
|
||||
|
||||
# Entrance Access
|
||||
set_rule(world.get_entrance('Lumberjack Tree Tree', player), lambda state: state.has_Boots(player) and state.has_beaten_aga(player))
|
||||
set_rule(world.get_entrance('Bonk Rock Cave', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Sanctuary Grave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Kings Grave', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Bonk Fairy (Light)', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Checkerboard Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('50 Rupee Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('20 Rupee Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Skull Woods Final Section', player), lambda state: state.has('Fire Rod', player))
|
||||
set_rule(world.get_entrance('Hookshot Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has('Turtle Opened', player))
|
||||
set_rule(world.get_entrance('Dark World Hammer Peg Cave', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Bonk Fairy (Dark)', player), lambda state: state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Misery Mire', player), lambda state: state.has_sword(player) and state.has_misery_mire_medallion(player)) # sword required to cast magic (!)
|
||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player))
|
||||
|
||||
# Region Access
|
||||
set_rule(world.get_entrance('DM Hammer Bridge (West)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('DM Hammer Bridge (East)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('DM Broken Bridge (West)', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('DM Broken Bridge (East)', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('Fairy Ascension Rocks (North)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Fairy Ascension Rocks (South)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('TR Pegs Ledge Entry', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('TR Pegs Ledge Leave', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Mountain Entry Entrance Rock (West)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Mountain Entry Entrance Rock (East)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Lost Woods Pass Hammer (North)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Lost Woods Pass Hammer (South)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Lost Woods Pass Rock (North)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Lost Woods Pass Rock (South)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Kings Grave Outer Rocks', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Kings Grave Inner Rocks', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Potion Shop Rock (South)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Potion Shop Rock (North)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Zora Approach Rocks (West)', player), lambda state: state.can_lift_heavy_rocks(player) or state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Zora Approach Rocks (East)', player), lambda state: state.can_lift_heavy_rocks(player) or state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Hyrule Castle Inner East Rock', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Hyrule Castle Outer East Rock', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Bat Cave Ledge Peg', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Bat Cave Ledge Peg (East)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Desert Palace Statue Move', player), lambda state: state.has('Book of Mudora', player))
|
||||
set_rule(world.get_entrance('Desert Ledge Outer Rocks', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Desert Ledge Inner Rocks', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('C Whirlpool Rock (Bottom)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('C Whirlpool Rock (Top)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('C Whirlpool Pegs (Left)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('C Whirlpool Pegs (Right)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Desert Pass Rocks (North)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Desert Pass Rocks (South)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Skull Woods Bush Rock (West)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Skull Woods Bush Rock (East)', player), lambda state: state.can_lift_rocks(player))
|
||||
# this more like an ohko rule - dependent on bird being present too - so enemizer could turn this off?
|
||||
set_rule(world.get_entrance('Bumper Cave Ledge Drop', player), lambda state: (state.has('Cape', player) or state.has('Cane of Byrna', player) or state.has_sword(player)))
|
||||
set_rule(world.get_entrance('Bumper Cave Entrance Rock', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Skull Woods Pass Rock (North)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Skull Woods Pass Rock (South)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Dark Witch Rock (North)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Dark Witch Rock (South)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Catfish Approach Rocks (West)', player), lambda state: state.can_lift_heavy_rocks(player) or state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Catfish Approach Rocks (East)', player), lambda state: state.can_lift_heavy_rocks(player) or state.has_Boots(player))
|
||||
set_rule(world.get_entrance('Village of Outcasts Pegs', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Grassy Lawn Pegs', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Hammer Rock (South)', player), lambda state: state.can_lift_rocks(player) or state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Hammer Rock (North)', player), lambda state: state.can_lift_rocks(player) or state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Hookshot Gap', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('Peg Area Rocks (West)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Peg Area Rocks (East)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Dig Game To Ledge Drop', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Frog Rock (Inner)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Frog Rock (Outer)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Archery Game Rock (North)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Archery Game Rock (South)', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('Hammer Bridge Pegs (North)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Hammer Bridge Pegs (South)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Rock (Bottom)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Rock (Top)', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Pegs (Left)', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Pegs (Right)', player), lambda state: state.has('Hammer', player))
|
||||
|
||||
set_rule(world.get_entrance('Zora Waterfall Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Zora Waterfall Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Zora Waterfall Water Approach', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Kakariko Pond Whirlpool', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('River Bend Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('River Bend East Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Potion Shop Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Potion Shop Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Zora Approach Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Wooden Bridge Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Wooden Bridge Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('C Whirlpool Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Statues Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia South Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Central Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Island Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Water D Leave', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Cave SW', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Octoballoon Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Octoballoon Waterfall Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Qirn Jump Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Qirn Jump East Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Dark Witch Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Dark Witch Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Catfish Approach Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Broken Bridge West Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Hammer Bridge Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Hype Cave Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Southwest Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Southeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Moat Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Shopping Mall SW', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Bomber Corner Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
|
||||
if world.swords[player] == 'swordless':
|
||||
swordless_rules(world, player)
|
||||
|
||||
|
||||
def ow_inverted_rules(world, player):
|
||||
if world.is_atgt_swapped(player):
|
||||
set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player))
|
||||
else:
|
||||
set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has_beam_sword(player) or state.has_beaten_aga(player)) # barrier gets removed after killing agahnim, relevant for entrance shuffle
|
||||
set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has_beam_sword(player)) # barrier gets removed after killing agahnim, rule for that added later
|
||||
set_rule(world.get_entrance('GT Entry Approach', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player))
|
||||
set_rule(world.get_entrance('GT Entry Leave', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player) or state.world.shuffle[player] in ('restricted', 'full', 'lite', 'lean', 'crossed', 'insanity'))
|
||||
|
||||
@@ -1023,6 +974,7 @@ def ow_inverted_rules(world, player):
|
||||
|
||||
if not world.is_tile_swapped(0x07, player):
|
||||
set_rule(world.get_entrance('TR Pegs Teleporter', player), lambda state: state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('TR Pegs Ledge Leave', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
else:
|
||||
set_rule(world.get_entrance('Turtle Rock Teleporter', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||
set_rule(world.get_entrance('TR Pegs Ledge Drop', player), lambda state: False)
|
||||
@@ -1041,8 +993,8 @@ def ow_inverted_rules(world, player):
|
||||
|
||||
set_rule(world.get_entrance('Hyrule Castle Main Gate (South)', player), lambda state: state.has_Mirror(player))
|
||||
set_rule(world.get_entrance('Hyrule Castle Main Gate (North)', player), lambda state: state.has_Mirror(player))
|
||||
set_rule(world.get_entrance('Top of Pyramid', player), lambda state: state.has_beaten_aga(player))
|
||||
set_rule(world.get_entrance('Top of Pyramid (Inner)', player), lambda state: state.has_beaten_aga(player))
|
||||
set_rule(world.get_entrance('Castle Gate Teleporter', player), lambda state: state.has_beaten_aga(player))
|
||||
set_rule(world.get_entrance('Castle Gate Teleporter (Inner)', player), lambda state: state.has_beaten_aga(player))
|
||||
else:
|
||||
set_rule(world.get_entrance('Inverted Pyramid Hole', player), lambda state: world.is_pyramid_open(player) or state.has('Beat Agahnim 2', player))
|
||||
set_rule(world.get_entrance('Pyramid Hole', player), lambda state: False)
|
||||
@@ -1084,6 +1036,7 @@ def ow_inverted_rules(world, player):
|
||||
|
||||
|
||||
def ow_bunny_rules(world, player):
|
||||
# locations
|
||||
add_bunny_rule(world.get_location('Mushroom', player), player)
|
||||
add_bunny_rule(world.get_location('Zora\'s Ledge', player), player)
|
||||
add_bunny_rule(world.get_location('Maze Race', player), player)
|
||||
@@ -1091,6 +1044,7 @@ def ow_bunny_rules(world, player):
|
||||
add_bunny_rule(world.get_location('Turtle Medallion Pad', player), player)
|
||||
add_bunny_rule(world.get_location('Catfish', player), player)
|
||||
|
||||
# entrances
|
||||
add_bunny_rule(world.get_entrance('Lost Woods Hideout Drop', player), player)
|
||||
add_bunny_rule(world.get_entrance('Lumberjack Tree Tree', player), player)
|
||||
add_bunny_rule(world.get_entrance('Waterfall of Wishing', player), player)
|
||||
@@ -1101,30 +1055,29 @@ def ow_bunny_rules(world, player):
|
||||
add_bunny_rule(world.get_entrance('Hyrule Castle Secret Entrance Drop', player), player)
|
||||
add_bunny_rule(world.get_entrance('Bonk Fairy (Light)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Checkerboard Cave', player), player)
|
||||
add_bunny_rule(world.get_entrance('50 Rupee Cave', player), player)
|
||||
add_bunny_rule(world.get_entrance('20 Rupee Cave', player), player)
|
||||
add_bunny_rule(world.get_entrance('50 Rupee Cave', player), player)
|
||||
|
||||
add_bunny_rule(world.get_entrance('Skull Woods First Section Hole (North)', player), player) # bunny cannot lift bush
|
||||
add_bunny_rule(world.get_entrance('Skull Woods Second Section Hole', player), player) # bunny cannot lift bush
|
||||
add_bunny_rule(world.get_entrance('Skull Woods Final Section', player), player) # bunny cannot use fire rod
|
||||
add_bunny_rule(world.get_entrance('Hookshot Cave', player), player)
|
||||
add_bunny_rule(world.get_entrance('Thieves Town', player), player) # bunny cannot pull
|
||||
add_bunny_rule(world.get_entrance('Brewery', player), player) # bomb required
|
||||
add_bunny_rule(world.get_entrance('Palace of Darkness', player), player) # kiki needs pearl
|
||||
add_bunny_rule(world.get_entrance('Dark World Hammer Peg Cave', player), player)
|
||||
add_bunny_rule(world.get_entrance('Hammer Peg Cave', player), player)
|
||||
add_bunny_rule(world.get_entrance('Bonk Fairy (Dark)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Misery Mire', player), player)
|
||||
add_bunny_rule(world.get_entrance('Hype Cave', player), player) # bomb required
|
||||
add_bunny_rule(world.get_entrance('Dark Lake Hylia Ledge Fairy', player), player) # bomb required
|
||||
add_bunny_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), player)
|
||||
|
||||
# terrain
|
||||
add_bunny_rule(world.get_entrance('Lost Woods Bush (West)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Lost Woods Bush (East)', player), player)
|
||||
add_bunny_rule(world.get_entrance('DM Hammer Bridge (West)', player), player)
|
||||
add_bunny_rule(world.get_entrance('DM Hammer Bridge (East)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Fairy Ascension Rocks (North)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Fairy Ascension Rocks (South)', player), player)
|
||||
add_bunny_rule(world.get_entrance('DM Broken Bridge (West)', player), player)
|
||||
add_bunny_rule(world.get_entrance('DM Broken Bridge (East)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Fairy Ascension Rocks (North)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Fairy Ascension Rocks (South)', player), player)
|
||||
add_bunny_rule(world.get_entrance('TR Pegs Ledge Entry', player), player)
|
||||
add_bunny_rule(world.get_entrance('Mountain Entry Entrance Rock (West)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Mountain Entry Entrance Rock (East)', player), player)
|
||||
@@ -1162,6 +1115,7 @@ def ow_bunny_rules(world, player):
|
||||
add_bunny_rule(world.get_entrance('C Whirlpool Pegs (Right)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Desert Pass Rocks (North)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Desert Pass Rocks (South)', player), player)
|
||||
|
||||
add_bunny_rule(world.get_entrance('Skull Woods Bush Rock (West)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Skull Woods Bush Rock (East)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Skull Woods Forgotten Bush (West)', player), player)
|
||||
@@ -1203,6 +1157,73 @@ def ow_bunny_rules(world, player):
|
||||
add_bunny_rule(world.get_entrance('Dark C Whirlpool Pegs (Left)', player), player)
|
||||
add_bunny_rule(world.get_entrance('Dark C Whirlpool Pegs (Right)', player), player)
|
||||
|
||||
if not world.is_atgt_swapped(player):
|
||||
add_bunny_rule(world.get_entrance('Agahnims Tower', player), player)
|
||||
|
||||
#TODO: This needs to get applied after bunny rules, move somewhere else tho
|
||||
if not world.is_atgt_swapped(player):
|
||||
add_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has_beaten_aga(player), 'or') # barrier gets removed after killing agahnim, relevant for entrance shuffle
|
||||
|
||||
|
||||
def ow_terrain_rules(world, player):
|
||||
for edge in world.owedges:
|
||||
if edge.player == player and edge.dest and edge.dest.terrain == Terrain.Water:
|
||||
ent = world.get_entrance(edge.name, player)
|
||||
if edge.terrain == Terrain.Land:
|
||||
set_rule(ent, lambda state: state.has('Flippers', player))
|
||||
if ent.parent_region.is_light_world == (world.mode[player] != 'inverted') and ent.connected_region.is_dark_world == (world.mode[player] != 'inverted'):
|
||||
add_rule(ent, lambda state: state.has_Pearl(player))
|
||||
|
||||
for whirlpool_name in OWExitTypes['Whirlpool']:
|
||||
ent = world.get_entrance(whirlpool_name, player)
|
||||
if ent.parent_region.is_light_world == (world.mode[player] != 'inverted') and ent.connected_region.is_dark_world == (world.mode[player] != 'inverted'):
|
||||
add_rule(ent, lambda state: state.has_Pearl(player))
|
||||
|
||||
|
||||
def no_glitches_rules(world, player):
|
||||
set_rule(world.get_entrance('Zora Waterfall Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Zora Waterfall Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Zora Waterfall Water Approach', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Kakariko Pond Whirlpool', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('River Bend Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('River Bend East Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Potion Shop Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Potion Shop Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Zora Approach Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Wooden Bridge Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Wooden Bridge Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('C Whirlpool Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Statues Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia South Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Central Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Island Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Lake Hylia Water D Leave', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Cave SW', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Octoballoon Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Octoballoon Waterfall Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
|
||||
set_rule(world.get_entrance('Qirn Jump Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Qirn Jump East Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Dark Witch Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Dark Witch Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Catfish Approach Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Broken Bridge Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Broken Bridge West Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Hammer Bridge Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Dark C Whirlpool Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Hype Cave Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Northeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Southwest Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Southeast Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Ice Lake Moat Water Entry', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Shopping Mall SW', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Bomber Corner Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
set_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), lambda state: state.has('Flippers', player))
|
||||
|
||||
add_bunny_rule(world.get_entrance('Zora Waterfall Water Drop', player), player)
|
||||
add_bunny_rule(world.get_entrance('Zora Waterfall Water Entry', player), player)
|
||||
add_bunny_rule(world.get_entrance('Zora Waterfall Water Approach', player), player)
|
||||
@@ -1225,6 +1246,7 @@ def ow_bunny_rules(world, player):
|
||||
add_bunny_rule(world.get_entrance('Ice Cave SW', player), player)
|
||||
add_bunny_rule(world.get_entrance('Octoballoon Water Drop', player), player)
|
||||
add_bunny_rule(world.get_entrance('Octoballoon Waterfall Water Drop', player), player)
|
||||
|
||||
add_bunny_rule(world.get_entrance('Qirn Jump Water Drop', player), player)
|
||||
add_bunny_rule(world.get_entrance('Qirn Jump East Water Drop', player), player)
|
||||
add_bunny_rule(world.get_entrance('Dark Witch Water Drop', player), player)
|
||||
@@ -1246,23 +1268,7 @@ def ow_bunny_rules(world, player):
|
||||
add_bunny_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), player)
|
||||
|
||||
|
||||
def ow_terrain_rules(world, player):
|
||||
for edge in world.owedges:
|
||||
if edge.player == player and edge.dest and edge.dest.terrain == Terrain.Water:
|
||||
ent = world.get_entrance(edge.name, player)
|
||||
if edge.terrain == Terrain.Land:
|
||||
set_rule(ent, lambda state: state.has('Flippers', player))
|
||||
if ent.parent_region.is_light_world == (world.mode[player] != 'inverted') and ent.connected_region.is_dark_world == (world.mode[player] != 'inverted'):
|
||||
add_rule(ent, lambda state: state.has_Pearl(player))
|
||||
|
||||
for whirlpool_name in OWExitTypes['Whirlpool']:
|
||||
ent = world.get_entrance(whirlpool_name, player)
|
||||
if ent.parent_region.is_light_world == (world.mode[player] != 'inverted') and ent.connected_region.is_dark_world == (world.mode[player] != 'inverted'):
|
||||
add_rule(ent, lambda state: state.has_Pearl(player))
|
||||
|
||||
|
||||
def no_glitches_rules(world, player):
|
||||
# todo: move some dungeon rules to no glictes logic - see these for examples
|
||||
# todo: move some dungeon rules to no glicthes logic - see these for examples
|
||||
# add_rule(world.get_entrance('Ganons Tower (Hookshot Room)', player), lambda state: state.has('Hookshot', player) or state.has_Boots(player))
|
||||
# add_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has('Hookshot', player))
|
||||
# DMs_room_chests = ['Ganons Tower - DMs Room - Top Left', 'Ganons Tower - DMs Room - Top Right', 'Ganons Tower - DMs Room - Bottom Left', 'Ganons Tower - DMs Room - Bottom Right']
|
||||
@@ -1294,6 +1300,7 @@ def fake_flipper_rules(world, player):
|
||||
set_rule(world.get_entrance('Hype Cave Water Entry', player), lambda state: True)
|
||||
set_rule(world.get_entrance('Ice Lake Southeast Water Drop', player), lambda state: True)
|
||||
set_rule(world.get_entrance('Bomber Corner Water Drop', player), lambda state: True)
|
||||
|
||||
add_bunny_rule(world.get_entrance('Zora Waterfall Water Approach', player), player)
|
||||
add_bunny_rule(world.get_entrance('River Bend Water Drop', player), player)
|
||||
add_bunny_rule(world.get_entrance('River Bend East Water Drop', player), player)
|
||||
@@ -1320,6 +1327,7 @@ def forbid_bomb_jump_requirements(world, player):
|
||||
for location in DMs_room_chests:
|
||||
add_rule(world.get_location(location, player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('Paradox Cave Bomb Jump', player), lambda state: False)
|
||||
set_rule(world.get_entrance('Ice Lake Northeast Pier Hop', player), lambda state: False)
|
||||
|
||||
def add_conditional_lamps(world, player):
|
||||
def add_conditional_lamp(spot, spottype='Location'):
|
||||
@@ -1376,9 +1384,9 @@ def add_conditional_lamps(world, player):
|
||||
is_dark = False
|
||||
if not world.sewer_light_cone[player]:
|
||||
is_dark = True
|
||||
elif world.doorShuffle[player] not in ['partitioned', 'crossed'] and not info['sewer']:
|
||||
elif world.doorShuffle[player] not in ['crossed', 'partitioned'] and not info['sewer']:
|
||||
is_dark = True
|
||||
elif world.doorShuffle[player] in ['partitioned', 'crossed']:
|
||||
elif world.doorShuffle[player] in ['crossed', 'partitioned']:
|
||||
sewer_builder = world.dungeon_layouts[player]['Hyrule Castle']
|
||||
is_dark = region not in sewer_builder.master_sector.region_set()
|
||||
if is_dark:
|
||||
@@ -1392,7 +1400,8 @@ def add_conditional_lamps(world, player):
|
||||
|
||||
add_conditional_lamp('Old Man House Front to Back', 'Entrance')
|
||||
|
||||
def open_rules(world, player):
|
||||
|
||||
def misc_key_rules(world, player):
|
||||
# softlock protection as you can reach the sewers small key door with a guard drop key
|
||||
set_rule(world.get_location('Hyrule Castle - Boomerang Chest', player), lambda state: state.has_sm_key('Small Key (Escape)', player))
|
||||
set_rule(world.get_location('Hyrule Castle - Zelda\'s Chest', player), lambda state: state.has_sm_key('Small Key (Escape)', player))
|
||||
@@ -1409,13 +1418,12 @@ def swordless_rules(world, player):
|
||||
set_rule(world.get_location('Ganon', player), lambda state: state.has('Hammer', player) and state.has_fire_source(player) and state.has('Silver Arrows', player) and state.can_shoot_arrows(player) and state.has_crystals(world.crystals_needed_for_ganon[player], player))
|
||||
set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has('Hammer', player)) # need to damage ganon to get tiles to drop
|
||||
|
||||
if not world.is_atgt_swapped(player):
|
||||
set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has('Hammer', player) or state.has_beaten_aga(player)) # barrier gets removed after killing agahnim, relevant for entrance shuffle
|
||||
|
||||
set_rule(world.get_entrance('Misery Mire', player), lambda state: state.has_misery_mire_medallion(player)) # sword not required to use medallion for opening in swordless (!)
|
||||
set_rule(world.get_location('Turtle Medallion Pad', player), lambda state: state.has_turtle_rock_medallion(player)) # sword not required to use medallion for opening in swordless (!)
|
||||
add_bunny_rule(world.get_entrance('Misery Mire', player), player)
|
||||
add_bunny_rule(world.get_location('Turtle Medallion Pad', player), player)
|
||||
|
||||
if not world.is_atgt_swapped(player):
|
||||
set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has('Hammer', player)) # barrier gets removed after killing agahnim, rule for that added later
|
||||
|
||||
|
||||
std_kill_rooms = {
|
||||
'Hyrule Dungeon Armory Main': ['Hyrule Dungeon Armory S', 'Hyrule Dungeon Armory ES'], # One green guard
|
||||
@@ -1563,11 +1571,11 @@ def set_bunny_rules(world, player, inverted):
|
||||
bunny_impassable_caves = ['Bumper Cave (top)', 'Bumper Cave (bottom)', 'Two Brothers House',
|
||||
'Hookshot Cave (Middle)', 'Pyramid', 'Spiral Cave (Top)', 'Fairy Ascension Cave (Drop)']
|
||||
bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree',
|
||||
'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid',
|
||||
'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Old Man',
|
||||
'Frog', 'Missing Smith', 'Dark Blacksmith Ruins', 'Purple Chest', 'Pyramid Crack', 'Big Bomb',
|
||||
'Spectacle Rock', 'Bombos Tablet', 'Ether Tablet', 'Blacksmith', 'Stumpy',
|
||||
'Master Sword Pedestal', 'Bottle Merchant', 'Sunken Treasure', 'Desert Ledge',
|
||||
'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid', 'Old Man',
|
||||
'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins',
|
||||
'Spectacle Rock', 'Bombos Tablet', 'Ether Tablet', 'Purple Chest', 'Blacksmith',
|
||||
'Missing Smith', 'Master Sword Pedestal', 'Bottle Merchant', 'Sunken Treasure', 'Desert Ledge',
|
||||
'Pyramid Crack', 'Big Bomb', 'Stumpy', 'Lost Old Man', 'Old Man Drop Off',
|
||||
'Kakariko Shop - Left', 'Kakariko Shop - Middle', 'Kakariko Shop - Right',
|
||||
'Lake Hylia Shop - Left', 'Lake Hylia Shop - Middle', 'Lake Hylia Shop - Right',
|
||||
'Potion Shop - Left', 'Potion Shop - Middle', 'Potion Shop - Right',
|
||||
@@ -1687,7 +1695,7 @@ def set_bunny_rules(world, player, inverted):
|
||||
for ext in region.exits:
|
||||
add_rule(ext, rule)
|
||||
|
||||
paradox_shop = world.get_region('Light World Death Mountain Shop', player)
|
||||
paradox_shop = world.get_region('Paradox Shop', player)
|
||||
if is_bunny(paradox_shop):
|
||||
add_rule(paradox_shop.entrances[0], get_rule_to_add(paradox_shop))
|
||||
|
||||
|
||||
+3
-2
@@ -520,7 +520,7 @@ OWBonkGoodBeeDrop:
|
||||
LDA.w $0D00,Y : SEC : SBC.l OWBonkPrizeTable[42].vert_offset : STA.w $0D00,Y
|
||||
LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y
|
||||
|
||||
LDA.b #$01 : STA !REDRAW : STA !FORCE_HEART_SPAWN
|
||||
LDA.b #$01 : STA !REDRAW
|
||||
|
||||
.return
|
||||
PLY
|
||||
@@ -607,6 +607,7 @@ OWBonkDrops:
|
||||
|
||||
.mark_collected ; S = Collected, FlagBitmask, X (row + 2)
|
||||
PLA : BNE + ; S = FlagBitmask, X (row + 2)
|
||||
TYX : JSL Sprite_IsOnscreen : BCC +
|
||||
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : ORA 1,S : STA.l OverworldEventDataWRAM,X
|
||||
|
||||
REP #$20
|
||||
@@ -642,7 +643,7 @@ OWBonkDrops:
|
||||
LDA.w $0D00,Y : SEC : SBC.w OWBonkPrizeData,X : STA.w $0D00,Y
|
||||
LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y
|
||||
|
||||
LDA.b #$01 : STA !REDRAW : STA !FORCE_HEART_SPAWN
|
||||
LDA.b #$01 : STA !REDRAW
|
||||
|
||||
PLB : RTL
|
||||
|
||||
|
||||
Binary file not shown.
@@ -253,6 +253,7 @@
|
||||
"randomizer.item.worldstate.open": "Open",
|
||||
"randomizer.item.worldstate.inverted": "Inverted",
|
||||
"randomizer.item.worldstate.retro": "Retro",
|
||||
"randomizer.item.retro": "Enable Retro",
|
||||
|
||||
"randomizer.item.logiclevel": "Logic Level",
|
||||
"randomizer.item.logiclevel.noglitches": "No Glitches",
|
||||
@@ -347,7 +348,7 @@
|
||||
"randomizer.item.potshuffle": "Pot Shuffle (Legacy)",
|
||||
|
||||
"randomizer.item.dropshuffle": "Shuffle Enemy Key Drops",
|
||||
"randomizer.item.keydropshuffle": "Key Drop Shuffle (Legacy)",
|
||||
"randomizer.item.keydropshuffle": "Enable Key Drop Shuffle (Legacy)",
|
||||
|
||||
"randomizer.item.take_any": "Take Any Caves",
|
||||
"randomizer.item.take_any.none": "None",
|
||||
@@ -358,7 +359,6 @@
|
||||
"randomizer.item.itempool.normal": "Normal",
|
||||
"randomizer.item.itempool.hard": "Hard",
|
||||
"randomizer.item.itempool.expert": "Expert",
|
||||
|
||||
"randomizer.item.flute_mode": "Flute Mode",
|
||||
"randomizer.item.flute_mode.normal": "Normal",
|
||||
"randomizer.item.flute_mode.active": "Pre-Activated",
|
||||
|
||||
@@ -6,7 +6,10 @@
|
||||
"none",
|
||||
"wild",
|
||||
"universal"
|
||||
]
|
||||
],
|
||||
"config": {
|
||||
"padx": [20,0]
|
||||
}
|
||||
},
|
||||
"mapshuffle": { "type": "checkbox" },
|
||||
"compassshuffle": { "type": "checkbox" },
|
||||
|
||||
@@ -11,12 +11,8 @@
|
||||
"options": [
|
||||
"standard",
|
||||
"open",
|
||||
"inverted",
|
||||
"retro"
|
||||
],
|
||||
"config": {
|
||||
"command": "worldstate"
|
||||
}
|
||||
"inverted"
|
||||
]
|
||||
},
|
||||
"logiclevel": {
|
||||
"type": "selectbox",
|
||||
@@ -65,6 +61,12 @@
|
||||
}
|
||||
},
|
||||
"rightItemFrame": {
|
||||
"retro": {
|
||||
"type": "button",
|
||||
"config": {
|
||||
"command": "retro"
|
||||
}
|
||||
},
|
||||
"sortingalgo": {
|
||||
"type": "selectbox",
|
||||
"default": "balanced",
|
||||
@@ -155,9 +157,11 @@
|
||||
},
|
||||
"dropshuffle": {
|
||||
"type": "checkbox"
|
||||
}
|
||||
},
|
||||
"leftPoolFrame2": {
|
||||
"keydropshuffle": {
|
||||
"type": "checkbox",
|
||||
"type": "button",
|
||||
"config": {
|
||||
"command": "keydropshuffle"
|
||||
}
|
||||
|
||||
@@ -124,6 +124,7 @@ class CustomSettings(object):
|
||||
args.crystals_gt[p] = get_setting(settings['crystals_gt'], args.crystals_gt[p])
|
||||
args.crystals_ganon[p] = get_setting(settings['crystals_ganon'], args.crystals_ganon[p])
|
||||
args.experimental[p] = get_setting(settings['experimental'], args.experimental[p])
|
||||
args.collection_rate[p] = get_setting(settings['collection_rate'], args.collection_rate[p])
|
||||
args.openpyramid[p] = get_setting(settings['openpyramid'], args.openpyramid[p])
|
||||
args.bigkeyshuffle[p] = get_setting(settings['bigkeyshuffle'], args.bigkeyshuffle[p])
|
||||
args.keyshuffle[p] = get_setting(settings['keyshuffle'], args.keyshuffle[p])
|
||||
@@ -257,6 +258,7 @@ class CustomSettings(object):
|
||||
settings_dict[p]['crystals_gt'] = world.crystals_gt_orig[p]
|
||||
settings_dict[p]['crystals_ganon'] = world.crystals_ganon_orig[p]
|
||||
settings_dict[p]['experimental'] = world.experimental[p]
|
||||
settings_dict[p]['collection_rate'] = world.collection_rate[p]
|
||||
settings_dict[p]['openpyramid'] = world.open_pyramid[p]
|
||||
settings_dict[p]['bigkeyshuffle'] = world.bigkeyshuffle[p]
|
||||
settings_dict[p]['keyshuffle'] = world.keyshuffle[p]
|
||||
|
||||
@@ -66,6 +66,7 @@ SETTINGSTOPROCESS = {
|
||||
"crystals_ganon": "crystals_ganon",
|
||||
"weapons": "swords",
|
||||
|
||||
"retro": "retro",
|
||||
"sortingalgo": "algorithm",
|
||||
"accessibility": "accessibility",
|
||||
"restrict_boss_items": "restrict_boss_items",
|
||||
@@ -118,7 +119,7 @@ SETTINGSTOPROCESS = {
|
||||
"experimental": "experimental",
|
||||
"dungeon_counters": "dungeon_counters",
|
||||
"mixed_travel": "mixed_travel",
|
||||
"standardize_palettes": "standardize_palettes"
|
||||
"standardize_palettes": "standardize_palettes",
|
||||
},
|
||||
"enemizer": {
|
||||
"enemyshuffle": "shuffleenemies",
|
||||
|
||||
@@ -215,6 +215,7 @@ def create_guiargs(parent):
|
||||
arg = options[mainpage][subpage][widget] if subpage != "" else options[mainpage][widget]
|
||||
page = parent.pages[mainpage].pages[subpage] if subpage != "" else parent.pages[mainpage]
|
||||
pagewidgets = page.content.customWidgets if mainpage == "custom" else page.content.startingWidgets if mainpage == "startinventory" else page.widgets
|
||||
if hasattr(pagewidgets[widget], 'storageVar'):
|
||||
setattr(guiargs, arg, pagewidgets[widget].storageVar.get())
|
||||
|
||||
# Get EnemizerCLI setting
|
||||
@@ -287,10 +288,6 @@ def create_guiargs(parent):
|
||||
guiargs = update_deprecated_args(guiargs)
|
||||
|
||||
# Key drop shuffle stuff
|
||||
if guiargs.keydropshuffle:
|
||||
guiargs.dropshuffle = 1
|
||||
guiargs.pottery = 'keys' if guiargs.pottery == 'none' else guiargs.pottery
|
||||
|
||||
if (hasattr(guiargs, 'retro') and guiargs.retro) or guiargs.mode == 'retro':
|
||||
if guiargs.bow_mode == 'progressive':
|
||||
guiargs.bow_mode = 'retro'
|
||||
|
||||
@@ -57,6 +57,9 @@ def loadcliargs(gui, args, settings=None):
|
||||
pagewidgets[widget].selectbox.options = theseOptions
|
||||
elif thisType == "spinbox":
|
||||
pagewidgets[widget].label.configure(text=label)
|
||||
elif thisType == 'button':
|
||||
pagewidgets[widget].button.configure(text=label)
|
||||
if hasattr(pagewidgets[widget], 'storageVar'):
|
||||
pagewidgets[widget].storageVar.set(args[arg])
|
||||
# If we're on the Game Options page and it's not about Hints
|
||||
if subpage == "gameoptions" and widget not in ["hints", "collection_rate"]:
|
||||
|
||||
@@ -43,7 +43,10 @@ def item_page(parent):
|
||||
self.frames["leftPoolHeader"].pack(side=TOP, anchor=W)
|
||||
|
||||
self.frames["leftPoolFrame"] = Frame(self.frames["leftPoolContainer"])
|
||||
self.frames["leftPoolFrame"].pack(side=LEFT, fill=Y)
|
||||
self.frames["leftPoolFrame"].pack(side=TOP, fill=Y)
|
||||
|
||||
self.frames["leftPoolFrame2"] = Frame(self.frames["leftPoolContainer"])
|
||||
self.frames["leftPoolFrame2"].pack(side=LEFT, fill=Y)
|
||||
|
||||
self.frames["rightPoolFrame"] = Frame(self.frames["poolFrame"])
|
||||
self.frames["rightPoolFrame"].pack(side=RIGHT)
|
||||
@@ -62,7 +65,9 @@ def item_page(parent):
|
||||
for key in dictWidgets:
|
||||
self.widgets[key] = dictWidgets[key]
|
||||
packAttrs = {"anchor":E}
|
||||
if self.widgets[key].type == "checkbox" or framename == "leftPoolFrame":
|
||||
if key == "retro":
|
||||
packAttrs["side"] = RIGHT
|
||||
if self.widgets[key].type == "checkbox" or framename.startswith("leftPoolFrame"):
|
||||
packAttrs["anchor"] = W
|
||||
if framename == "checkboxes":
|
||||
packAttrs["side"] = LEFT
|
||||
|
||||
+24
-6
@@ -1,4 +1,5 @@
|
||||
from tkinter import messagebox, Checkbutton, Entry, Frame, IntVar, Label, OptionMenu, Spinbox, StringVar, LEFT, RIGHT, X
|
||||
from tkinter import Button
|
||||
from source.classes.Empty import Empty
|
||||
|
||||
# Override Spinbox to include mousewheel support for changing value
|
||||
@@ -172,6 +173,22 @@ def make_textbox(self, parent, label, storageVar, manager, managerAttrs):
|
||||
widget.textbox.pack(managerAttrs["textbox"] if managerAttrs is not None and "textbox" in managerAttrs else None)
|
||||
return widget
|
||||
|
||||
|
||||
def make_button(self, parent, label, manager, managerAttrs, config):
|
||||
self = Frame(parent)
|
||||
if config and "command" in config:
|
||||
self.command = config["command"]
|
||||
else:
|
||||
self.command = lambda: None
|
||||
|
||||
self.button = Button(parent, text=label, command=lambda: widget_command(self, self.command))
|
||||
if managerAttrs is not None:
|
||||
self.button.pack(managerAttrs)
|
||||
else:
|
||||
self.button.pack(anchor='w')
|
||||
return self
|
||||
|
||||
|
||||
# Make a generic widget
|
||||
def make_widget(self, type, parent, label, storageVar=None, manager=None, managerAttrs=dict(),
|
||||
options=None, config=None):
|
||||
@@ -201,6 +218,8 @@ def make_widget(self, type, parent, label, storageVar=None, manager=None, manage
|
||||
if thisStorageVar is None:
|
||||
thisStorageVar = StringVar()
|
||||
widget = make_textbox(self, parent, label, thisStorageVar, manager, managerAttrs)
|
||||
elif type == 'button':
|
||||
widget = make_button(self, parent, label, manager, managerAttrs, config)
|
||||
widget.type = type
|
||||
return widget
|
||||
|
||||
@@ -243,8 +262,7 @@ def add_padding_from_config(packAttrs, defn):
|
||||
def widget_command(widget, command=""):
|
||||
root = widget.winfo_toplevel()
|
||||
text_output = ""
|
||||
if command == "worldstate":
|
||||
if widget.storageVar.get() == 'retro':
|
||||
if command == "retro":
|
||||
temp_widget = root.pages["randomizer"].pages["dungeon"].widgets["smallkeyshuffle"]
|
||||
text_output += f'\n {temp_widget.label.cget("text")}'
|
||||
temp_widget.storageVar.set('universal')
|
||||
@@ -261,18 +279,18 @@ def widget_command(widget, command=""):
|
||||
if temp_widget.storageVar.get() == 'none':
|
||||
temp_widget.storageVar.set('random')
|
||||
|
||||
widget.storageVar.set('open')
|
||||
messagebox.showinfo('', f'The following settings were changed:{text_output}')
|
||||
elif command == "keydropshuffle":
|
||||
if widget.storageVar.get() > 0:
|
||||
temp_widget = root.pages["randomizer"].pages["item"].widgets["pottery"]
|
||||
text_output += f'\n {temp_widget.label.cget("text")}'
|
||||
if temp_widget.storageVar.get() == 'none':
|
||||
temp_widget.storageVar.set('keys')
|
||||
|
||||
temp_widget = root.pages["randomizer"].pages["item"].widgets["dropshuffle"]
|
||||
temp_widget.storageVar.set(1)
|
||||
text_output += f'\n {temp_widget.checkbox.cget("text")}'
|
||||
if temp_widget.storageVar.get() == 0:
|
||||
temp_widget.storageVar.set(1)
|
||||
|
||||
widget.storageVar.set(0)
|
||||
if text_output:
|
||||
messagebox.showinfo('', f'The following settings were changed:{text_output}')
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@ def resolve_districts(world):
|
||||
if not location.item and location.real:
|
||||
district.locations.add(location.name)
|
||||
for ext in region.exits:
|
||||
if ext.connected_region is not None and ext.connected_region not in visited:
|
||||
if ext.connected_region and ext.connected_region not in visited:
|
||||
queue.appendleft(ext.connected_region)
|
||||
elif region.type == RegionType.Dungeon and region.dungeon:
|
||||
district.dungeons.add(region.dungeon.name)
|
||||
@@ -138,10 +138,10 @@ def find_reachable_locations(state, player):
|
||||
return check_set
|
||||
|
||||
|
||||
inaccessible_regions_std = {'Desert Palace Stairs', 'Bumper Cave Ledge', 'Skull Woods Forest (West)',
|
||||
inaccessible_regions_std = {'Desert Palace Mouth', 'Bumper Cave Ledge', 'Skull Woods Forest (West)',
|
||||
'Dark Death Mountain Ledge', 'Dark Death Mountain Isolated Ledge',
|
||||
'Dark Death Mountain Floating Island'}
|
||||
'Death Mountain Floating Island'}
|
||||
|
||||
|
||||
inaccessible_regions_inv = {'Desert Palace Stairs', 'Maze Race Ledge', 'Desert Ledge',
|
||||
inaccessible_regions_inv = {'Desert Palace Mouth', 'Maze Race Ledge', 'Desert Ledge',
|
||||
'Desert Palace Entrance (North) Spot', 'Hyrule Castle Ledge', 'Mountain Entry Ledge'}
|
||||
|
||||
@@ -221,7 +221,7 @@ def district_item_pool_config(world):
|
||||
scale_factors = defaultdict(int)
|
||||
scale_total = 0
|
||||
for p in range(1, world.players + 1):
|
||||
ent = 'Agahnims Tower' if world.is_atgt_swapped(player) else 'Ganons Tower'
|
||||
ent = 'Agahnims Tower' if world.is_atgt_swapped(p) else 'Ganons Tower'
|
||||
dungeon = world.get_entrance(ent, p).connected_region.dungeon
|
||||
if dungeon:
|
||||
scale = world.crystals_needed_for_gt[p]
|
||||
|
||||
@@ -499,9 +499,6 @@ def do_links_house(entrances, exits, avail, cross_world):
|
||||
if not avail.world.shufflelinks[avail.player]:
|
||||
links_house = 'Big Bomb Shop' if avail.world.is_bombshop_start(avail.player) else 'Links House'
|
||||
else:
|
||||
# lobby shuffle means you ought to keep links house in the same world
|
||||
sanc_spawn_can_be_dark = (not avail.inverted and avail.world.doorShuffle[avail.player] == 'crossed'
|
||||
and avail.world.intensity[avail.player] >= 3)
|
||||
entrance_pool = entrances if avail.coupled else avail.decoupled_entrances
|
||||
|
||||
forbidden = list(Isolated_LH_Doors)
|
||||
@@ -512,10 +509,10 @@ def do_links_house(entrances, exits, avail, cross_world):
|
||||
if avail.inverted:
|
||||
dark_sanc_region = avail.world.get_entrance('Dark Sanctuary Hint Exit', avail.player).connected_region.name
|
||||
forbidden.extend(get_nearby_entrances(avail, dark_sanc_region))
|
||||
|
||||
if avail.world.owShuffle[avail.player] == 'vanilla':
|
||||
shuffle_mode = avail.world.shuffle[avail.player]
|
||||
if shuffle_mode == 'vanilla':
|
||||
# simple shuffle -
|
||||
if avail.world.shuffle[avail.player] == 'simple':
|
||||
if shuffle_mode == 'simple':
|
||||
avail.links_on_mountain = True # taken care of by the logic below
|
||||
if avail.world.is_tile_swapped(0x03, avail.player): # in inverted, links house cannot be on the mountain
|
||||
forbidden.extend(['Spike Cave', 'Dark Death Mountain Fairy', 'Hookshot Fairy'])
|
||||
@@ -528,17 +525,22 @@ def do_links_house(entrances, exits, avail, cross_world):
|
||||
# can't have links house on eddm in restricted because Inverted Aga Tower isn't available
|
||||
# todo: inverted full may have the same problem if both links house and a mandatory connector is chosen
|
||||
# from the 3 inverted options
|
||||
if avail.world.shuffle[avail.player] in ['restricted', 'lite', 'lean'] and avail.world.is_tile_swapped(0x03, avail.player):
|
||||
if shuffle_mode == 'restricted' and avail.world.is_tile_swapped(0x03, avail.player):
|
||||
avail.links_on_mountain = True
|
||||
forbidden.extend(['Spike Cave', 'Dark Death Mountain Fairy'])
|
||||
|
||||
if avail.world.shuffle[avail.player] in ['lite', 'lean']:
|
||||
if shuffle_mode in ['lite', 'lean']:
|
||||
forbidden.extend(['Spike Cave', 'Mire Shed'])
|
||||
if avail.world.is_tile_swapped(0x05, avail.player):
|
||||
avail.links_on_mountain = True
|
||||
forbidden.extend(['Cave Shop (Dark Death Mountain)'])
|
||||
forbidden.extend(['Dark Death Mountain Shop'])
|
||||
else:
|
||||
avail.links_on_mountain = True
|
||||
|
||||
# lobby shuffle means you ought to keep links house in the same world
|
||||
sanc_spawn_can_be_dark = (not avail.inverted and avail.world.doorShuffle[avail.player] in ['partitioned', 'crossed']
|
||||
and avail.world.intensity[avail.player] >= 3)
|
||||
|
||||
if cross_world and not sanc_spawn_can_be_dark:
|
||||
possible = [e for e in entrance_pool if e not in forbidden]
|
||||
else:
|
||||
@@ -1350,8 +1352,7 @@ inverted_sub_table = {
|
||||
'Pyramid Entrance': 'Inverted Pyramid Entrance'
|
||||
}
|
||||
|
||||
inverted_exit_sub_table = {
|
||||
}
|
||||
inverted_exit_sub_table = { }
|
||||
|
||||
|
||||
def inverted_substitution(avail_pool, collection, is_entrance, is_set=False):
|
||||
@@ -1570,18 +1571,18 @@ modes = {
|
||||
'fixed_non_items': {
|
||||
'special': 'vanilla',
|
||||
'condition': '',
|
||||
'entrances': ['Dark Desert Fairy', 'Archery Game', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint',
|
||||
'entrances': ['Mire Fairy', 'Archery Game', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint',
|
||||
'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Fairy', 'Dark Lake Hylia Shop',
|
||||
'East Dark World Hint', 'Kakariko Gamble Game', 'Long Fairy Cave',
|
||||
'Bush Covered House', 'Fortune Teller (Light)', 'Lost Woods Gamble',
|
||||
'Lake Hylia Fortune Teller', 'Lake Hylia Fairy', 'Bonk Fairy (Light)', 'Inverted Dark Sanctuary'],
|
||||
'Lake Hylia Fortune Teller', 'Lake Hylia Fairy', 'Bonk Fairy (Light)'],
|
||||
},
|
||||
'fixed_shops': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'shopsanity',
|
||||
'entrances': ['Cave Shop (Dark Death Mountain)', 'Dark World Potion Shop', 'Dark World Lumberjack Shop',
|
||||
'entrances': ['Dark Death Mountain Shop', 'Dark Potion Shop', 'Dark Lumberjack Shop',
|
||||
'Dark World Shop', 'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade',
|
||||
'Cave Shop (Lake Hylia)'],
|
||||
'Lake Hylia Shop'],
|
||||
},
|
||||
'fixed_takeanys': {
|
||||
'special': 'vanilla',
|
||||
@@ -1595,7 +1596,7 @@ modes = {
|
||||
'entrances': ['Lumberjack House', 'Snitch Lady (West)', 'Snitch Lady (East)', 'Tavern (Front)',
|
||||
'Light World Bomb Hut', '20 Rupee Cave', '50 Rupee Cave', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Dark Desert Hint']
|
||||
'Mire Hint']
|
||||
},
|
||||
'fixed_bonk': {
|
||||
'special': 'vanilla',
|
||||
@@ -1603,18 +1604,18 @@ modes = {
|
||||
'entrances': ['Good Bee Cave']
|
||||
},
|
||||
'item_caves': { # shuffles shops/pottery if they weren't fixed in the last steps
|
||||
'entrances': ['Mimic Cave', 'Spike Cave', 'Mire Shed', 'Dark World Hammer Peg Cave', 'Chest Game',
|
||||
'entrances': ['Mimic Cave', 'Spike Cave', 'Mire Shed', 'Hammer Peg Cave', 'Chest Game',
|
||||
'C-Shaped House', 'Brewery', 'Hype Cave', 'Big Bomb Shop', 'Pyramid Fairy',
|
||||
'Ice Rod Cave', 'Dam', 'Bonk Rock Cave', 'Library', 'Potion Shop', 'Mini Moldorm Cave',
|
||||
'Checkerboard Cave', 'Graveyard Cave', 'Cave 45', 'Sick Kids House', 'Blacksmiths Hut',
|
||||
'Sahasrahlas Hut', 'Aginahs Cave', 'Chicken House', 'Kings Grave', 'Blinds Hideout',
|
||||
'Waterfall of Wishing', 'Cave Shop (Dark Death Mountain)', 'Good Bee Cave',
|
||||
'Dark World Potion Shop', 'Dark World Lumberjack Shop', 'Dark World Shop',
|
||||
'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade', 'Cave Shop (Lake Hylia)',
|
||||
'Waterfall of Wishing', 'Dark Death Mountain Shop', 'Good Bee Cave',
|
||||
'Dark Potion Shop', 'Dark Lumberjack Shop', 'Dark World Shop',
|
||||
'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade', 'Lake Hylia Shop',
|
||||
'Lumberjack House', 'Snitch Lady (West)', 'Snitch Lady (East)', 'Tavern (Front)',
|
||||
'Light World Bomb Hut', '20 Rupee Cave', '50 Rupee Cave', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Dark Desert Hint', 'Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy',
|
||||
'Mire Hint', 'Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy',
|
||||
'Dark Lake Hylia Ledge Fairy', 'Bonk Fairy (Dark)',
|
||||
'Links House', 'Tavern North']
|
||||
},
|
||||
@@ -1661,18 +1662,18 @@ modes = {
|
||||
'fixed_non_items': {
|
||||
'special': 'vanilla',
|
||||
'condition': '',
|
||||
'entrances': ['Dark Desert Fairy', 'Archery Game', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint',
|
||||
'entrances': ['Mire Fairy', 'Archery Game', 'Fortune Teller (Dark)', 'Dark Sanctuary Hint',
|
||||
'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Fairy', 'Dark Lake Hylia Shop',
|
||||
'East Dark World Hint', 'Kakariko Gamble Game', 'Long Fairy Cave',
|
||||
'Bush Covered House', 'Fortune Teller (Light)', 'Lost Woods Gamble',
|
||||
'Lake Hylia Fortune Teller', 'Lake Hylia Fairy', 'Bonk Fairy (Light)', 'Inverted Dark Sanctuary'],
|
||||
'Lake Hylia Fortune Teller', 'Lake Hylia Fairy', 'Bonk Fairy (Light)'],
|
||||
},
|
||||
'fixed_shops': {
|
||||
'special': 'vanilla',
|
||||
'condition': 'shopsanity',
|
||||
'entrances': ['Cave Shop (Dark Death Mountain)', 'Dark World Potion Shop', 'Dark World Lumberjack Shop',
|
||||
'entrances': ['Dark Death Mountain Shop', 'Dark Potion Shop', 'Dark Lumberjack Shop',
|
||||
'Dark World Shop', 'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade',
|
||||
'Cave Shop (Lake Hylia)'],
|
||||
'Lake Hylia Shop'],
|
||||
},
|
||||
'fixed_takeanys': {
|
||||
'special': 'vanilla',
|
||||
@@ -1686,7 +1687,7 @@ modes = {
|
||||
'entrances': ['Lumberjack House', 'Snitch Lady (West)', 'Snitch Lady (East)', 'Tavern (Front)',
|
||||
'Light World Bomb Hut', '20 Rupee Cave', '50 Rupee Cave', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Dark Desert Hint']
|
||||
'Mire Hint']
|
||||
},
|
||||
'fixed_bonk': {
|
||||
'special': 'vanilla',
|
||||
@@ -1694,18 +1695,18 @@ modes = {
|
||||
'entrances': ['Good Bee Cave']
|
||||
},
|
||||
'item_caves': { # shuffles shops/pottery if they weren't fixed in the last steps
|
||||
'entrances': ['Mimic Cave', 'Spike Cave', 'Mire Shed', 'Dark World Hammer Peg Cave', 'Chest Game',
|
||||
'entrances': ['Mimic Cave', 'Spike Cave', 'Mire Shed', 'Hammer Peg Cave', 'Chest Game',
|
||||
'C-Shaped House', 'Brewery', 'Hype Cave', 'Big Bomb Shop', 'Pyramid Fairy',
|
||||
'Ice Rod Cave', 'Dam', 'Bonk Rock Cave', 'Library', 'Potion Shop', 'Mini Moldorm Cave',
|
||||
'Checkerboard Cave', 'Graveyard Cave', 'Cave 45', 'Sick Kids House', 'Blacksmiths Hut',
|
||||
'Sahasrahlas Hut', 'Aginahs Cave', 'Chicken House', 'Kings Grave', 'Blinds Hideout',
|
||||
'Waterfall of Wishing', 'Cave Shop (Dark Death Mountain)', 'Good Bee Cave',
|
||||
'Dark World Potion Shop', 'Dark World Lumberjack Shop', 'Dark World Shop',
|
||||
'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade', 'Cave Shop (Lake Hylia)',
|
||||
'Waterfall of Wishing', 'Dark Death Mountain Shop', 'Good Bee Cave',
|
||||
'Dark Potion Shop', 'Dark Lumberjack Shop', 'Dark World Shop',
|
||||
'Red Shield Shop', 'Kakariko Shop', 'Capacity Upgrade', 'Lake Hylia Shop',
|
||||
'Lumberjack House', 'Snitch Lady (West)', 'Snitch Lady (East)', 'Tavern (Front)',
|
||||
'Light World Bomb Hut', '20 Rupee Cave', '50 Rupee Cave', 'Hookshot Fairy',
|
||||
'Palace of Darkness Hint', 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Dark Desert Hint', 'Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy',
|
||||
'Mire Hint', 'Desert Fairy', 'Light Hype Fairy', 'Dark Death Mountain Fairy',
|
||||
'Dark Lake Hylia Ledge Fairy', 'Bonk Fairy (Dark)',
|
||||
'Links House', 'Tavern North'] # inverted links house gets substituted
|
||||
}
|
||||
@@ -1963,12 +1964,12 @@ entrance_map = {
|
||||
|
||||
single_entrance_map = {
|
||||
'Mimic Cave': 'Mimic Cave', 'Dark Death Mountain Fairy': 'Dark Death Mountain Healer Fairy',
|
||||
'Cave Shop (Dark Death Mountain)': 'Cave Shop (Dark Death Mountain)', 'Spike Cave': 'Spike Cave',
|
||||
'Dark Desert Fairy': 'Dark Desert Healer Fairy', 'Dark Desert Hint': 'Dark Desert Hint', 'Mire Shed': 'Mire Shed',
|
||||
'Archery Game': 'Archery Game', 'Dark World Potion Shop': 'Dark World Potion Shop',
|
||||
'Dark World Lumberjack Shop': 'Dark World Lumberjack Shop', 'Dark World Shop': 'Village of Outcasts Shop',
|
||||
'Dark Death Mountain Shop': 'Dark Death Mountain Shop', 'Spike Cave': 'Spike Cave',
|
||||
'Mire Fairy': 'Mire Healer Fairy', 'Mire Hint': 'Mire Hint', 'Mire Shed': 'Mire Shed',
|
||||
'Archery Game': 'Archery Game', 'Dark Potion Shop': 'Dark Potion Shop',
|
||||
'Dark Lumberjack Shop': 'Dark Lumberjack Shop', 'Dark World Shop': 'Village of Outcasts Shop',
|
||||
'Fortune Teller (Dark)': 'Fortune Teller (Dark)', 'Dark Sanctuary Hint': 'Dark Sanctuary Hint',
|
||||
'Red Shield Shop': 'Red Shield Shop', 'Dark World Hammer Peg Cave': 'Dark World Hammer Peg Cave',
|
||||
'Red Shield Shop': 'Red Shield Shop', 'Hammer Peg Cave': 'Hammer Peg Cave',
|
||||
'Chest Game': 'Chest Game', 'C-Shaped House': 'C-Shaped House', 'Brewery': 'Brewery',
|
||||
'Bonk Fairy (Dark)': 'Bonk Fairy (Dark)', 'Hype Cave': 'Hype Cave',
|
||||
'Dark Lake Hylia Ledge Hint': 'Dark Lake Hylia Ledge Hint',
|
||||
@@ -1987,9 +1988,9 @@ single_entrance_map = {
|
||||
'Snitch Lady (West)': 'Snitch Lady (West)', 'Snitch Lady (East)': 'Snitch Lady (East)',
|
||||
'Fortune Teller (Light)': 'Fortune Teller (Light)', 'Lost Woods Gamble': 'Lost Woods Gamble',
|
||||
'Sick Kids House': 'Sick Kids House', 'Blacksmiths Hut': 'Blacksmiths Hut', 'Capacity Upgrade': 'Capacity Upgrade',
|
||||
'Cave Shop (Lake Hylia)': 'Cave Shop (Lake Hylia)', 'Sahasrahlas Hut': 'Sahasrahlas Hut',
|
||||
'Lake Hylia Shop': 'Lake Hylia Shop', 'Sahasrahlas Hut': 'Sahasrahlas Hut',
|
||||
'Aginahs Cave': 'Aginahs Cave', 'Chicken House': 'Chicken House', 'Tavern North': 'Tavern',
|
||||
'Kings Grave': 'Kings Grave', 'Desert Fairy': 'Desert Healer Fairy', 'Light Hype Fairy': 'Swamp Healer Fairy',
|
||||
'Kings Grave': 'Kings Grave', 'Desert Fairy': 'Desert Healer Fairy', 'Light Hype Fairy': 'Light Hype Fairy',
|
||||
'Lake Hylia Fortune Teller': 'Lake Hylia Fortune Teller', 'Lake Hylia Fairy': 'Lake Hylia Healer Fairy',
|
||||
'Bonk Fairy (Light)': 'Bonk Fairy (Light)', 'Lumberjack House': 'Lumberjack House', 'Dam': 'Dam',
|
||||
'Blinds Hideout': 'Blinds Hideout', 'Waterfall of Wishing': 'Waterfall of Wishing'
|
||||
@@ -2001,9 +2002,9 @@ DW_Entrances = []
|
||||
Isolated_LH_Doors = ['Kings Grave', 'Waterfall of Wishing', 'Desert Palace Entrance (South)',
|
||||
'Desert Palace Entrance (North)', 'Capacity Upgrade', 'Ice Palace',
|
||||
'Skull Woods Final Section', 'Skull Woods Second Section Door (West)',
|
||||
'Dark World Hammer Peg Cave', 'Turtle Rock Isolated Ledge Entrance',
|
||||
'Hammer Peg Cave', 'Turtle Rock Isolated Ledge Entrance',
|
||||
'Dark Death Mountain Ledge (West)', 'Dark Death Mountain Ledge (East)',
|
||||
'Dark World Shop', 'Dark World Potion Shop']
|
||||
'Dark World Shop', 'Dark Potion Shop']
|
||||
|
||||
# inverted doesn't like really like - Paradox Top or Tower of Hera
|
||||
LH_DM_Connector_List = {
|
||||
@@ -2012,14 +2013,14 @@ LH_DM_Connector_List = {
|
||||
'Tower of Hera', 'Spectacle Rock Cave Peak', 'Spectacle Rock Cave (Bottom)', 'Spectacle Rock Cave',
|
||||
'Paradox Cave (Bottom)', 'Paradox Cave (Middle)', 'Paradox Cave (Top)', 'Hookshot Fairy', 'Spike Cave',
|
||||
'Dark Death Mountain Fairy', 'Ganons Tower', 'Superbunny Cave (Top)', 'Superbunny Cave (Bottom)',
|
||||
'Hookshot Cave', 'Cave Shop (Dark Death Mountain)', 'Turtle Rock'}
|
||||
'Hookshot Cave', 'Dark Death Mountain Shop', 'Turtle Rock'}
|
||||
|
||||
LH_DM_Exit_Forbidden = {
|
||||
'Turtle Rock Isolated Ledge Entrance', 'Mimic Cave', 'Hookshot Cave Back Entrance',
|
||||
'Dark Death Mountain Ledge (West)', 'Dark Death Mountain Ledge (East)', 'Desert Palace Entrance (South)',
|
||||
'Ice Palace', 'Waterfall of Wishing', 'Kings Grave', 'Dark World Hammer Peg Cave', 'Capacity Upgrade',
|
||||
'Ice Palace', 'Waterfall of Wishing', 'Kings Grave', 'Hammer Peg Cave', 'Capacity Upgrade',
|
||||
'Skull Woods Final Section', 'Skull Woods Second Section Door (West)'
|
||||
} # omissions from Isolated Starts: 'Desert Palace Entrance (North)', 'Dark World Shop', 'Dark World Potion Shop'
|
||||
} # omissions from Isolated Starts: 'Desert Palace Entrance (North)', 'Dark World Shop', 'Dark Potion Shop'
|
||||
|
||||
Connector_List = [['Elder House Exit (East)', 'Elder House Exit (West)'],
|
||||
['Two Brothers House Exit (East)', 'Two Brothers House Exit (West)'],
|
||||
@@ -2080,189 +2081,188 @@ Simple_DM_Non_Connectors = {'Old Man Cave Ledge', 'Spiral Cave (Top)', 'Superbun
|
||||
# They link together underworld regions
|
||||
mandatory_connections = [('Lost Woods Hideout (top to bottom)', 'Lost Woods Hideout (bottom)'),
|
||||
('Lumberjack Tree (top to bottom)', 'Lumberjack Tree (bottom)'),
|
||||
('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'),
|
||||
('Kakariko Well (top to back)', 'Kakariko Well (back)'),
|
||||
('Blinds Hideout N', 'Blinds Hideout (Top)'),
|
||||
('Bat Cave Door', 'Bat Cave (left)'),
|
||||
('Sewer Drop', 'Sewers Rat Path'),
|
||||
('Old Man Cave Dropdown', 'Old Man Cave'),
|
||||
('Old Man House Front to Back', 'Old Man House Back'),
|
||||
('Old Man House Back to Front', 'Old Man House'),
|
||||
('Spectacle Rock Cave Drop', 'Spectacle Rock Cave (Bottom)'),
|
||||
('Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave (Bottom)'),
|
||||
('Death Mountain Return Cave E', 'Death Mountain Return Cave (right)'),
|
||||
('Death Mountain Return Cave W', 'Death Mountain Return Cave (left)'),
|
||||
('Old Man Cave Dropdown', 'Old Man Cave'),
|
||||
('Spectacle Rock Cave Drop', 'Spectacle Rock Cave (Bottom)'),
|
||||
('Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave (Bottom)'),
|
||||
('Old Man House Front to Back', 'Old Man House Back'),
|
||||
('Old Man House Back to Front', 'Old Man House'),
|
||||
('Spiral Cave (top to bottom)', 'Spiral Cave (Bottom)'),
|
||||
('Light World Death Mountain Shop', 'Light World Death Mountain Shop'),
|
||||
('Paradox Cave Push Block Reverse', 'Paradox Cave Chest Area'),
|
||||
('Paradox Cave Push Block', 'Paradox Cave Front'),
|
||||
('Paradox Cave Chest Area NE', 'Paradox Cave Bomb Area'),
|
||||
('Paradox Cave Bomb Jump', 'Paradox Cave'),
|
||||
('Paradox Cave Drop', 'Paradox Cave Chest Area'),
|
||||
('Paradox Shop', 'Paradox Shop'),
|
||||
('Fairy Ascension Cave Climb', 'Fairy Ascension Cave (Top)'),
|
||||
('Fairy Ascension Cave Pots', 'Fairy Ascension Cave (Bottom)'),
|
||||
('Fairy Ascension Cave Drop', 'Fairy Ascension Cave (Drop)'),
|
||||
('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'),
|
||||
('Kakariko Well (top to back)', 'Kakariko Well (back)'),
|
||||
('Blinds Hideout N', 'Blinds Hideout (Top)'),
|
||||
('Sewer Drop', 'Sewers Rat Path'),
|
||||
('Missing Smith', 'Missing Smith'),
|
||||
('Bumper Cave Bottom to Top', 'Bumper Cave (top)'),
|
||||
('Bumper Cave Top To Bottom', 'Bumper Cave (bottom)'),
|
||||
('Superbunny Cave Climb', 'Superbunny Cave (Top)'),
|
||||
('Bat Cave Door', 'Bat Cave (left)'),
|
||||
|
||||
('Hookshot Cave Front to Middle', 'Hookshot Cave (Middle)'),
|
||||
('Hookshot Cave Middle to Front', 'Hookshot Cave (Front)'),
|
||||
('Hookshot Cave Middle to Back', 'Hookshot Cave (Back)'),
|
||||
('Hookshot Cave Back to Middle', 'Hookshot Cave (Middle)'),
|
||||
('Hookshot Cave Bonk Path', 'Hookshot Cave (Bonk Islands)'),
|
||||
('Hookshot Cave Hook Path', 'Hookshot Cave (Hook Islands)'),
|
||||
('Superbunny Cave Climb', 'Superbunny Cave (Top)'),
|
||||
('Bumper Cave Bottom to Top', 'Bumper Cave (top)'),
|
||||
('Bumper Cave Top To Bottom', 'Bumper Cave (bottom)'),
|
||||
('Ganon Drop', 'Bottom of Pyramid')
|
||||
]
|
||||
|
||||
# non-shuffled entrance links
|
||||
default_connections = {'Links House': 'Links House',
|
||||
'Links House Exit': 'Links House Area',
|
||||
'Waterfall of Wishing': 'Waterfall of Wishing',
|
||||
'Blinds Hideout': 'Blinds Hideout',
|
||||
'Dam': 'Dam',
|
||||
'Lumberjack House': 'Lumberjack House',
|
||||
'Hyrule Castle Secret Entrance Drop': 'Hyrule Castle Secret Entrance',
|
||||
'Hyrule Castle Secret Entrance Stairs': 'Hyrule Castle Secret Entrance',
|
||||
'Hyrule Castle Secret Entrance Exit': 'Hyrule Castle Courtyard',
|
||||
'Bonk Fairy (Light)': 'Bonk Fairy (Light)',
|
||||
'Lake Hylia Fairy': 'Lake Hylia Healer Fairy',
|
||||
'Lake Hylia Fortune Teller': 'Lake Hylia Fortune Teller',
|
||||
'Light Hype Fairy': 'Swamp Healer Fairy',
|
||||
'Desert Fairy': 'Desert Healer Fairy',
|
||||
'Kings Grave': 'Kings Grave',
|
||||
'Tavern North': 'Tavern',
|
||||
'Chicken House': 'Chicken House',
|
||||
'Aginahs Cave': 'Aginahs Cave',
|
||||
'Sahasrahlas Hut': 'Sahasrahlas Hut',
|
||||
'Cave Shop (Lake Hylia)': 'Cave Shop (Lake Hylia)',
|
||||
'Capacity Upgrade': 'Capacity Upgrade',
|
||||
'Kakariko Well Drop': 'Kakariko Well (top)',
|
||||
'Kakariko Well Cave': 'Kakariko Well (bottom)',
|
||||
'Kakariko Well Exit': 'Kakariko Area',
|
||||
'Blacksmiths Hut': 'Blacksmiths Hut',
|
||||
'Bat Cave Drop': 'Bat Cave (right)',
|
||||
'Bat Cave Cave': 'Bat Cave (left)',
|
||||
'Bat Cave Exit': 'Blacksmith Area',
|
||||
'Sick Kids House': 'Sick Kids House',
|
||||
'Elder House (East)': 'Elder House',
|
||||
'Elder House (West)': 'Elder House',
|
||||
'Elder House Exit (East)': 'Kakariko Area',
|
||||
'Elder House Exit (West)': 'Kakariko Area',
|
||||
'North Fairy Cave Drop': 'North Fairy Cave',
|
||||
'North Fairy Cave': 'North Fairy Cave',
|
||||
'North Fairy Cave Exit': 'River Bend Area',
|
||||
'Lost Woods Gamble': 'Lost Woods Gamble',
|
||||
'Fortune Teller (Light)': 'Fortune Teller (Light)',
|
||||
'Snitch Lady (East)': 'Snitch Lady (East)',
|
||||
'Snitch Lady (West)': 'Snitch Lady (West)',
|
||||
'Bush Covered House': 'Bush Covered House',
|
||||
'Tavern (Front)': 'Tavern (Front)',
|
||||
'Light World Bomb Hut': 'Light World Bomb Hut',
|
||||
'Kakariko Shop': 'Kakariko Shop',
|
||||
default_connections = {'Lost Woods Gamble': 'Lost Woods Gamble',
|
||||
'Lost Woods Hideout Drop': 'Lost Woods Hideout (top)',
|
||||
'Lost Woods Hideout Stump': 'Lost Woods Hideout (bottom)',
|
||||
'Lost Woods Hideout Exit': 'Lost Woods East Area',
|
||||
'Lumberjack House': 'Lumberjack House',
|
||||
'Lumberjack Tree Tree': 'Lumberjack Tree (top)',
|
||||
'Lumberjack Tree Cave': 'Lumberjack Tree (bottom)',
|
||||
'Lumberjack Tree Exit': 'Lumberjack Area',
|
||||
'Cave 45': 'Cave 45',
|
||||
'Graveyard Cave': 'Graveyard Cave',
|
||||
'Checkerboard Cave': 'Checkerboard Cave',
|
||||
'Mini Moldorm Cave': 'Mini Moldorm Cave',
|
||||
'Long Fairy Cave': 'Long Fairy Cave', # near East Light World Teleporter
|
||||
'Good Bee Cave': 'Good Bee Cave',
|
||||
'20 Rupee Cave': '20 Rupee Cave',
|
||||
'50 Rupee Cave': '50 Rupee Cave',
|
||||
'Ice Rod Cave': 'Ice Rod Cave',
|
||||
'Bonk Rock Cave': 'Bonk Rock Cave',
|
||||
'Library': 'Library',
|
||||
'Kakariko Gamble Game': 'Kakariko Gamble Game',
|
||||
'Potion Shop': 'Potion Shop',
|
||||
'Two Brothers House (East)': 'Two Brothers House',
|
||||
'Two Brothers House (West)': 'Two Brothers House',
|
||||
'Two Brothers House Exit (East)': 'Kakariko Suburb Area',
|
||||
'Two Brothers House Exit (West)': 'Maze Race Ledge',
|
||||
|
||||
'Sanctuary': 'Sanctuary Portal',
|
||||
'Sanctuary Grave': 'Sewer Drop',
|
||||
'Sanctuary Exit': 'Sanctuary Area',
|
||||
|
||||
'Old Man Cave (West)': 'Old Man Cave Ledge',
|
||||
'Death Mountain Return Cave (East)': 'Death Mountain Return Cave (right)',
|
||||
'Death Mountain Return Cave Exit (East)': 'West Death Mountain (Bottom)',
|
||||
'Old Man Cave (East)': 'Old Man Cave',
|
||||
'Old Man Cave Exit (West)': 'Mountain Entry Entrance',
|
||||
'Old Man Cave Exit (East)': 'West Death Mountain (Bottom)',
|
||||
'Spectacle Rock Cave': 'Spectacle Rock Cave (Top)',
|
||||
'Spectacle Rock Cave Exit (Top)': 'West Death Mountain (Bottom)',
|
||||
'Spectacle Rock Cave Peak': 'Spectacle Rock Cave (Peak)',
|
||||
'Spectacle Rock Cave Exit (Peak)': 'West Death Mountain (Bottom)',
|
||||
'Spectacle Rock Cave (Bottom)': 'Spectacle Rock Cave (Bottom)',
|
||||
'Spectacle Rock Cave Exit': 'West Death Mountain (Bottom)',
|
||||
'Old Man House (Bottom)': 'Old Man House',
|
||||
'Old Man House Exit (Bottom)': 'West Death Mountain (Bottom)',
|
||||
'Old Man House (Top)': 'Old Man House Back',
|
||||
'Old Man House Exit (Top)': 'West Death Mountain (Bottom)',
|
||||
'Death Mountain Return Cave (East)': 'Death Mountain Return Cave (right)',
|
||||
'Death Mountain Return Cave (West)': 'Death Mountain Return Cave (left)',
|
||||
'Death Mountain Return Cave Exit (West)': 'Mountain Entry Ledge',
|
||||
'Death Mountain Return Cave Exit (East)': 'West Death Mountain (Bottom)',
|
||||
'Spectacle Rock Cave Peak': 'Spectacle Rock Cave (Peak)',
|
||||
'Spectacle Rock Cave (Bottom)': 'Spectacle Rock Cave (Bottom)',
|
||||
'Spectacle Rock Cave': 'Spectacle Rock Cave (Top)',
|
||||
'Spectacle Rock Cave Exit': 'West Death Mountain (Bottom)',
|
||||
'Spectacle Rock Cave Exit (Top)': 'West Death Mountain (Bottom)',
|
||||
'Spectacle Rock Cave Exit (Peak)': 'West Death Mountain (Bottom)',
|
||||
'Paradox Cave (Bottom)': 'Paradox Cave Front',
|
||||
'Paradox Cave (Middle)': 'Paradox Cave',
|
||||
'Paradox Cave (Top)': 'Paradox Cave',
|
||||
'Paradox Cave Exit (Bottom)': 'East Death Mountain (Bottom)',
|
||||
'Paradox Cave Exit (Middle)': 'East Death Mountain (Bottom)',
|
||||
'Paradox Cave Exit (Top)': 'East Death Mountain (Top East)',
|
||||
'Hookshot Fairy': 'Hookshot Fairy',
|
||||
'Fairy Ascension Cave (Bottom)': 'Fairy Ascension Cave (Bottom)',
|
||||
'Fairy Ascension Cave (Top)': 'Fairy Ascension Cave (Top)',
|
||||
'Fairy Ascension Cave Exit (Bottom)': 'Fairy Ascension Plateau',
|
||||
'Fairy Ascension Cave Exit (Top)': 'Fairy Ascension Ledge',
|
||||
'Spiral Cave': 'Spiral Cave (Top)',
|
||||
'Spiral Cave Exit (Top)': 'Spiral Cave Ledge',
|
||||
'Spiral Cave (Bottom)': 'Spiral Cave (Bottom)',
|
||||
'Spiral Cave Exit': 'East Death Mountain (Bottom)',
|
||||
'Spiral Cave Exit (Top)': 'Spiral Cave Ledge',
|
||||
'Mimic Cave': 'Mimic Cave',
|
||||
'Fairy Ascension Cave (Top)': 'Fairy Ascension Cave (Top)',
|
||||
'Fairy Ascension Cave Exit (Top)': 'Fairy Ascension Ledge',
|
||||
'Fairy Ascension Cave (Bottom)': 'Fairy Ascension Cave (Bottom)',
|
||||
'Fairy Ascension Cave Exit (Bottom)': 'Fairy Ascension Plateau',
|
||||
'Hookshot Fairy': 'Hookshot Fairy',
|
||||
'Paradox Cave (Top)': 'Paradox Cave',
|
||||
'Paradox Cave Exit (Top)': 'East Death Mountain (Top East)',
|
||||
'Paradox Cave (Middle)': 'Paradox Cave',
|
||||
'Paradox Cave Exit (Middle)': 'East Death Mountain (Bottom)',
|
||||
'Paradox Cave (Bottom)': 'Paradox Cave Front',
|
||||
'Paradox Cave Exit (Bottom)': 'East Death Mountain (Bottom)',
|
||||
'Death Mountain Return Cave (West)': 'Death Mountain Return Cave (left)',
|
||||
'Death Mountain Return Cave Exit (West)': 'Mountain Entry Ledge',
|
||||
'Old Man Cave (West)': 'Old Man Cave Ledge',
|
||||
'Old Man Cave Exit (West)': 'Mountain Entry Entrance',
|
||||
'Waterfall of Wishing': 'Waterfall of Wishing',
|
||||
'Fortune Teller (Light)': 'Fortune Teller (Light)',
|
||||
'Bonk Rock Cave': 'Bonk Rock Cave',
|
||||
'Sanctuary': 'Sanctuary Portal',
|
||||
'Sanctuary Grave': 'Sewer Drop',
|
||||
'Sanctuary Exit': 'Sanctuary Area',
|
||||
'Graveyard Cave': 'Graveyard Cave',
|
||||
'Kings Grave': 'Kings Grave',
|
||||
'North Fairy Cave Drop': 'North Fairy Cave',
|
||||
'North Fairy Cave': 'North Fairy Cave',
|
||||
'North Fairy Cave Exit': 'River Bend Area',
|
||||
'Potion Shop': 'Potion Shop',
|
||||
'Kakariko Well Drop': 'Kakariko Well (top)',
|
||||
'Kakariko Well Cave': 'Kakariko Well (bottom)',
|
||||
'Kakariko Well Exit': 'Kakariko Area',
|
||||
'Blinds Hideout': 'Blinds Hideout',
|
||||
'Elder House (West)': 'Elder House',
|
||||
'Elder House Exit (West)': 'Kakariko Area',
|
||||
'Elder House (East)': 'Elder House',
|
||||
'Elder House Exit (East)': 'Kakariko Area',
|
||||
'Snitch Lady (West)': 'Snitch Lady (West)',
|
||||
'Snitch Lady (East)': 'Snitch Lady (East)',
|
||||
'Chicken House': 'Chicken House',
|
||||
'Sick Kids House': 'Sick Kids House',
|
||||
'Bush Covered House': 'Bush Covered House',
|
||||
'Light World Bomb Hut': 'Light World Bomb Hut',
|
||||
'Kakariko Shop': 'Kakariko Shop',
|
||||
'Tavern North': 'Tavern',
|
||||
'Tavern (Front)': 'Tavern (Front)',
|
||||
'Hyrule Castle Secret Entrance Drop': 'Hyrule Castle Secret Entrance',
|
||||
'Hyrule Castle Secret Entrance Stairs': 'Hyrule Castle Secret Entrance',
|
||||
'Hyrule Castle Secret Entrance Exit': 'Hyrule Castle Courtyard',
|
||||
'Sahasrahlas Hut': 'Sahasrahlas Hut',
|
||||
'Blacksmiths Hut': 'Blacksmiths Hut',
|
||||
'Bat Cave Drop': 'Bat Cave (right)',
|
||||
'Bat Cave Cave': 'Bat Cave (left)',
|
||||
'Bat Cave Exit': 'Blacksmith Area',
|
||||
'Two Brothers House (West)': 'Two Brothers House',
|
||||
'Two Brothers House Exit (West)': 'Maze Race Ledge',
|
||||
'Two Brothers House (East)': 'Two Brothers House',
|
||||
'Two Brothers House Exit (East)': 'Kakariko Suburb Area',
|
||||
'Library': 'Library',
|
||||
'Kakariko Gamble Game': 'Kakariko Gamble Game',
|
||||
'Bonk Fairy (Light)': 'Bonk Fairy (Light)',
|
||||
'Links House': 'Links House',
|
||||
'Links House Exit': 'Links House Area',
|
||||
'Lake Hylia Fairy': 'Lake Hylia Healer Fairy',
|
||||
'Long Fairy Cave': 'Long Fairy Cave',
|
||||
'Checkerboard Cave': 'Checkerboard Cave',
|
||||
'Aginahs Cave': 'Aginahs Cave',
|
||||
'Cave 45': 'Cave 45',
|
||||
'Light Hype Fairy': 'Light Hype Fairy',
|
||||
'Lake Hylia Fortune Teller': 'Lake Hylia Fortune Teller',
|
||||
'Lake Hylia Shop': 'Lake Hylia Shop',
|
||||
'Capacity Upgrade': 'Capacity Upgrade',
|
||||
'Mini Moldorm Cave': 'Mini Moldorm Cave',
|
||||
'Ice Rod Cave': 'Ice Rod Cave',
|
||||
'Good Bee Cave': 'Good Bee Cave',
|
||||
'20 Rupee Cave': '20 Rupee Cave',
|
||||
'Desert Fairy': 'Desert Healer Fairy',
|
||||
'50 Rupee Cave': '50 Rupee Cave',
|
||||
'Dam': 'Dam',
|
||||
|
||||
'Pyramid Fairy': 'Pyramid Fairy',
|
||||
'East Dark World Hint': 'East Dark World Hint',
|
||||
'Palace of Darkness Hint': 'Palace of Darkness Hint',
|
||||
'Big Bomb Shop': 'Big Bomb Shop',
|
||||
'Dark Lake Hylia Shop': 'Dark Lake Hylia Shop',
|
||||
'Dark Lake Hylia Fairy': 'Dark Lake Hylia Healer Fairy',
|
||||
'Dark Lake Hylia Ledge Fairy': 'Dark Lake Hylia Ledge Healer Fairy',
|
||||
'Dark Lake Hylia Ledge Spike Cave': 'Dark Lake Hylia Ledge Spike Cave',
|
||||
'Dark Lake Hylia Ledge Hint': 'Dark Lake Hylia Ledge Hint',
|
||||
'Hype Cave': 'Hype Cave',
|
||||
'Bonk Fairy (Dark)': 'Bonk Fairy (Dark)',
|
||||
'Brewery': 'Brewery',
|
||||
'C-Shaped House': 'C-Shaped House',
|
||||
'Chest Game': 'Chest Game',
|
||||
'Dark World Hammer Peg Cave': 'Dark World Hammer Peg Cave',
|
||||
'Bumper Cave (Bottom)': 'Bumper Cave (bottom)',
|
||||
'Bumper Cave (Top)': 'Bumper Cave (top)',
|
||||
'Red Shield Shop': 'Red Shield Shop',
|
||||
'Dark Sanctuary Hint': 'Dark Sanctuary Hint',
|
||||
'Fortune Teller (Dark)': 'Fortune Teller (Dark)',
|
||||
'Dark World Shop': 'Village of Outcasts Shop',
|
||||
'Dark World Lumberjack Shop': 'Dark World Lumberjack Shop',
|
||||
'Dark World Potion Shop': 'Dark World Potion Shop',
|
||||
'Archery Game': 'Archery Game',
|
||||
'Bumper Cave Exit (Top)': 'Bumper Cave Ledge',
|
||||
'Bumper Cave Exit (Bottom)': 'Bumper Cave Entrance',
|
||||
'Mire Shed': 'Mire Shed',
|
||||
'Dark Desert Hint': 'Dark Desert Hint',
|
||||
'Dark Desert Fairy': 'Dark Desert Healer Fairy',
|
||||
'Spike Cave': 'Spike Cave',
|
||||
'Hookshot Cave': 'Hookshot Cave (Front)',
|
||||
'Superbunny Cave (Top)': 'Superbunny Cave (Top)',
|
||||
'Cave Shop (Dark Death Mountain)': 'Cave Shop (Dark Death Mountain)',
|
||||
'Dark Lumberjack Shop': 'Dark Lumberjack Shop',
|
||||
'Dark Death Mountain Fairy': 'Dark Death Mountain Healer Fairy',
|
||||
'Superbunny Cave (Bottom)': 'Superbunny Cave (Bottom)',
|
||||
'Superbunny Cave Exit (Top)': 'East Dark Death Mountain (Top)',
|
||||
'Superbunny Cave Exit (Bottom)': 'East Dark Death Mountain (Bottom)',
|
||||
'Hookshot Cave Front Exit': 'East Dark Death Mountain (Top)',
|
||||
'Hookshot Cave Back Exit': 'Dark Death Mountain Floating Island',
|
||||
'Spike Cave': 'Spike Cave',
|
||||
'Hookshot Cave Back Entrance': 'Hookshot Cave (Back)',
|
||||
'Mimic Cave': 'Mimic Cave'}
|
||||
'Hookshot Cave Back Exit': 'Dark Death Mountain Floating Island',
|
||||
'Hookshot Cave': 'Hookshot Cave (Front)',
|
||||
'Hookshot Cave Front Exit': 'East Dark Death Mountain (Top)',
|
||||
'Superbunny Cave (Top)': 'Superbunny Cave (Top)',
|
||||
'Superbunny Cave Exit (Top)': 'East Dark Death Mountain (Top)',
|
||||
'Superbunny Cave (Bottom)': 'Superbunny Cave (Bottom)',
|
||||
'Superbunny Cave Exit (Bottom)': 'East Dark Death Mountain (Bottom)',
|
||||
'Dark Death Mountain Shop': 'Dark Death Mountain Shop',
|
||||
'Bumper Cave (Top)': 'Bumper Cave (top)',
|
||||
'Bumper Cave Exit (Top)': 'Bumper Cave Ledge',
|
||||
'Bumper Cave (Bottom)': 'Bumper Cave (bottom)',
|
||||
'Bumper Cave Exit (Bottom)': 'Bumper Cave Entrance',
|
||||
'Fortune Teller (Dark)': 'Fortune Teller (Dark)',
|
||||
'Dark Sanctuary Hint': 'Dark Sanctuary Hint',
|
||||
'Dark Potion Shop': 'Dark Potion Shop',
|
||||
'Chest Game': 'Chest Game',
|
||||
'C-Shaped House': 'C-Shaped House',
|
||||
'Dark World Shop': 'Village of Outcasts Shop',
|
||||
'Brewery': 'Brewery',
|
||||
'Red Shield Shop': 'Red Shield Shop',
|
||||
'Pyramid Fairy': 'Pyramid Fairy',
|
||||
'Palace of Darkness Hint': 'Palace of Darkness Hint',
|
||||
'Hammer Peg Cave': 'Hammer Peg Cave',
|
||||
'Archery Game': 'Archery Game',
|
||||
'Bonk Fairy (Dark)': 'Bonk Fairy (Dark)',
|
||||
'Big Bomb Shop': 'Big Bomb Shop',
|
||||
'Dark Lake Hylia Fairy': 'Dark Lake Hylia Healer Fairy',
|
||||
'East Dark World Hint': 'East Dark World Hint',
|
||||
'Mire Shed': 'Mire Shed',
|
||||
'Mire Hint': 'Mire Hint',
|
||||
'Mire Fairy': 'Mire Healer Fairy',
|
||||
'Hype Cave': 'Hype Cave',
|
||||
'Dark Lake Hylia Shop': 'Dark Lake Hylia Shop',
|
||||
'Dark Lake Hylia Ledge Fairy': 'Dark Lake Hylia Ledge Healer Fairy',
|
||||
'Dark Lake Hylia Ledge Hint': 'Dark Lake Hylia Ledge Hint',
|
||||
'Dark Lake Hylia Ledge Spike Cave': 'Dark Lake Hylia Ledge Spike Cave'}
|
||||
|
||||
open_default_connections = {'Pyramid Hole': 'Pyramid',
|
||||
'Pyramid Exit': 'Pyramid Ledge',
|
||||
@@ -2358,7 +2358,7 @@ door_addresses = {'Links House': (0x00, (0x0104, 0x2c
|
||||
'Chicken House': (0x4A, (0x0108, 0x18, 0x1120, 0x0837, 0x0106, 0x0888, 0x0188, 0x08a4, 0x0193, 0x07, 0xf9, 0x1530, 0x0000), 0x00),
|
||||
'Aginahs Cave': (0x70, (0x010a, 0x30, 0x0656, 0x0cc6, 0x02aa, 0x0d18, 0x0328, 0x0d33, 0x032f, 0x08, 0xf8, 0x0000, 0x0000), 0x00),
|
||||
'Sahasrahlas Hut': (0x44, (0x0105, 0x1e, 0x0610, 0x06d4, 0x0c76, 0x0727, 0x0cf0, 0x0743, 0x0cfb, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Cave Shop (Lake Hylia)': (0x57, (0x0112, 0x35, 0x0022, 0x0c00, 0x0b1a, 0x0c26, 0x0b98, 0x0c6d, 0x0b9f, 0x00, 0x00, 0x0000, 0x0000), 0x00),
|
||||
'Lake Hylia Shop': (0x57, (0x0112, 0x35, 0x0022, 0x0c00, 0x0b1a, 0x0c26, 0x0b98, 0x0c6d, 0x0b9f, 0x00, 0x00, 0x0000, 0x0000), 0x00),
|
||||
'Capacity Upgrade': (0x5C, (0x0115, 0x35, 0x0a46, 0x0d36, 0x0c2a, 0x0d88, 0x0ca8, 0x0da3, 0x0caf, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Kakariko Well Drop': ([0xDB85C, 0xDB85D], None),
|
||||
'Blacksmiths Hut': (0x63, (0x0121, 0x22, 0x010c, 0x081a, 0x0466, 0x0868, 0x04d8, 0x0887, 0x04e3, 0x06, 0xfa, 0x041A, 0x0000), 0x00),
|
||||
@@ -2401,19 +2401,19 @@ door_addresses = {'Links House': (0x00, (0x0104, 0x2c
|
||||
'Brewery': (0x47, (0x0106, 0x58, 0x16a8, 0x08e4, 0x013e, 0x0938, 0x01b8, 0x0953, 0x01c3, 0x0a, 0xf6, 0x1AB6, 0x0000), 0x02),
|
||||
'C-Shaped House': (0x53, (0x011c, 0x58, 0x09d8, 0x0744, 0x02ce, 0x0797, 0x0348, 0x07b3, 0x0353, 0x0a, 0xf6, 0x0DE8, 0x0000), 0x00),
|
||||
'Chest Game': (0x46, (0x0106, 0x58, 0x078a, 0x0705, 0x004e, 0x0758, 0x00c8, 0x0774, 0x00d3, 0x09, 0xf7, 0x0B98, 0x0000), 0x00),
|
||||
'Dark World Hammer Peg Cave': (0x7E, (0x0127, 0x62, 0x0894, 0x091e, 0x0492, 0x09a6, 0x0508, 0x098b, 0x050f, 0x00, 0x00, 0x0000, 0x0000), 0x20),
|
||||
'Hammer Peg Cave': (0x7E, (0x0127, 0x62, 0x0894, 0x091e, 0x0492, 0x09a6, 0x0508, 0x098b, 0x050f, 0x00, 0x00, 0x0000, 0x0000), 0x20),
|
||||
'Red Shield Shop': (0x74, (0x0110, 0x5a, 0x079a, 0x06e8, 0x04d6, 0x0738, 0x0548, 0x0755, 0x0553, 0x08, 0xf8, 0x0AA8, 0x0000), 0x00),
|
||||
'Dark Sanctuary Hint': (0x59, (0x0112, 0x53, 0x001e, 0x0400, 0x06e2, 0x0446, 0x0758, 0x046d, 0x075f, 0x00, 0x00, 0x0000, 0x0000), 0x00),
|
||||
'Fortune Teller (Dark)': (0x65, (0x0122, 0x51, 0x0610, 0x04b4, 0x027e, 0x0507, 0x02f8, 0x0523, 0x0303, 0x0a, 0xf6, 0x091E, 0x0000), 0x00),
|
||||
'Dark World Shop': (0x5F, (0x010f, 0x58, 0x1058, 0x0814, 0x02be, 0x0868, 0x0338, 0x0883, 0x0343, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Dark World Lumberjack Shop': (0x56, (0x010f, 0x42, 0x041c, 0x0074, 0x04e2, 0x00c7, 0x0558, 0x00e3, 0x055f, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Dark World Potion Shop': (0x6E, (0x010f, 0x56, 0x080e, 0x04f4, 0x0c66, 0x0548, 0x0cd8, 0x0563, 0x0ce3, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Dark Lumberjack Shop': (0x56, (0x010f, 0x42, 0x041c, 0x0074, 0x04e2, 0x00c7, 0x0558, 0x00e3, 0x055f, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Dark Potion Shop': (0x6E, (0x010f, 0x56, 0x080e, 0x04f4, 0x0c66, 0x0548, 0x0cd8, 0x0563, 0x0ce3, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Archery Game': (0x58, (0x0111, 0x69, 0x069e, 0x0ac4, 0x02ea, 0x0b18, 0x0368, 0x0b33, 0x036f, 0x0a, 0xf6, 0x09AC, 0x0000), 0x00),
|
||||
'Mire Shed': (0x5E, (0x010d, 0x70, 0x0384, 0x0c69, 0x001e, 0x0cb6, 0x0098, 0x0cd6, 0x00a3, 0x07, 0xf9, 0x0000, 0x0000), 0x00),
|
||||
'Dark Desert Hint': (0x61, (0x0114, 0x70, 0x0654, 0x0cc5, 0x02aa, 0x0d16, 0x0328, 0x0d32, 0x032f, 0x09, 0xf7, 0x0000, 0x0000), 0x00),
|
||||
'Dark Desert Fairy': (0x55, (0x0115, 0x70, 0x03a8, 0x0c6a, 0x013a, 0x0cb7, 0x01b8, 0x0cd7, 0x01bf, 0x06, 0xfa, 0x0000, 0x0000), 0x00),
|
||||
'Mire Hint': (0x61, (0x0114, 0x70, 0x0654, 0x0cc5, 0x02aa, 0x0d16, 0x0328, 0x0d32, 0x032f, 0x09, 0xf7, 0x0000, 0x0000), 0x00),
|
||||
'Mire Fairy': (0x55, (0x0115, 0x70, 0x03a8, 0x0c6a, 0x013a, 0x0cb7, 0x01b8, 0x0cd7, 0x01bf, 0x06, 0xfa, 0x0000, 0x0000), 0x00),
|
||||
'Spike Cave': (0x40, (0x0117, 0x43, 0x0ed4, 0x01e4, 0x08aa, 0x0236, 0x0928, 0x0253, 0x092f, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Cave Shop (Dark Death Mountain)': (0x6D, (0x0112, 0x45, 0x0ee0, 0x01e3, 0x0d00, 0x0236, 0x0daa, 0x0252, 0x0d7d, 0x0b, 0xf5, 0x0000, 0x0000), 0x00),
|
||||
'Dark Death Mountain Shop': (0x6D, (0x0112, 0x45, 0x0ee0, 0x01e3, 0x0d00, 0x0236, 0x0daa, 0x0252, 0x0d7d, 0x0b, 0xf5, 0x0000, 0x0000), 0x00),
|
||||
'Dark Death Mountain Fairy': (0x6F, (0x0115, 0x43, 0x1400, 0x0294, 0x0600, 0x02e8, 0x0678, 0x0303, 0x0685, 0x0a, 0xf6, 0x0000, 0x0000), 0x00),
|
||||
'Mimic Cave': (0x4E, (0x010c, 0x05, 0x07e0, 0x0103, 0x0d00, 0x0156, 0x0d78, 0x0172, 0x0d7d, 0x0b, 0xf5, 0x0000, 0x0000), 0x00),
|
||||
'Big Bomb Shop': (0x52, (0x011c, 0x6c, 0x0506, 0x0a9a, 0x0832, 0x0ae7, 0x08b8, 0x0b07, 0x08bf, 0x06, 0xfa, 0x0816, 0x0000), 0x00),
|
||||
@@ -2493,11 +2493,11 @@ exit_ids = {'Links House Exit': (0x01, 0x00),
|
||||
'Bonk Fairy (Light)': 0x71,
|
||||
'Bonk Fairy (Dark)': 0x71,
|
||||
'Lake Hylia Healer Fairy': 0x5E,
|
||||
'Swamp Healer Fairy': 0x5E,
|
||||
'Light Hype Fairy': 0x5E,
|
||||
'Desert Healer Fairy': 0x5E,
|
||||
'Dark Lake Hylia Healer Fairy': 0x5E,
|
||||
'Dark Lake Hylia Ledge Healer Fairy': 0x5E,
|
||||
'Dark Desert Healer Fairy': 0x5E,
|
||||
'Mire Healer Fairy': 0x5E,
|
||||
'Dark Death Mountain Healer Fairy': 0x5E,
|
||||
'Fortune Teller (Light)': 0x65,
|
||||
'Lake Hylia Fortune Teller': 0x65,
|
||||
@@ -2506,8 +2506,8 @@ exit_ids = {'Links House Exit': (0x01, 0x00),
|
||||
'Chicken House': 0x4B,
|
||||
'Aginahs Cave': 0x4D,
|
||||
'Sahasrahlas Hut': 0x45,
|
||||
'Cave Shop (Lake Hylia)': 0x58,
|
||||
'Cave Shop (Dark Death Mountain)': 0x58,
|
||||
'Lake Hylia Shop': 0x58,
|
||||
'Dark Death Mountain Shop': 0x58,
|
||||
'Capacity Upgrade': 0x5D,
|
||||
'Blacksmiths Hut': 0x64,
|
||||
'Sick Kids House': 0x40,
|
||||
@@ -2538,21 +2538,21 @@ exit_ids = {'Links House Exit': (0x01, 0x00),
|
||||
'Big Bomb Shop': 0x53,
|
||||
'Village of Outcasts Shop': 0x60,
|
||||
'Dark Lake Hylia Shop': 0x60,
|
||||
'Dark World Lumberjack Shop': 0x60,
|
||||
'Dark World Potion Shop': 0x60,
|
||||
'Dark Lumberjack Shop': 0x60,
|
||||
'Dark Potion Shop': 0x60,
|
||||
'Dark Lake Hylia Ledge Spike Cave': 0x70,
|
||||
'Dark Lake Hylia Ledge Hint': 0x6A,
|
||||
'Hype Cave': 0x3D,
|
||||
'Brewery': 0x48,
|
||||
'C-Shaped House': 0x54,
|
||||
'Chest Game': 0x47,
|
||||
'Dark World Hammer Peg Cave': 0x83,
|
||||
'Hammer Peg Cave': 0x83,
|
||||
'Red Shield Shop': 0x57,
|
||||
'Dark Sanctuary Hint': 0x5A,
|
||||
'Fortune Teller (Dark)': 0x66,
|
||||
'Archery Game': 0x59,
|
||||
'Mire Shed': 0x5F,
|
||||
'Dark Desert Hint': 0x62,
|
||||
'Mire Hint': 0x62,
|
||||
'Spike Cave': 0x41,
|
||||
'Mimic Cave': 0x4F,
|
||||
'Kakariko Well (top)': 0x80,
|
||||
|
||||
@@ -3,10 +3,10 @@ from DoorShuffle import link_doors
|
||||
from Doors import create_doors
|
||||
from Dungeons import create_dungeons, get_dungeon_item_pool
|
||||
from OverworldShuffle import link_overworld
|
||||
from EntranceShuffle import link_inverted_entrances
|
||||
from EntranceShuffle import link_entrances
|
||||
from ItemList import generate_itempool, difficulties
|
||||
from Items import ItemFactory
|
||||
from Regions import create_regions, mark_light_world_regions, create_dungeon_regions, create_shops
|
||||
from Regions import create_regions, mark_light_dark_world_regions, create_dungeon_regions, create_shops
|
||||
from RoomData import create_rooms
|
||||
from Rules import set_rules
|
||||
from test.TestBase import TestBase
|
||||
@@ -25,7 +25,7 @@ class TestInverted(TestBase):
|
||||
create_rooms(self.world, 1)
|
||||
create_dungeons(self.world, 1)
|
||||
link_overworld(self.world, 1)
|
||||
link_inverted_entrances(self.world, 1)
|
||||
link_entrances(self.world, 1)
|
||||
link_doors(self.world, 1)
|
||||
generate_itempool(self.world, 1)
|
||||
self.world.required_medallions[1] = ['Ether', 'Quake']
|
||||
@@ -33,5 +33,5 @@ class TestInverted(TestBase):
|
||||
self.world.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
|
||||
self.world.get_location('Agahnim 1', 1).item = None
|
||||
self.world.get_location('Agahnim 2', 1).item = None
|
||||
mark_light_world_regions(self.world, 1)
|
||||
mark_light_dark_world_regions(self.world, 1)
|
||||
set_rules(self.world, 1)
|
||||
|
||||
@@ -4,6 +4,7 @@ from BaseClasses import World
|
||||
from Dungeons import create_dungeons
|
||||
from EntranceShuffle import connect_entrance, Inverted_LW_Entrances, Inverted_LW_Dungeon_Entrances, Inverted_LW_Single_Cave_Doors, Inverted_Old_Man_Entrances, Inverted_DW_Entrances, Inverted_DW_Dungeon_Entrances, Inverted_DW_Single_Cave_Doors, \
|
||||
Inverted_LW_Entrances_Must_Exit, Inverted_LW_Dungeon_Entrances_Must_Exit, Inverted_Bomb_Shop_Multi_Cave_Doors, Inverted_Bomb_Shop_Single_Cave_Doors, Inverted_Blacksmith_Single_Cave_Doors, Inverted_Blacksmith_Multi_Cave_Doors
|
||||
from Regions import create_regions
|
||||
from ItemList import difficulties
|
||||
from Rules import set_inverted_big_bomb_rules
|
||||
from test.inverted.TestInverted import TestInverted
|
||||
@@ -20,7 +21,7 @@ class TestInvertedBombRules(TestInverted):
|
||||
entrance = self.world.get_entrance(entrance_name, 1)
|
||||
entrance.connected_region = None
|
||||
self.world.get_region('Big Bomb Shop', 1).entrances = []
|
||||
connect_entrance(self.world, entrance, 'Links House', 1)
|
||||
connect_entrance(self.world, entrance, 'Big Bomb Shop', 1)
|
||||
set_inverted_big_bomb_rules(self.world, 1)
|
||||
entrance.connected_region.entrances.remove(entrance)
|
||||
entrance.connected_region = None
|
||||
@@ -35,7 +36,7 @@ class TestInvertedBombRules(TestInverted):
|
||||
for entrance_name in ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)']:
|
||||
entrance = self.world.get_entrance(entrance_name, 1)
|
||||
self.world.get_region('Big Bomb Shop', 1).entrances = []
|
||||
connect_entrance(self.world, entrance, 'Links House', 1)
|
||||
connect_entrance(self.world, entrance, 'Big Bomb Shop', 1)
|
||||
with self.assertRaises(Exception):
|
||||
set_inverted_big_bomb_rules(self.world, 1)
|
||||
entrance.connected_region.entrances.remove(entrance)
|
||||
|
||||
@@ -49,16 +49,15 @@ class TestEntrances(TestInverted):
|
||||
["Tower of Hera", True, ["Moon Pearl", "Hammer", "Hookshot", "Progressive Glove", "Ocarina"]],
|
||||
["Tower of Hera", True, ["Moon Pearl", "Hammer", "Beat Agahnim 1", "Ocarina", "Hookshot"]],
|
||||
|
||||
# Agahnim's Tower (Inverted)
|
||||
["Ganons Tower", False, []],
|
||||
["Ganons Tower", False, [], ["Ocarina", "Lamp"]],
|
||||
["Ganons Tower", False, [], ["Ocarina", "Progressive Glove"]],
|
||||
["Ganons Tower", False, [], ["Moon Pearl", "Lamp"]],
|
||||
["Ganons Tower", False, [], ["Moon Pearl", "Progressive Glove"]],
|
||||
["Ganons Tower", True, ["Lamp", "Progressive Glove"]],
|
||||
["Ganons Tower", True, ["Ocarina", "Beat Agahnim 1", "Moon Pearl"]],
|
||||
["Ganons Tower", True, ["Ocarina", "Progressive Glove", "Progressive Glove", "Moon Pearl"]],
|
||||
["Ganons Tower", True, ["Ocarina", "Progressive Glove", "Hammer", "Moon Pearl"]],
|
||||
["Agahnims Tower", False, []],
|
||||
["Agahnims Tower", False, [], ["Ocarina", "Lamp"]],
|
||||
["Agahnims Tower", False, [], ["Ocarina", "Progressive Glove"]],
|
||||
["Agahnims Tower", False, [], ["Moon Pearl", "Lamp"]],
|
||||
["Agahnims Tower", False, [], ["Moon Pearl", "Progressive Glove"]],
|
||||
["Agahnims Tower", True, ["Lamp", "Progressive Glove"]],
|
||||
["Agahnims Tower", True, ["Ocarina", "Beat Agahnim 1", "Moon Pearl"]],
|
||||
["Agahnims Tower", True, ["Ocarina", "Progressive Glove", "Progressive Glove", "Moon Pearl"]],
|
||||
["Agahnims Tower", True, ["Ocarina", "Progressive Glove", "Hammer", "Moon Pearl"]],
|
||||
|
||||
["Palace of Darkness", False, []],
|
||||
["Palace of Darkness", False, [], ["Hammer", "Flippers", "Magic Mirror", "Ocarina"]],
|
||||
@@ -105,16 +104,15 @@ class TestEntrances(TestInverted):
|
||||
["Turtle Rock", True, ["Quake", "Progressive Sword", "Progressive Glove", "Hammer", "Moon Pearl", "Ocarina"]],
|
||||
["Turtle Rock", True, ["Quake", "Progressive Sword", "Beat Agahnim 1", "Moon Pearl", "Ocarina"]],
|
||||
|
||||
# Ganon's Tower (Inverted)
|
||||
["Agahnims Tower", False, []],
|
||||
["Agahnims Tower", False, [], ["Crystal 1"]],
|
||||
["Agahnims Tower", False, [], ["Crystal 2"]],
|
||||
["Agahnims Tower", False, [], ["Crystal 3"]],
|
||||
["Agahnims Tower", False, [], ["Crystal 4"]],
|
||||
["Agahnims Tower", False, [], ["Crystal 5"]],
|
||||
["Agahnims Tower", False, [], ["Crystal 6"]],
|
||||
["Agahnims Tower", False, [], ["Crystal 7"]],
|
||||
["Agahnims Tower", True, ["Beat Agahnim 1", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||
["Agahnims Tower", True, ["Moon Pearl", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||
["Agahnims Tower", True, ["Moon Pearl", "Hammer", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||
["Ganons Tower", False, []],
|
||||
["Ganons Tower", False, [], ["Crystal 1"]],
|
||||
["Ganons Tower", False, [], ["Crystal 2"]],
|
||||
["Ganons Tower", False, [], ["Crystal 3"]],
|
||||
["Ganons Tower", False, [], ["Crystal 4"]],
|
||||
["Ganons Tower", False, [], ["Crystal 5"]],
|
||||
["Ganons Tower", False, [], ["Crystal 6"]],
|
||||
["Ganons Tower", False, [], ["Crystal 7"]],
|
||||
["Ganons Tower", True, ["Beat Agahnim 1", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||
["Ganons Tower", True, ["Moon Pearl", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||
["Ganons Tower", True, ["Moon Pearl", "Hammer", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||
])
|
||||
@@ -3,11 +3,11 @@ from DoorShuffle import link_doors
|
||||
from Doors import create_doors
|
||||
from Dungeons import create_dungeons, get_dungeon_item_pool
|
||||
from OverworldShuffle import link_overworld
|
||||
from EntranceShuffle import link_inverted_entrances
|
||||
from EntranceShuffle import link_entrances
|
||||
from ItemList import generate_itempool, difficulties
|
||||
from Items import ItemFactory
|
||||
from OverworldGlitchRules import create_owg_connections
|
||||
from Regions import create_regions, mark_light_world_regions, create_dungeon_regions, create_shops
|
||||
from Regions import create_regions, mark_light_dark_world_regions, create_dungeon_regions, create_shops
|
||||
from RoomData import create_rooms
|
||||
from Rules import set_rules
|
||||
from test.TestBase import TestBase
|
||||
@@ -27,7 +27,7 @@ class TestInvertedOWG(TestBase):
|
||||
create_dungeons(self.world, 1)
|
||||
link_overworld(self.world, 1)
|
||||
create_owg_connections(self.world, 1)
|
||||
link_inverted_entrances(self.world, 1)
|
||||
link_entrances(self.world, 1)
|
||||
link_doors(self.world, 1)
|
||||
generate_itempool(self.world, 1)
|
||||
self.world.required_medallions[1] = ['Ether', 'Quake']
|
||||
@@ -37,5 +37,5 @@ class TestInvertedOWG(TestBase):
|
||||
self.world.get_location('Agahnim 2', 1).item = None
|
||||
self.world.precollected_items.clear()
|
||||
self.world.itempool.append(ItemFactory('Pegasus Boots', 1))
|
||||
mark_light_world_regions(self.world, 1)
|
||||
mark_light_dark_world_regions(self.world, 1)
|
||||
set_rules(self.world, 1)
|
||||
|
||||
@@ -7,7 +7,7 @@ from EntranceShuffle import link_entrances
|
||||
from ItemList import difficulties, generate_itempool
|
||||
from Items import ItemFactory
|
||||
from OverworldGlitchRules import create_owg_connections
|
||||
from Regions import create_regions, create_dungeon_regions, create_shops, mark_dark_world_regions
|
||||
from Regions import create_regions, create_dungeon_regions, create_shops, mark_light_dark_world_regions
|
||||
from RoomData import create_rooms
|
||||
from Rules import set_rules
|
||||
from test.TestBase import TestBase
|
||||
@@ -37,5 +37,5 @@ class TestVanillaOWG(TestBase):
|
||||
self.world.get_location('Agahnim 2', 1).item = None
|
||||
self.world.precollected_items.clear()
|
||||
self.world.itempool.append(ItemFactory('Pegasus Boots', 1))
|
||||
mark_dark_world_regions(self.world, 1)
|
||||
mark_light_dark_world_regions(self.world, 1)
|
||||
set_rules(self.world, 1)
|
||||
@@ -104,6 +104,7 @@ def test_loop(tests, entrance_set, exit_set, ctr, shuffle_mode, main_mode, links
|
||||
{}, {}, {}, {}, {}, True, {}, [], {})
|
||||
world.customizer = False
|
||||
world.shufflelinks = {1: links}
|
||||
world.shuffletavern = {1: False}
|
||||
create_regions(world, 1)
|
||||
create_dungeon_regions(world, 1)
|
||||
# print(f'Linking seed {seed}')
|
||||
|
||||
@@ -6,7 +6,7 @@ from OverworldShuffle import link_overworld
|
||||
from EntranceShuffle import link_entrances
|
||||
from ItemList import difficulties, generate_itempool
|
||||
from Items import ItemFactory
|
||||
from Regions import create_regions, create_dungeon_regions, create_shops, mark_dark_world_regions
|
||||
from Regions import create_regions, create_dungeon_regions, create_shops, mark_light_dark_world_regions
|
||||
from RoomData import create_rooms
|
||||
from Rules import set_rules
|
||||
from test.TestBase import TestBase
|
||||
@@ -33,5 +33,5 @@ class TestVanilla(TestBase):
|
||||
self.world.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
|
||||
self.world.get_location('Agahnim 1', 1).item = None
|
||||
self.world.get_location('Agahnim 2', 1).item = None
|
||||
mark_dark_world_regions(self.world, 1)
|
||||
mark_light_dark_world_regions(self.world, 1)
|
||||
set_rules(self.world, 1)
|
||||
|
||||
Reference in New Issue
Block a user