Potential fix for vanilla door + ER key logic
This commit is contained in:
@@ -225,21 +225,37 @@ 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]
|
||||||
start_regions = convert_regions(origin_list, world, player)
|
find_enabled_origins(builder.sectors, enabled_entrances, origin_list, entrances_map, builder.name)
|
||||||
doors = convert_key_doors(default_small_key_doors[builder.name], world, player)
|
if len(origin_list) <= 0:
|
||||||
key_layout = build_key_layout(builder, start_regions, doors, {}, world, player)
|
if last_key == builder.name or loops > 1000:
|
||||||
valid = validate_key_layout(key_layout, world, player)
|
origin_name = (world.get_region(origin_list[0], player).entrances[0].parent_region.name
|
||||||
if not valid:
|
if len(origin_list) > 0 else 'no origin')
|
||||||
logging.getLogger('').info('Vanilla key layout not valid %s', builder.name)
|
raise GenerationException(f'Infinite loop detected for "{builder.name}" located at {origin_name}')
|
||||||
builder.key_door_proposal = doors
|
builder_queue.append(builder)
|
||||||
if player not in world.key_logic.keys():
|
last_key = builder.name
|
||||||
world.key_logic[player] = {}
|
loops += 1
|
||||||
analyze_dungeon(key_layout, world, player)
|
else:
|
||||||
world.key_logic[player][builder.name] = key_layout.key_logic
|
find_new_entrances(builder.master_sector, entrances_map, connections, potentials,
|
||||||
world.key_layout[player][builder.name] = key_layout
|
enabled_entrances, world, player)
|
||||||
log_key_logic(builder.name, key_layout.key_logic)
|
start_regions = convert_regions(origin_list, 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)
|
||||||
|
valid = validate_key_layout(key_layout, world, player)
|
||||||
|
if not valid:
|
||||||
|
logging.getLogger('').info('Vanilla key layout not valid %s', builder.name)
|
||||||
|
builder.key_door_proposal = doors
|
||||||
|
if player not in world.key_logic.keys():
|
||||||
|
world.key_logic[player] = {}
|
||||||
|
analyze_dungeon(key_layout, world, player)
|
||||||
|
world.key_logic[player][builder.name] = key_layout.key_logic
|
||||||
|
world.key_layout[player][builder.name] = key_layout
|
||||||
|
log_key_logic(builder.name, key_layout.key_logic)
|
||||||
# if world.shuffle[player] == 'vanilla' and world.accessibility[player] == 'items' and not world.retro[player] and not world.keydropshuffle[player]:
|
# if world.shuffle[player] == 'vanilla' and world.accessibility[player] == 'items' and not world.retro[player] and not world.keydropshuffle[player]:
|
||||||
# validate_vanilla_key_logic(world, player)
|
# validate_vanilla_key_logic(world, player)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user