From 5c9c9947f3a489a6054edf7485162945c38bb6a0 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 8 Dec 2020 08:54:49 -0700 Subject: [PATCH 1/5] Minor bugfix --- DoorShuffle.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 3c614030..635923ef 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1720,12 +1720,10 @@ def shuffle_bombable_dashable(bd_candidates, bombable_counts, dashable_counts, w if all_dash_counts < 8: for chosen in random.sample(all_candidates, min(8 - all_dash_counts, len(all_candidates))): change_pair_type(chosen, DoorKind.Dashable, world, player) - world.spoiler.set_door_type(chosen.name + ' <-> ' + chosen.dest.name, DoorKind.Dashable, player) all_candidates.remove(chosen) if all_bomb_counts < 12: for chosen in random.sample(all_candidates, min(12 - all_bomb_counts, len(all_candidates))): change_pair_type(chosen, DoorKind.Bombable, world, player) - world.spoiler.set_door_type(chosen.name + ' <-> ' + chosen.dest.name, DoorKind.Bombable, player) all_candidates.remove(chosen) for excluded in all_candidates: remove_pair_type_if_present(excluded, world, player) From 85d05f625b9cbadc2a50f253c686e2ce8a15979a Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 8 Dec 2020 11:24:44 -0700 Subject: [PATCH 2/5] Generation improvements Potential fix for overworld problem --- DoorShuffle.py | 7 ++++--- DungeonGenerator.py | 2 ++ Main.py | 2 +- Rom.py | 2 +- data/base2current.bps | Bin 131148 -> 131157 bytes 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 635923ef..c8ccb54d 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1861,12 +1861,12 @@ def check_required_paths(paths, world, player): if dungeon_name in world.dungeon_layouts[player].keys(): builder = world.dungeon_layouts[player][dungeon_name] if len(paths[dungeon_name]) > 0: - states_to_explore = {} + states_to_explore = defaultdict(list) for path in paths[dungeon_name]: if type(path) is tuple: states_to_explore[tuple([path[0]])] = path[1] else: - states_to_explore[tuple(builder.path_entrances)] = path + states_to_explore[tuple(builder.path_entrances)].append(path) cached_initial_state = None for start_regs, dest_regs in states_to_explore.items(): if type(dest_regs) is not list: @@ -1935,13 +1935,14 @@ def check_if_regions_visited(state, check_paths): if state.visited_at_all(region_target): valid = True break - else: + elif not breaking_region: breaking_region = region_target return valid, breaking_region def check_for_pinball_fix(state, bad_region, world, player): pinball_region = world.get_region('Skull Pinball', player) + # todo: lobby shuffle if bad_region.name == 'Skull 2 West Lobby' and state.visited_at_all(pinball_region): # revisit this for entrance shuffle door = world.get_door('Skull Pinball WS', player) room = world.get_room(door.roomIndex, player) diff --git a/DungeonGenerator.py b/DungeonGenerator.py index 6d70eada..7c52e0f7 100644 --- a/DungeonGenerator.py +++ b/DungeonGenerator.py @@ -1575,6 +1575,8 @@ def assign_crystal_switch_sectors(dungeon_map, crystal_switches, crystal_barrier valid = global_pole.is_valid_choice(dungeon_map, builder_choice, test_set) assign_sector(switch_choice, builder_choice, crystal_switches, global_pole) return crystal_switches + if len(crystal_switches) == 0: + raise GenerationException('No crystal switches to assign') sector_list = list(crystal_switches) choices = random.sample(sector_list, k=len(population)) for i, choice in enumerate(choices): diff --git a/Main.py b/Main.py index aaed4a61..4b34e9e2 100644 --- a/Main.py +++ b/Main.py @@ -25,7 +25,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute from ItemList import generate_itempool, difficulties, fill_prizes, fill_specific_items from Utils import output_path, parse_player_names -__version__ = '0.2.0.18u' +__version__ = '0.2.0.19u' class EnemizerError(RuntimeError): pass diff --git a/Rom.py b/Rom.py index 620470e9..f495b32d 100644 --- a/Rom.py +++ b/Rom.py @@ -27,7 +27,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '185a0f74ab0e2ce8899c8d7d309ca68c' +RANDOMIZERBASEHASH = '7264ffb7c430dde5d6bfe6030b79a575' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 61323175649e7f91ca4f97404fb5a9657034ca8d..c0d427e88d6a9a8fd8616fdbae990a34d1d21e78 100644 GIT binary patch delta 11079 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 YmJN|Jm$@~7@8H>AYO(A*^5N_M1K}I4x&QzG delta 11088 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 Date: Wed, 9 Dec 2020 14:29:18 -0700 Subject: [PATCH 3/5] Repair hera basement cage to not count Byrna --- ItemList.py | 6 ++++++ Rom.py | 2 +- data/base2current.bps | Bin 131157 -> 131159 bytes 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ItemList.py b/ItemList.py index ae05e9ee..ddb629ab 100644 --- a/ItemList.py +++ b/ItemList.py @@ -749,6 +749,12 @@ def fill_specific_items(world): all_state = world.get_all_state(True) fill_restrictive(world, all_state, [cage], [key_item]) + location = world.get_location('Tower of Hera - Map Chest', 1) + key_item = next(x for x in world.itempool if 'Byrna' in x.name) + world.itempool.remove(key_item) + fast_fill(world, [key_item], [location]) + + # somaria = next(item for item in world.itempool if item.name == 'Cane of Somaria') # shooter = world.get_location('Palace of Darkness - Shooter Room', 1) # world.itempool.remove(somaria) diff --git a/Rom.py b/Rom.py index f495b32d..0f8cf7b7 100644 --- a/Rom.py +++ b/Rom.py @@ -27,7 +27,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '7264ffb7c430dde5d6bfe6030b79a575' +RANDOMIZERBASEHASH = '30147375153cc57197805eddf38c2a23' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index c0d427e88d6a9a8fd8616fdbae990a34d1d21e78..74ee4e9a0243b2269d24e8feeb57a51a99cf4a00 100644 GIT binary patch delta 835 zcmV-J1HAmzfC$%s2(T{!1gp7JMw2rESRVMgq)bnMkpT!60S6e8kz8Vyr0Up>B9y|U zD2j>Clc@oa0br9l0_y_%yOSpaI00{yU<1$r-jgu|ngOM=%mfnx54gglM2CUPn@|FQ zAdiWAlkNtZ0qB#72f6_jvqT6K0RerJSqUHkB9nRvWC8J$-wBEVkCSQ&U>JV8q!5CI z2nd@4DUEP}fh(|?BBX|-B4)GV3U~tnHnUp}{VD;+lUX^-0RgimI%NtCzrCb@3L^f! zq<{n>J+qfYMHB%xv)x!u0~V{hq^-mR&mn*?@S8Pbg|W#8@Ean%lR;b;0ll+XT$K+O zzP_Y_NCC-i&<7&@zNCUZ0m*OB2O>PP1#ChE5O2JssR51Y0z{-mkxoC zl#Qhu@EV&HevZk90MHI7TA(B%eYv0@1-p8H0Vt;yevXfV1%PWH1-olV+OL?ve$Xb9 zU(^;HO{k^d^nMzj;Pig_XrCo|j>EI1$t2JQTBslelabUoK}v#^LiBzbk3z3ygn>ej zg0p&ru_N?;I*%jterRhVVYr*OksnCfuP2*jZH|k&i@S@isfrIL^nQ;g^nUtiry!FG z)f)j(lP1-65;8iDr6%-#7;iUFe<=@>hLZ=AuGNPJ0AP@TUXx3cJk}-#SRjB=fEJTz z)|4eXF$aLvT+Q$Wi%YAi2c1w4Aep}+=ky*R*}tDWGwq)_Xuy%VlOfj=7)V^4#mYbc z0l{(4)0I)xoYi-%tz&rr3 z5x@N3GTOVJSipYz=;+AEfa<%y29vJYCo)B7fQ7F)mv32)fhdTCCUtliH&&lLy*;4?ki1foOYph8kM&7iNkuvy<8o7y$v3 zr1B*h0lTF7Xlu!@@bSqc@a_7aT2=0eXgX_`E|cQ&RSFMal4uC88ylN&gF*ARLGu9& N4G0r*(g7KKtG6EaZ^r-t delta 829 zcmV-D1H$~*fC$xq2(T{!1hlhDOp`MKSRMkqq)bnMkpT!60S6e8kz8Vyr0Up>BBH{i zD2j>Qlc@oa0dA8z0_y?^yptybI01c=U<1$r?2|DBngO%3%mfnx55~fzM2CUdn@|FQ zAdiWOlkNtZ0rr!L2f6_xvqT6K0RfAXSqUHkFq3)-WC8z^-wBEVos((`U>JOS6|mMHB%(d1#ChE5PiI)sR51Y0z{*&kli& zr5o@Xn-zYJk%s`#4k()jevX+S54(DR0Vt<}kCqjHYakE1Ye?F!n81F}D!>@<6_a7q z793%yrQq~_8lT|we)?#iC3=p-v!%%-&<0wlAP7gfr6%-#7;iUF ze<=@>hLa$jE@|yT2lnu-PXvVQ7GbuQ``*S&o4ymoQa;lOA)9fmz3bfoR8qfoZdX zk|}AClQCG1k$qaM*aDN Date: Wed, 9 Dec 2020 14:32:12 -0700 Subject: [PATCH 4/5] Update release notes --- RELEASENOTES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 46f32ff9..08b76c36 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -93,6 +93,10 @@ testing to verify logic is all good. # Bug Fixes +* 2.0.19u + * Generation improvement + * Possible fix for shop vram corruption + * The Cane of Byrna does not count as a chest key anymore * 2.0.18u * Generation improvements * Bombs/Dash doors more consistent with the amount in vanilla. From 2a05e9497050c5dd0b7e2980a62b370ea5a0e417 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 15 Dec 2020 12:18:32 -0700 Subject: [PATCH 5/5] Fix Desert Wall pre-opened logic for the portal re-factor --- DoorShuffle.py | 2 ++ DungeonGenerator.py | 2 +- Main.py | 2 +- RELEASENOTES.md | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index c8ccb54d..922142f4 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -488,6 +488,7 @@ def connect_portal(portal, world, player): chosen_door = world.get_door(portal_entrance.name, player) chosen_door.blocked = False connect_door_only(world, chosen_door, portal_region, player) + portal_entrance.parent_region.entrances.append(edit_entrance) # todo: remove this? @@ -505,6 +506,7 @@ def connect_portal_copy(portal, world, player): chosen_door = world.get_door(portal_entrance.name, player) chosen_door.blocked = False connect_door_only(world, chosen_door, portal_region, player) + portal_entrance.parent_region.entrances.append(edit_entrance) def find_portal_candidates(door_list, dungeon, need_passage=False, dead_end_allowed=False, crossed=False, bk_shuffle=False): diff --git a/DungeonGenerator.py b/DungeonGenerator.py index 7c52e0f7..d14715b2 100644 --- a/DungeonGenerator.py +++ b/DungeonGenerator.py @@ -619,7 +619,7 @@ def stonewall_valid(stonewall): return False # you can get stuck from an entrance else: door = entrance.door - if door is not None and door != stonewall and not door.blocked and parent not in visited: + if (door is None or (door != stonewall and not door.blocked)) and parent not in visited: visited.add(parent) queue.append(parent) # we didn't find anything bad diff --git a/Main.py b/Main.py index 4b34e9e2..cbdae934 100644 --- a/Main.py +++ b/Main.py @@ -25,7 +25,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute from ItemList import generate_itempool, difficulties, fill_prizes, fill_specific_items from Utils import output_path, parse_player_names -__version__ = '0.2.0.19u' +__version__ = '0.2.0.20u' class EnemizerError(RuntimeError): pass diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 08b76c36..d6d71f52 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -93,6 +93,8 @@ testing to verify logic is all good. # Bug Fixes +* 2.0.20u + * Problem with Desert Wall not being pre-opened in intensity 3 fixed * 2.0.19u * Generation improvement * Possible fix for shop vram corruption