Merge branch 'OverworldShuffleDev' into OverworldShuffle
This commit is contained in:
@@ -1,5 +1,12 @@
|
||||
# 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
|
||||
- Moved Crossed to its own checkbox option
|
||||
- Removed Legacy ER shuffles
|
||||
|
||||
@@ -1868,7 +1868,7 @@ def find_accessible_entrances(world, player, builder):
|
||||
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 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
|
||||
if connect.name in entrances and connect not in visited_entrances:
|
||||
visited_entrances.append(connect.name)
|
||||
|
||||
@@ -2369,13 +2369,24 @@ inverted_default_dungeon_connections = [('Ganons Tower', 'Agahnims Tower Portal'
|
||||
|
||||
indirect_connections = {
|
||||
'Turtle Rock Ledge': 'Turtle Rock',
|
||||
'Pyramid Area': 'Pyramid Fairy',
|
||||
#'East Dark World': 'Pyramid Fairy',
|
||||
'Big Bomb Shop': 'Pyramid Fairy',
|
||||
#'East Dark World': 'Pyramid Fairy',
|
||||
'Pyramid Area': 'Pyramid Fairy', # HC Ledge/Courtyard
|
||||
#'Dark Desert': 'Pyramid Fairy',
|
||||
'Misery Mire Area': 'Pyramid Fairy', # Desert/Checkerboard Ledge
|
||||
#'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',
|
||||
'Dig Game Ledge': 'Pyramid Fairy', # Brother House Left
|
||||
'Stumpy Approach Area': 'Pyramid Fairy', # Cave 45
|
||||
# Inverted Cases
|
||||
#'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'
|
||||
}
|
||||
# format:
|
||||
|
||||
@@ -870,6 +870,7 @@ OWTileRegions = bidict({
|
||||
'Dark Chapel Area': 0x53,
|
||||
|
||||
'Dark Graveyard Area': 0x54,
|
||||
'Dark Graveyard North': 0x54,
|
||||
|
||||
'Qirn Jump Area': 0x55,
|
||||
'Qirn Jump East Bank': 0x55,
|
||||
|
||||
@@ -2,7 +2,7 @@ import RaceRandom as random, logging, copy
|
||||
from BaseClasses import OWEdge, WorldType, RegionType, Direction, Terrain, PolSlot, Entrance
|
||||
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):
|
||||
# setup mandatory connections
|
||||
@@ -230,15 +230,26 @@ def link_overworld(world, player):
|
||||
f += 1
|
||||
if f < len(forward_edge_sets):
|
||||
forward_set = forward_edge_sets[f]
|
||||
else:
|
||||
forward_set = None
|
||||
break
|
||||
f += 1
|
||||
while back_set[0] in connected_edges:
|
||||
b += 1
|
||||
if b < len(back_edge_sets):
|
||||
back_set = back_edge_sets[b]
|
||||
else:
|
||||
back_set = None
|
||||
break
|
||||
b += 1
|
||||
assert len(forward_set) == len(back_set)
|
||||
for (forward_edge, back_edge) in zip(forward_set, back_set):
|
||||
connect_two_way(world, forward_edge, back_edge, player, connected_edges)
|
||||
if forward_set is not None and back_set is not None:
|
||||
assert len(forward_set) == len(back_set)
|
||||
for (forward_edge, back_edge) in zip(forward_set, back_set):
|
||||
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:
|
||||
# vanilla/crossed shuffle
|
||||
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 Rock (Top)', 'Skull Woods Pass East Bottom 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 East Water Drop', 'Qirn Jump Water'), #flippers
|
||||
('Qirn Jump Pier', 'Qirn Jump East Bank'),
|
||||
|
||||
@@ -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, '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 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 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),
|
||||
|
||||
2
Rom.py
2
Rom.py
@@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx
|
||||
|
||||
|
||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||
RANDOMIZERBASEHASH = '99f3f57ab2c9449172cade4927a462d6'
|
||||
RANDOMIZERBASEHASH = '3f7cd4772ea4a3f503691ef8807f5d84'
|
||||
|
||||
|
||||
class JsonRom(object):
|
||||
|
||||
3
Rules.py
3
Rules.py
@@ -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 Rock (Top)', 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 (South)', 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':
|
||||
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 (!)
|
||||
add_bunny_rule(world.get_entrance('Turtle Rock', player), player)
|
||||
add_bunny_rule(world.get_entrance('Misery Mire', player), player)
|
||||
|
||||
@@ -341,7 +341,7 @@ OWNewDestination:
|
||||
sep #$30 : lda OWOppSlotOffset,y : !add $04 : asl : and #$7f : sta $700
|
||||
|
||||
; 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
|
||||
|
||||
; toggle bunny mode
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user