From 6076441fbfcbc9c143547856bfe181a8139fe81a Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 4 Mar 2022 16:45:51 -0700 Subject: [PATCH 01/10] Fix some interior doors during key door identification as missing one reachable side --- DoorShuffle.py | 15 ++++++++++----- Main.py | 2 +- RELEASENOTES.md | 2 ++ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 3d3a6eda..8c0b8e25 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -14,6 +14,7 @@ from RoomData import DoorKind, PairedDoor, reset_rooms from DungeonGenerator import ExplorationState, convert_regions, generate_dungeon, pre_validate, determine_required_paths, drop_entrances from DungeonGenerator import create_dungeon_builders, split_dungeon_builder, simple_dungeon_builder, default_dungeon_entrances from DungeonGenerator import dungeon_portals, dungeon_drops, GenerationException +from DungeonGenerator import valid_region_to_explore as valid_region_to_explore_lim from KeyDoorShuffle import analyze_dungeon, build_key_layout, validate_key_layout, determine_prize_lock from Utils import ncr, kth_combination @@ -1368,6 +1369,8 @@ def combine_layouts(recombinant_builders, dungeon_builders, entrances_map): dungeon_builders[recombine.name] = recombine +# todo: this allows cross-dungeon exploring via HC Ledge or Inaccessible Regions +# todo: @deprecated def valid_region_to_explore(region, world, player): return region and (region.type == RegionType.Dungeon or region.name in world.inaccessible_regions[player] @@ -1559,7 +1562,7 @@ okay_normals = [DoorKind.Normal, DoorKind.SmallKey, DoorKind.Bombable, DoorKind. def find_key_door_candidates(region, checked, world, player): - dungeon = region.dungeon + dungeon_name = region.dungeon.name candidates = [] checked_doors = list(checked) queue = deque([(region, None, None)]) @@ -1569,14 +1572,16 @@ def find_key_door_candidates(region, checked, world, player): d = ext.door if d and d.controller: d = d.controller - if d and not d.blocked and not d.entranceFlag and d.dest is not last_door and d.dest is not last_region and d not in checked_doors: + if d and not d.blocked and d.dest is not last_door and d.dest is not last_region and d not in checked_doors: valid = False - if 0 <= d.doorListPos < 4 and d.type in [DoorType.Interior, DoorType.Normal, DoorType.SpiralStairs]: + if (0 <= d.doorListPos < 4 and d.type in [DoorType.Interior, DoorType.Normal, DoorType.SpiralStairs] + and not d.entranceFlag): room = world.get_room(d.roomIndex, player) position, kind = room.doorList[d.doorListPos] - if d.type == DoorType.Interior: valid = kind in [DoorKind.Normal, DoorKind.SmallKey, DoorKind.Bombable, DoorKind.Dashable] + if valid and d.dest not in candidates: # interior doors are not separable yet + candidates.append(d.dest) elif d.type == DoorType.SpiralStairs: valid = kind in [DoorKind.StairKey, DoorKind.StairKey2, DoorKind.StairKeyLow] elif d.type == DoorType.Normal: @@ -1595,7 +1600,7 @@ def find_key_door_candidates(region, checked, world, player): if valid and d not in candidates: candidates.append(d) connected = ext.connected_region - if connected and (connected.type != RegionType.Dungeon or connected.dungeon == dungeon): + if valid_region_to_explore_lim(connected, dungeon_name, world, player): queue.append((ext.connected_region, d, current)) if d is not None: checked_doors.append(d) diff --git a/Main.py b/Main.py index 573f935f..7dc012e7 100644 --- a/Main.py +++ b/Main.py @@ -29,7 +29,7 @@ from Fill import sell_potions, sell_keys, balance_multiworld_progression, balanc from ItemList import generate_itempool, difficulties, fill_prizes, customize_shops from Utils import output_path, parse_player_names -__version__ = '1.0.0-dev' +__version__ = '1.0.1-dev' from source.classes.BabelFish import BabelFish diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7a224c7c..b59df407 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -15,6 +15,8 @@ CLI: ```--bombbag``` # Bug Fixes and Notes. +* 1.0.1 + * Fixed a bug with key doors not detecting one side of an interior door * 0.5.1.7 * Baserom update * Fix for Inverted Mode: Dark Lake Hylia shop defaults to selling a blue potion From 481516cc4c2af6644560d8a8cef6f7bee568ef80 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 24 Feb 2022 14:39:45 -0700 Subject: [PATCH 02/10] SSL not verified for alttpr.com/sprites --- source/classes/SpriteSelector.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/classes/SpriteSelector.py b/source/classes/SpriteSelector.py index cb76e64c..9a18cacd 100644 --- a/source/classes/SpriteSelector.py +++ b/source/classes/SpriteSelector.py @@ -4,6 +4,7 @@ import json import os import random import shutil +import ssl from urllib.parse import urlparse from urllib.request import urlopen import webbrowser @@ -149,7 +150,7 @@ class SpriteSelector(object): try: task.update_status("Downloading official sprites list") - with urlopen('https://alttpr.com/sprites') as response: + with urlopen('https://alttpr.com/sprites', context=ssl._create_unverified_context()) as response: sprites_arr = json.loads(response.read().decode("utf-8")) except Exception as e: resultmessage = "Error getting list of official sprites. Sprites not updated.\n\n%s: %s" % (type(e).__name__, e) From f9fdd6ede92c22b3b672b474f545c392331f0c3b Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 4 Mar 2022 16:46:46 -0700 Subject: [PATCH 03/10] Note for fix --- RELEASENOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b59df407..4c3ec552 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -17,6 +17,7 @@ CLI: ```--bombbag``` * 1.0.1 * Fixed a bug with key doors not detecting one side of an interior door + * Sprite selector fix for systems with SSL issues * 0.5.1.7 * Baserom update * Fix for Inverted Mode: Dark Lake Hylia shop defaults to selling a blue potion From 3df1072f0aa8cb8d70b5580d097a2bc83367f8ff Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 21 Jan 2022 16:15:51 -0700 Subject: [PATCH 04/10] Fix bombbag bug --- RELEASENOTES.md | 2 ++ Rules.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 4c3ec552..28e4f5d7 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -15,6 +15,8 @@ CLI: ```--bombbag``` # Bug Fixes and Notes. +* 1.0.0.1 + * Add Light Hype Fairy to bombbag mode as needing bombs * 1.0.1 * Fixed a bug with key doors not detecting one side of an interior door * Sprite selector fix for systems with SSL issues diff --git a/Rules.py b/Rules.py index 83a2175b..c2bb27ca 100644 --- a/Rules.py +++ b/Rules.py @@ -568,7 +568,7 @@ def bomb_rules(world, player): bonkable_doors = ['Two Brothers House Exit (West)', 'Two Brothers House Exit (East)'] # Technically this is incorrectly defined, but functionally the same as what is intended. bombable_doors = ['Ice Rod Cave', 'Light World Bomb Hut', 'Light World Death Mountain Shop', 'Mini Moldorm Cave', 'Hookshot Cave Back to Middle', 'Hookshot Cave Front to Middle', 'Hookshot Cave Middle to Front','Hookshot Cave Middle to Back', - 'Dark Lake Hylia Ledge Fairy', 'Hype Cave', 'Brewery'] + 'Dark Lake Hylia Ledge Fairy', 'Hype Cave', 'Brewery', 'Light Hype Fairy'] for entrance in bonkable_doors: add_rule(world.get_entrance(entrance, player), lambda state: state.can_use_bombs(player) or state.has_Boots(player)) for entrance in bombable_doors: From 42c6e18655e1076ea1f50a647e459aa1f1713aa0 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 24 May 2022 09:36:52 -0600 Subject: [PATCH 05/10] Mailmap --- .mailmap | 1 + 1 file changed, 1 insertion(+) create mode 100644 .mailmap diff --git a/.mailmap b/.mailmap new file mode 100644 index 00000000..d8857508 --- /dev/null +++ b/.mailmap @@ -0,0 +1 @@ + \ No newline at end of file From 752c063a9abba5aaf3b20d52d266b8160fb5fe45 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 24 May 2022 10:00:40 -0600 Subject: [PATCH 06/10] Mailmap fix --- .mailmap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index d8857508..9f3cc0db 100644 --- a/.mailmap +++ b/.mailmap @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 3052bd75858428884edc8920e9b1e72daf7498f1 Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 25 May 2022 10:28:15 -0600 Subject: [PATCH 07/10] Spelling --- .mailmap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index 9f3cc0db..1aecc0db 100644 --- a/.mailmap +++ b/.mailmap @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 513782683742db05b492f320d665f8c7ec40a839 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 16 Sep 2022 13:00:15 -0600 Subject: [PATCH 08/10] Fix github build? --- resources/ci/common/install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/ci/common/install.py b/resources/ci/common/install.py index 6830905e..3d0b5965 100644 --- a/resources/ci/common/install.py +++ b/resources/ci/common/install.py @@ -6,7 +6,7 @@ import subprocess # do stuff at the shell level env = common.prepare_env() -pip_requirements = os.path.join("..","resources","app","meta","manifests","pip_requirements.txt") +pip_requirements = os.path.join(".","resources","app","meta","manifests","pip_requirements.txt") if not os.path.isfile(pip_requirements): pip_requirements = os.path.join("..","..","..","resources","app","meta","manifests","pip_requirements.txt") From a9806ec40f52fce69edb631b9cd82471e0311809 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 16 Sep 2022 13:31:26 -0600 Subject: [PATCH 09/10] Minor doc update --- RELEASENOTES.md | 72 +------------------------------------------------ 1 file changed, 1 insertion(+), 71 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index fab0c559..ba7ac9e0 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -179,10 +179,6 @@ Currently bugged, not recommended for use. Same as above but both small keys and bigs keys of the dungeon are not allowed on a boss. (Note: this does not affect universal keys as they are not dungeon-specific) -## Notes and Bug Fixes - -#### Unstable - # Bug Fixes and Notes * 1.1.0 @@ -244,70 +240,4 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o * Add Light Hype Fairy to bombbag mode as needing bombs * 1.0.1 * Fixed a bug with key doors not detecting one side of an interior door - * Sprite selector fix for systems with SSL issues -* 0.5.1.7 - * Baserom update - * Fix for Inverted Mode: Dark Lake Hylia shop defaults to selling a blue potion - * Fix for Ijwu's enemizer: Boss door in Thieves' Town no longer closes after the maiden hint if Blind is shuffled to Theives' Town in boss shuffle + crossed mode - * No logic now sets the AllowAccidentalMajorGlitches flag in the rom appropriately - * Houlihan room now exits wherever Link's House is shuffled to - * Rom fixes from Catobat and Codemann8. Thanks! -* 0.5.1.6 - * Rules fixes for TT (Boss and Cell) can now have TT Big Key if not otherwise required (boss shuffle + crossed dungeon) - * BUg fix for money balancing - * Add some bomb assumptions for bosses in bombbag mode -* 0.5.1.5 - * Fix for hard pool capacity upgrades missing - * Bonk Fairy (Light) is no longer in logic for ER Standard and is forbidden to be a connector, so rain state isn't exitable - * Bug fix for retro + enemizer and arrows appearing under pots - * Added bombbag and shufflelinks to settings code - * Catobat fixes: - * Fairy refills in spoiler - * Subweights support in mystery - * More defaults for mystery weights - * Less camera jank for straight stair transitions - * Bug with Straight stairs with vanilla doors where Link's walking animation stopped early is fixed -* 0.5.1.4 - * Revert quadrant glitch fix for baserom - * Fix for inverted -* 0.5.1.3 - * Certain lobbies forbidden in standard when rupee bow is enabled - * PoD EG disarmed when mirroring (except in nologic) - * Fixed issue with key logic - * Updated baserom -* 0.5.1.2 - * Allowed Blind's Cell to be shuffled anywhere if Blind is not the boss of Thieves Town - * Remove unique annotation from a FastEnum that was causing problems - * Updated prevent mixed_travel setting to prevent more mixed travel - * Prevent key door loops on the same supertile where you could have spent 2 keys on one logical door - * Promoted dynamic soft-lock prevention on "stonewalls" from experimental to be the primary prevention (Stonewalls are now never pre-opened) - * Fix to money balancing algorithm with small item_pool, thanks Catobat - * Many fixes and refinements to key logic and generation -* 0.5.1.1 - * Shop hints in ER are now more generic instead of using "near X" because they aren't near that anymore - * Added memory location for mutliworld scripts to read what item was just obtain (longer than one frame) - * Fix for bias in boss shuffle "full" - * Fix for certain lone big chests in keysanity (allowed you to get contents without big key) - * Fix for pinball checking - * Fix for multi-entrance dungeons - * 2 fixes for big key placement logic - * ensure big key is placed early if the validator assumes it) - * Open big key doors appropriately when generating rules and big key is forced somewhere - * Updated cutoff entrances for intensity 3 -* 0.5.1.0 - * Large logic refactor introducing a new method of key logic - * Some performance optimization - * Some outstanding bug fixes (boss shuffle "full" picks three unique bosses to be duplicated, e.g.) -* 0.5.0.3 - * Fixed a bug in retro+vanilla and big key placement - * Fixed a problem with shops not registering in the Multiclient until you visit one - * Fixed a bug in the Mystery code with sfx -* 0.5.0.2 - * --shuffle_sfx option added -* 0.5.0.1 - * --bombbag option added -* 0.5.0.0 - * Handles headered roms for enemizer (Thanks compiling) - * Warning added for earlier version of python (Thanks compiling) - * Minor logic issue for defeating Aga in standard (Thanks compiling) - * Fix for boss music in non-DR modes (Thanks codemann8) \ No newline at end of file + * Sprite selector fix for systems with SSL issues \ No newline at end of file From 4ab0a40c450988a7702c484629327d50d99cb1f6 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 27 Oct 2022 13:56:37 -0600 Subject: [PATCH 10/10] Bumper cave fix Pottery coloring updated --- EntranceShuffle.py | 12 ++++++++---- InvertedRegions.py | 3 ++- Main.py | 2 +- PotShuffle.py | 18 +++++++++--------- RELEASENOTES.md | 3 +++ Regions.py | 3 ++- Rules.py | 8 ++++---- 7 files changed, 29 insertions(+), 20 deletions(-) diff --git a/EntranceShuffle.py b/EntranceShuffle.py index f67c089b..8ff4fcc8 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -3141,6 +3141,8 @@ mandatory_connections = [('Links House S&Q', 'Links House'), ('Bumper Cave Entrance Mirror Spot', 'Death Mountain Entrance'), ('Bumper Cave Ledge Drop', 'West Dark World'), ('Bumper Cave Ledge Mirror Spot', 'Death Mountain Return Ledge'), + ('Bumper Cave Bottom to Top', 'Bumper Cave (top)'), + ('Bumper Cave Top To Bottom', 'Bumper Cave (bottom)'), ('Skull Woods Forest', 'Skull Woods Forest'), ('Desert Ledge Mirror Spot', 'Desert Ledge'), ('Desert Ledge (Northeast) Mirror Spot', 'Desert Ledge (Northeast)'), @@ -3269,6 +3271,8 @@ inverted_mandatory_connections = [('Links House S&Q', 'Inverted Links House'), ('Bumper Cave Entrance Rock', 'Bumper Cave Entrance'), ('Bumper Cave Entrance Drop', 'West Dark World'), ('Bumper Cave Ledge Drop', 'West Dark World'), + ('Bumper Cave Bottom to Top', 'Bumper Cave (top)'), + ('Bumper Cave Top To Bottom', 'Bumper Cave (bottom)'), ('Skull Woods Forest', 'Skull Woods Forest'), ('Paradox Cave Push Block Reverse', 'Paradox Cave Chest Area'), ('Paradox Cave Push Block', 'Paradox Cave Front'), @@ -3492,8 +3496,8 @@ default_connections = [('Links House', 'Links House'), ('C-Shaped House', 'C-Shaped House'), ('Chest Game', 'Chest Game'), ('Dark World Hammer Peg Cave', 'Dark World Hammer Peg Cave'), - ('Bumper Cave (Bottom)', 'Bumper Cave'), - ('Bumper Cave (Top)', 'Bumper Cave'), + ('Bumper Cave (Bottom)', 'Bumper Cave (bottom)'), + ('Bumper Cave (Top)', 'Bumper Cave (top)'), ('Red Shield Shop', 'Red Shield Shop'), ('Dark Sanctuary Hint', 'Dark Sanctuary Hint'), ('Fortune Teller (Dark)', 'Fortune Teller (Dark)'), @@ -3655,7 +3659,7 @@ inverted_default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing' ('Inverted Big Bomb Shop', 'Inverted Big Bomb Shop'), ('Inverted Dark Sanctuary', 'Inverted Dark Sanctuary'), ('Inverted Dark Sanctuary Exit', 'West Dark World'), - ('Old Man Cave (West)', 'Bumper Cave'), + ('Old Man Cave (West)', 'Bumper Cave (bottom)'), ('Old Man Cave (East)', 'Death Mountain Return Cave (left)'), ('Old Man Cave Exit (West)', 'West Dark World'), ('Old Man Cave Exit (East)', 'Dark Death Mountain'), @@ -3664,7 +3668,7 @@ inverted_default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing' ('Bumper Cave (Top)', 'Dark Death Mountain Healer Fairy'), ('Bumper Cave Exit (Top)', 'Death Mountain Return Ledge'), ('Bumper Cave Exit (Bottom)', 'Light World'), - ('Death Mountain Return Cave (West)', 'Bumper Cave'), + ('Death Mountain Return Cave (West)', 'Bumper Cave (top)'), ('Death Mountain Return Cave (East)', 'Death Mountain Return Cave (right)'), ('Death Mountain Return Cave Exit (West)', 'Death Mountain'), ('Death Mountain Return Cave Exit (East)', 'Death Mountain'), diff --git a/InvertedRegions.py b/InvertedRegions.py index 175b2b76..a02bfbea 100644 --- a/InvertedRegions.py +++ b/InvertedRegions.py @@ -184,7 +184,8 @@ def create_inverted_regions(world, player): create_cave_region(player, 'Chest Game', 'a game of 16 chests', ['Chest Game']), create_cave_region(player, 'Red Shield Shop', 'the rare shop', ['Red Shield Shop - Left', 'Red Shield Shop - Middle', 'Red Shield Shop - Right']), create_cave_region(player, 'Inverted Dark Sanctuary', 'a storyteller', None, ['Inverted Dark Sanctuary Exit']), - create_cave_region(player, 'Bumper Cave', 'a connector', None, ['Bumper Cave Exit (Bottom)', 'Bumper Cave Exit (Top)']), + create_cave_region(player, 'Bumper Cave (bottom)', 'a connector', None, ['Bumper Cave Exit (Bottom)', 'Bumper Cave Bottom to Top']), + create_cave_region(player, 'Bumper Cave (top)', 'a connector', None, ['Bumper Cave Exit (Top)', 'Bumper Cave Top To Bottom']), create_dw_region(player, 'Skull Woods Forest', None, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)', 'Skull Woods First Section Door', 'Skull Woods Second Section Door (East)']), create_dw_region(player, 'Skull Woods Forest (West)', None, ['Skull Woods Second Section Hole', 'Skull Woods Second Section Door (West)', 'Skull Woods Final Section']), diff --git a/Main.py b/Main.py index d1f4542d..d0174f27 100644 --- a/Main.py +++ b/Main.py @@ -31,7 +31,7 @@ from Utils import output_path, parse_player_names from source.item.FillUtil import create_item_pool_config, massage_item_pool, district_item_pool_config from source.tools.BPS import create_bps_from_data -__version__ = '1.1.0-dev' +__version__ = '1.1.1-dev' from source.classes.BabelFish import BabelFish diff --git a/PotShuffle.py b/PotShuffle.py index a2a10c0f..88963ffe 100644 --- a/PotShuffle.py +++ b/PotShuffle.py @@ -745,11 +745,11 @@ vanilla_pots = { 0xE7: [Pot(68, 5, PotItem.OneRupee, 'Death Mountain Return Cave (right)', obj=RoomObject(0x0AB389, [0x8B, 0x2B, 0xFA])), Pot(72, 5, PotItem.OneRupee, 'Death Mountain Return Cave (right)', obj=RoomObject(0x0AB38C, [0x93, 0x2B, 0xFA]))], 0xE8: [Pot(96, 4, PotItem.Heart, 'Superbunny Cave (Bottom)', obj=RoomObject(0x0AA98E, [0xC3, 0x23, 0xFA]))], - 0xEB: [Pot(206, 8, PotItem.FiveRupees, 'Bumper Cave', obj=RoomObject(0x0AADE7, [0x9F, 0x47, 0xFA])), - Pot(210, 8, PotItem.FiveRupees, 'Bumper Cave', obj=RoomObject(0x0AADEA, [0xA7, 0x47, 0xFA])), - Pot(88, 14, PotItem.SmallMagic, 'Bumper Cave', obj=RoomObject(0x0AADED, [0xB3, 0x73, 0xFA])), - Pot(92, 14, PotItem.Heart, 'Bumper Cave', obj=RoomObject(0x0AADF0, [0xBB, 0x73, 0xFA])), - Pot(96, 14, PotItem.SmallMagic, 'Bumper Cave', obj=RoomObject(0x0AADF3, [0xC3, 0x73, 0xFA]))], + 0xEB: [Pot(206, 8, PotItem.FiveRupees, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADE7, [0x9F, 0x47, 0xFA])), + Pot(210, 8, PotItem.FiveRupees, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADEA, [0xA7, 0x47, 0xFA])), + Pot(88, 14, PotItem.SmallMagic, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADED, [0xB3, 0x73, 0xFA])), + Pot(92, 14, PotItem.Heart, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADF0, [0xBB, 0x73, 0xFA])), + Pot(96, 14, PotItem.SmallMagic, 'Bumper Cave (bottom)', obj=RoomObject(0x0AADF3, [0xC3, 0x73, 0xFA]))], 0xF1: [Pot(64, 5, PotItem.Heart, 'Old Man Cave', obj=RoomObject(0x0AA6B2, [0x83, 0x2B, 0xFA]))], 0xF3: [Pot(0x28, 0x14, PotItem.Nothing, 'Elder House', obj=RoomObject(0x0AA76F, [0x53, 0xA3, 0xFA])), Pot(0x2C, 0x14, PotItem.Nothing, 'Elder House', obj=RoomObject(0x0AA772, [0x5B, 0xA3, 0xFA])), @@ -851,10 +851,10 @@ vanilla_pots = { Pot(100, 22, PotItem.Heart, 'Dark Lake Hylia Ledge Spike Cave', obj=RoomObject(0x0AB62A, [0xCB, 0xB3, 0xFA])), Pot(88, 28, PotItem.Heart, 'Dark Lake Hylia Ledge Spike Cave', obj=RoomObject(0x0AB633, [0xB3, 0xE3, 0xFA])), Pot(100, 28, PotItem.Heart, 'Dark Lake Hylia Ledge Spike Cave', obj=RoomObject(0x0AB636, [0xCB, 0xE3, 0xFA]))], - 0x127: [Pot(24, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2A801A, [0x33, 0xCB, 0xFA])), - Pot(28, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2A801D, [0x3B, 0xCB, 0xFA])), - Pot(32, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2A8020, [0x43, 0xCB, 0xFA])), - Pot(36, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2A8023, [0x4B, 0xCB, 0xFA]))], + 0x127: [Pot(24, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2B801A, [0x33, 0xCB, 0xFA])), + Pot(28, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2B801D, [0x3B, 0xCB, 0xFA])), + Pot(32, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2B8020, [0x43, 0xCB, 0xFA])), + Pot(36, 25, PotItem.Nothing, 'Dark World Hammer Peg Cave', obj=RoomObject(0x2B8023, [0x4B, 0xCB, 0xFA]))], } diff --git a/RELEASENOTES.md b/RELEASENOTES.md index ba7ac9e0..eff11535 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -181,6 +181,9 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o # Bug Fixes and Notes +* 1.1.1 + * Fixed a logic bug with Bumper Cave where the pots were accessible without Cape or Hookshot from the top entrance + * Fixed a pot coloring issue with hammer peg cave * 1.1.0 * Large features * New pottery modes - see notes above diff --git a/Regions.py b/Regions.py index 31a5ab92..506a8116 100644 --- a/Regions.py +++ b/Regions.py @@ -181,7 +181,8 @@ def create_regions(world, player): create_cave_region(player, 'Chest Game', 'a game of 16 chests', ['Chest Game']), create_cave_region(player, 'Red Shield Shop', 'the rare shop', ['Red Shield Shop - Left', 'Red Shield Shop - Middle', 'Red Shield Shop - Right']), create_cave_region(player, 'Dark Sanctuary Hint', 'a storyteller'), - create_cave_region(player, 'Bumper Cave', 'a connector', None, ['Bumper Cave Exit (Bottom)', 'Bumper Cave Exit (Top)']), + create_cave_region(player, 'Bumper Cave (bottom)', 'a connector', None, ['Bumper Cave Exit (Bottom)', 'Bumper Cave Bottom to Top']), + create_cave_region(player, 'Bumper Cave (top)', 'a connector', None, ['Bumper Cave Exit (Top)', 'Bumper Cave Top To Bottom']), create_dw_region(player, 'Bumper Cave Ledge', ['Bumper Cave Ledge'], ['Bumper Cave Ledge Drop', 'Bumper Cave (Top)', 'Bumper Cave Ledge Mirror Spot'], 'a ledge with an item'), create_dw_region(player, 'Skull Woods Forest', None, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)', 'Skull Woods First Section Door', 'Skull Woods Second Section Door (East)']), diff --git a/Rules.py b/Rules.py index a553fbfe..68f9e616 100644 --- a/Rules.py +++ b/Rules.py @@ -855,8 +855,8 @@ def default_rules(world, player): set_rule(world.get_entrance('Peg Area Rocks', player), lambda state: state.has_Pearl(player) and state.can_lift_heavy_rocks(player)) set_rule(world.get_entrance('Village of Outcasts Pegs', player), lambda state: state.has_Pearl(player) and state.has('Hammer', player)) set_rule(world.get_entrance('Grassy Lawn Pegs', player), lambda state: state.has_Pearl(player) and state.has('Hammer', player)) - set_rule(world.get_entrance('Bumper Cave Exit (Top)', player), lambda state: state.has('Cape', player)) - set_rule(world.get_entrance('Bumper Cave Exit (Bottom)', player), lambda state: state.has('Cape', player) or state.has('Hookshot', player)) + set_rule(world.get_entrance('Bumper Cave Bottom to Top', player), lambda state: state.has('Cape', player)) + set_rule(world.get_entrance('Bumper Cave Top To Bottom', player), lambda state: state.has('Cape', player) or state.has('Hookshot', player)) set_rule(world.get_entrance('Skull Woods Final Section', player), lambda state: state.has('Fire Rod', player) and state.has_Pearl(player)) # bunny cannot use fire rod set_rule(world.get_entrance('Misery Mire', player), lambda state: state.has_Pearl(player) and state.has_sword(player) and state.has_misery_mire_medallion(player)) # sword required to cast magic (!) @@ -1782,8 +1782,8 @@ def set_bunny_rules(world, player, inverted): # regions for the exits of multi-entrace caves/drops that bunny cannot pass # Note spiral cave may be technically passible, but it would be too absurd to require since OHKO mode is a thing. - bunny_impassable_caves = ['Bumper Cave', 'Two Brothers House', 'Hookshot Cave (Middle)', - 'Pyramid', 'Spiral Cave (Top)', 'Fairy Ascension Cave (Drop)'] + bunny_impassable_caves = ['Bumper Cave (top)', 'Bumper Cave (bottom)', 'Two Brothers House', + 'Hookshot Cave (Middle)', 'Pyramid', 'Spiral Cave (Top)', 'Fairy Ascension Cave (Drop)'] bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree', 'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid', 'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins',