diff --git a/worlds/mm_recomp/Locations.py b/worlds/mm_recomp/Locations.py index f4298f8b..7f70858d 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 ), @@ -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, @@ -7749,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, @@ -16934,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, diff --git a/worlds/mm_recomp/NormalRules.py b/worlds/mm_recomp/NormalRules.py index 4df78fa2..8fdf8ca5 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)": @@ -14792,13 +14798,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 @@ -16311,7 +16329,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), @@ -17095,12 +17117,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 +17164,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 +17271,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 @@ -17388,41 +17432,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 @@ -17430,7 +17481,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 @@ -17438,7 +17490,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": @@ -17446,7 +17499,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 ) ), @@ -17454,7 +17508,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 @@ -17462,7 +17517,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 @@ -17470,27 +17526,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 @@ -17498,7 +17559,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 @@ -17508,7 +17570,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": @@ -17516,7 +17579,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 ) ), @@ -17525,7 +17589,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 @@ -17533,7 +17598,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 @@ -17541,36 +17607,38 @@ 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 "Ikana Canyon Near Octoroks Gossip Fairy": - lambda state: ( + lambda state: + ( + can_play_song("Epona's Song", state, player) or can_play_song("Song of Healing", state, player) or - can_play_song("Epona's Song", state, player) + can_play_song("Song of Storms", 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 ( 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) - ) + lambda state: ( + 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 ), # Moon Gossip Fairies @@ -17583,7 +17651,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": @@ -17594,7 +17663,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": @@ -17605,7 +17675,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": @@ -17616,7 +17687,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": @@ -17627,7 +17699,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 ) ), @@ -17641,7 +17714,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)": @@ -17652,7 +17726,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)": @@ -17663,7 +17738,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)": @@ -17674,7 +17750,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)": @@ -17685,7 +17762,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 ) ), @@ -17717,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 ) ), "Zora Trial LRLL Path Gossip": @@ -17727,7 +17806,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": @@ -17737,7 +17817,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 ) ), @@ -17746,8 +17827,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: @@ -17756,7 +17840,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 ) ), @@ -17765,21 +17850,25 @@ 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) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), "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) or + can_play_song("Song of Storms", state, player ) ), @@ -17788,11 +17877,10 @@ 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) + can_play_song("Epona's Song", state, player) or + can_play_song("Song of Storms", state, player ) ), @@ -18121,6 +18209,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 +18262,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 +18497,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,21 +18645,34 @@ 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 - "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("Snowhead", 'Region', player) + ), + "Path To Snowhead Tree Near Ledge": + lambda.state: ( has_soul_absurd(state, player, options, "Trees & Bushes") and state.can_reach("Mountain Village", 'Region', player) ), @@ -19108,48 +19216,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) ), @@ -19713,23 +19829,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 +19871,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 +20207,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 +20337,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 +20358,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 +20369,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 +20380,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 +20461,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 +20535,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 +20570,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 + }