Total keys fix for key logic

(Basic reductions do not affect amount of keys placed while crossed does)
This commit is contained in:
aerinon
2021-08-12 15:59:01 -06:00
parent de6f3683d0
commit 71079269fa
3 changed files with 5 additions and 2 deletions

View File

@@ -1071,6 +1071,7 @@ def assign_cross_keys(dungeon_builders, world, player):
# Step 3: Initial valid combination find - reduce flex if needed # Step 3: Initial valid combination find - reduce flex if needed
for name, builder in dungeon_builders.items(): for name, builder in dungeon_builders.items():
suggested = builder.key_doors_num - builder.key_drop_cnt suggested = builder.key_doors_num - builder.key_drop_cnt
builder.total_keys = builder.key_doors_num
find_valid_combination(builder, start_regions_map[name], world, player) find_valid_combination(builder, start_regions_map[name], world, player)
actual_chest_keys = builder.key_doors_num - builder.key_drop_cnt actual_chest_keys = builder.key_doors_num - builder.key_drop_cnt
if actual_chest_keys < suggested: if actual_chest_keys < suggested:
@@ -1087,6 +1088,7 @@ def assign_cross_keys(dungeon_builders, world, player):
name = builder.name name = builder.name
logger.debug('Cross Dungeon: Increasing key count by 1 for %s', name) logger.debug('Cross Dungeon: Increasing key count by 1 for %s', name)
builder.key_doors_num += 1 builder.key_doors_num += 1
builder.total_keys = builder.key_doors_num
result = find_valid_combination(builder, start_regions_map[name], world, player, drop_keys=False) result = find_valid_combination(builder, start_regions_map[name], world, player, drop_keys=False)
if result: if result:
remaining -= 1 remaining -= 1
@@ -1380,7 +1382,7 @@ def shuffle_key_doors(builder, world, player):
skips.append(world.get_door(dp.door_a, player)) skips.append(world.get_door(dp.door_a, player))
break break
num_key_doors += 1 num_key_doors += 1
builder.key_doors_num = num_key_doors builder.key_doors_num = builder.total_keys = num_key_doors
find_small_key_door_candidates(builder, start_regions, world, player) find_small_key_door_candidates(builder, start_regions, world, player)
find_valid_combination(builder, start_regions, world, player) find_valid_combination(builder, start_regions, world, player)
reassign_key_doors(builder, world, player) reassign_key_doors(builder, world, player)

View File

@@ -1175,6 +1175,7 @@ class DungeonBuilder(object):
self.pre_open_stonewalls = set() # used by stonewall system self.pre_open_stonewalls = set() # used by stonewall system
self.candidates = None self.candidates = None
self.total_keys = None
self.key_doors_num = None self.key_doors_num = None
self.combo_size = None self.combo_size = None
self.flex = 0 self.flex = 0

View File

@@ -1387,7 +1387,7 @@ def create_key_counters(key_layout, world, player):
state.key_locations = default_key_counts[key_layout.sector.name] state.key_locations = default_key_counts[key_layout.sector.name]
else: else:
builder = world.dungeon_layouts[player][key_layout.sector.name] builder = world.dungeon_layouts[player][key_layout.sector.name]
state.key_locations = builder.key_doors_num - builder.key_drop_cnt state.key_locations = builder.total_keys - builder.key_drop_cnt
state.big_key_special, special_region = False, None state.big_key_special, special_region = False, None
for region in key_layout.sector.regions: for region in key_layout.sector.regions:
for location in region.locations: for location in region.locations: