Merged in DR v1.2.0.18
This commit is contained in:
@@ -1963,7 +1963,7 @@ def shuffle_big_key_doors(door_type_pools, used_doors, start_regions_map, all_cu
|
||||
if flex_map[dungeon] > 0:
|
||||
queue.append(dungeon)
|
||||
# time to re-assign
|
||||
reassign_big_key_doors(bk_map, world, player)
|
||||
reassign_big_key_doors(bk_map, used_doors, world, player)
|
||||
for name, big_list in bk_map.items():
|
||||
used_doors.update(flatten_pair_list(big_list))
|
||||
return used_doors
|
||||
@@ -2048,7 +2048,7 @@ def shuffle_small_key_doors(door_type_pools, used_doors, start_regions_map, all_
|
||||
else:
|
||||
builder.key_doors_num -= 1
|
||||
# time to re-assign
|
||||
reassign_key_doors(small_map, world, player)
|
||||
reassign_key_doors(small_map, used_doors, world, player)
|
||||
for dungeon_name in pool:
|
||||
if world.keyshuffle[player] != 'universal':
|
||||
builder = world.dungeon_layouts[player][dungeon_name]
|
||||
@@ -2130,7 +2130,7 @@ def shuffle_bomb_dash_doors(door_type_pools, used_doors, start_regions_map, all_
|
||||
suggestion_map[dungeon] = pair
|
||||
queue.append(dungeon)
|
||||
# time to re-assign
|
||||
reassign_bd_doors(bd_map, world, player)
|
||||
reassign_bd_doors(bd_map, used_doors, world, player)
|
||||
for name, pair in bd_map.items():
|
||||
used_doors.update(flatten_pair_list(pair[0]))
|
||||
used_doors.update(flatten_pair_list(pair[1]))
|
||||
@@ -2540,7 +2540,7 @@ def find_current_bk_doors(builder):
|
||||
return current_doors
|
||||
|
||||
|
||||
def reassign_big_key_doors(bk_map, world, player):
|
||||
def reassign_big_key_doors(bk_map, used_doors, world, player):
|
||||
logger = logging.getLogger('')
|
||||
for name, big_doors in bk_map.items():
|
||||
flat_proposal = flatten_pair_list(big_doors)
|
||||
@@ -2548,11 +2548,12 @@ def reassign_big_key_doors(bk_map, world, player):
|
||||
queue = deque(find_current_bk_doors(builder))
|
||||
while len(queue) > 0:
|
||||
d = queue.pop()
|
||||
if d.type is DoorType.Interior and d not in flat_proposal and d.dest not in flat_proposal:
|
||||
if (d.type is DoorType.Interior and d not in flat_proposal and d.dest not in flat_proposal
|
||||
and d not in used_doors and d.dest not in used_doors):
|
||||
if not d.entranceFlag:
|
||||
world.get_room(d.roomIndex, player).change(d.doorListPos, DoorKind.Normal)
|
||||
d.bigKey = False
|
||||
elif d.type is DoorType.Normal and d not in flat_proposal:
|
||||
elif d.type is DoorType.Normal and d not in flat_proposal and d not in used_doors:
|
||||
if not d.entranceFlag:
|
||||
world.get_room(d.roomIndex, player).change(d.doorListPos, DoorKind.Normal)
|
||||
d.bigKey = False
|
||||
@@ -2796,7 +2797,7 @@ def find_valid_bd_combination(builder, suggested, world, player):
|
||||
return bomb_proposal, dash_proposal, ttl_needed
|
||||
|
||||
|
||||
def reassign_bd_doors(bd_map, world, player):
|
||||
def reassign_bd_doors(bd_map, used_doors, world, player):
|
||||
for name, pair in bd_map.items():
|
||||
flat_bomb_proposal = flatten_pair_list(pair[0])
|
||||
flat_dash_proposal = flatten_pair_list(pair[1])
|
||||
@@ -2809,10 +2810,10 @@ def reassign_bd_doors(bd_map, world, player):
|
||||
queue = deque(find_current_bd_doors(builder, world))
|
||||
while len(queue) > 0:
|
||||
d = queue.pop()
|
||||
if d.type is DoorType.Interior and not_in_proposal(d):
|
||||
if d.type is DoorType.Interior and not_in_proposal(d) and d not in used_doors and d.dest not in used_doors:
|
||||
if not d.entranceFlag:
|
||||
world.get_room(d.roomIndex, player).change(d.doorListPos, DoorKind.Normal)
|
||||
elif d.type is DoorType.Normal and not_in_proposal(d):
|
||||
elif d.type is DoorType.Normal and not_in_proposal(d) and d not in used_doors:
|
||||
if not d.entranceFlag:
|
||||
world.get_room(d.roomIndex, player).change(d.doorListPos, DoorKind.Normal)
|
||||
do_bombable_dashable(pair[0], DoorKind.Bombable, world, player)
|
||||
@@ -3004,7 +3005,7 @@ def valid_key_door_pair(door1, door2):
|
||||
return len(door1.entrance.parent_region.exits) <= 1 or len(door2.entrance.parent_region.exits) <= 1
|
||||
|
||||
|
||||
def reassign_key_doors(small_map, world, player):
|
||||
def reassign_key_doors(small_map, used_doors, world, player):
|
||||
logger = logging.getLogger('')
|
||||
for name, small_doors in small_map.items():
|
||||
logger.debug(f'Key doors for {name}')
|
||||
@@ -3014,7 +3015,7 @@ def reassign_key_doors(small_map, world, player):
|
||||
queue = deque(find_current_key_doors(builder))
|
||||
while len(queue) > 0:
|
||||
d = queue.pop()
|
||||
if d.type is DoorType.SpiralStairs and d not in proposal:
|
||||
if d.type is DoorType.SpiralStairs and d not in proposal and d not in used_doors:
|
||||
room = world.get_room(d.roomIndex, player)
|
||||
if room.doorList[d.doorListPos][1] == DoorKind.StairKeyLow:
|
||||
room.delete(d.doorListPos)
|
||||
@@ -3024,13 +3025,14 @@ def reassign_key_doors(small_map, world, player):
|
||||
else:
|
||||
room.delete(d.doorListPos)
|
||||
d.smallKey = False
|
||||
elif d.type is DoorType.Interior and d not in flat_proposal and d.dest not in flat_proposal:
|
||||
elif (d.type is DoorType.Interior and d not in flat_proposal and d.dest not in flat_proposal
|
||||
and d not in used_doors and d.dest not in used_doors):
|
||||
if not d.entranceFlag:
|
||||
world.get_room(d.roomIndex, player).change(d.doorListPos, DoorKind.Normal)
|
||||
d.smallKey = False
|
||||
d.dest.smallKey = False
|
||||
queue.remove(d.dest)
|
||||
elif d.type is DoorType.Normal and d not in flat_proposal:
|
||||
elif d.type is DoorType.Normal and d not in flat_proposal and d not in used_doors:
|
||||
if not d.entranceFlag:
|
||||
world.get_room(d.roomIndex, player).change(d.doorListPos, DoorKind.Normal)
|
||||
d.smallKey = False
|
||||
|
||||
Reference in New Issue
Block a user