Added vanilla info for created regions and fixed initial errors.
This commit is contained in:
@@ -4,6 +4,7 @@ import logging
|
|||||||
|
|
||||||
|
|
||||||
from BaseClasses import RegionType, DoorType, Direction, RegionChunk
|
from BaseClasses import RegionType, DoorType, Direction, RegionChunk
|
||||||
|
from Items import ItemFactory
|
||||||
|
|
||||||
|
|
||||||
def link_doors(world, player):
|
def link_doors(world, player):
|
||||||
@@ -14,7 +15,7 @@ def link_doors(world, player):
|
|||||||
for exitName, regionName in mandatory_connections:
|
for exitName, regionName in mandatory_connections:
|
||||||
connect_simple_door(world, exitName, regionName, player)
|
connect_simple_door(world, exitName, regionName, player)
|
||||||
|
|
||||||
# These connection are because they are currently unable to be shuffled
|
# These connection are here because they are currently unable to be shuffled
|
||||||
for entrance, ext in spiral_staircases:
|
for entrance, ext in spiral_staircases:
|
||||||
connect_two_way(world, entrance, ext, player)
|
connect_two_way(world, entrance, ext, player)
|
||||||
for entrance, ext in straight_staircases:
|
for entrance, ext in straight_staircases:
|
||||||
@@ -26,6 +27,39 @@ def link_doors(world, player):
|
|||||||
for exitName, regionName in dungeon_warps:
|
for exitName, regionName in dungeon_warps:
|
||||||
connect_simple_door(world, exitName, regionName, player)
|
connect_simple_door(world, exitName, regionName, player)
|
||||||
|
|
||||||
|
# vanilla - todo: different modes
|
||||||
|
for entrance, ext in default_door_connections:
|
||||||
|
connect_two_way(world, entrance, ext, player)
|
||||||
|
for ent, ext in default_one_way_connections:
|
||||||
|
connect_one_way(world, ent, ext, player)
|
||||||
|
|
||||||
|
# vanilla dungeon items
|
||||||
|
ES = world.get_dungeon('Hyrule Castle', player)
|
||||||
|
ES.small_keys = [ItemFactory('Small Key (Escape)', player)]
|
||||||
|
EP = world.get_dungeon('Eastern Palace', player)
|
||||||
|
EP.big_key = ItemFactory('Big Key (Eastern Palace)', player)
|
||||||
|
|
||||||
|
# traverse dungeons and make sure dungeon property is assigned
|
||||||
|
playerDungeons = [dungeon for dungeon in world.dungeons if dungeon.player == player]
|
||||||
|
for dungeon in playerDungeons:
|
||||||
|
queue = collections.deque(dungeon.regions)
|
||||||
|
while len(queue) > 0:
|
||||||
|
region = world.get_region(queue.popleft(), player)
|
||||||
|
if region.name not in dungeon.regions:
|
||||||
|
dungeon.regions.append(region.name)
|
||||||
|
region.dungeon = dungeon
|
||||||
|
for ext in region.exits:
|
||||||
|
d = world.check_for_door(ext.name, player)
|
||||||
|
connected = ext.connected_region
|
||||||
|
if d is not None and connected is not None:
|
||||||
|
if d.connected and connected.name not in dungeon.regions and connected.type == RegionType.Dungeon and connected.name not in queue:
|
||||||
|
queue.append(connected) # needs to be added
|
||||||
|
elif connected is not None and connected.name not in dungeon.regions and connected.type == RegionType.Dungeon and connected.name not in queue:
|
||||||
|
queue.append(connected) # needs to be added
|
||||||
|
return
|
||||||
|
|
||||||
|
#code below is a prototype for cross-dungeon mode
|
||||||
|
|
||||||
# figure out which dungeons have open doors and which doors still need to be connected
|
# figure out which dungeons have open doors and which doors still need to be connected
|
||||||
|
|
||||||
# goals:
|
# goals:
|
||||||
@@ -466,6 +500,8 @@ def connect_two_way(world, entrancename, exitname, player):
|
|||||||
# todo - rom indications, access rules for the doors...
|
# todo - rom indications, access rules for the doors...
|
||||||
entrance.connect(ext.parent_region)
|
entrance.connect(ext.parent_region)
|
||||||
ext.connect(entrance.parent_region)
|
ext.connect(entrance.parent_region)
|
||||||
|
if entrance.parent_region.dungeon:
|
||||||
|
ext.parent_region.dungeon = entrance.parent_region.dungeon
|
||||||
d = world.check_for_door(entrancename, player)
|
d = world.check_for_door(entrancename, player)
|
||||||
if d is not None:
|
if d is not None:
|
||||||
d.connected = True
|
d.connected = True
|
||||||
@@ -474,6 +510,27 @@ def connect_two_way(world, entrancename, exitname, player):
|
|||||||
d.connected = True
|
d.connected = True
|
||||||
# world.spoiler.set_entrance(entrance.name, exit.name, 'both') # todo: spoiler stuff
|
# world.spoiler.set_entrance(entrance.name, exit.name, 'both') # todo: spoiler stuff
|
||||||
|
|
||||||
|
def connect_one_way(world, entrancename, exitname, player):
|
||||||
|
entrance = world.get_entrance(entrancename, player)
|
||||||
|
ext = world.get_entrance(exitname, player)
|
||||||
|
|
||||||
|
# if these were already connected somewhere, remove the backreference
|
||||||
|
if entrance.connected_region is not None:
|
||||||
|
entrance.connected_region.entrances.remove(entrance, player)
|
||||||
|
if ext.connected_region is not None:
|
||||||
|
ext.connected_region.entrances.remove(ext)
|
||||||
|
|
||||||
|
entrance.connect(ext.parent_region)
|
||||||
|
d = world.check_for_door(entrancename, player)
|
||||||
|
if entrance.parent_region.dungeon:
|
||||||
|
ext.parent_region.dungeon = entrance.parent_region.dungeon
|
||||||
|
if d is not None:
|
||||||
|
d.connected = True
|
||||||
|
d = world.check_for_door(exitname, player)
|
||||||
|
if d is not None:
|
||||||
|
d.connected = True
|
||||||
|
# spoiler info goes here?
|
||||||
|
|
||||||
|
|
||||||
mandatory_connections = [('Hyrule Dungeon North Abyss Catwalk Dropdown', 'Hyrule Dungeon North Abyss'),
|
mandatory_connections = [('Hyrule Dungeon North Abyss Catwalk Dropdown', 'Hyrule Dungeon North Abyss'),
|
||||||
('Hyrule Dungeon Key Door S', 'Hyrule Dungeon North Abyss'),
|
('Hyrule Dungeon Key Door S', 'Hyrule Dungeon North Abyss'),
|
||||||
@@ -518,5 +575,32 @@ falldown_pits = [('Eastern Courtyard Potholes', 'Eastern Fairies')]
|
|||||||
|
|
||||||
dungeon_warps = [('Eastern Fairies\' Warp', 'Eastern Courtyard')]
|
dungeon_warps = [('Eastern Fairies\' Warp', 'Eastern Courtyard')]
|
||||||
|
|
||||||
#todo : vanilla dungeon connections, I guess to get to rom patching
|
default_door_connections = [('Hyrule Castle Lobby W', 'Hyrule Castle West Lobby E'),
|
||||||
default_door_connections = [('', '')]
|
('Hyrule Castle Lobby E', 'Hyrule Castle East Lobby W'),
|
||||||
|
('Hyrule Castle Lobby WN', 'Hyrule Castle West Lobby EN'),
|
||||||
|
('Hyrule Castle West Lobby N', 'Hyrule Castle West Hall S'),
|
||||||
|
('Hyrule Castle East Lobby N', 'Hyrule Castle East Hall S'),
|
||||||
|
('Hyrule Castle East Lobby NE', 'Hyrule Castle East Hall SE'),
|
||||||
|
('Hyrule Castle East Hall W', 'Hyrule Castle Back Hall E'),
|
||||||
|
('Hyrule Castle West Hall E', 'Hyrule Castle Back Hall W'),
|
||||||
|
('Hyrule Castle Throne Room N', 'Sewers Behind Tapestry S'),
|
||||||
|
('Hyrule Dungeon Guardroom N', 'Hyrule Dungeon Armory S'),
|
||||||
|
('Sewers Dark Cross Key Door N', 'Sewers Dark Cross Key Door S'),
|
||||||
|
('Sewers Water W', 'Sewers Key Rat E'),
|
||||||
|
('Sewers Key Rat Key Door N', 'Sewers Secret Room Key Door S'),
|
||||||
|
('Eastern Lobby N', 'Eastern Cannonball S'),
|
||||||
|
('Eastern Cannonball N', 'Eastern Courtyard Ledge S'),
|
||||||
|
('Eastern Cannonball Ledge WN', 'Eastern Big Key EN'),
|
||||||
|
('Eastern Cannonball Ledge Key Door EN', 'Eastern Dark Square Key Door WN'),
|
||||||
|
('Eastern Courtyard Ledge W', 'Eastern Compass Area E'),
|
||||||
|
('Eastern Courtyard Ledge E', 'Eastern Map Area W'),
|
||||||
|
('Eastern Compass Area EN', 'Eastern Courtyard WN'),
|
||||||
|
('Eastern Courtyard EN', 'Eastern Map Valley WN'),
|
||||||
|
('Eastern Courtyard N', 'Eastern Darkness S'),
|
||||||
|
('Eastern Map Valley SW', 'Eastern Dark Square NW'),
|
||||||
|
('Eastern Attic Start WS', 'Eastern Attic Switches ES'),
|
||||||
|
('Eastern Attic Switches WS', 'Eastern Eyegores ES'),
|
||||||
|
('Eastern Eyegores NE', 'Eastern Boss SE')]
|
||||||
|
# ('', ''),
|
||||||
|
default_one_way_connections = [('Sewers Pull Switch S', 'Sanctuary N'),
|
||||||
|
('Eastern Big Key NE', 'Eastern Compass Area SW')]
|
||||||
|
|||||||
7
Main.py
7
Main.py
@@ -55,11 +55,10 @@ def main(args, seed=None):
|
|||||||
create_doors(world, player)
|
create_doors(world, player)
|
||||||
create_dungeons(world, player)
|
create_dungeons(world, player)
|
||||||
|
|
||||||
# Uncomment to try to shuffle stuff
|
logger.info('Shuffling dungeons')
|
||||||
# logger.info('Shuffling dungeons')
|
|
||||||
|
|
||||||
# for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
# link_doors(world, player)
|
link_doors(world, player)
|
||||||
|
|
||||||
logger.info('Shuffling the World about.')
|
logger.info('Shuffling the World about.')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user