Merge branch 'OverworldShuffleDev' into OverworldShuffle

This commit is contained in:
codemann8
2021-08-19 20:38:07 -05:00
10 changed files with 46 additions and 10 deletions

View File

@@ -1,5 +1,12 @@
# Changelog # Changelog
### 0.1.8.1
- Fixed issue with activating flute in DW (OW Mixed)
- Fixed issue with Parallel+Crossed not generating
- Fixed issue with Standard not generating
- Fixed issue with Swordless not generating
- Fixed logic for Graveyard Ledge and Kings Tomb
### 0.1.8.0 ### 0.1.8.0
- Moved Crossed to its own checkbox option - Moved Crossed to its own checkbox option
- Removed Legacy ER shuffles - Removed Legacy ER shuffles

View File

@@ -1868,7 +1868,7 @@ def find_accessible_entrances(world, player, builder):
connect = ext.connected_region connect = ext.connected_region
if connect is None or ext.door and ext.door.blocked: if connect is None or ext.door and ext.door.blocked:
continue continue
if world.mode[player] == 'standard' and builder.name == 'Hyrule Castle' and 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)', 'Top of Pyramid (Inner)', 'Inverted Pyramid Entrance']):
continue continue
if connect.name in entrances and connect not in visited_entrances: if connect.name in entrances and connect not in visited_entrances:
visited_entrances.append(connect.name) visited_entrances.append(connect.name)

View File

@@ -2369,13 +2369,24 @@ inverted_default_dungeon_connections = [('Ganons Tower', 'Agahnims Tower Portal'
indirect_connections = { indirect_connections = {
'Turtle Rock Ledge': 'Turtle Rock', 'Turtle Rock Ledge': 'Turtle Rock',
'Pyramid Area': 'Pyramid Fairy',
#'East Dark World': 'Pyramid Fairy',
'Big Bomb Shop': 'Pyramid Fairy', 'Big Bomb Shop': 'Pyramid Fairy',
#'East Dark World': 'Pyramid Fairy',
'Pyramid Area': 'Pyramid Fairy', # HC Ledge/Courtyard
#'Dark Desert': 'Pyramid Fairy', #'Dark Desert': 'Pyramid Fairy',
'Misery Mire Area': 'Pyramid Fairy', # Desert/Checkerboard Ledge
#'West Dark World': 'Pyramid Fairy', #'West Dark World': 'Pyramid Fairy',
'Dark Chapel Area': 'Pyramid Fairy', # Bonk Rocks
'Dark Graveyard North': 'Pyramid Fairy', # Graveyard Ledge/Kings Tomb
#'South Dark World': 'Pyramid Fairy', #'South Dark World': 'Pyramid Fairy',
'Dig Game Ledge': 'Pyramid Fairy', # Brother House Left
'Stumpy Approach Area': 'Pyramid Fairy', # Cave 45
# Inverted Cases
#'Light World': 'Pyramid Fairy', #'Light World': 'Pyramid Fairy',
'Lost Woods West Area': 'Pyramid Fairy', # Skull Woods Back
'East Death Mountain (Top East)': 'Pyramid Fairy', # Floating Island
'Blacksmith Area': 'Pyramid Fairy', # Hammerpegs
'Forgotten Forest Area': 'Pyramid Fairy', # Shield Shop
'Desert Area': 'Pyramid Fairy', # Mire Area
'Old Man Cave': 'Old Man S&Q' 'Old Man Cave': 'Old Man S&Q'
} }
# format: # format:

View File

@@ -870,6 +870,7 @@ OWTileRegions = bidict({
'Dark Chapel Area': 0x53, 'Dark Chapel Area': 0x53,
'Dark Graveyard Area': 0x54, 'Dark Graveyard Area': 0x54,
'Dark Graveyard North': 0x54,
'Qirn Jump Area': 0x55, 'Qirn Jump Area': 0x55,
'Qirn Jump East Bank': 0x55, 'Qirn Jump East Bank': 0x55,

View File

@@ -2,7 +2,7 @@ import RaceRandom as random, logging, copy
from BaseClasses import OWEdge, WorldType, RegionType, Direction, Terrain, PolSlot, Entrance from BaseClasses import OWEdge, WorldType, RegionType, Direction, Terrain, PolSlot, Entrance
from OWEdges import OWTileRegions, OWTileGroups, OWEdgeGroups, OpenStd, parallel_links, IsParallel from OWEdges import OWTileRegions, OWTileGroups, OWEdgeGroups, OpenStd, parallel_links, IsParallel
__version__ = '0.1.8.0-u' __version__ = '0.1.8.1-u'
def link_overworld(world, player): def link_overworld(world, player):
# setup mandatory connections # setup mandatory connections
@@ -230,15 +230,26 @@ def link_overworld(world, player):
f += 1 f += 1
if f < len(forward_edge_sets): if f < len(forward_edge_sets):
forward_set = forward_edge_sets[f] forward_set = forward_edge_sets[f]
else:
forward_set = None
break
f += 1 f += 1
while back_set[0] in connected_edges: while back_set[0] in connected_edges:
b += 1 b += 1
if b < len(back_edge_sets): if b < len(back_edge_sets):
back_set = back_edge_sets[b] back_set = back_edge_sets[b]
else:
back_set = None
break
b += 1 b += 1
if forward_set is not None and back_set is not None:
assert len(forward_set) == len(back_set) assert len(forward_set) == len(back_set)
for (forward_edge, back_edge) in zip(forward_set, back_set): for (forward_edge, back_edge) in zip(forward_set, back_set):
connect_two_way(world, forward_edge, back_edge, player, connected_edges) connect_two_way(world, forward_edge, back_edge, player, connected_edges)
elif forward_set is not None:
logging.getLogger('').warning("Edge '%s' could not find a valid connection" % forward_set[0])
elif back_set is not None:
logging.getLogger('').warning("Edge '%s' could not find a valid connection" % back_set[0])
else: else:
# vanilla/crossed shuffle # vanilla/crossed shuffle
for (forward_edge_sets, back_edge_sets) in groups: for (forward_edge_sets, back_edge_sets) in groups:
@@ -964,6 +975,8 @@ mandatory_connections = [# Whirlpool Connections
('Skull Woods Pass Bush Row (East)', 'Skull Woods Pass West Area'), #pearl ('Skull Woods Pass Bush Row (East)', 'Skull Woods Pass West Area'), #pearl
('Skull Woods Pass Rock (Top)', 'Skull Woods Pass East Bottom Area'), #mitts ('Skull Woods Pass Rock (Top)', 'Skull Woods Pass East Bottom Area'), #mitts
('Skull Woods Pass Rock (Bottom)', 'Skull Woods Pass East Top Area'), #mitts ('Skull Woods Pass Rock (Bottom)', 'Skull Woods Pass East Top Area'), #mitts
('Dark Graveyard Bush (South)', 'Dark Graveyard North'), #pearl
('Dark Graveyard Bush (North)', 'Dark Graveyard Area'), #pearl
('Qirn Jump Water Drop', 'Qirn Jump Water'), #flippers ('Qirn Jump Water Drop', 'Qirn Jump Water'), #flippers
('Qirn Jump East Water Drop', 'Qirn Jump Water'), #flippers ('Qirn Jump East Water Drop', 'Qirn Jump Water'), #flippers
('Qirn Jump Pier', 'Qirn Jump East Bank'), ('Qirn Jump Pier', 'Qirn Jump East Bank'),

View File

@@ -148,7 +148,8 @@ def create_regions(world, player):
create_dw_region(player, 'Dark Fortune Area', None, ['Fortune Teller (Dark)', 'Kakariko Fortune Mirror Spot', 'Dark Fortune NE', 'Dark Fortune EN', 'Dark Fortune ES', 'Dark Fortune SC']), create_dw_region(player, 'Dark Fortune Area', None, ['Fortune Teller (Dark)', 'Kakariko Fortune Mirror Spot', 'Dark Fortune NE', 'Dark Fortune EN', 'Dark Fortune ES', 'Dark Fortune SC']),
create_dw_region(player, 'Outcast Pond Area', None, ['Kakariko Pond Mirror Spot', 'Outcast Pond NE', 'Outcast Pond WN', 'Outcast Pond WS', 'Outcast Pond SW', 'Outcast Pond SE', 'Outcast Pond EN', 'Outcast Pond ES']), create_dw_region(player, 'Outcast Pond Area', None, ['Kakariko Pond Mirror Spot', 'Outcast Pond NE', 'Outcast Pond WN', 'Outcast Pond WS', 'Outcast Pond SW', 'Outcast Pond SE', 'Outcast Pond EN', 'Outcast Pond ES']),
create_dw_region(player, 'Dark Chapel Area', None, ['Dark Sanctuary Hint', 'Sanctuary Mirror Spot', 'Bonk Rock Ledge Mirror Spot', 'Dark Chapel WN', 'Dark Chapel WS', 'Dark Chapel EC']), create_dw_region(player, 'Dark Chapel Area', None, ['Dark Sanctuary Hint', 'Sanctuary Mirror Spot', 'Bonk Rock Ledge Mirror Spot', 'Dark Chapel WN', 'Dark Chapel WS', 'Dark Chapel EC']),
create_dw_region(player, 'Dark Graveyard Area', None, ['Graveyard Ledge Mirror Spot', 'Kings Grave Mirror Spot', 'Dark Graveyard WC', 'Dark Graveyard EC']), create_dw_region(player, 'Dark Graveyard Area', None, ['Dark Graveyard Bush (South)', 'Dark Graveyard WC', 'Dark Graveyard EC']),
create_dw_region(player, 'Dark Graveyard North', None, ['Graveyard Ledge Mirror Spot', 'Kings Grave Mirror Spot', 'Dark Graveyard Bush (North)']),
create_dw_region(player, 'Qirn Jump Area', None, ['Qirn Jump Water Drop', 'River Bend Mirror Spot', 'Qirn Jump WC', 'Qirn Jump SW']), create_dw_region(player, 'Qirn Jump Area', None, ['Qirn Jump Water Drop', 'River Bend Mirror Spot', 'Qirn Jump WC', 'Qirn Jump SW']),
create_dw_region(player, 'Qirn Jump East Bank', None, ['Qirn Jump East Water Drop', 'River Bend East Mirror Spot', 'Qirn Jump SE', 'Qirn Jump EC', 'Qirn Jump ES']), create_dw_region(player, 'Qirn Jump East Bank', None, ['Qirn Jump East Water Drop', 'River Bend East Mirror Spot', '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'], Terrain.Water), create_dw_region(player, 'Qirn Jump Water', None, ['Qirn Jump Pier', 'Qirn Jump Whirlpool', 'Qirn Jump EN', 'Qirn Jump SC'], Terrain.Water),

2
Rom.py
View File

@@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = '99f3f57ab2c9449172cade4927a462d6' RANDOMIZERBASEHASH = '3f7cd4772ea4a3f503691ef8807f5d84'
class JsonRom(object): class JsonRom(object):

View File

@@ -1263,6 +1263,8 @@ def ow_bunny_rules(world, player):
add_bunny_rule(world.get_entrance('Skull Woods Pass Bush Row (East)', player), player) add_bunny_rule(world.get_entrance('Skull Woods Pass Bush Row (East)', player), player)
add_bunny_rule(world.get_entrance('Skull Woods Pass Rock (Top)', player), player) add_bunny_rule(world.get_entrance('Skull Woods Pass Rock (Top)', player), player)
add_bunny_rule(world.get_entrance('Skull Woods Pass Rock (Bottom)', player), player) add_bunny_rule(world.get_entrance('Skull Woods Pass Rock (Bottom)', player), player)
add_bunny_rule(world.get_entrance('Dark Graveyard Bush (South)', player), player)
add_bunny_rule(world.get_entrance('Dark Graveyard Bush (North)', player), player)
add_bunny_rule(world.get_entrance('Dark Witch Rock (North)', player), player) add_bunny_rule(world.get_entrance('Dark Witch Rock (North)', player), player)
add_bunny_rule(world.get_entrance('Dark Witch Rock (South)', player), player) add_bunny_rule(world.get_entrance('Dark Witch Rock (South)', player), player)
add_bunny_rule(world.get_entrance('Catfish Approach Rocks (West)', player), player) add_bunny_rule(world.get_entrance('Catfish Approach Rocks (West)', player), player)
@@ -1487,6 +1489,7 @@ def swordless_rules(world, player):
if world.mode[player] != 'inverted': if world.mode[player] != 'inverted':
set_rule(world.get_entrance('Agahnims Tower', player), lambda state: state.has('Cape', player) or state.has('Hammer', player) or state.has('Beat Agahnim 1', 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('Hammer', player) or state.has('Beat Agahnim 1', 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_entrance('Turtle Rock', player), lambda state: state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock Ledge', 'Region', player)) # sword not required to use medallion for opening in swordless (!) set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock Ledge', 'Region', player)) # sword not required to use medallion for opening in swordless (!)
add_bunny_rule(world.get_entrance('Turtle Rock', player), player) add_bunny_rule(world.get_entrance('Turtle Rock', player), player)
add_bunny_rule(world.get_entrance('Misery Mire', player), player) add_bunny_rule(world.get_entrance('Misery Mire', player), player)

View File

@@ -341,7 +341,7 @@ OWNewDestination:
sep #$30 : lda OWOppSlotOffset,y : !add $04 : asl : and #$7f : sta $700 sep #$30 : lda OWOppSlotOffset,y : !add $04 : asl : and #$7f : sta $700
; crossed OW shuffle ; crossed OW shuffle
lda.l OWMode+1 : and.b #$02 : beq .return LDA.l OWMode+1 : AND.b #!FLAG_OW_CROSSED : beq .return
ldx $05 : lda.l OWTileWorldAssoc,x : sta.l $7ef3ca ; change world ldx $05 : lda.l OWTileWorldAssoc,x : sta.l $7ef3ca ; change world
; toggle bunny mode ; toggle bunny mode

Binary file not shown.