Potential fix for vanilla door + ER key logic

This commit is contained in:
aerinon
2023-02-16 15:40:13 -07:00
parent f0101c9854
commit 77c4babca1

View File

@@ -225,8 +225,24 @@ def vanilla_key_logic(world, player):
add_inaccessible_doors(world, player) add_inaccessible_doors(world, player)
entrances_map, potentials, connections = determine_entrance_list(world, player) entrances_map, potentials, connections = determine_entrance_list(world, player)
for builder in builders: enabled_entrances = world.enabled_entrances[player] = {}
builder_queue = deque(builders)
last_key, loops = None, 0
while len(builder_queue) > 0:
builder = builder_queue.popleft()
origin_list = entrances_map[builder.name] origin_list = entrances_map[builder.name]
find_enabled_origins(builder.sectors, enabled_entrances, origin_list, entrances_map, builder.name)
if len(origin_list) <= 0:
if last_key == builder.name or loops > 1000:
origin_name = (world.get_region(origin_list[0], player).entrances[0].parent_region.name
if len(origin_list) > 0 else 'no origin')
raise GenerationException(f'Infinite loop detected for "{builder.name}" located at {origin_name}')
builder_queue.append(builder)
last_key = builder.name
loops += 1
else:
find_new_entrances(builder.master_sector, entrances_map, connections, potentials,
enabled_entrances, world, player)
start_regions = convert_regions(origin_list, world, player) start_regions = convert_regions(origin_list, world, player)
doors = convert_key_doors(default_small_key_doors[builder.name], world, player) doors = convert_key_doors(default_small_key_doors[builder.name], world, player)
key_layout = build_key_layout(builder, start_regions, doors, {}, world, player) key_layout = build_key_layout(builder, start_regions, doors, {}, world, player)