Fix some dungeon generation errors:
TR fails if the Big Chest entrance is locked behind another dungeon Hyrule Castle fails if the only available entrance is Sanctuary
This commit is contained in:
@@ -13,7 +13,7 @@ from Dungeons import dungeon_regions, region_starts, split_region_starts, flexib
|
|||||||
from Dungeons import drop_entrances, dungeon_bigs, dungeon_keys
|
from Dungeons import drop_entrances, dungeon_bigs, dungeon_keys
|
||||||
from Items import ItemFactory
|
from Items import ItemFactory
|
||||||
from RoomData import DoorKind, PairedDoor
|
from RoomData import DoorKind, PairedDoor
|
||||||
from DungeonGenerator import ExplorationState, convert_regions, generate_dungeon
|
from DungeonGenerator import ExplorationState, convert_regions, generate_dungeon, validate_tr
|
||||||
from DungeonGenerator import create_dungeon_builders, split_dungeon_builder, simple_dungeon_builder
|
from DungeonGenerator import create_dungeon_builders, split_dungeon_builder, simple_dungeon_builder
|
||||||
from KeyDoorShuffle import analyze_dungeon, validate_vanilla_key_logic, build_key_layout, validate_key_layout
|
from KeyDoorShuffle import analyze_dungeon, validate_vanilla_key_logic, build_key_layout, validate_key_layout
|
||||||
|
|
||||||
@@ -339,7 +339,7 @@ def main_dungeon_generation(dungeon_builders, recombinant_builders, connections_
|
|||||||
origin_list = list(builder.entrance_list)
|
origin_list = list(builder.entrance_list)
|
||||||
find_enabled_origins(builder.sectors, enabled_entrances, origin_list, entrances_map, name)
|
find_enabled_origins(builder.sectors, enabled_entrances, origin_list, entrances_map, name)
|
||||||
origin_list_sans_drops = remove_drop_origins(origin_list)
|
origin_list_sans_drops = remove_drop_origins(origin_list)
|
||||||
if len(origin_list_sans_drops) <= 0:
|
if len(origin_list_sans_drops) <= 0 or name == "Turtle Rock" and not validate_tr(name, builder.sectors, origin_list_sans_drops, world, player):
|
||||||
if last_key == builder.name:
|
if last_key == builder.name:
|
||||||
raise Exception('Infinte loop detected %s' % builder.name)
|
raise Exception('Infinte loop detected %s' % builder.name)
|
||||||
sector_queue.append(builder)
|
sector_queue.append(builder)
|
||||||
|
|||||||
@@ -31,6 +31,25 @@ class GraphPiece:
|
|||||||
self.possible_bk_locations = set()
|
self.possible_bk_locations = set()
|
||||||
|
|
||||||
|
|
||||||
|
# Turtle Rock shouldn't be generated until the Big Chest entrance is reachable
|
||||||
|
def validate_tr(name, available_sectors, entrance_region_names, world, player):
|
||||||
|
entrance_regions = convert_regions(entrance_region_names, world, player)
|
||||||
|
proposed_map = {}
|
||||||
|
doors_to_connect = {}
|
||||||
|
all_regions = set()
|
||||||
|
bk_needed = False
|
||||||
|
bk_special = False
|
||||||
|
for sector in available_sectors:
|
||||||
|
for door in sector.outstanding_doors:
|
||||||
|
doors_to_connect[door.name] = door
|
||||||
|
all_regions.update(sector.regions)
|
||||||
|
bk_needed = bk_needed or determine_if_bk_needed(sector, False, world, player)
|
||||||
|
bk_special = bk_special or check_for_special(sector)
|
||||||
|
dungeon, hangers, hooks = gen_dungeon_info(name, available_sectors, entrance_regions, proposed_map,
|
||||||
|
doors_to_connect, bk_needed, bk_special, world, player)
|
||||||
|
return check_valid(dungeon, hangers, hooks, proposed_map, doors_to_connect, all_regions, bk_needed, False)
|
||||||
|
|
||||||
|
|
||||||
def generate_dungeon(name, available_sectors, entrance_region_names, split_dungeon, world, player):
|
def generate_dungeon(name, available_sectors, entrance_region_names, split_dungeon, world, player):
|
||||||
logger = logging.getLogger('')
|
logger = logging.getLogger('')
|
||||||
entrance_regions = convert_regions(entrance_region_names, world, player)
|
entrance_regions = convert_regions(entrance_region_names, world, player)
|
||||||
|
|||||||
@@ -350,7 +350,7 @@ flexible_starts = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
drop_entrances = [
|
drop_entrances = [
|
||||||
'Sewers Rat Path', 'Skull Pinball', 'Skull Left Drop' # Pot circle, Back drop have unique access
|
'Sewers Rat Path', 'Skull Pinball', 'Skull Left Drop', 'Sanctuary' # Pot circle, Back drop have unique access
|
||||||
]
|
]
|
||||||
|
|
||||||
dungeon_keys = {
|
dungeon_keys = {
|
||||||
|
|||||||
Reference in New Issue
Block a user