diff --git a/BaseClasses.py b/BaseClasses.py index 7efe50e5..65c07066 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1613,8 +1613,9 @@ class Spoiler(object): for player in range(1, self.world.players + 1): if self.world.players > 1: outfile.write('\nPlayer %d: %s\n' % (player, self.world.get_player_names(player))) - for team in range(self.world.teams): - outfile.write('%s%s\n' % (f"Hash - {self.world.player_names[player][team]} (Team {team+1}): " if self.world.teams > 1 else 'Hash: ', self.hashes[player, team])) + if len(self.hashes) > 0: + for team in range(self.world.teams): + outfile.write('%s%s\n' % (f"Hash - {self.world.player_names[player][team]} (Team {team+1}): " if self.world.teams > 1 else 'Hash: ', self.hashes[player, team])) outfile.write('Logic: %s\n' % self.metadata['logic'][player]) outfile.write('Mode: %s\n' % self.metadata['mode'][player]) outfile.write('Retro: %s\n' % ('Yes' if self.metadata['retro'][player] else 'No')) diff --git a/DungeonGenerator.py b/DungeonGenerator.py index e6269b90..67d918f2 100644 --- a/DungeonGenerator.py +++ b/DungeonGenerator.py @@ -1278,12 +1278,12 @@ def identify_polarity_issues(dungeon_map): for name, builder in dungeon_map.items(): if len(builder.sectors) == 1: continue - if len(builder.sectors) == 2: - def sector_filter(x, y): - return x != y else: def sector_filter(x, y): - return x != y and x.outflow() > 1 # todo: entrance sector being filtered + return x != y + # else: + # def sector_filter(x, y): + # return x != y and (x.outflow() > 1 or is_entrance_sector(builder, x)) connection_flags = {} for slot in PolSlot: connection_flags[slot] = {} @@ -1770,11 +1770,14 @@ def create_origin_builder(builder, dungeon_map, entrance_region_names, stonewall origin_builder.all_entrances = [] for ent in builder.all_entrances: sector = find_sector(ent, candidate_sectors) - for door in sector.outstanding_doors: - if not door.blocked: - origin_builder.all_entrances.append(ent) - assign_sector(sector, origin_builder, candidate_sectors) - break + if sector is not None: + for door in sector.outstanding_doors: + if not door.blocked: + origin_builder.all_entrances.append(ent) + assign_sector(sector, origin_builder, candidate_sectors) + break + else: # already got assigned + origin_builder.all_entrances.append(ent) assign_sector(stonewall_connector, origin_builder, candidate_sectors) return origin_builder diff --git a/DungeonRandomizer.py b/DungeonRandomizer.py index 702d1ea7..68858c9e 100755 --- a/DungeonRandomizer.py +++ b/DungeonRandomizer.py @@ -346,7 +346,7 @@ def start(): from Gui import guiMain guiMain(args) elif args.count is not None: - seed = args.seed + seed = args.seed or random.randint(0, 999999999) failures = [] logger = logging.getLogger('') for _ in range(args.count): diff --git a/KeyDoorShuffle.py b/KeyDoorShuffle.py index 311c7077..8e89ec26 100644 --- a/KeyDoorShuffle.py +++ b/KeyDoorShuffle.py @@ -864,7 +864,7 @@ def validate_key_layout_sub_loop(key_layout, state, checked_states, flat_proposa def cnt_avail_small_locations(free_locations, key_only, state, world, player): if not world.keyshuffle[player] and not world.retro[player]: - avail_chest_keys = min(free_locations - state.used_locations, state.key_locations - key_only) + avail_chest_keys = min(free_locations - state.used_locations + state.used_smalls, state.key_locations - key_only) return max(0, avail_chest_keys + key_only - state.used_smalls) return state.key_locations - state.used_smalls diff --git a/Main.py b/Main.py index 3f205794..daabef6c 100644 --- a/Main.py +++ b/Main.py @@ -23,7 +23,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute from ItemList import generate_itempool, difficulties, fill_prizes from Utils import output_path, parse_player_names -__version__ = '0.0.6-pre' +__version__ = '0.0.7-pre' def main(args, seed=None): if args.outputpath: