diff --git a/BaseClasses.py b/BaseClasses.py index 928594f1..9ac4a9cb 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -61,7 +61,6 @@ class World(object): self.fix_palaceofdarkness_exit = {} self.fix_trock_exit = {} self.shuffle_ganon = shuffle_ganon - self.fix_gtower_exit = self.shuffle_ganon self.custom = custom self.customitemarray = customitemarray self.can_take_damage = True @@ -109,6 +108,7 @@ class World(object): set_player_attr('fix_skullwoods_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'] or self.doorShuffle[player] not in ['vanilla']) set_player_attr('fix_palaceofdarkness_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']) set_player_attr('fix_trock_exit', self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple']) + set_player_attr('fix_gtower_exit', self.shuffle_ganon[player] > 0) set_player_attr('can_access_trock_eyebridge', None) set_player_attr('can_access_trock_front', None) set_player_attr('can_access_trock_big_chest', None) diff --git a/CLI.py b/CLI.py index af94e810..4efc85b6 100644 --- a/CLI.py +++ b/CLI.py @@ -132,8 +132,8 @@ def parse_cli(argv, no_defaults=False): 'flute_mode', 'bow_mode', 'take_any', 'boots_hint', 'shuffle', 'door_shuffle', 'intensity', 'crystals_ganon', 'crystals_gt', 'openpyramid', 'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory', - 'usestartinventory', 'bombbag', 'overworld_map', 'restrict_boss_items', 'triforce_max_difference', - 'triforce_pool_min', 'triforce_pool_max', 'triforce_goal_min', 'triforce_goal_max', + 'usestartinventory', 'bombbag', 'shuffleganon', 'overworld_map', 'restrict_boss_items', + 'triforce_max_difference', 'triforce_pool_min', 'triforce_pool_max', 'triforce_goal_min', 'triforce_goal_max', 'triforce_min_difference', 'triforce_goal', 'triforce_pool', 'shufflelinks', 'shuffletavern', 'skullwoods', 'linked_drops', 'pseudoboots', 'retro', 'accessibility', 'hints', 'beemizer', 'experimental', 'dungeon_counters', diff --git a/Main.py b/Main.py index 695d1559..bc2efd8f 100644 --- a/Main.py +++ b/Main.py @@ -38,7 +38,7 @@ from source.enemizer.DamageTables import DamageTable from source.enemizer.Enemizer import randomize_enemies from source.rom.DataTables import init_data_tables -version_number = '1.4.7.1' +version_number = '1.4.7.2' version_branch = '-u' __version__ = f'{version_number}{version_branch}' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index d72daa83..75f76720 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,9 @@ # Patch Notes +* 1.4.7.2 + - Fixed an issue with shuffle_ganon/fix_gtower_exit causing a generation failure +* 1.4.7.1 + - Fixed an issue with the repaired "beemizer" setting not being backwards compatible * 1.4.7 - Fixed generation error with Big Key in starting inventory (thanks Cody!) - HMG/NL logic fixes by Muffins diff --git a/Utils.py b/Utils.py index 6d52d5f0..5b2d7f1b 100644 --- a/Utils.py +++ b/Utils.py @@ -325,6 +325,10 @@ def update_deprecated_args(args): if args: argVars = vars(args) truthy = [1, True, "True", "true"] + if "multi" in argVars: + players = int(args.multi) + else: + players = 1 # Hints default to FALSE # Don't do: Yes # Do: No @@ -362,11 +366,11 @@ def update_deprecated_args(args): # Don't do: Yes # Do: No if "no_shuffleganon" in argVars: - args.shuffleganon = not args.no_shuffleganon in truthy - # Don't do: No - # Do: Yes - if "shuffleganon" in argVars: - args.no_shuffleganon = not args.shuffleganon in truthy + if isinstance(args.shuffleganon, dict): + for player in range(1, players + 1): + args.shuffleganon[player] = not args.no_shuffleganon in truthy + else: + args.shuffleganon = not args.no_shuffleganon in truthy # Playthrough defaults to TRUE # Don't do: Yes diff --git a/source/overworld/EntranceShuffle2.py b/source/overworld/EntranceShuffle2.py index 40ead938..a033a112 100644 --- a/source/overworld/EntranceShuffle2.py +++ b/source/overworld/EntranceShuffle2.py @@ -181,7 +181,7 @@ def do_main_shuffle(entrances, exits, avail, mode_def): avail.decoupled_entrances.extend(entrances) avail.decoupled_exits.extend(exits) - if not avail.world.shuffle_ganon: + if not avail.world.shuffle_ganon[avail.player]: if avail.world.is_atgt_swapped(avail.player) and 'Agahnims Tower' in entrances: connect_two_way('Agahnims Tower', 'Ganons Tower Exit', avail) entrances.remove('Agahnims Tower')