Added vanilla info for created regions and fixed initial errors.

This commit is contained in:
randall.rupper
2019-08-22 14:49:23 -06:00
parent ad3770e534
commit f2974cf769
2 changed files with 90 additions and 7 deletions

View File

@@ -4,6 +4,7 @@ import logging
from BaseClasses import RegionType, DoorType, Direction, RegionChunk
from Items import ItemFactory
def link_doors(world, player):
@@ -14,7 +15,7 @@ def link_doors(world, player):
for exitName, regionName in mandatory_connections:
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:
connect_two_way(world, entrance, ext, player)
for entrance, ext in straight_staircases:
@@ -26,6 +27,39 @@ def link_doors(world, player):
for exitName, regionName in dungeon_warps:
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
# goals:
@@ -466,6 +500,8 @@ def connect_two_way(world, entrancename, exitname, player):
# todo - rom indications, access rules for the doors...
entrance.connect(ext.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)
if d is not None:
d.connected = True
@@ -474,6 +510,27 @@ def connect_two_way(world, entrancename, exitname, player):
d.connected = True
# 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'),
('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')]
#todo : vanilla dungeon connections, I guess to get to rom patching
default_door_connections = [('', '')]
default_door_connections = [('Hyrule Castle Lobby W', 'Hyrule Castle West Lobby E'),
('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')]