From 4af94194614f734b51254de2c150d6d5810eb732 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 7 Apr 2023 16:01:08 -0600 Subject: [PATCH 1/4] GUI cleanup Fix Chest Game prize display --- source/gui/bottom.py | 9 --------- source/overworld/EntranceShuffle2.py | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/source/gui/bottom.py b/source/gui/bottom.py index e2e0ffc4..beb77a1f 100644 --- a/source/gui/bottom.py +++ b/source/gui/bottom.py @@ -287,13 +287,4 @@ def create_guiargs(parent): guiargs = update_deprecated_args(guiargs) - # Key drop shuffle stuff - if (hasattr(guiargs, 'retro') and guiargs.retro) or guiargs.mode == 'retro': - if guiargs.bow_mode == 'progressive': - guiargs.bow_mode = 'retro' - elif guiargs.bow_mode == 'silvers': - guiargs.bow_mode = 'retro_silvers' - guiargs.take_any = 'random' if guiargs.take_any == 'none' else guiargs.take_any - guiargs.keyshuffle = 'universal' - return guiargs diff --git a/source/overworld/EntranceShuffle2.py b/source/overworld/EntranceShuffle2.py index 77790bda..572f3bb3 100644 --- a/source/overworld/EntranceShuffle2.py +++ b/source/overworld/EntranceShuffle2.py @@ -2744,7 +2744,7 @@ ow_prize_table = {'Links House': (0x8b1, 0xb2d), 'Dark Lake Hylia Ledge Hint': (0xec0, 0xc00), 'Hype Cave': (0x940, 0xc80), 'Bonk Fairy (Dark)': (0x740, 0xa80), - 'Brewery': (0x170, 0x980), 'C-Shaped House': (0x310, 0x7a0), 'Chest Game': (0x800, 0x7a0), + 'Brewery': (0x170, 0x980), 'C-Shaped House': (0x310, 0x7a0), 'Chest Game': (0x080, 0x7a0), 'Hammer Peg Cave': (0x4c0, 0x940), 'Red Shield Shop': (0x500, 0x680), 'Dark Sanctuary Hint': (0x720, 0x4a0), From 2abfc6ea80ed0bbf0fe27e9e1f36172ec44bf8fb Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 13 Apr 2023 16:19:18 -0600 Subject: [PATCH 2/4] Swap E/W on Mire Torches/Mire Attic Hint --- DoorShuffle.py | 2 +- Doors.py | 4 ++-- Regions.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index b236cd9e..a0add44b 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -4156,7 +4156,7 @@ interior_doors = [ ('Mire Neglected Room SE', 'Mire Chest View NE'), ('Mire BK Chest Ledge WS', 'Mire Warping Pool ES'), # technically one-way ('Mire Torches Top SW', 'Mire Torches Bottom NW'), - ('Mire Torches Bottom WS', 'Mire Attic Hint ES'), + ('Mire Torches Bottom ES', 'Mire Attic Hint WS'), ('Mire Dark Shooters SE', 'Mire Key Rupees NE'), ('Mire Dark Shooters SW', 'Mire Block X NW'), ('Mire Tall Dark and Roomy WS', 'Mire Crystal Right ES'), diff --git a/Doors.py b/Doors.py index e97505ee..4020caff 100644 --- a/Doors.py +++ b/Doors.py @@ -924,9 +924,9 @@ def create_doors(world, player): create_door(player, 'Mire Torches Top SW', Intr).dir(So, 0x97, Left, High).pos(1), create_door(player, 'Mire Torches Bottom Holes', Hole), create_door(player, 'Mire Torches Bottom NW', Intr).dir(No, 0x97, Left, High).pos(1), - create_door(player, 'Mire Torches Bottom WS', Intr).dir(We, 0x97, Bot, High).pos(0), + create_door(player, 'Mire Torches Bottom ES', Intr).dir(Ea, 0x97, Bot, High).pos(0), create_door(player, 'Mire Torches Top Holes', Hole), - create_door(player, 'Mire Attic Hint ES', Intr).dir(Ea, 0x97, Bot, High).pos(0), + create_door(player, 'Mire Attic Hint WS', Intr).dir(We, 0x97, Bot, High).pos(0), create_door(player, 'Mire Attic Hint Hole', Hole), create_door(player, 'Mire Dark Shooters Up Stairs', Sprl).dir(Up, 0x93, 0, LTH).ss(A, 0x32, 0xec), create_door(player, 'Mire Dark Shooters SW', Intr).dir(So, 0x93, Left, High).pos(0), diff --git a/Regions.py b/Regions.py index bcbb76d4..7b0e2535 100644 --- a/Regions.py +++ b/Regions.py @@ -691,8 +691,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Mire BK Chest Ledge', 'Misery Mire', ['Misery Mire - Big Key Chest'], ['Mire BK Chest Ledge WS']), create_dungeon_region(player, 'Mire Warping Pool', 'Misery Mire', None, ['Mire Warping Pool ES', 'Mire Warping Pool Warp']), create_dungeon_region(player, 'Mire Torches Top', 'Misery Mire', None, ['Mire Torches Top Down Stairs', 'Mire Torches Top SW', 'Mire Torches Top Holes']), - create_dungeon_region(player, 'Mire Torches Bottom', 'Misery Mire', None, ['Mire Torches Bottom NW', 'Mire Torches Bottom WS', 'Mire Torches Bottom Holes']), - create_dungeon_region(player, 'Mire Attic Hint', 'Misery Mire', None, ['Mire Attic Hint ES', 'Mire Attic Hint Hole']), + create_dungeon_region(player, 'Mire Torches Bottom', 'Misery Mire', None, ['Mire Torches Bottom NW', 'Mire Torches Bottom ES', 'Mire Torches Bottom Holes']), + create_dungeon_region(player, 'Mire Attic Hint', 'Misery Mire', None, ['Mire Attic Hint WS', 'Mire Attic Hint Hole']), create_dungeon_region(player, 'Mire Dark Shooters', 'Misery Mire', None, ['Mire Dark Shooters Up Stairs', 'Mire Dark Shooters SW', 'Mire Dark Shooters SE']), create_dungeon_region(player, 'Mire Key Rupees', 'Misery Mire', None, ['Mire Key Rupees NE']), create_dungeon_region(player, 'Mire Block X', 'Misery Mire', None, ['Mire Block X NW', 'Mire Block X WS']), From 072bbfac1fbba43c1dffbc836786e369e4dfe17b Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 13 Apr 2023 16:20:54 -0600 Subject: [PATCH 3/4] Version bump and release note --- Main.py | 2 +- RELEASENOTES.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Main.py b/Main.py index 8f97ef46..62d519ed 100644 --- a/Main.py +++ b/Main.py @@ -34,7 +34,7 @@ from source.overworld.EntranceShuffle2 import link_entrances_new from source.tools.BPS import create_bps_from_data from source.classes.CustomSettings import CustomSettings -version_number = '1.2.0.15' +version_number = '1.2.0.16' version_branch = '-u' __version__ = f'{version_number}{version_branch}' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 71b3ec75..4ae675a6 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -109,6 +109,9 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes +* 1.2.0.16u + * Fix for Mire Attic Hint door (direction was swapped) + * Dungeon at Chest Game displays correctly on OW map option * 1.2.0.15u * GUI reorganization * Logic fix for pots in GT conveyor cross From ea8bd117fcc9dcbe34c65f05adacd7ceff74cf08 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 14 Apr 2023 14:17:57 -0600 Subject: [PATCH 4/4] Fix for partial key logic for vanilla mire Fix for Kholdstare shell collision --- RELEASENOTES.md | 2 ++ Rom.py | 2 +- Rules.py | 38 +++++++++++++++++++++++++++++++++++++- data/base2current.bps | Bin 93979 -> 94044 bytes 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 4ae675a6..a84d0551 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -110,6 +110,8 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes * 1.2.0.16u + * Fix for partial key logic on vanilla Mire + * Fix for Kholdstare Shell collision when at Lanmo 2 * Fix for Mire Attic Hint door (direction was swapped) * Dungeon at Chest Game displays correctly on OW map option * 1.2.0.15u diff --git a/Rom.py b/Rom.py index b7285b2e..ea0b9c68 100644 --- a/Rom.py +++ b/Rom.py @@ -37,7 +37,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '29863ca305a8474c452cd13b3f921898' +RANDOMIZERBASEHASH = '9903cdfc3fc69112919ec49fb63e09ab' class JsonRom(object): diff --git a/Rules.py b/Rules.py index e8dc7aa5..fc608ec2 100644 --- a/Rules.py +++ b/Rules.py @@ -2000,7 +2000,9 @@ def add_key_logic_rules(world, player): key_logic = world.key_logic[player] eval_func = eval_small_key_door if world.key_logic_algorithm[player] == 'strict' and world.keyshuffle[player] == 'wild': - eval_func = eval_small_key_door_strict + eval_func = eval_small_key_door_strict + elif world.key_logic_algorithm[player] != 'default': + eval_func = eval_small_key_door_partial for d_name, d_logic in key_logic.items(): for door_name, rule in d_logic.door_rules.items(): door_entrance = world.get_entrance(door_name, player) @@ -2056,6 +2058,36 @@ def eval_small_key_door_main(state, door_name, dungeon, player): return door_openable +def eval_small_key_door_partial_main(state, door_name, dungeon, player): + if state.is_door_open(door_name, player): + return True + key_logic = state.world.key_logic[player][dungeon] + if door_name not in key_logic.door_rules: + return False + door_rule = key_logic.door_rules[door_name] + door_openable = False + for ruleType, number in door_rule.new_rules.items(): + if door_openable: + return True + if ruleType == KeyRuleType.WorstCase: + number = min(number, door_rule.small_key_num) + door_openable |= state.has_sm_key(key_logic.small_key_name, player, number) + elif ruleType == KeyRuleType.AllowSmall: + small_loc_item = door_rule.small_location.item + if small_loc_item and small_loc_item.name == key_logic.small_key_name and small_loc_item.player == player: + door_openable |= state.has_sm_key(key_logic.small_key_name, player, number) + elif isinstance(ruleType, tuple): + lock, lock_item = ruleType + # this doesn't track logical locks yet, i.e. hammer locks the item and hammer is there, but the item isn't + for loc in door_rule.alternate_big_key_loc: + spot = state.world.get_location(loc, player) + if spot.item and spot.item.name == lock_item: + number = min(number, door_rule.alternate_small_key) + door_openable |= state.has_sm_key(key_logic.small_key_name, player, number) + break + return door_openable + + def eval_small_key_door_strict_main(state, door_name, dungeon, player): if state.is_door_open(door_name, player): return True @@ -2070,6 +2102,10 @@ def eval_small_key_door(door_name, dungeon, player): return lambda state: eval_small_key_door_main(state, door_name, dungeon, player) +def eval_small_key_door_partial(door_name, dungeon, player): + return lambda state: eval_small_key_door_partial_main(state, door_name, dungeon, player) + + def eval_small_key_door_strict(door_name, dungeon, player): return lambda state: eval_small_key_door_strict_main(state, door_name, dungeon, player) diff --git a/data/base2current.bps b/data/base2current.bps index 832779a30453f400fad4258196d067eb09eafe59..e58c28ab1b469f73a96a04d2e5d5d50a2ca92b26 100644 GIT binary patch delta 2245 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