Add new full_cross_worlds shuffle
Untested, seed generates, but might be horrifically broken.
This commit is contained in:
parent
124e3b69de
commit
cd18be71d9
|
@ -267,7 +267,7 @@ class World(object):
|
||||||
marksequence(['standard', 'open', 'swordless'], self.mode)
|
marksequence(['standard', 'open', 'swordless'], self.mode)
|
||||||
markbool(self.place_dungeon_items)
|
markbool(self.place_dungeon_items)
|
||||||
marksequence(['ganon', 'pedestal', 'dungeons', 'triforcehunt', 'crystals'], self.goal)
|
marksequence(['ganon', 'pedestal', 'dungeons', 'triforcehunt', 'crystals'], self.goal)
|
||||||
marksequence(['vanilla', 'simple', 'restricted', 'full', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple'], self.shuffle)
|
marksequence(['vanilla', 'simple', 'restricted', 'full', 'full_cross_worlds','full_legacy', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple'], self.shuffle)
|
||||||
marksequence(['easy', 'normal', 'hard', 'expert', 'insane'], self.difficulty)
|
marksequence(['easy', 'normal', 'hard', 'expert', 'insane'], self.difficulty)
|
||||||
marksequence(['none', 'display', 'timed', 'timed-ohko', 'timed-countdown', 'ohko'], self.timer)
|
marksequence(['none', 'display', 'timed', 'timed-ohko', 'timed-countdown', 'ohko'], self.timer)
|
||||||
marksequence(['on', 'off', 'random'], self.progressive)
|
marksequence(['on', 'off', 'random'], self.progressive)
|
||||||
|
|
|
@ -120,7 +120,7 @@ def start():
|
||||||
slightly biased to placing progression items with
|
slightly biased to placing progression items with
|
||||||
less restrictions.
|
less restrictions.
|
||||||
''')
|
''')
|
||||||
parser.add_argument('--shuffle', default='full', const='full', nargs='?', choices=['vanilla', 'simple', 'restricted', 'full', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple'],
|
parser.add_argument('--shuffle', default='full', const='full', nargs='?', choices=['vanilla', 'simple', 'restricted', 'full','full_cross_worlds','full_legacy', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple'],
|
||||||
help='''\
|
help='''\
|
||||||
Select Entrance Shuffling Algorithm. (default: %(default)s)
|
Select Entrance Shuffling Algorithm. (default: %(default)s)
|
||||||
Full: Mix cave and dungeon entrances freely.
|
Full: Mix cave and dungeon entrances freely.
|
||||||
|
|
|
@ -277,9 +277,83 @@ def link_entrances(world):
|
||||||
|
|
||||||
# place remaining doors
|
# place remaining doors
|
||||||
connect_doors(world, doors, door_targets)
|
connect_doors(world, doors, door_targets)
|
||||||
elif world.shuffle == 'new_full_cross_worlds':
|
elif world.shuffle == 'full_cross_worlds':
|
||||||
# TODO
|
skull_woods_shuffle(world)
|
||||||
raise NotImplementedError()
|
|
||||||
|
entrances = list(LW_Entrances + LW_Dungeon_Entrances + LW_Single_Cave_Doors + Old_Man_Entrances + DW_Entrances + DW_Dungeon_Entrances + DW_Single_Cave_Doors)
|
||||||
|
must_exits = list(DW_Entrances_Must_Exit + DW_Dungeon_Entrances_Must_Exit + LW_Dungeon_Entrances_Must_Exit)
|
||||||
|
|
||||||
|
old_man_entrances = list(Old_Man_Entrances + ['Tower of Hera'])
|
||||||
|
caves = list(Cave_Exits + Dungeon_Exits + Cave_Three_Exits) # don't need to consider three exit caves, have one exit caves to avoid parity issues
|
||||||
|
bomb_shop_doors = list(Bomb_Shop_Single_Cave_Doors + Bomb_Shop_Multi_Cave_Doors)
|
||||||
|
blacksmith_doors = list(Blacksmith_Single_Cave_Doors + Blacksmith_Multi_Cave_Doors)
|
||||||
|
door_targets = list(Single_Cave_Targets)
|
||||||
|
|
||||||
|
# tavern back door cannot be shuffled yet
|
||||||
|
connect_doors(world, ['Tavern North'], ['Tavern'])
|
||||||
|
|
||||||
|
if world.mode == 'standard':
|
||||||
|
# must connect front of hyrule castle to do escape
|
||||||
|
connect_two_way(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)')
|
||||||
|
else:
|
||||||
|
caves.append(('Hyrule Castle Exit (South)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)'))
|
||||||
|
entrances.append('Hyrule Castle Entrance (South)')
|
||||||
|
|
||||||
|
if not world.shuffle_ganon:
|
||||||
|
connect_two_way(world, 'Ganons Tower', 'Ganons Tower Exit')
|
||||||
|
else:
|
||||||
|
entrances.append('Ganons Tower')
|
||||||
|
caves.append('Ganons Tower Exit')
|
||||||
|
|
||||||
|
connect_mandatory_exits(world, entrances, caves, must_exits)
|
||||||
|
|
||||||
|
if world.mode == 'standard':
|
||||||
|
# rest of hyrule castle must be in light world to avoid fake darkworld stuff
|
||||||
|
connect_caves(world, entrances, [], [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')])
|
||||||
|
|
||||||
|
# place old man, has limited options
|
||||||
|
# exit has to come from specific set of doors, the entrance is free to move about
|
||||||
|
old_man_entrances = [door for door in old_man_entrances if door in entrances]
|
||||||
|
random.shuffle(old_man_entrances)
|
||||||
|
old_man_exit = old_man_entrances.pop()
|
||||||
|
connect_two_way(world, old_man_exit, 'Old Man Cave Exit (East)')
|
||||||
|
entrances.remove(old_man_exit)
|
||||||
|
|
||||||
|
# place blacksmith, has limited options
|
||||||
|
# cannot place it anywhere already taken (or that are otherwise not eligable for placement)
|
||||||
|
blacksmith_doors = [door for door in blacksmith_doors if door in entrances]
|
||||||
|
random.shuffle(blacksmith_doors)
|
||||||
|
blacksmith_hut = blacksmith_doors.pop()
|
||||||
|
connect_entrance(world, blacksmith_hut, 'Blacksmiths Hut')
|
||||||
|
entrances.remove(blacksmith_hut)
|
||||||
|
bomb_shop_doors.extend(blacksmith_doors)
|
||||||
|
|
||||||
|
# place dam and pyramid fairy, have limited options
|
||||||
|
|
||||||
|
# cannot place it anywhere already taken (or that are otherwise not eligable for placement)
|
||||||
|
bomb_shop_doors = [door for door in bomb_shop_doors if door in entrances]
|
||||||
|
random.shuffle(bomb_shop_doors)
|
||||||
|
bomb_shop = bomb_shop_doors.pop()
|
||||||
|
connect_entrance(world, bomb_shop, 'Big Bomb Shop')
|
||||||
|
entrances.remove(bomb_shop)
|
||||||
|
|
||||||
|
|
||||||
|
# place the old man cave's entrance somewhere in the light world
|
||||||
|
random.shuffle(entrances)
|
||||||
|
old_man_entrance = entrances.pop()
|
||||||
|
connect_two_way(world, old_man_entrance, 'Old Man Cave Exit (West)')
|
||||||
|
|
||||||
|
# place Old Man House in Light World, so using the s&q point does not cause fake dark world
|
||||||
|
connect_caves(world, entrances, [], [('Old Man House Exit (Bottom)', 'Old Man House Exit (Top)')])
|
||||||
|
|
||||||
|
# now scramble the rest
|
||||||
|
connect_caves(world, entrances, [], caves)
|
||||||
|
|
||||||
|
# scramble holes
|
||||||
|
scramble_holes(world)
|
||||||
|
|
||||||
|
# place remaining doors
|
||||||
|
connect_doors(world, entrances, door_targets)
|
||||||
elif world.shuffle == 'full_legacy':
|
elif world.shuffle == 'full_legacy':
|
||||||
skull_woods_shuffle(world)
|
skull_woods_shuffle(world)
|
||||||
|
|
||||||
|
|
2
Gui.py
2
Gui.py
|
@ -194,7 +194,7 @@ def guiMain(args=None):
|
||||||
shuffleFrame = Frame(drowDownFrame)
|
shuffleFrame = Frame(drowDownFrame)
|
||||||
shuffleVar = StringVar()
|
shuffleVar = StringVar()
|
||||||
shuffleVar.set('full')
|
shuffleVar.set('full')
|
||||||
shuffleOptionMenu = OptionMenu(shuffleFrame, shuffleVar, 'vanilla', 'simple', 'restricted', 'full', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple')
|
shuffleOptionMenu = OptionMenu(shuffleFrame, shuffleVar, 'vanilla', 'simple', 'restricted', 'full', 'full_cross_worlds', 'full_legacy', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple')
|
||||||
shuffleOptionMenu.pack(side=RIGHT)
|
shuffleOptionMenu.pack(side=RIGHT)
|
||||||
shuffleLabel = Label(shuffleFrame, text='Entrance shuffle algorithm')
|
shuffleLabel = Label(shuffleFrame, text='Entrance shuffle algorithm')
|
||||||
shuffleLabel.pack(side=LEFT)
|
shuffleLabel.pack(side=LEFT)
|
||||||
|
|
2
Rom.py
2
Rom.py
|
@ -15,7 +15,7 @@ from Items import ItemFactory
|
||||||
|
|
||||||
|
|
||||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||||
RANDOMIZERBASEHASH = 'fbd91e1eeaf168cff1a6d58c6e193761'
|
RANDOMIZERBASEHASH = '9f3c573c35520d76c9750893436d6ba7'
|
||||||
|
|
||||||
|
|
||||||
class JsonRom(object):
|
class JsonRom(object):
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue