From c150af89b20101c5921c1b5bcc55326a96e600f2 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Thu, 15 Jan 2026 06:04:24 -0600 Subject: [PATCH 01/18] Minor edits to various sanity locations Also added a couple missing locations. Some have notes out of uncertainty. --- worlds/mm_recomp/NormalRules.py | 188 +++++++++++++++++++++----------- 1 file changed, 123 insertions(+), 65 deletions(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index 4df78fa2..2776093c 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -17095,12 +17095,14 @@ def get_location_rules(player, options): lambda state: ( state.has("Small Key (Snowhead)", player, 3) and can_use_fire_arrows(state, player) and + has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), "Snowhead Temple 4F Outside Wizzrobe Icicles (2)": lambda state: ( state.has("Small Key (Snowhead)", player, 3) and can_use_fire_arrows(state, player) and + has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), @@ -17140,9 +17142,21 @@ def get_location_rules(player, options): # Well "Bottom of the Well Icicle (1)": - lambda state: state.can_reach("Ikana Well Rightside Torch Chest", "Location", player), + lambda state: ( + can_use_light_arrows(state, player) or + ( + can_plant_beans(state, player, options) and + state.has("Gibdo Mask", player) + ) + ), "Bottom of the Well Icicle (2)": - lambda state: state.can_reach("Ikana Well Rightside Torch Chest", "Location", player), + lambda state: ( + can_use_light_arrows(state, player) or + ( + can_plant_beans(state, player, options) and + state.has("Gibdo Mask", player) + ) + ), # Goron Trial @@ -17235,12 +17249,20 @@ def get_location_rules(player, options): lambda state: has_projectiles(state, player), "Woodfall Temple Push Block Hive (1)": - lambda state: has_projectiles(state, player), + lambda state: ( + state.has("Small Key (Woodfall)", player) and + has_projectiles(state, player) + ) or + state.has("Progressive Bow", player) + ), # Mountain Village Spring Hives "Mountain Village Spring Tree Hive (1)": - lambda state: can_clear_snowhead(state, player), + lambda state: ( + can_clear_snowhead(state, player) and + has_projectiles(state, player) + ), "Great Bay Coast Cow Grotto Hive": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and @@ -17547,16 +17569,17 @@ def get_location_rules(player, options): # Ikana Canyon Gossip Fairy "Ikana Canyon Near Octoroks Gossip Fairy": - lambda state: ( - can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + lambda state: + ( + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Healing", state, player) ), - "Ikana Canyon Across Ocean Deed Ravine Gossip Fairy": lambda state: ( state.has("Zora Mask", player) and state.has("Ocean Title Deed", player) and + has_soul_npc(state, player, options, "Business Scrubs") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) and ( @@ -17565,12 +17588,9 @@ def get_location_rules(player, options): ) ), "Ikana Canyon Near Ghost House Gossip Fairy": - lambda state: - ( - ( - can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) - ) + lambda state: ( + can_play_song("Song of Healing", state, player) or + can_play_song("Epona's Song", state, player) ), # Moon Gossip Fairies @@ -17765,6 +17785,8 @@ def get_location_rules(player, options): ( has_soul_npc(state, player, options, "Moon Kids") and state.has("Hookshot", player) and + has_bombchus(state, player) and + state.has("Progressive Bow", player, 1) ( can_play_song("Song of Healing", state, player) or can_play_song("Epona's Song", state, player) @@ -17772,14 +17794,14 @@ def get_location_rules(player, options): ), "Link Trial Gossip (4)": lambda state: - ( + ( has_soul_npc(state, player, options, "Moon Kids") and - state.can_reach("Link Trial Gossip (3)", "Location", player) and - can_use_fire_arrows(state, player) and + state.has("Hookshot", player) and has_bombchus(state, player) and - ( - can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + state.has("Progressive Bow", player, 1) + ( + can_play_song("Song of Healing", state, player) or + can_play_song("Epona's Song", state, player) ) ), @@ -17788,8 +17810,6 @@ def get_location_rules(player, options): ( has_soul_npc(state, player, options, "Moon Kids") and state.can_reach("Link Trial Gossip (3)", "Location", player) and - can_use_fire_arrows(state, player) and - has_bombchus(state, player) and ( can_play_song("Song of Healing", state, player) or can_play_song("Epona's Song", state, player) @@ -18121,6 +18141,7 @@ def get_location_rules(player, options): ), "Great Bay Temple Miniboss Frog": lambda state: ( + has_soul_enemy(state, player, options, "Jellied Gekko") and state.has("Zora Mask", player) and can_use_ice_arrows(state, player) and can_use_fire_arrows(state, player) and @@ -18173,7 +18194,8 @@ def get_location_rules(player, options): lambda state: ( state.has("Priority Mail", player) and has_soul_npc(state, player, options, "Madame Aroma") and - state.has("Kafei's Mask", player) + state.has("Kafei's Mask", player) and + state.has("Romani Mask", player) ), "Notebook Event Deposited Letter To Kafei": lambda state: ( @@ -18407,8 +18429,13 @@ def get_location_rules(player, options): state.has("Progressive Magic", player) and ( can_play_song("Epona's Song", state, player) or - options.owlsanity.value - and can_use_owl(state, player, options, "Ikana Canyon") + ( + options.owlsanity.value and + ( + can_use_owl(state, player, options, "Ikana Canyon") or + can_use_owl(state, player, options, "Stone Tower") + ) + ) ) ), @@ -18550,6 +18577,14 @@ def get_location_rules(player, options): lambda state: ( has_soul_absurd(state, player, options, "Trees & Bushes") and can_clear_snowhead(state, player) + and ( + state.has("Goron Mask", player) + or ( + state.has("Hookshot", player) + and state.has("Twin Islands Scarecrow", player) + and has_soul_npc(state, player, options, "Scarecrow") + ) + ) ), # Path To Snowhead - @@ -18568,6 +18603,11 @@ def get_location_rules(player, options): has_soul_absurd(state, player, options, "Trees & Bushes") and state.can_reach("Mountain Village", 'Region', player) ), + "Path To Snowhead Tree Near Ledge": + lambda.state: ( + has_soul_absurd(state, player, options, "Trees & Bushes") and + can_clear_snowhead(state, player) + ), # Goron Racetrack - "Goron Racetrack Trees (1)": @@ -19713,23 +19753,37 @@ def get_location_rules(player, options): lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) and - (can_use_fire_arrows(state, player) or - state.has("Small Key (Snowhead)", player, 2)) + state.has("Hookshot", player) and + can_reach_scarecrow(state, player, options) and + state.has("Snowhead Temple Hidden Scarecrow", player) and + ( + has_explosives(state, player) and + state.has("Small Key (Snowhead)", player, 2) + ) or + ( + can_use_fire_arrows(state, player) + ) or + ( + can_reach_scarecrow(state, player, options) and + state.has("Snowhead Temple Lower Scarecrow", player) + ) ), + # Is scarecrow needed below since fire arrows are already a hard requirement? It's not really adding anything alternative here. Suggested edit: "Snowhead Temple Flower Outside Goht": lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) and - can_use_fire_arrows(state, player) and - ( - state.has("Small Key (Snowhead)", player, 3) or - ( - state.has("Small Key (Snowhead)", player, 2) and - state.has("Hookshot", player) and - can_reach_scarecrow(state, player, options) and - state.has("Snowhead Temple Lower Scarecrow", player) - ) - ) + can_use_fire_arrows(state, player) and + state.has("Small Key (Snowhead)", player, 1) + #( + #state.has("Small Key (Snowhead)", player, 3) or + #( + #state.has("Small Key (Snowhead)", player, 2) and + #state.has("Hookshot", player) and + #can_reach_scarecrow(state, player, options) and + #state.has("Snowhead Temple Lower Scarecrow", player) + #) + #) ), #Great Bay Flowers "Zora Cape Lower Wall Flower Near Beavers": @@ -19741,6 +19795,7 @@ def get_location_rules(player, options): "Zora Hall Business Scrub Flower": lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and + has_soul_npc(state, player, options, "Business Scrubs") and state.has("Deku Mask", player) and state.has("Zora Mask", player) and state.has("Goron Mask", player) and @@ -20076,7 +20131,8 @@ def get_location_rules(player, options): ( state.has("Goron Mask", player) or has_explosives(state, player) or - can_use_fire_arrows(state, player) + can_use_fire_arrows(state, player) or + can_use_owl("Mountain Village", player) ) ), "Mountain Village Owl Statue Cut the Sign": @@ -20205,7 +20261,11 @@ def get_location_rules(player, options): "Woodfall Temple Web Leading to Dark Room": lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and - state.has("Deku Mask", player) + state.has("Deku Mask", player) and + ( + state.has("Small Key (Woodfall)", player, 1) or + state.has("Progressive Bow", player) + ) ), "Ocean Spider House Entrance Web (1)": lambda state: ( @@ -20222,8 +20282,7 @@ def get_location_rules(player, options): "Ocean Spider House Library Web": lambda state: ( state.has("Hookshot", player) and - has_explosives(state, player) and - can_use_fire_arrows(state, player) + has_explosives(state, player) ), "Ocean Spider House Web Above Door 1st Floor Door": lambda state: ( @@ -20234,8 +20293,7 @@ def get_location_rules(player, options): "Ocean Spider House Web Over 1st Floor Pot": lambda state: ( state.has("Hookshot", player) and - has_explosives(state, player) and - can_use_fire_arrows(state, player) + has_explosives(state, player) ), "Ocean Spider House Web 1st Floor Near Staircase": lambda state: ( @@ -20246,26 +20304,22 @@ def get_location_rules(player, options): "Ocean Spider House Web Basement Near Staircase": lambda state: ( state.has("Hookshot", player) and - has_explosives(state, player) and - can_use_fire_arrows(state, player) + has_explosives(state, player) ), "Ocean Spider House Web Basement Covering Crates": lambda state: ( state.has("Hookshot", player) and - has_explosives(state, player) and - can_use_fire_arrows(state, player) + has_explosives(state, player) ), "Ocean Spider House Web Basement Covering Hole": lambda state: ( state.has("Hookshot", player) and - has_explosives(state, player) and - can_use_fire_arrows(state, player) + has_explosives(state, player) ), "Ocean Spider House Web Basement Covering Door": lambda state: ( state.has("Hookshot", player) and - has_explosives(state, player) and - can_use_fire_arrows(state, player) + has_explosives(state, player) ), "Ocean Spider House Web Boat Room Covering Crate": lambda state: ( @@ -20331,20 +20385,15 @@ def get_location_rules(player, options): ), "Beneath the Well Right Side Web Near Milk Gibdo": lambda state: ( - has_soul_npc(state, player, options, "Gibdos") and - state.has("Gibdo Mask", player) and - has_soul_absurd(state, player, options, "Deku Flowers") and - state.has("Deku Mask", player) and - has_bottle(state, player) and ( - ( - can_afford_price(state, player, 100) and - has_soul_npc(state, player, options, "Business Scrubs") - ) or - ( - state.has("Mask of Scents", player) and - has_soul_npc(state, player, options, "Kotake") - ) + has_soul_npc(state, player, options, "Gibdos") and + state.has("Gibdo Mask", player) and + has_bottle(state, player) and + can_plant_beans(state, player, options) and + state.has("Progressive Bomb Bag", player) + ) or + ( + can_use_light_arrows(state, player) ) and can_use_fire_arrows(state, player) ), @@ -20410,8 +20459,17 @@ def get_location_rules(player, options): ), "Graveyard Day 2 Bombable Wall": lambda state: ( + state.has("Captain's Hat", player) and + has_soul_npc(state, player, options, "Stalchilden") and + state.has("Lens of Truth", player) and has_explosives(state, player) ), + # Has an associated address, but unsure if properly implemented. + #"Goron Trial Chests": + # lambda state: ( + # state.has{"Goron Mask", player) and + # state.has("Progressive Magic", player) + # ), "Link Trial Bombable Wall Iron Knuckle": lambda state: ( has_bombchus(state, player) @@ -20436,4 +20494,4 @@ def get_location_rules(player, options): state.has("Swamp Skulltula Token", player, 30) and state.has("Ocean Skulltula Token", player, 30) ), - } \ No newline at end of file + } From 8e648cd3f386b9b1c696b7b62102ce47a1964d3b Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Thu, 15 Jan 2026 12:41:40 -0600 Subject: [PATCH 02/18] Correct addresses for Pirates' Fortress chests Sewers upper and lower were sending the other's location --- worlds/mm_recomp/Locations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worlds/mm_recomp/Locations.py b/worlds/mm_recomp/Locations.py index f4298f8b..404bc87d 100644 --- a/worlds/mm_recomp/Locations.py +++ b/worlds/mm_recomp/Locations.py @@ -1279,11 +1279,11 @@ def can_create_heart_location(shp, c_or_p, loc_index): region="Pirates' Fortress Sewers", address=0x3469420062301 ), - "Pirates' Fortress Sewers Underwater Lower Chest": MMRLocationData( + "Pirates' Fortress Sewers Underwater Upper Chest": MMRLocationData( region="Pirates' Fortress Sewers", address=0x3469420062306 ), - "Pirates' Fortress Sewers Underwater Upper Chest": MMRLocationData( + "Pirates' Fortress Sewers Underwater Lower Chest": MMRLocationData( region="Pirates' Fortress Sewers", address=0x3469420062304 ), From 2dd3059b47997df276e3996ae2c8c939d425f02e Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sat, 24 Jan 2026 17:54:48 -0600 Subject: [PATCH 03/18] Update NormalRules.py Added Song of Storms as viable method for gossip fairies --- worlds/mm_recomp/NormalRules.py | 136 +++++++++++++++++++++----------- 1 file changed, 91 insertions(+), 45 deletions(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index 2776093c..f9b20b94 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -17410,41 +17410,48 @@ def get_location_rules(player, options): "Termina Field Southern Tree Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Termina Field Near Thieving Bird Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Termina Field Near Bombable Rock Grotto Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Termina Field Gossip Grotto Gossip Fairy": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Termina Field Near Songwall Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Termina Field Eastern Corner Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Termina Field Observatory Gossip Fairy": lambda state: ( state.can_reach("Bomber's Hideout Astral Observatory", "Location", player) and can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Road to Southern Swamp Gossip Fairy @@ -17452,7 +17459,8 @@ def get_location_rules(player, options): "Road to Southern Swamp Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Southern Swamp Gossip Fairies @@ -17460,7 +17468,8 @@ def get_location_rules(player, options): "Southern Swamp Near Witch Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Southern Swamp Near Witch Post Dungeon Gossip Fairy": @@ -17468,7 +17477,8 @@ def get_location_rules(player, options): can_clear_woodfall(state, player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), @@ -17476,7 +17486,8 @@ def get_location_rules(player, options): "Swamp Spider House Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Milk Road Gossip Fairy @@ -17484,7 +17495,8 @@ def get_location_rules(player, options): "Milk Road Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Romani Ranch Gossip Fairies @@ -17492,27 +17504,32 @@ def get_location_rules(player, options): "Romani Ranch Entry Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Romani Ranch Tree Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Romani Ranch Near Barn Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Romani Ranch Baby Cuccoos Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), "Romani Ranch Doggy Racetrack Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Path to Mountain Village Gossip Fairy @@ -17520,7 +17537,8 @@ def get_location_rules(player, options): "Path To Mountain Village Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Mountain Village Gossip Fairies @@ -17530,7 +17548,8 @@ def get_location_rules(player, options): can_clear_snowhead(state, player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Mountain Village Spring Ramps To Goron Graveyard Gossip Fairy": @@ -17538,7 +17557,8 @@ def get_location_rules(player, options): can_clear_snowhead(state, player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), @@ -17547,7 +17567,8 @@ def get_location_rules(player, options): "Great Bay Coast Rock Wall Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Zora Cape @@ -17555,7 +17576,8 @@ def get_location_rules(player, options): "Zora Cape Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Road to Ikana Gossip Fairy @@ -17563,7 +17585,8 @@ def get_location_rules(player, options): "Road To Ikana Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Ikana Canyon Gossip Fairy @@ -17572,7 +17595,8 @@ def get_location_rules(player, options): lambda state: ( can_play_song("Epona's Song", state, player) or - can_play_song("Song of Healing", state, player) + can_play_song("Song of Healing", state, player) or + can_play_song("Song of Storms", state, player ), "Ikana Canyon Across Ocean Deed Ravine Gossip Fairy": lambda state: @@ -17584,13 +17608,15 @@ def get_location_rules(player, options): state.has("Deku Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Ikana Canyon Near Ghost House Gossip Fairy": lambda state: ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ), # Moon Gossip Fairies @@ -17603,7 +17629,8 @@ def get_location_rules(player, options): state.has("Deku Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Deku Trial Back Left Gossip": @@ -17614,7 +17641,8 @@ def get_location_rules(player, options): state.has("Deku Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Deku Trial Front Right Gossip": @@ -17625,7 +17653,8 @@ def get_location_rules(player, options): state.has("Deku Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Deku Trial Back Right Gossip": @@ -17636,7 +17665,8 @@ def get_location_rules(player, options): state.has("Deku Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Deku Trial Furthest Back Gossip": @@ -17647,7 +17677,8 @@ def get_location_rules(player, options): state.has("Deku Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), @@ -17661,7 +17692,8 @@ def get_location_rules(player, options): state.has("Progressive Magic", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Goron Trial 1st Gazebo Gossip (1)": @@ -17672,7 +17704,8 @@ def get_location_rules(player, options): state.has("Progressive Magic", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Goron Trial 2nd Gazebo Gossip (0)": @@ -17683,7 +17716,8 @@ def get_location_rules(player, options): state.has("Progressive Magic", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Goron Trial 2nd Gazebo Gossip (1)": @@ -17694,7 +17728,8 @@ def get_location_rules(player, options): state.has("Progressive Magic", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Goron Trial Near Heart Piece Gossip (1)": @@ -17705,7 +17740,8 @@ def get_location_rules(player, options): state.has("Progressive Magic", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), @@ -17737,7 +17773,8 @@ def get_location_rules(player, options): state.has("Zora Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Zora Trial LRLL Path Gossip": @@ -17747,7 +17784,8 @@ def get_location_rules(player, options): state.has("Zora Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Zora Trial LLL Path Gossip": @@ -17757,7 +17795,8 @@ def get_location_rules(player, options): state.has("Zora Mask", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), @@ -17766,8 +17805,11 @@ def get_location_rules(player, options): "Link Trial Gossip (1)": lambda state: ( has_soul_npc(state, player, options, "Moon Kids") and - can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + ( + can_play_song("Song of Healing", state, player) or + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player + ) ), "Link Trial Gossip (2)": lambda state: @@ -17776,7 +17818,8 @@ def get_location_rules(player, options): state.has("Hookshot", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), @@ -17789,7 +17832,8 @@ def get_location_rules(player, options): state.has("Progressive Bow", player, 1) ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "Link Trial Gossip (4)": @@ -17801,7 +17845,8 @@ def get_location_rules(player, options): state.has("Progressive Bow", player, 1) ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), @@ -17812,7 +17857,8 @@ def get_location_rules(player, options): state.can_reach("Link Trial Gossip (3)", "Location", player) and ( can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), From 21bb6e7d012537e7ae9aa25c447f1c77739cb414 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sun, 25 Jan 2026 04:53:35 -0600 Subject: [PATCH 04/18] Add escape logic to Medigoron winter crate --- worlds/mm_recomp/NormalRules.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index f9b20b94..feaa10e1 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -16311,7 +16311,11 @@ def get_location_rules(player, options): # Goron Village "Goron Village Keg Goron Crate (1)": - lambda state: can_use_fire_arrows(state,player), + lambda state: can_use_fire_arrows(state,player) and + ( + state.has("Goron Mask", player) or + can_warp_out(state, player, options) + ), "Goron Village Keg Goron Crate (Spring) (1)": lambda state: can_clear_snowhead(state, player), From 533f42e9bc269f75c0e97b44fdf12a614d5c6be0 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sun, 25 Jan 2026 05:08:17 -0600 Subject: [PATCH 05/18] Add Deku employee soul to flower logic To make consistent w/ playground rupee logic. --- worlds/mm_recomp/NormalRules.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index feaa10e1..3a29bbfe 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -19198,48 +19198,56 @@ def get_location_rules(player, options): "North Clock Town Deku Playground Flower (1)": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and + has_soul_npc(state, player, options, "Deku Playground Employee") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), "North Clock Town Deku Playground Flower (2)": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and + has_soul_npc(state, player, options, "Deku Playground Employee") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), "North Clock Town Deku Playground Flower (3)": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and + has_soul_npc(state, player, options, "Deku Playground Employee") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), "North Clock Town Deku Playground Flower (4)": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and + has_soul_npc(state, player, options, "Deku Playground Employee") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), "North Clock Town Deku Playground Flower (5)": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and + has_soul_npc(state, player, options, "Deku Playground Employee") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), "North Clock Town Deku Playground Flower (6)": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and + has_soul_npc(state, player, options, "Deku Playground Employee") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), "North Clock Town Deku Playground Flower (7)": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and + has_soul_npc(state, player, options, "Deku Playground Employee") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), "North Clock Town Deku Playground Flower (8)": lambda state: ( has_soul_absurd(state, player, options, "Grottos") and + has_soul_npc(state, player, options, "Deku Playground Employee") and has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), From b47647f0a504bc9f37c95749db885040d8287490 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sun, 25 Jan 2026 21:09:26 -0600 Subject: [PATCH 06/18] Add missing grass in Ikana Castle --- worlds/mm_recomp/Locations.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/worlds/mm_recomp/Locations.py b/worlds/mm_recomp/Locations.py index 404bc87d..4929c9b5 100644 --- a/worlds/mm_recomp/Locations.py +++ b/worlds/mm_recomp/Locations.py @@ -6743,7 +6743,12 @@ def can_create_heart_location(shp, c_or_p, loc_index): ), # Ikana Castle Grass - + + "Ikana Castle Grass (0)": MMRLocationData( + region="Ikana Castle", + address=0x3469420121D00, + can_create=lambda options: options.grasssanity.value + ), "Ikana Castle Grass (1)": MMRLocationData( region="Ikana Castle", address=0x3469420121D0B, From cbe6292b7939e025095cb2eec0ea3d841b5233c1 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Mon, 26 Jan 2026 20:54:03 -0600 Subject: [PATCH 07/18] Update ISTT Pre-Boss Rupees 4 were missing Zora Mask requirement --- worlds/mm_recomp/NormalRules.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index 3a29bbfe..7302c3d6 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -14792,13 +14792,25 @@ def get_location_rules(player, options): state.has("Zora Mask", player) ), "Inverted Stone Tower Pre Boss Rupees (5)": - lambda state: state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player), + lambda state: ( + state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player) and + state.has("Zora Mask", player) + ), "Inverted Stone Tower Pre Boss Rupees (6)": - lambda state: state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player), + lambda state: ( + state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player) and + state.has("Zora Mask", player) + ), "Inverted Stone Tower Pre Boss Rupees (7)": - lambda state: state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player), + lambda state: ( + state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player) and + state.has("Zora Mask", player) + ), "Inverted Stone Tower Pre Boss Rupees (8)": - lambda state: state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player), + lambda state: ( + state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player) and + state.has("Zora Mask", player) + ), "Inverted Stone Tower Pre Boss Rupees (9)": lambda state: ( state.can_reach("Stone Tower Temple Inverted Eyegore Chest", "Location", player) and From ede2804581b1c314480621abbf98f4c8c9539bd6 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Tue, 27 Jan 2026 00:20:50 -0600 Subject: [PATCH 08/18] Add missing pot in springtime mountain village The one on the smithy roof --- worlds/mm_recomp/Locations.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/worlds/mm_recomp/Locations.py b/worlds/mm_recomp/Locations.py index 4929c9b5..7089645c 100644 --- a/worlds/mm_recomp/Locations.py +++ b/worlds/mm_recomp/Locations.py @@ -7754,6 +7754,11 @@ def can_create_heart_location(shp, c_or_p, loc_index): address=0x3469420205000, can_create=lambda options: options.potsanity.value ), + "Mountain Village Spring Rooftop Pot": MMRLocationData( + region="Mountain Village", + address=0x3469420205A00, + can_create=lambda options: options.potsanity.value + ), "Mountain Village Pots (1)": MMRLocationData( region="Mountain Village", address=0x34694202050F0, From 87bdf161b8810fb261458444f8534ab8a35f84b6 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Tue, 27 Jan 2026 00:31:03 -0600 Subject: [PATCH 09/18] Update NormalRules.py Added missing pot in spring mountain village --- worlds/mm_recomp/NormalRules.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index 7302c3d6..cfbb33c7 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -9416,6 +9416,12 @@ def get_location_rules(player, options): has_soul_absurd(state, player, options, "Pots") and has_hard_projectiles(state, player) ), + "Mountain Village Spring Rooftop Pot": + lambda state: ( + can_clear_snowhead(state, player) and + has_soul_absurd(state, player, options, "Pots") and + has_hard_projectiles(state, player) + ), "Mountain Village Pots (1)": lambda state: has_soul_absurd(state, player, options, "Pots"), "Mountain Village Pots (2)": From 18dfc9ef79e5c388fbd4b549986179595fc31b78 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Tue, 27 Jan 2026 01:23:42 -0600 Subject: [PATCH 10/18] Adjusted trees on Path to Snowhead The 3 at the top were looking for village access rather than Snowhead. --- worlds/mm_recomp/NormalRules.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index cfbb33c7..8fdf8ca5 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -18659,22 +18659,22 @@ def get_location_rules(player, options): "Path To Snowhead Tree (1)": lambda state: ( has_soul_absurd(state, player, options, "Trees & Bushes") and - state.can_reach("Mountain Village", 'Region', player) + state.can_reach("Snowhead", 'Region', player) ), "Path To Snowhead Tree (2)": lambda state: ( has_soul_absurd(state, player, options, "Trees & Bushes") and - state.can_reach("Mountain Village", 'Region', player) + state.can_reach("Snowhead", 'Region', player) ), "Path To Snowhead Tree (3)": lambda state: ( has_soul_absurd(state, player, options, "Trees & Bushes") and - state.can_reach("Mountain Village", 'Region', player) + state.can_reach("Snowhead", 'Region', player) ), "Path To Snowhead Tree Near Ledge": lambda.state: ( has_soul_absurd(state, player, options, "Trees & Bushes") and - can_clear_snowhead(state, player) + state.can_reach("Mountain Village", 'Region', player) ), # Goron Racetrack - From 39c8fbf662fade475820993e5184d288cd2b6dae Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Tue, 27 Jan 2026 01:24:40 -0600 Subject: [PATCH 11/18] Add missing spring village sign --- worlds/mm_recomp/Locations.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/worlds/mm_recomp/Locations.py b/worlds/mm_recomp/Locations.py index 7089645c..7f70858d 100644 --- a/worlds/mm_recomp/Locations.py +++ b/worlds/mm_recomp/Locations.py @@ -16944,6 +16944,11 @@ def can_create_heart_location(shp, c_or_p, loc_index): address=0x3469420310315, can_create=lambda options: options.signsanity.value ), + "Mountain Village Pond Sring Cut the Sign": MMRLocationData( + region="Mountain Village", + address=0x3469420310318, + can_create=lambda options: options.signsanity.value + ), "Mountain Village Twin Island Entrance Cut the Sign": MMRLocationData( region="Mountain Village", address=0x3469420310313, From 9037ae9546928b636656746ff43ef45f1d6d6069 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Fri, 13 Feb 2026 22:50:06 -0600 Subject: [PATCH 12/18] Removed 'Elegy of Emptiness' from Stone Tower scarecrows if accessing from owl statue. --- worlds/mm_recomp/NormalRules.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index 23a99163..8b501777 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -17407,8 +17407,7 @@ def get_location_rules(player, options): ) or ( state.has("Stone Tower Owl Statue", player) and - can_play_song("Song of Soaring", state, player) and - can_play_song("Elegy of Emptiness", state, player) + can_play_song("Song of Soaring", state, player) ) ) ), @@ -17426,8 +17425,7 @@ def get_location_rules(player, options): ) or ( state.has("Stone Tower Owl Statue", player) and - can_play_song("Song of Soaring", state, player) and - can_play_song("Elegy of Emptiness", state, player) + can_play_song("Song of Soaring", state, player) ) ) ), From 7c7287bc1a3e7a191736a81562d6362f0a9059e0 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sat, 14 Mar 2026 19:09:12 -0500 Subject: [PATCH 13/18] Refactor Goron Racetrack Pots conditions Replaced existing keg requirements with keg macro to account for NPC souls --- worlds/mm_recomp/NormalRules.py | 180 ++++++-------------------------- 1 file changed, 30 insertions(+), 150 deletions(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index 8b501777..89872a0f 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -9444,272 +9444,152 @@ def get_location_rules(player, options): "Goron Racetrack Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (3)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (4)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (5)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (6)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (7)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (8)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (9)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (10)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (11)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (12)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (13)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (14)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (15)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (16)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (17)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (18)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (19)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (20)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (21)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (22)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (23)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (24)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (25)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (26)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (27)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (28)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (29)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), "Goron Racetrack Pots (30)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and - state.has("Goron Mask", player) and - ( - state.has("Powder Keg", player) or - can_use_fire_arrows(state, player) - ) + can_use_powder_keg(state, player, options) ), # Goron Shrine Pots From c5b7daf4ec2d063a1a647f6902d95d0251def9de Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sat, 28 Mar 2026 00:44:13 -0500 Subject: [PATCH 14/18] Fix apostrophe usage in Pirates' Fortress locations --- worlds/mm_recomp/Locations.py | 106 +++++++++++++++++----------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/worlds/mm_recomp/Locations.py b/worlds/mm_recomp/Locations.py index 78cf2c63..a24309cd 100644 --- a/worlds/mm_recomp/Locations.py +++ b/worlds/mm_recomp/Locations.py @@ -8408,12 +8408,12 @@ def can_create_heart_location(shp, c_or_p, loc_index): address=0x203700, can_create=lambda options: options.potsanity.value ), - "Great Bay Coast Beside Pirates Fortress Pots (1)": MMRLocationData( + "Great Bay Coast Beside Pirates' Fortress Pots (1)": MMRLocationData( region="Great Bay", address=0x203703, can_create=lambda options: options.potsanity.value ), - "Great Bay Coast Beside Pirates Fortress Pots (2)": MMRLocationData( + "Great Bay Coast Beside Pirates' Fortress Pots (2)": MMRLocationData( region="Great Bay", address=0x20370A, can_create=lambda options: options.potsanity.value @@ -8578,87 +8578,87 @@ def can_create_heart_location(shp, c_or_p, loc_index): # Pirates' Fortress Pots - "Pirates Fortress Sewers Cage Room Pots (1)": MMRLocationData( + "Pirates' Fortress Sewers Cage Room Pots (1)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x2023B0, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Sewers Cage Room Pots (2)": MMRLocationData( + "Pirates' Fortress Sewers Cage Room Pots (2)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x2023B1, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Sewers After Gate Hidden Ladder Pots (1)": MMRLocationData( + "Pirates' Fortress Sewers After Gate Hidden Ladder Pots (1)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x2023A1, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Sewers After Gate Hidden Ladder Pots (2)": MMRLocationData( + "Pirates' Fortress Sewers After Gate Hidden Ladder Pots (2)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x2023A0, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Sewers Exit Pots (1)": MMRLocationData( + "Pirates' Fortress Sewers Exit Pots (1)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x202391, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Sewers Exit Pots (2)": MMRLocationData( + "Pirates' Fortress Sewers Exit Pots (2)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x202390, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Sewers Exit Pots (3)": MMRLocationData( + "Pirates' Fortress Sewers Exit Pots (3)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x202392, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Underwater Chest Room Pots (1)": MMRLocationData( + "Pirates' Fortress Interior Underwater Chest Room Pots (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x202360, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Underwater Chest Room Pots (2)": MMRLocationData( + "Pirates' Fortress Interior Underwater Chest Room Pots (2)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x202361, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Underwater Chest Room Pots (3)": MMRLocationData( + "Pirates' Fortress Interior Underwater Chest Room Pots (3)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x202362, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Room Past Green Guard Pots (1)": MMRLocationData( + "Pirates' Fortress Interior Room Past Green Guard Pots (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x202380, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Room Past Green Guard Pots (2)": MMRLocationData( + "Pirates' Fortress Interior Room Past Green Guard Pots (2)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x202381, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Room Past Green Guard Pots (3)": MMRLocationData( + "Pirates' Fortress Interior Room Past Green Guard Pots (3)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x202382, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Upper Beehive Room Pots (1)": MMRLocationData( + "Pirates' Fortress Interior Upper Beehive Room Pots (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x202331, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Upper Beehive Room Pots (2)": MMRLocationData( + "Pirates' Fortress Interior Upper Beehive Room Pots (2)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x202330, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Room Past Pink Guard Pots (1)": MMRLocationData( + "Pirates' Fortress Interior Room Past Pink Guard Pots (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x2023D1, can_create=lambda options: options.potsanity.value ), - "Pirates Fortress Interior Room Past Pink Guard Pots (2)": MMRLocationData( + "Pirates' Fortress Interior Room Past Pink Guard Pots (2)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x2023D0, can_create=lambda options: options.potsanity.value @@ -10407,50 +10407,50 @@ def can_create_heart_location(shp, c_or_p, loc_index): can_create=lambda options: options.hitsanity.value ), - # Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (0)": MMRLocationData( + # Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (0)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x151410, can_create=lambda options: options.hitsanity.value ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (1)": MMRLocationData( + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x151402, can_create=lambda options: options.hitsanity.value ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (2)": MMRLocationData( + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (2)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x151412, can_create=lambda options: options.hitsanity.value ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (3)": MMRLocationData( + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (3)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x151411, can_create=lambda options: options.hitsanity.value ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (4)": MMRLocationData( + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (4)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x151400, can_create=lambda options: options.hitsanity.value ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (5)": MMRLocationData( + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (5)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x151401, can_create=lambda options: options.hitsanity.value ), - # Pirates Fortress Interior Indoor Pirate Flag Eye Hitspot - "Pirates Fortress Interior Indoor Pirate Flag Eye Hitspot (0)": MMRLocationData( + # Pirates' Fortress Interior Indoor Pirate Flag Eye Hitspot + "Pirates' Fortress Interior Indoor Pirate Flag Eye Hitspot (0)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x152600, can_create=lambda options: options.hitsanity.value ), - "Pirates Fortress Interior Indoor Pirate Flag Eye Hitspot (1)": MMRLocationData( + "Pirates' Fortress Interior Indoor Pirate Flag Eye Hitspot (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x152601, can_create=lambda options: options.hitsanity.value ), - "Pirates Fortress Interior Indoor Pirate Flag Eye Hitspot (2)": MMRLocationData( + "Pirates' Fortress Interior Indoor Pirate Flag Eye Hitspot (2)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x152602, can_create=lambda options: options.hitsanity.value @@ -11691,32 +11691,32 @@ def can_create_heart_location(shp, c_or_p, loc_index): address=0x1723B4, can_create=lambda options: options.rupeesanity.value ), - "Pirates Fortress' Sewers Exit Barrel Rupee (0)": MMRLocationData( + "Pirates' Fortress Sewers Exit Barrel Rupee (0)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x172390, can_create=lambda options: options.rupeesanity.value ), - "Pirates Fortress' Sewers Exit Barrel Rupee (1)": MMRLocationData( + "Pirates' Fortress Sewers Exit Barrel Rupee (1)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x172391, can_create=lambda options: options.rupeesanity.value ), - "Pirates Fortress' Sewers Exit Barrel Rupee (2)": MMRLocationData( + "Pirates' Fortress Sewers Exit Barrel Rupee (2)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x172392, can_create=lambda options: options.rupeesanity.value ), - "Pirates Fortress' Interior Ledge Recovery Hearts (0)": MMRLocationData( + "Pirates' Fortress Interior Ledge Recovery Hearts (0)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x171400, can_create=lambda options: options.rupeesanity.value ), - "Pirates Fortress' Interior Ledge Recovery Hearts (1)": MMRLocationData( + "Pirates' Fortress Interior Ledge Recovery Hearts (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x171401, can_create=lambda options: options.rupeesanity.value ), - "Pirates Fortress' Interior Ledge Recovery Hearts (2)": MMRLocationData( + "Pirates' Fortress Interior Ledge Recovery Hearts (2)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x171402, can_create=lambda options: options.rupeesanity.value @@ -13656,39 +13656,39 @@ def can_create_heart_location(shp, c_or_p, loc_index): address=0x272850, can_create=lambda options: options.woodsanity.value ), - # Pirates Fortress Entrance Wood Barrier - "Pirates Fortress Entrance Bonk Board (0)": MMRLocationData( + # Pirates' Fortress Entrance Wood Barrier + "Pirates' Fortress Entrance Bonk Board (0)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x223700, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress Entrance Bonk Board (1)": MMRLocationData( + "Pirates' Fortress Entrance Bonk Board (1)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x223701, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress Entrance Bonk Board (2)": MMRLocationData( + "Pirates' Fortress Entrance Bonk Board (2)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x223702, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress Entrance Bonk Board (3)": MMRLocationData( + "Pirates' Fortress Entrance Bonk Board (3)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x223703, can_create=lambda options: options.woodsanity.value ), - # Pirates Fortress Sewers Wooden Barriers - "Pirates Fortress Sewers Bonk Board (0)": MMRLocationData( + # Pirates' Fortress Sewers Wooden Barriers + "Pirates' Fortress Sewers Bonk Board (0)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x2223C0, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress Sewers Bonk Board (1)": MMRLocationData( + "Pirates' Fortress Sewers Bonk Board (1)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x2223C1, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress Sewers Bonk Board (2)": MMRLocationData( + "Pirates' Fortress Sewers Bonk Board (2)": MMRLocationData( region="Pirates' Fortress Sewers", address=0x2223C2, can_create=lambda options: options.woodsanity.value @@ -13799,23 +13799,23 @@ def can_create_heart_location(shp, c_or_p, loc_index): address=0x222394, can_create=lambda options: options.woodsanity.value ), - # Pirates Fortress Interior Crates - "Pirates Fortress' Interior Crates (0)": MMRLocationData( + # Pirates' Fortress Interior Crates + "Pirates' Fortress Interior Crates (0)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x271400, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress' Interior Crates (1)": MMRLocationData( + "Pirates' Fortress Interior Crates (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x271401, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress' Interior Crates (2)": MMRLocationData( + "Pirates' Fortress Interior Crates (2)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x271402, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress' Exterior Balcony Barrel (1)": MMRLocationData( + "Pirates' Fortress Exterior Balcony Barrel (1)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x223B00, can_create=lambda options: options.woodsanity.value @@ -13835,7 +13835,7 @@ def can_create_heart_location(shp, c_or_p, loc_index): address=0x221400, can_create=lambda options: options.woodsanity.value ), - "Pirates Fortress Interior Room Past Pink Guard Barrel (0)": MMRLocationData( + "Pirates' Fortress Interior Room Past Pink Guard Barrel (0)": MMRLocationData( region="Pirates' Fortress (Interior)", address=0x2223D0, can_create=lambda options: options.woodsanity.value @@ -14650,8 +14650,8 @@ def can_create_heart_location(shp, c_or_p, loc_index): ), #People complained so its removed now. - # # Pirates Fortress Interior Guarded Hive From Barrel - # "Pirates Fortress Interior Leaders Hive From Lower Barrels": MMRLocationData( + # # Pirates' Fortress Interior Guarded Hive From Barrel + # "Pirates' Fortress Interior Leaders Hive From Lower Barrels": MMRLocationData( # region="Pirates' Fortress (Interior)", # address=0x242330, # can_create=lambda options: options.hivesanity.value From 622ca226019b65789453ade9c3c376c5443b486f Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sat, 28 Mar 2026 21:23:57 -0500 Subject: [PATCH 15/18] Fix Pirates' Fortress apostrophe inconsistencies in NormalRules.py --- worlds/mm_recomp/NormalRules.py | 308 ++++++++++++++++---------------- 1 file changed, 154 insertions(+), 154 deletions(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index 65bd233f..a4269d90 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -693,16 +693,16 @@ def get_region_rules(player, options): ), "Great Bay -> Ocean Spider House": lambda state: True, - "Great Bay -> Pirates' Fortress": + "Great Bay -> Pirates' ' Fortress": lambda state: state.has("Zora Mask", player), - "Pirates' Fortress -> Pirates' Fortress (Interior)": + "Pirates' ' Fortress -> Pirates' ' Fortress (Interior)": lambda state: state.has("Hookshot", player), - "Pirates' Fortress -> Pirates' Fortress Sewers": + "Pirates' ' Fortress -> Pirates' ' Fortress Sewers": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and state.has("Goron Mask", player) ), - "Pirates' Fortress Sewers -> Pirates' Fortress (Interior)": + "Pirates' ' Fortress Sewers -> Pirates' ' Fortress (Interior)": lambda state: state.has("Zora Mask", player), "Great Bay -> Zora Cape": lambda state: True, @@ -2550,7 +2550,7 @@ def get_location_rules(player, options, prices): has_bottle(state, player) and ( can_reach_seahorse(state, player, options) or - state.can_reach("Pirates' Fortress Leader's Room Chest", "Location", player) and + state.can_reach("Pirates' ' Fortress Leader's Room Chest", "Location", player) and state.has("Hookshot", player) ) ), @@ -2758,27 +2758,27 @@ def get_location_rules(player, options, prices): state.has("Ocean Skulltula Token", player, options.required_skull_tokens.value) and has_soul_npc(state, player, options, "Spider Man") ), - "Pirates' Fortress Exterior Underwater Log Chest": + "Pirates' ' Fortress Exterior Underwater Log Chest": lambda state: state.has("Zora Mask", player), - "Pirates' Fortress Exterior Underwater Near Entrance Chest": + "Pirates' ' Fortress Exterior Underwater Near Entrance Chest": lambda state: state.has("Zora Mask", player), - "Pirates' Fortress Exterior Underwater Corner Chest": + "Pirates' ' Fortress Exterior Underwater Corner Chest": lambda state: state.has("Zora Mask", player), - "Pirates' Fortress Sewers Maze Chest": + "Pirates' ' Fortress Sewers Maze Chest": lambda state: state.has("Goron Mask", player), - "Pirates' Fortress Sewers Cage HP": + "Pirates' ' Fortress Sewers Cage HP": lambda state: state.has("Goron Mask", player), - "Pirates' Fortress Sewers Underwater Upper Chest": + "Pirates' ' Fortress Sewers Underwater Upper Chest": lambda state: state.has("Goron Mask", player), - "Pirates' Fortress Sewers Underwater Lower Chest": + "Pirates' ' Fortress Sewers Underwater Lower Chest": lambda state: state.has("Goron Mask", player), - "Pirates' Fortress Hub Lower Chest": + "Pirates' ' Fortress Hub Lower Chest": lambda state: True, - "Pirates' Fortress Hub Upper Chest": + "Pirates' ' Fortress Hub Upper Chest": lambda state: state.has("Hookshot", player), - "Pirates' Fortress Leader's Room Chest": + "Pirates' ' Fortress Leader's Room Chest": lambda state: ( ( state.has("Hookshot", player) or @@ -2792,13 +2792,13 @@ def get_location_rules(player, options, prices): ) ) ), - "Pirates' Fortress Interior Tank Chest": + "Pirates' ' Fortress Interior Tank Chest": lambda state: ( - has_soul_enemy(state, player, options, "Coloured Pirates") and + has_soul_enemy(state, player, options, "Coloured Pirates' ") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - "Pirates' Fortress Interior Guarded Chest": + "Pirates' ' Fortress Interior Guarded Chest": lambda state: state.has("Hookshot", player), "Zora Cape Grotto Chest": @@ -10338,9 +10338,9 @@ def get_location_rules(player, options, prices): state.has("Hookshot", player) ), - "Great Bay Coast Beside Pirates Fortress Pots (1)": + "Great Bay Coast Beside Pirates' Fortress Pots (1)": lambda state: has_soul_absurd(state, player, options, "Pots"), - "Great Bay Coast Beside Pirates Fortress Pots (2)": + "Great Bay Coast Beside Pirates' Fortress Pots (2)": lambda state: has_soul_absurd(state, player, options, "Pots"), # Ocean Spider House Pots - All require region access, explosives, and hookshot @@ -10553,24 +10553,24 @@ def get_location_rules(player, options, prices): has_bottle(state, player) and state.has("Zora Mask", player) ), - # Pirates' Fortress Pots + # Pirates' ' Fortress Pots - # Pirates Fortress Sewers Cage Room Pots - Requires Goron to reach cage room - "Pirates Fortress Sewers Cage Room Pots (1)": + # Pirates' Fortress Sewers Cage Room Pots - Requires Goron to reach cage room + "Pirates' Fortress Sewers Cage Room Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_soul_absurd(state, player, options, "Barrels") and state.has("Goron Mask", player) ), - "Pirates Fortress Sewers Cage Room Pots (2)": + "Pirates' Fortress Sewers Cage Room Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_soul_absurd(state, player, options, "Barrels") and state.has("Goron Mask", player) ), - # Pirates Fortress Sewers After Gate Hidden Ladder Pots - "Pirates Fortress Sewers After Gate Hidden Ladder Pots (1)": + # Pirates' Fortress Sewers After Gate Hidden Ladder Pots + "Pirates' Fortress Sewers After Gate Hidden Ladder Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and ( @@ -10579,7 +10579,7 @@ def get_location_rules(player, options, prices): state.has("Hookshot", player) ) ), - "Pirates Fortress Sewers After Gate Hidden Ladder Pots (2)": + "Pirates' Fortress Sewers After Gate Hidden Ladder Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and ( @@ -10589,8 +10589,8 @@ def get_location_rules(player, options, prices): ) ), - # Pirates Fortress Sewers Exit Pots - "Pirates Fortress Sewers Exit Pots (1)": + # Pirates' Fortress Sewers Exit Pots + "Pirates' Fortress Sewers Exit Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and ( @@ -10599,7 +10599,7 @@ def get_location_rules(player, options, prices): state.has("Hookshot", player) ) ), - "Pirates Fortress Sewers Exit Pots (2)": + "Pirates' Fortress Sewers Exit Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and ( @@ -10608,7 +10608,7 @@ def get_location_rules(player, options, prices): state.has("Hookshot", player) ) ), - "Pirates Fortress Sewers Exit Pots (3)": + "Pirates' Fortress Sewers Exit Pots (3)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and ( @@ -10618,74 +10618,74 @@ def get_location_rules(player, options, prices): ) ), - # Pirates Fortress Interior Underwater Chest Room Pots - Requires Hookshot and can_smack_hard - "Pirates Fortress Interior Underwater Chest Room Pots (1)": + # Pirates' Fortress Interior Underwater Chest Room Pots - Requires Hookshot and can_smack_hard + "Pirates' Fortress Interior Underwater Chest Room Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - "Pirates Fortress Interior Underwater Chest Room Pots (2)": + "Pirates' Fortress Interior Underwater Chest Room Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - "Pirates Fortress Interior Underwater Chest Room Pots (3)": + "Pirates' Fortress Interior Underwater Chest Room Pots (3)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - # Pirates Fortress Interior Room Past Green Guard Pots - "Pirates Fortress Interior Room Past Green Guard Pots (1)": + # Pirates' Fortress Interior Room Past Green Guard Pots + "Pirates' Fortress Interior Room Past Green Guard Pots (1)": lambda state: ( - has_soul_enemy(state, player, options, "Coloured Pirates") and + has_soul_enemy(state, player, options, "Coloured Pirates' ") and has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - "Pirates Fortress Interior Room Past Green Guard Pots (2)": + "Pirates' Fortress Interior Room Past Green Guard Pots (2)": lambda state: ( - has_soul_enemy(state, player, options, "Coloured Pirates") and + has_soul_enemy(state, player, options, "Coloured Pirates' ") and has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - "Pirates Fortress Interior Room Past Green Guard Pots (3)": + "Pirates' Fortress Interior Room Past Green Guard Pots (3)": lambda state: ( - has_soul_enemy(state, player, options, "Coloured Pirates") and + has_soul_enemy(state, player, options, "Coloured Pirates' ") and has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - # Pirates Fortress Interior Upper Beehive Room Pots - "Pirates Fortress Interior Upper Beehive Room Pots (1)": + # Pirates' Fortress Interior Upper Beehive Room Pots + "Pirates' Fortress Interior Upper Beehive Room Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - "Pirates Fortress Interior Upper Beehive Room Pots (2)": + "Pirates' Fortress Interior Upper Beehive Room Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - # Pirates Fortress Interior Room Past Pink Guard Pots - "Pirates Fortress Interior Room Past Pink Guard Pots (1)": + # Pirates' Fortress Interior Room Past Pink Guard Pots + "Pirates' Fortress Interior Room Past Pink Guard Pots (1)": lambda state: ( - has_soul_enemy(state, player, options, "Coloured Pirates") and + has_soul_enemy(state, player, options, "Coloured Pirates' ") and has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) ), - "Pirates Fortress Interior Room Past Pink Guard Pots (2)": + "Pirates' Fortress Interior Room Past Pink Guard Pots (2)": lambda state: ( - has_soul_enemy(state, player, options, "Coloured Pirates") and + has_soul_enemy(state, player, options, "Coloured Pirates' ") and has_soul_absurd(state, player, options, "Pots") and state.has("Hookshot", player) and can_smack_hard(state, player) @@ -13311,51 +13311,51 @@ def get_location_rules(player, options, prices): state.has("Hookshot", player) ), - # Pirates Fortress Interior Hitspots - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (0)": + # Pirates' Fortress Interior Hitspots + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (0)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (1)": + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (1)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (2)": + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (2)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (3)": + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (3)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (4)": + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (4)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), - "Pirates Fortress Interior Outdoor Pirate Flag Eye Hitspots (5)": + "Pirates' Fortress Interior Outdoor Pirate Flag Eye Hitspots (5)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), - "Pirates Fortress Interior Indoor Pirate Flag Eye Hitspot (0)": + "Pirates' Fortress Interior Indoor Pirate Flag Eye Hitspot (0)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), - "Pirates Fortress Interior Indoor Pirate Flag Eye Hitspot (1)": + "Pirates' Fortress Interior Indoor Pirate Flag Eye Hitspot (1)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), - "Pirates Fortress Interior Indoor Pirate Flag Eye Hitspot (2)": + "Pirates' Fortress Interior Indoor Pirate Flag Eye Hitspot (2)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and has_projectiles(state, player) ), @@ -14380,54 +14380,54 @@ def get_location_rules(player, options, prices): "Great Bay Temple Before Gekko Room Underwater Rupees (1)": lambda state: state.can_reach("Great Bay Temple", 'Region', player), - "Pirates' Fortress Sewers Rupees Under Barrel (0)": + "Pirates' ' Fortress Sewers Rupees Under Barrel (0)": lambda state: ( state.has("Zora Mask", player) and state.has("Goron Mask", player) ), - "Pirates' Fortress Sewers Rupees Under Barrel (1)": + "Pirates' ' Fortress Sewers Rupees Under Barrel (1)": lambda state: ( state.has("Zora Mask", player) and state.has("Goron Mask", player) ), - "Pirates' Fortress Sewers Rupees Under Barrel (3)": + "Pirates' ' Fortress Sewers Rupees Under Barrel (3)": lambda state: ( state.has("Zora Mask", player) and state.has("Goron Mask", player) ), - "Pirates' Fortress Sewers Rupees Under Barrel (4)": + "Pirates' ' Fortress Sewers Rupees Under Barrel (4)": lambda state: ( state.has("Zora Mask", player) and state.has("Goron Mask", player) ), - "Pirates Fortress' Sewers Exit Barrel Rupee (0)": + "Pirates' Fortress' Sewers Exit Barrel Rupee (0)": lambda state: ( state.has("Zora Mask", player) and state.has("Goron Mask", player) ), - "Pirates Fortress' Sewers Exit Barrel Rupee (1)": + "Pirates' Fortress' Sewers Exit Barrel Rupee (1)": lambda state: ( state.has("Zora Mask", player) and state.has("Goron Mask", player) ), - "Pirates Fortress' Sewers Exit Barrel Rupee (2)": + "Pirates' Fortress' Sewers Exit Barrel Rupee (2)": lambda state: ( state.has("Zora Mask", player) and state.has("Goron Mask", player) ), - "Pirates Fortress' Interior Ledge Recovery Hearts (0)": + "Pirates' Fortress' Interior Ledge Recovery Hearts (0)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and state.has("Hookshot", player) ), - "Pirates Fortress' Interior Ledge Recovery Hearts (1)": + "Pirates' Fortress' Interior Ledge Recovery Hearts (1)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and state.has("Hookshot", player) ), - "Pirates Fortress' Interior Ledge Recovery Hearts (2)": + "Pirates' Fortress' Interior Ledge Recovery Hearts (2)": lambda state: ( - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and state.has("Hookshot", player) ), @@ -16231,189 +16231,189 @@ def get_location_rules(player, options, prices): state.has("Hookshot", player) ), - # Pirates' Fortress Related + # Pirates' ' Fortress Related - "Pirates Fortress Entrance Bonk Board (0)": + "Pirates' Fortress Entrance Bonk Board (0)": lambda state: ( state.can_reach("Great Bay", 'Region', player) and state.has("Zora Mask", player) ), - "Pirates Fortress Entrance Bonk Board (1)": + "Pirates' Fortress Entrance Bonk Board (1)": lambda state: ( state.can_reach("Great Bay", 'Region', player) and state.has("Zora Mask", player) ), - "Pirates Fortress Entrance Bonk Board (2)": + "Pirates' Fortress Entrance Bonk Board (2)": lambda state: ( state.can_reach("Great Bay", 'Region', player) and state.has("Zora Mask", player) ), - "Pirates Fortress Entrance Bonk Board (3)": + "Pirates' Fortress Entrance Bonk Board (3)": lambda state: ( state.can_reach("Great Bay", 'Region', player) and state.has("Zora Mask", player) ), - "Pirates Fortress Sewers Bonk Board (0)": + "Pirates' Fortress Sewers Bonk Board (0)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates Fortress Sewers Bonk Board (1)": + "Pirates' Fortress Sewers Bonk Board (1)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates Fortress Sewers Bonk Board (2)": + "Pirates' Fortress Sewers Bonk Board (2)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), # Pirate Fortress Sewers Barrels/Crates - "Pirates' Fortress Sewers Barrel (1)": + "Pirates' ' Fortress Sewers Barrel (1)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (2)": + "Pirates' ' Fortress Sewers Barrel (2)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (3)": + "Pirates' ' Fortress Sewers Barrel (3)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (4)": + "Pirates' ' Fortress Sewers Barrel (4)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (5)": + "Pirates' ' Fortress Sewers Barrel (5)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (6)": + "Pirates' ' Fortress Sewers Barrel (6)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (7)": + "Pirates' ' Fortress Sewers Barrel (7)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (8)": + "Pirates' ' Fortress Sewers Barrel (8)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (9)": + "Pirates' ' Fortress Sewers Barrel (9)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (10)": + "Pirates' ' Fortress Sewers Barrel (10)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (11)": + "Pirates' ' Fortress Sewers Barrel (11)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (12)": + "Pirates' ' Fortress Sewers Barrel (12)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (13)": + "Pirates' ' Fortress Sewers Barrel (13)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (14)": + "Pirates' ' Fortress Sewers Barrel (14)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (15)": + "Pirates' ' Fortress Sewers Barrel (15)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Barrel (16)": + "Pirates' ' Fortress Sewers Barrel (16)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Exit Barrel (1)": + "Pirates' ' Fortress Sewers Exit Barrel (1)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Exit Barrel (2)": + "Pirates' ' Fortress Sewers Exit Barrel (2)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Exit Barrel (3)": + "Pirates' ' Fortress Sewers Exit Barrel (3)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Exit Barrel (4)": + "Pirates' ' Fortress Sewers Exit Barrel (4)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - "Pirates' Fortress Sewers Exit Barrel (5)": + "Pirates' ' Fortress Sewers Exit Barrel (5)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress Sewers", 'Region', player) + state.can_reach("Pirates' ' Fortress Sewers", 'Region', player) ), - # Pirates' Fortress Interior Crates + # Pirates' ' Fortress Interior Crates - "Pirates Fortress' Interior Crates (0)": - lambda state: state.can_reach("Pirates' Fortress (Interior)", 'Region', player), - "Pirates Fortress' Interior Crates (1)": - lambda state: state.can_reach("Pirates' Fortress (Interior)", 'Region', player), - "Pirates Fortress' Interior Crates (2)": - lambda state: state.can_reach("Pirates' Fortress (Interior)", 'Region', player), - "Pirates Fortress' Exterior Balcony Barrel (1)": + "Pirates' Fortress' Interior Crates (0)": + lambda state: state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player), + "Pirates' Fortress' Interior Crates (1)": + lambda state: state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player), + "Pirates' Fortress' Interior Crates (2)": + lambda state: state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player), + "Pirates' Fortress' Exterior Balcony Barrel (1)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and state.has("Hookshot", player) ), - "Pirates' Fortress Leader's Room Barrel (1)": + "Pirates' ' Fortress Leader's Room Barrel (1)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and state.has("Progressive Bow", player) ), - "Pirates' Fortress Leader's Room Barrel (2)": + "Pirates' ' Fortress Leader's Room Barrel (2)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and state.has("Progressive Bow", player) ), - "Pirates' Fortress Guarded Bridge Barrel (0)": + "Pirates' ' Fortress Guarded Bridge Barrel (0)": lambda state: ( has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and state.has("Hookshot", player) ), - "Pirates Fortress Interior Room Past Pink Guard Barrel (0)": + "Pirates' Fortress Interior Room Past Pink Guard Barrel (0)": lambda state: ( - has_soul_enemy(state, player, options, "Coloured Pirates") and + has_soul_enemy(state, player, options, "Coloured Pirates' ") and has_soul_absurd(state, player, options, "Barrels") and - state.can_reach("Pirates' Fortress (Interior)", 'Region', player) and + state.can_reach("Pirates' ' Fortress (Interior)", 'Region', player) and state.has("Hookshot", player) ), @@ -17175,7 +17175,7 @@ def get_location_rules(player, options, prices): has_soul_absurd(state, player, options, "Grottos") and state.has("Hookshot", player) ), - # "Pirates Fortress Interior Leaders Hive From Lower Barrels": + # "Pirates' Fortress Interior Leaders Hive From Lower Barrels": # lambda state: ( # state.has("Hookshot", player) and # state.has("Stone Mask", player) From cd65c3fb001033508d1bd7ba0f497de7c0d63815 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sun, 29 Mar 2026 13:37:32 -0500 Subject: [PATCH 16/18] Fix naming inconsistencies for Ocean Spider House in NormalRules.py --- worlds/mm_recomp/NormalRules.py | 112 ++++++++++++++++---------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index a4269d90..7ec72733 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -10344,118 +10344,118 @@ def get_location_rules(player, options, prices): lambda state: has_soul_absurd(state, player, options, "Pots"), # Ocean Spider House Pots - All require region access, explosives, and hookshot - # Ocean Spiderhouse Bottom of Ramp Pots - "Ocean Spiderhouse Bottom of Ramp Pots (1)": + # Ocean Spider House Bottom of Ramp Pots + "Ocean Spider House Bottom of Ramp Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) ), - "Ocean Spiderhouse Bottom of Ramp Pots (2)": + "Ocean Spider House Bottom of Ramp Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) ), - "Ocean Spiderhouse Bottom of Ramp Pots (3)": + "Ocean Spider House Bottom of Ramp Pots (3)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) ), - "Ocean Spiderhouse Bottom of Ramp Pots (4)": + "Ocean Spider House Bottom of Ramp Pots (4)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) ), - # Ocean Spiderhouse Main Room Lower Pots - "Ocean Spiderhouse Main Room Lower Pots (1)": + # Ocean Spider House Main Room Lower Pots + "Ocean Spider House Main Room Lower Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Main Room Lower Pots (2)": + "Ocean Spider House Main Room Lower Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Main Room Lower Pots (3)": + "Ocean Spider House Main Room Lower Pots (3)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Main Room Lower Pots (4)": + "Ocean Spider House Main Room Lower Pots (4)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Main Room Lower Pots (5)": + "Ocean Spider House Main Room Lower Pots (5)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - # Ocean Spiderhouse Crate Room Pots - "Ocean Spiderhouse Crate Room Pots (1)": + # Ocean Spider House Crate Room Pots + "Ocean Spider House Crate Room Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Crate Room Pots (2)": + "Ocean Spider House Crate Room Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Crate Room Pots (3)": + "Ocean Spider House Crate Room Pots (3)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Crate Room Pots (4)": + "Ocean Spider House Crate Room Pots (4)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Crate Room Pots (5)": + "Ocean Spider House Crate Room Pots (5)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Crate Room Pots (6)": + "Ocean Spider House Crate Room Pots (6)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Crate Room Pots (7)": + "Ocean Spider House Crate Room Pots (7)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Crate Room Pots (8)": + "Ocean Spider House Crate Room Pots (8)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - # Ocean Spiderhouse Coloured Skulls Room Pots - "Ocean Spiderhouse Coloured Skulls Room Pots (1)": + # Ocean Spider House Coloured Skulls Room Pots + "Ocean Spider House Coloured Skulls Room Pots (1)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Coloured Skulls Room Pots (2)": + "Ocean Spider House Coloured Skulls Room Pots (2)": lambda state: ( has_soul_absurd(state, player, options, "Pots") and has_explosives(state, player) and @@ -13194,117 +13194,117 @@ def get_location_rules(player, options, prices): ), # Swamp Spider House Hitspots - "Swamp Spiderhouse Totem Eye Hitspots (0)": + "Swamp Spider House Totem Eye Hitspots (0)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (1)": + "Swamp Spider House Totem Eye Hitspots (1)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (2)": + "Swamp Spider House Totem Eye Hitspots (2)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (3)": + "Swamp Spider House Totem Eye Hitspots (3)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (4)": + "Swamp Spider House Totem Eye Hitspots (4)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (5)": + "Swamp Spider House Totem Eye Hitspots (5)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (6)": + "Swamp Spider House Totem Eye Hitspots (6)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (7)": + "Swamp Spider House Totem Eye Hitspots (7)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (8)": + "Swamp Spider House Totem Eye Hitspots (8)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (9)": + "Swamp Spider House Totem Eye Hitspots (9)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (10)": + "Swamp Spider House Totem Eye Hitspots (10)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), - "Swamp Spiderhouse Totem Eye Hitspots (11)": + "Swamp Spider House Totem Eye Hitspots (11)": lambda state: ( state.can_reach("Swamp Spider House", 'Region', player) and has_projectiles(state, player) ), # Ocean Spider House Hitspots - "Ocean Spiderhouse Mask Hitspots (0)": + "Ocean Spider House Mask Hitspots (0)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Mask Hitspots (1)": + "Ocean Spider House Mask Hitspots (1)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Mask Hitspots (2)": + "Ocean Spider House Mask Hitspots (2)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Mask Hitspots (3)": + "Ocean Spider House Mask Hitspots (3)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Mask Hitspots (4)": + "Ocean Spider House Mask Hitspots (4)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Mask Hitspots (5)": + "Ocean Spider House Mask Hitspots (5)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Mask Hitspots (6)": + "Ocean Spider House Mask Hitspots (6)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Mask Hitspots (7)": + "Ocean Spider House Mask Hitspots (7)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and state.has("Hookshot", player) ), - "Ocean Spiderhouse Mask Hitspots (8)": + "Ocean Spider House Mask Hitspots (8)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and @@ -14771,16 +14771,16 @@ def get_location_rules(player, options, prices): "Romani Ranch Invisible Fence Rupees (5)": lambda state: state.can_reach("Romani Ranch", 'Region', player), - # Swamp Spiderhouse Invisible Rupees Above Giant Jars - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (0)": + # Swamp Spider House Invisible Rupees Above Giant Jars + "Swamp Spider House Invisible Rupees Above Giant Jars (0)": lambda state: state.can_reach("Swamp Spider House", 'Region', player), - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (1)": + "Swamp Spider House Invisible Rupees Above Giant Jars (1)": lambda state: state.can_reach("Swamp Spider House", 'Region', player), - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (2)": + "Swamp Spider House Invisible Rupees Above Giant Jars (2)": lambda state: state.can_reach("Swamp Spider House", 'Region', player), - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (3)": + "Swamp Spider House Invisible Rupees Above Giant Jars (3)": lambda state: state.can_reach("Swamp Spider House", 'Region', player), - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (4)": + "Swamp Spider House Invisible Rupees Above Giant Jars (4)": lambda state: state.can_reach("Swamp Spider House", 'Region', player), # SOILS @@ -16224,7 +16224,7 @@ def get_location_rules(player, options, prices): # Ocean Spider House - "Ocean Spiderhouse Basement Crate (1)": + "Ocean Spider House Basement Crate (1)": lambda state: ( state.can_reach("Ocean Spider House", 'Region', player) and has_explosives(state, player) and @@ -19327,30 +19327,30 @@ def get_location_rules(player, options, prices): state.has("Deku Mask", player) ), # Swamp Spider Flowers - "Swamp Spiderhouse Main Room Flowers (1)": + "Swamp Spider House Main Room Flowers (1)": lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), - "Swamp Spiderhouse Main Room Flowers (2)": + "Swamp Spider House Main Room Flowers (2)": lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), - "Swamp Spiderhouse Main Room Flower (3)": + "Swamp Spider House Main Room Flower (3)": lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), - "Swamp Spiderhouse Giant Pot Room Flower (1)": + "Swamp Spider House Giant Pot Room Flower (1)": lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) ), # Requires Sonata - "Swamp Spiderhouse Giant Pot Room Flower (2)": + "Swamp Spider House Giant Pot Room Flower (2)": lambda state: ( has_soul_absurd(state, player, options, "Deku Flowers") and state.has("Deku Mask", player) and From 2e257cf1f4a7e377e17d3b89c92b541950329730 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Sun, 29 Mar 2026 13:38:19 -0500 Subject: [PATCH 17/18] Fix naming inconsistencies for Ocean Spider House in Locations.py --- worlds/mm_recomp/Locations.py | 110 +++++++++++++++++----------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/worlds/mm_recomp/Locations.py b/worlds/mm_recomp/Locations.py index a24309cd..e09368c3 100644 --- a/worlds/mm_recomp/Locations.py +++ b/worlds/mm_recomp/Locations.py @@ -8419,99 +8419,99 @@ def can_create_heart_location(shp, c_or_p, loc_index): can_create=lambda options: options.potsanity.value ), - # Ocean Spiderhouse Pots + # Ocean Spider House Pots - "Ocean Spiderhouse Bottom of Ramp Pots (1)": MMRLocationData( + "Ocean Spider House Bottom of Ramp Pots (1)": MMRLocationData( region="Ocean Spider House", address=0x202803, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Bottom of Ramp Pots (2)": MMRLocationData( + "Ocean Spider House Bottom of Ramp Pots (2)": MMRLocationData( region="Ocean Spider House", address=0x202800, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Bottom of Ramp Pots (3)": MMRLocationData( + "Ocean Spider House Bottom of Ramp Pots (3)": MMRLocationData( region="Ocean Spider House", address=0x202801, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Bottom of Ramp Pots (4)": MMRLocationData( + "Ocean Spider House Bottom of Ramp Pots (4)": MMRLocationData( region="Ocean Spider House", address=0x202802, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Main Room Lower Pots (1)": MMRLocationData( + "Ocean Spider House Main Room Lower Pots (1)": MMRLocationData( region="Ocean Spider House", address=0x202813, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Main Room Lower Pots (2)": MMRLocationData( + "Ocean Spider House Main Room Lower Pots (2)": MMRLocationData( region="Ocean Spider House", address=0x202814, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Main Room Lower Pots (3)": MMRLocationData( + "Ocean Spider House Main Room Lower Pots (3)": MMRLocationData( region="Ocean Spider House", address=0x202810, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Main Room Lower Pots (4)": MMRLocationData( + "Ocean Spider House Main Room Lower Pots (4)": MMRLocationData( region="Ocean Spider House", address=0x202811, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Main Room Lower Pots (5)": MMRLocationData( + "Ocean Spider House Main Room Lower Pots (5)": MMRLocationData( region="Ocean Spider House", address=0x202812, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Crate Room Pots (1)": MMRLocationData( + "Ocean Spider House Crate Room Pots (1)": MMRLocationData( region="Ocean Spider House", address=0x202857, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Crate Room Pots (2)": MMRLocationData( + "Ocean Spider House Crate Room Pots (2)": MMRLocationData( region="Ocean Spider House", address=0x202851, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Crate Room Pots (3)": MMRLocationData( + "Ocean Spider House Crate Room Pots (3)": MMRLocationData( region="Ocean Spider House", address=0x202856, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Crate Room Pots (4)": MMRLocationData( + "Ocean Spider House Crate Room Pots (4)": MMRLocationData( region="Ocean Spider House", address=0x202855, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Crate Room Pots (5)": MMRLocationData( + "Ocean Spider House Crate Room Pots (5)": MMRLocationData( region="Ocean Spider House", address=0x202850, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Crate Room Pots (6)": MMRLocationData( + "Ocean Spider House Crate Room Pots (6)": MMRLocationData( region="Ocean Spider House", address=0x202854, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Crate Room Pots (7)": MMRLocationData( + "Ocean Spider House Crate Room Pots (7)": MMRLocationData( region="Ocean Spider House", address=0x202852, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Crate Room Pots (8)": MMRLocationData( + "Ocean Spider House Crate Room Pots (8)": MMRLocationData( region="Ocean Spider House", address=0x202853, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Coloured Skulls Room Pots (1)": MMRLocationData( + "Ocean Spider House Coloured Skulls Room Pots (1)": MMRLocationData( region="Ocean Spider House", address=0x202831, can_create=lambda options: options.potsanity.value ), - "Ocean Spiderhouse Coloured Skulls Room Pots (2)": MMRLocationData( + "Ocean Spider House Coloured Skulls Room Pots (2)": MMRLocationData( region="Ocean Spider House", address=0x202830, can_create=lambda options: options.potsanity.value @@ -10298,110 +10298,110 @@ def can_create_heart_location(shp, c_or_p, loc_index): can_create=lambda options: options.hitsanity.value ), - # Swamp Spiderhouse Totem Eye Hitspots - "Swamp Spiderhouse Totem Eye Hitspots (0)": MMRLocationData( + # Swamp Spider House Totem Eye Hitspots + "Swamp Spider House Totem Eye Hitspots (0)": MMRLocationData( region="Swamp Spider House", address=0x152810, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (1)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (1)": MMRLocationData( region="Swamp Spider House", address=0x152811, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (2)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (2)": MMRLocationData( region="Swamp Spider House", address=0x152812, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (3)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (3)": MMRLocationData( region="Swamp Spider House", address=0x152820, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (4)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (4)": MMRLocationData( region="Swamp Spider House", address=0x152821, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (5)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (5)": MMRLocationData( region="Swamp Spider House", address=0x152822, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (6)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (6)": MMRLocationData( region="Swamp Spider House", address=0x152830, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (7)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (7)": MMRLocationData( region="Swamp Spider House", address=0x152831, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (8)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (8)": MMRLocationData( region="Swamp Spider House", address=0x152832, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (9)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (9)": MMRLocationData( region="Swamp Spider House", address=0x152800, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (10)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (10)": MMRLocationData( region="Swamp Spider House", address=0x152801, can_create=lambda options: options.hitsanity.value ), - "Swamp Spiderhouse Totem Eye Hitspots (11)": MMRLocationData( + "Swamp Spider House Totem Eye Hitspots (11)": MMRLocationData( region="Swamp Spider House", address=0x152802, can_create=lambda options: options.hitsanity.value ), - # Ocean Spiderhouse Mask Hitspots - "Ocean Spiderhouse Mask Hitspots (0)": MMRLocationData( + # Ocean Spider House Mask Hitspots + "Ocean Spider House Mask Hitspots (0)": MMRLocationData( region="Ocean Spider House", address=0x152900, can_create=lambda options: options.hitsanity.value ), - "Ocean Spiderhouse Mask Hitspots (1)": MMRLocationData( + "Ocean Spider House Mask Hitspots (1)": MMRLocationData( region="Ocean Spider House", address=0x152901, can_create=lambda options: options.hitsanity.value ), - "Ocean Spiderhouse Mask Hitspots (2)": MMRLocationData( + "Ocean Spider House Mask Hitspots (2)": MMRLocationData( region="Ocean Spider House", address=0x152902, can_create=lambda options: options.hitsanity.value ), - "Ocean Spiderhouse Mask Hitspots (3)": MMRLocationData( + "Ocean Spider House Mask Hitspots (3)": MMRLocationData( region="Ocean Spider House", address=0x152910, can_create=lambda options: options.hitsanity.value ), - "Ocean Spiderhouse Mask Hitspots (4)": MMRLocationData( + "Ocean Spider House Mask Hitspots (4)": MMRLocationData( region="Ocean Spider House", address=0x152911, can_create=lambda options: options.hitsanity.value ), - "Ocean Spiderhouse Mask Hitspots (5)": MMRLocationData( + "Ocean Spider House Mask Hitspots (5)": MMRLocationData( region="Ocean Spider House", address=0x152912, can_create=lambda options: options.hitsanity.value ), - "Ocean Spiderhouse Mask Hitspots (6)": MMRLocationData( + "Ocean Spider House Mask Hitspots (6)": MMRLocationData( region="Ocean Spider House", address=0x152920, can_create=lambda options: options.hitsanity.value ), - "Ocean Spiderhouse Mask Hitspots (7)": MMRLocationData( + "Ocean Spider House Mask Hitspots (7)": MMRLocationData( region="Ocean Spider House", address=0x152921, can_create=lambda options: options.hitsanity.value ), - "Ocean Spiderhouse Mask Hitspots (8)": MMRLocationData( + "Ocean Spider House Mask Hitspots (8)": MMRLocationData( region="Ocean Spider House", address=0x152922, can_create=lambda options: options.hitsanity.value @@ -10620,28 +10620,28 @@ def can_create_heart_location(shp, c_or_p, loc_index): can_create=lambda options: options.invisisanity.value ), - # Swamp Spiderhouse Invisible Rupees Above Giant Jars - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (0)": MMRLocationData( + # Swamp Spider House Invisible Rupees Above Giant Jars + "Swamp Spider House Invisible Rupees Above Giant Jars (0)": MMRLocationData( region="Swamp Spider House", address=0x162744, can_create=lambda options: options.invisisanity.value ), - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (1)": MMRLocationData( + "Swamp Spider House Invisible Rupees Above Giant Jars (1)": MMRLocationData( region="Swamp Spider House", address=0x162743, can_create=lambda options: options.invisisanity.value ), - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (2)": MMRLocationData( + "Swamp Spider House Invisible Rupees Above Giant Jars (2)": MMRLocationData( region="Swamp Spider House", address=0x162742, can_create=lambda options: options.invisisanity.value ), - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (3)": MMRLocationData( + "Swamp Spider House Invisible Rupees Above Giant Jars (3)": MMRLocationData( region="Swamp Spider House", address=0x162741, can_create=lambda options: options.invisisanity.value ), - "Swamp Spiderhouse Invisible Rupees Above Giant Jars (4)": MMRLocationData( + "Swamp Spider House Invisible Rupees Above Giant Jars (4)": MMRLocationData( region="Swamp Spider House", address=0x162740, can_create=lambda options: options.invisisanity.value @@ -13651,7 +13651,7 @@ def can_create_heart_location(shp, c_or_p, loc_index): address=0x274810, can_create=lambda options: options.woodsanity.value ), - "Ocean Spiderhouse Basement Crate (1)": MMRLocationData( + "Ocean Spider House Basement Crate (1)": MMRLocationData( region="Ocean Spider House", address=0x272850, can_create=lambda options: options.woodsanity.value @@ -16277,28 +16277,28 @@ def can_create_heart_location(shp, c_or_p, loc_index): can_create=lambda options: options.flowersanity.value ), # Swamp Spider Flowers - "Swamp Spiderhouse Main Room Flowers (1)": MMRLocationData( + "Swamp Spider House Main Room Flowers (1)": MMRLocationData( region="Swamp Spider House", address=0x3F2710, can_create=lambda options: options.flowersanity.value ), - "Swamp Spiderhouse Main Room Flowers (2)": MMRLocationData( + "Swamp Spider House Main Room Flowers (2)": MMRLocationData( region="Swamp Spider House", address=0x3F2711, can_create=lambda options: options.flowersanity.value ), - "Swamp Spiderhouse Main Room Flower (3)": MMRLocationData( + "Swamp Spider House Main Room Flower (3)": MMRLocationData( region="Swamp Spider House", address=0x3F2712, can_create=lambda options: options.flowersanity.value ), - "Swamp Spiderhouse Giant Pot Room Flower (1)": MMRLocationData( + "Swamp Spider House Giant Pot Room Flower (1)": MMRLocationData( region="Swamp Spider House", address=0x3F2740, can_create=lambda options: options.flowersanity.value ), # Requires Sonata - "Swamp Spiderhouse Giant Pot Room Flower (2)": MMRLocationData( + "Swamp Spider House Giant Pot Room Flower (2)": MMRLocationData( region="Swamp Spider House", address=0x3F2741, can_create=lambda options: options.flowersanity.value From fc32119782a72edc9a9189c95ba465909fddd761 Mon Sep 17 00:00:00 2001 From: VincentsSin Date: Wed, 10 Jun 2026 02:19:20 -0500 Subject: [PATCH 18/18] Add "Magic Bean" to `can_plant_beans` --- worlds/mm_recomp/NormalRules.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index a8792c6e..c09c6a43 100644 --- a/worlds/mm_recomp/NormalRules.py +++ b/worlds/mm_recomp/NormalRules.py @@ -152,7 +152,8 @@ def can_plant_beans(state, player, options): ( has_bottle(state, player) or can_play_song("Song of Storms", state, player) - ) + ) and + state.has("Magic Bean", player) ) def can_use_powder_keg(state, player, options):