From 4dca4586592dc5a0f99cfa054f7e6d3500a264c1 Mon Sep 17 00:00:00 2001 From: jamesbrq Date: Thu, 8 Aug 2024 05:27:04 -0400 Subject: [PATCH] ASM changes + various name/logic updates --- worlds/mlss/Data.py | 5 +- worlds/mlss/Locations.py | 100 ++++++++--------- worlds/mlss/Names/LocationName.py | 76 ++++++------- worlds/mlss/Options.py | 4 +- worlds/mlss/Rom.py | 13 +-- worlds/mlss/Rules.py | 173 ++++++++++++++++++++++++++---- worlds/mlss/__init__.py | 6 +- worlds/mlss/data/basepatch.bsdiff | Bin 17596 -> 17595 bytes 8 files changed, 251 insertions(+), 126 deletions(-) diff --git a/worlds/mlss/Data.py b/worlds/mlss/Data.py index 749e63bcf24d..c8cb354a2478 100644 --- a/worlds/mlss/Data.py +++ b/worlds/mlss/Data.py @@ -1,6 +1,9 @@ flying = [ 0x14, 0x1D, + 0x32, + 0x33, + 0x40, 0x4C ] @@ -151,7 +154,7 @@ 0x50458C, 0x5045AC, 0x50468C, - 0x5046CC, + # 0x5046CC, 6 enemy formation 0x5046EC, 0x50470C ] diff --git a/worlds/mlss/Locations.py b/worlds/mlss/Locations.py index ae7eb25fabfe..8456deaa966e 100644 --- a/worlds/mlss/Locations.py +++ b/worlds/mlss/Locations.py @@ -93,8 +93,8 @@ class MLSSLocation(Location): LocationData("Hoohoo Mountain Below Summit Block 1", 0x39D873, 0), LocationData("Hoohoo Mountain Below Summit Block 2", 0x39D87B, 0), LocationData("Hoohoo Mountain Below Summit Block 3", 0x39D883, 0), - LocationData("Hoohoo Mountain After Hoohooros Block 1", 0x39D890, 0), - LocationData("Hoohoo Mountain After Hoohooros Block 2", 0x39D8A0, 0), + LocationData("Hoohoo Mountain Past Hoohooros Block 1", 0x39D890, 0), + LocationData("Hoohoo Mountain Past Hoohooros Block 2", 0x39D8A0, 0), LocationData("Hoohoo Mountain Hoohooros Room Block 1", 0x39D8AD, 0), LocationData("Hoohoo Mountain Hoohooros Room Block 2", 0x39D8B5, 0), LocationData("Hoohoo Mountain Before Hoohooros Block", 0x39D8D2, 0), @@ -104,7 +104,7 @@ class MLSSLocation(Location): LocationData("Hoohoo Mountain Room 1 Block 2", 0x39D924, 0), LocationData("Hoohoo Mountain Room 1 Block 3", 0x39D92C, 0), LocationData("Hoohoo Mountain Base Room 1 Block", 0x39D939, 0), - LocationData("Hoohoo Village Right Side Block", 0x39D957, 0), + LocationData("Hoohoo Village Eastside Block", 0x39D957, 0), LocationData("Hoohoo Village Bridge Room Block 1", 0x39D96F, 0), LocationData("Hoohoo Village Bridge Room Block 2", 0x39D97F, 0), LocationData("Hoohoo Village Bridge Room Block 3", 0x39D98F, 0), @@ -119,8 +119,8 @@ class MLSSLocation(Location): LocationData("Hoohoo Mountain Base Boostatue Room Digspot 2", 0x39D9E1, 0), LocationData("Hoohoo Mountain Base Grassy Area Block 1", 0x39D9FE, 0), LocationData("Hoohoo Mountain Base Grassy Area Block 2", 0x39D9F6, 0), - LocationData("Hoohoo Mountain Base After Minecart Minigame Block 1", 0x39DA35, 0), - LocationData("Hoohoo Mountain Base After Minecart Minigame Block 2", 0x39DA2D, 0), + LocationData("Hoohoo Mountain Base Past Minecart Minigame Block 1", 0x39DA35, 0), + LocationData("Hoohoo Mountain Base Past Minecart Minigame Block 2", 0x39DA2D, 0), LocationData("Cave Connecting Stardust Fields and Hoohoo Village Block 1", 0x39DA77, 0), LocationData("Cave Connecting Stardust Fields and Hoohoo Village Block 2", 0x39DA7F, 0), LocationData("Hoohoo Village South Cave Block", 0x39DACD, 0), @@ -143,14 +143,14 @@ class MLSSLocation(Location): LocationData("Shop Starting Flag 3", 0x3C05F4, 3), LocationData("Hoohoo Mountain Summit Digspot", 0x39D85E, 0), LocationData("Hoohoo Mountain Below Summit Digspot", 0x39D86B, 0), - LocationData("Hoohoo Mountain After Hoohooros Digspot", 0x39D898, 0), + LocationData("Hoohoo Mountain Past Hoohooros Digspot", 0x39D898, 0), LocationData("Hoohoo Mountain Hoohooros Room Digspot 1", 0x39D8BD, 0), LocationData("Hoohoo Mountain Hoohooros Room Digspot 2", 0x39D8C5, 0), LocationData("Hoohoo Mountain Before Hoohooros Digspot", 0x39D8E2, 0), LocationData("Hoohoo Mountain Room 2 Digspot 1", 0x39D907, 0), LocationData("Hoohoo Mountain Room 2 Digspot 2", 0x39D90F, 0), LocationData("Hoohoo Mountain Base Room 1 Digspot", 0x39D941, 0), - LocationData("Hoohoo Village Right Side Digspot", 0x39D95F, 0), + LocationData("Hoohoo Village Eastside Digspot", 0x39D95F, 0), LocationData("Hoohoo Village Super Hammer Cave Digspot", 0x39DB02, 0), LocationData("Hoohoo Village Super Hammer Cave Block", 0x39DAEA, 0), LocationData("Hoohoo Village North Cave Room 2 Digspot", 0x39DAB5, 0), @@ -267,7 +267,7 @@ class MLSSLocation(Location): LocationData("Chucklehuck Woods Cave Room 3 Coin Block", 0x39DDB4, 0), LocationData("Chucklehuck Woods Pipe 5 Room Coin Block", 0x39DDE6, 0), LocationData("Chucklehuck Woods Room 7 Coin Block", 0x39DE31, 0), - LocationData("Chucklehuck Woods After Chuckleroot Coin Block", 0x39DF14, 0), + LocationData("Chucklehuck Woods Past Chuckleroot Coin Block", 0x39DF14, 0), LocationData("Chucklehuck Woods Koopa Room Coin Block", 0x39DF53, 0), LocationData("Chucklehuck Woods Winkle Area Cave Coin Block", 0x39DF80, 0), LocationData("Sewers Prison Room Coin Block", 0x39E01E, 0), @@ -286,7 +286,7 @@ class MLSSLocation(Location): LocationData("Hoohoo Mountain Base Past Ultra Hammer Rocks Block 1", 0x39DA42, 0), LocationData("Hoohoo Mountain Base Past Ultra Hammer Rocks Block 2", 0x39DA4A, 0), LocationData("Hoohoo Mountain Base Past Ultra Hammer Rocks Block 3", 0x39DA52, 0), - LocationData("Hoohoo Mountain Base Boostatue Room Digspot 3 (Rightside)", 0x39D9E9, 0), + LocationData("Hoohoo Mountain Base Boostatue Room Digspot 3 (Right Side)", 0x39D9E9, 0), LocationData("Hoohoo Mountain Base Mole Near Teehee Valley", 0x277A45, 1), LocationData("Teehee Valley Entrance To Hoohoo Mountain Digspot", 0x39E5B5, 0), LocationData("Teehee Valley Upper Maze Room 1 Block", 0x39E5E0, 0), @@ -346,12 +346,12 @@ class MLSSLocation(Location): LocationData("Chucklehuck Woods Southwest of Chuckleroot Block", 0x39DEC2, 0), LocationData("Chucklehuck Woods Wiggler room Digspot 1", 0x39DECF, 0), LocationData("Chucklehuck Woods Wiggler room Digspot 2", 0x39DED7, 0), - LocationData("Chucklehuck Woods After Chuckleroot Block 1", 0x39DEE4, 0), - LocationData("Chucklehuck Woods After Chuckleroot Block 2", 0x39DEEC, 0), - LocationData("Chucklehuck Woods After Chuckleroot Block 3", 0x39DEF4, 0), - LocationData("Chucklehuck Woods After Chuckleroot Block 4", 0x39DEFC, 0), - LocationData("Chucklehuck Woods After Chuckleroot Block 5", 0x39DF04, 0), - LocationData("Chucklehuck Woods After Chuckleroot Block 6", 0x39DF0C, 0), + LocationData("Chucklehuck Woods Past Chuckleroot Block 1", 0x39DEE4, 0), + LocationData("Chucklehuck Woods Past Chuckleroot Block 2", 0x39DEEC, 0), + LocationData("Chucklehuck Woods Past Chuckleroot Block 3", 0x39DEF4, 0), + LocationData("Chucklehuck Woods Past Chuckleroot Block 4", 0x39DEFC, 0), + LocationData("Chucklehuck Woods Past Chuckleroot Block 5", 0x39DF04, 0), + LocationData("Chucklehuck Woods Past Chuckleroot Block 6", 0x39DF0C, 0), LocationData("Chucklehuck Woods Koopa Room Block 1", 0x39DF4B, 0), LocationData("Chucklehuck Woods Koopa Room Block 2", 0x39DF5B, 0), LocationData("Chucklehuck Woods Koopa Room Digspot", 0x39DF63, 0), @@ -368,14 +368,14 @@ class MLSSLocation(Location): ] castleTown: typing.List[LocationData] = [ - LocationData("Beanbean Castle Town Left Side House Block 1", 0x39D7A4, 0), - LocationData("Beanbean Castle Town Left Side House Block 2", 0x39D7AC, 0), - LocationData("Beanbean Castle Town Left Side House Block 3", 0x39D7B4, 0), - LocationData("Beanbean Castle Town Left Side House Block 4", 0x39D7BC, 0), - LocationData("Beanbean Castle Town Right Side House Block 1", 0x39D7D8, 0), - LocationData("Beanbean Castle Town Right Side House Block 2", 0x39D7E0, 0), - LocationData("Beanbean Castle Town Right Side House Block 3", 0x39D7E8, 0), - LocationData("Beanbean Castle Town Right Side House Block 4", 0x39D7F0, 0), + LocationData("Beanbean Castle Town West Side House Block 1", 0x39D7A4, 0), + LocationData("Beanbean Castle Town West Side House Block 2", 0x39D7AC, 0), + LocationData("Beanbean Castle Town West Side House Block 3", 0x39D7B4, 0), + LocationData("Beanbean Castle Town West Side House Block 4", 0x39D7BC, 0), + LocationData("Beanbean Castle Town East Side House Block 1", 0x39D7D8, 0), + LocationData("Beanbean Castle Town East Side House Block 2", 0x39D7E0, 0), + LocationData("Beanbean Castle Town East Side House Block 3", 0x39D7E8, 0), + LocationData("Beanbean Castle Town East Side House Block 4", 0x39D7F0, 0), LocationData("Beanbean Castle Peach's Extra Dress", 0x1E9433, 2), LocationData("Beanbean Castle Fake Beanstar", 0x1E9432, 2), LocationData("Beanbean Castle Town Beanlet 1", 0x251347, 1), @@ -445,14 +445,14 @@ class MLSSLocation(Location): ] kidnappedFlag: typing.List[LocationData] = [ - LocationData("Badge Shop Enter Fungitown Flag 1", 0x3C0640, 2), - LocationData("Badge Shop Enter Fungitown Flag 2", 0x3C0642, 2), - LocationData("Badge Shop Enter Fungitown Flag 3", 0x3C0644, 2), - LocationData("Pants Shop Enter Fungitown Flag 1", 0x3C0646, 2), - LocationData("Pants Shop Enter Fungitown Flag 2", 0x3C0648, 2), - LocationData("Pants Shop Enter Fungitown Flag 3", 0x3C064A, 2), - LocationData("Shop Enter Fungitown Flag 1", 0x3C0606, 3), - LocationData("Shop Enter Fungitown Flag 2", 0x3C0608, 3), + LocationData("Badge Shop Trunkle Flag 1", 0x3C0640, 2), + LocationData("Badge Shop Trunkle Flag 2", 0x3C0642, 2), + LocationData("Badge Shop Trunkle Flag 3", 0x3C0644, 2), + LocationData("Pants Shop Trunkle Flag 1", 0x3C0646, 2), + LocationData("Pants Shop Trunkle Flag 2", 0x3C0648, 2), + LocationData("Pants Shop Trunkle Flag 3", 0x3C064A, 2), + LocationData("Shop Trunkle Flag 1", 0x3C0606, 3), + LocationData("Shop Trunkle Flag 2", 0x3C0608, 3), ] beanstarFlag: typing.List[LocationData] = [ @@ -554,21 +554,21 @@ class MLSSLocation(Location): airport: typing.List[LocationData] = [ LocationData("Airport Entrance Digspot", 0x39E2DC, 0), LocationData("Airport Lobby Digspot", 0x39E2E9, 0), - LocationData("Airport Leftside Digspot 1", 0x39E2F6, 0), - LocationData("Airport Leftside Digspot 2", 0x39E2FE, 0), - LocationData("Airport Leftside Digspot 3", 0x39E306, 0), - LocationData("Airport Leftside Digspot 4", 0x39E30E, 0), - LocationData("Airport Leftside Digspot 5", 0x39E316, 0), + LocationData("Airport Westside Digspot 1", 0x39E2F6, 0), + LocationData("Airport Westside Digspot 2", 0x39E2FE, 0), + LocationData("Airport Westside Digspot 3", 0x39E306, 0), + LocationData("Airport Westside Digspot 4", 0x39E30E, 0), + LocationData("Airport Westside Digspot 5", 0x39E316, 0), LocationData("Airport Center Digspot 1", 0x39E323, 0), LocationData("Airport Center Digspot 2", 0x39E32B, 0), LocationData("Airport Center Digspot 3", 0x39E333, 0), LocationData("Airport Center Digspot 4", 0x39E33B, 0), LocationData("Airport Center Digspot 5", 0x39E343, 0), - LocationData("Airport Rightside Digspot 1", 0x39E350, 0), - LocationData("Airport Rightside Digspot 2", 0x39E358, 0), - LocationData("Airport Rightside Digspot 3", 0x39E360, 0), - LocationData("Airport Rightside Digspot 4", 0x39E368, 0), - LocationData("Airport Rightside Digspot 5", 0x39E370, 0), + LocationData("Airport Eastside Digspot 1", 0x39E350, 0), + LocationData("Airport Eastside Digspot 2", 0x39E358, 0), + LocationData("Airport Eastside Digspot 3", 0x39E360, 0), + LocationData("Airport Eastside Digspot 4", 0x39E368, 0), + LocationData("Airport Eastside Digspot 5", 0x39E370, 0), ] gwarharEntrance: typing.List[LocationData] = [ @@ -667,7 +667,7 @@ class MLSSLocation(Location): LocationData("Bowser's Castle Iggy & Morton Hallway Block 1", 0x39E9EF, 0), LocationData("Bowser's Castle Iggy & Morton Hallway Block 2", 0x39E9F7, 0), LocationData("Bowser's Castle Iggy & Morton Hallway Digspot", 0x39E9FF, 0), - LocationData("Bowser's Castle After Morton Block", 0x39EA0C, 0), + LocationData("Bowser's Castle Past Morton Block", 0x39EA0C, 0), LocationData("Bowser's Castle Morton Room 1 Digspot", 0x39EA89, 0), LocationData("Bowser's Castle Lemmy Room 1 Block", 0x39EA9C, 0), LocationData("Bowser's Castle Lemmy Room 1 Digspot", 0x39EAA4, 0), @@ -705,16 +705,16 @@ class MLSSLocation(Location): LocationData("Joke's End Second Floor West Room Block 4", 0x39E781, 0), LocationData("Joke's End Mole Reward 1", 0x27788E, 1), LocationData("Joke's End Mole Reward 2", 0x2778D2, 1), -] - -jokesMain: typing.List[LocationData] = [ LocationData("Joke's End Furnace Room 1 Block 1", 0x39E70F, 0), LocationData("Joke's End Furnace Room 1 Block 2", 0x39E717, 0), LocationData("Joke's End Furnace Room 1 Block 3", 0x39E71F, 0), LocationData("Joke's End Northeast of Boiler Room 1 Block", 0x39E732, 0), - LocationData("Joke's End Northeast of Boiler Room 3 Digspot", 0x39E73F, 0), LocationData("Joke's End Northeast of Boiler Room 2 Block", 0x39E74C, 0), LocationData("Joke's End Northeast of Boiler Room 2 Digspot", 0x39E754, 0), + LocationData("Joke's End Northeast of Boiler Room 3 Digspot", 0x39E73F, 0), +] + +jokesMain: typing.List[LocationData] = [ LocationData("Joke's End Second Floor East Room Digspot", 0x39E794, 0), LocationData("Joke's End Final Split up Room Digspot", 0x39E7A7, 0), LocationData("Joke's End South of Bridge Room Block", 0x39E7B4, 0), @@ -740,10 +740,10 @@ class MLSSLocation(Location): postJokes: typing.List[LocationData] = [ LocationData("Teehee Valley Past Ultra Hammer Rock Digspot 2 (Post-Birdo)", 0x39E5A0, 0), - LocationData("Teehee Valley Before Popple Digspot 1", 0x39E55B, 0), - LocationData("Teehee Valley Before Popple Digspot 2", 0x39E563, 0), - LocationData("Teehee Valley Before Popple Digspot 3", 0x39E56B, 0), - LocationData("Teehee Valley Before Popple Digspot 4", 0x39E573, 0), + LocationData("Teehee Valley Before Birdo Digspot 1", 0x39E55B, 0), + LocationData("Teehee Valley Before Birdo Digspot 2", 0x39E563, 0), + LocationData("Teehee Valley Before Birdo Digspot 3", 0x39E56B, 0), + LocationData("Teehee Valley Before Birdo Digspot 4", 0x39E573, 0), ] theater: typing.List[LocationData] = [ diff --git a/worlds/mlss/Names/LocationName.py b/worlds/mlss/Names/LocationName.py index 3c316112eee4..e75d4e22cb27 100644 --- a/worlds/mlss/Names/LocationName.py +++ b/worlds/mlss/Names/LocationName.py @@ -8,14 +8,14 @@ class LocationName: StardustFields4Block3 = "Stardust Fields Room 4 Block 3" StardustFields5Block = "Stardust Fields Room 5 Block" HoohooVillageHammerHouseBlock = "Hoohoo Village Hammer House Block" - BeanbeanCastleTownLeftSideHouseBlock1 = "Beanbean Castle Town Left Side House Block 1" - BeanbeanCastleTownLeftSideHouseBlock2 = "Beanbean Castle Town Left Side House Block 2" - BeanbeanCastleTownLeftSideHouseBlock3 = "Beanbean Castle Town Left Side House Block 3" - BeanbeanCastleTownLeftSideHouseBlock4 = "Beanbean Castle Town Left Side House Block 4" - BeanbeanCastleTownRightSideHouseBlock1 = "Beanbean Castle Town Right Side House Block 1" - BeanbeanCastleTownRightSideHouseBlock2 = "Beanbean Castle Town Right Side House Block 2" - BeanbeanCastleTownRightSideHouseBlock3 = "Beanbean Castle Town Right Side House Block 3" - BeanbeanCastleTownRightSideHouseBlock4 = "Beanbean Castle Town Right Side House Block 4" + BeanbeanCastleTownWestsideHouseBlock1 = "Beanbean Castle Town Westside House Block 1" + BeanbeanCastleTownWestsideHouseBlock2 = "Beanbean Castle Town Westside House Block 2" + BeanbeanCastleTownWestsideHouseBlock3 = "Beanbean Castle Town Westside House Block 3" + BeanbeanCastleTownWestsideHouseBlock4 = "Beanbean Castle Town Westside House Block 4" + BeanbeanCastleTownEastsideHouseBlock1 = "Beanbean Castle Town Eastside House Block 1" + BeanbeanCastleTownEastsideHouseBlock2 = "Beanbean Castle Town Eastside House Block 2" + BeanbeanCastleTownEastsideHouseBlock3 = "Beanbean Castle Town Eastside House Block 3" + BeanbeanCastleTownEastsideHouseBlock4 = "Beanbean Castle Town Eastside House Block 4" BeanbeanCastleTownMiniMarioBlock1 = "Beanbean Castle Town Mini Mario Block 1" BeanbeanCastleTownMiniMarioBlock2 = "Beanbean Castle Town Mini Mario Block 2" BeanbeanCastleTownMiniMarioBlock3 = "Beanbean Castle Town Mini Mario Block 3" @@ -26,9 +26,9 @@ class LocationName: HoohooMountainBelowSummitBlock1 = "Hoohoo Mountain Below Summit Block 1" HoohooMountainBelowSummitBlock2 = "Hoohoo Mountain Below Summit Block 2" HoohooMountainBelowSummitBlock3 = "Hoohoo Mountain Below Summit Block 3" - HoohooMountainAfterHoohoorosBlock1 = "Hoohoo Mountain After Hoohooros Block 1" - HoohooMountainAfterHoohoorosDigspot = "Hoohoo Mountain After Hoohooros Digspot" - HoohooMountainAfterHoohoorosBlock2 = "Hoohoo Mountain After Hoohooros Block 2" + HoohooMountainPastHoohoorosBlock1 = "Hoohoo Mountain Past Hoohooros Block 1" + HoohooMountainPastHoohoorosDigspot = "Hoohoo Mountain Past Hoohooros Digspot" + HoohooMountainPastHoohoorosBlock2 = "Hoohoo Mountain Past Hoohooros Block 2" HoohooMountainHoohoorosRoomBlock1 = "Hoohoo Mountain Hoohooros Room Block 1" HoohooMountainHoohoorosRoomBlock2 = "Hoohoo Mountain Hoohooros Room Block 2" HoohooMountainHoohoorosRoomDigspot1 = "Hoohoo Mountain Hoohooros Room Digspot 1" @@ -44,8 +44,8 @@ class LocationName: HoohooMountainRoom1Block3 = "Hoohoo Mountain Room 1 Block 3" HoohooMountainBaseRoom1Block = "Hoohoo Mountain Base Room 1 Block" HoohooMountainBaseRoom1Digspot = "Hoohoo Mountain Base Room 1 Digspot" - HoohooVillageRightSideBlock = "Hoohoo Village Right Side Block" - HoohooVillageRightSideDigspot = "Hoohoo Village Right Side Digspot" + HoohooVillageEastsideBlock = "Hoohoo Village Eastside Block" + HoohooVillageEastsideDigspot = "Hoohoo Village Eastside Digspot" HoohooVillageBridgeRoomBlock1 = "Hoohoo Village Bridge Room Block 1" HoohooVillageBridgeRoomBlock2 = "Hoohoo Village Bridge Room Block 2" HoohooVillageBridgeRoomBlock3 = "Hoohoo Village Bridge Room Block 3" @@ -65,8 +65,8 @@ class LocationName: HoohooMountainBaseGuffawhaRuinsEntranceDigspot = "Hoohoo Mountain Base Guffawha Ruins Entrance Digspot" HoohooMountainBaseTeeheeValleyEntranceDigspot = "Hoohoo Mountain Base Teehee Valley Entrance Digspot" HoohooMountainBaseTeeheeValleyEntranceBlock = "Hoohoo Mountain Base Teehee Valley Entrance Block" - HoohooMountainBaseAfterMinecartMinigameBlock1 = "Hoohoo Mountain Base After Minecart Minigame Block 1" - HoohooMountainBaseAfterMinecartMinigameBlock2 = "Hoohoo Mountain Base After Minecart Minigame Block 2" + HoohooMountainBasePastMinecartMinigameBlock1 = "Hoohoo Mountain Base Past Minecart Minigame Block 1" + HoohooMountainBasePastMinecartMinigameBlock2 = "Hoohoo Mountain Base Past Minecart Minigame Block 2" HoohooMountainBasePastUltraHammerRocksBlock1 = "Hoohoo Mountain Base Past Ultra Hammer Rocks Block 1" HoohooMountainBasePastUltraHammerRocksBlock2 = "Hoohoo Mountain Base Past Ultra Hammer Rocks Block 2" HoohooMountainBasePastUltraHammerRocksBlock3 = "Hoohoo Mountain Base Past Ultra Hammer Rocks Block 3" @@ -148,12 +148,12 @@ class LocationName: ChucklehuckWoodsSouthwestOfChucklerootBlock = "Chucklehuck Woods Southwest of Chuckleroot Block" ChucklehuckWoodsWigglerRoomDigspot1 = "Chucklehuck Woods Wiggler Room Digspot 1" ChucklehuckWoodsWigglerRoomDigspot2 = "Chucklehuck Woods Wiggler Room Digspot 2" - ChucklehuckWoodsAfterChucklerootBlock1 = "Chucklehuck Woods After Chuckleroot Block 1" - ChucklehuckWoodsAfterChucklerootBlock2 = "Chucklehuck Woods After Chuckleroot Block 2" - ChucklehuckWoodsAfterChucklerootBlock3 = "Chucklehuck Woods After Chuckleroot Block 3" - ChucklehuckWoodsAfterChucklerootBlock4 = "Chucklehuck Woods After Chuckleroot Block 4" - ChucklehuckWoodsAfterChucklerootBlock5 = "Chucklehuck Woods After Chuckleroot Block 5" - ChucklehuckWoodsAfterChucklerootBlock6 = "Chucklehuck Woods After Chuckleroot Block 6" + ChucklehuckWoodsPastChucklerootBlock1 = "Chucklehuck Woods Past Chuckleroot Block 1" + ChucklehuckWoodsPastChucklerootBlock2 = "Chucklehuck Woods Past Chuckleroot Block 2" + ChucklehuckWoodsPastChucklerootBlock3 = "Chucklehuck Woods Past Chuckleroot Block 3" + ChucklehuckWoodsPastChucklerootBlock4 = "Chucklehuck Woods Past Chuckleroot Block 4" + ChucklehuckWoodsPastChucklerootBlock5 = "Chucklehuck Woods Past Chuckleroot Block 5" + ChucklehuckWoodsPastChucklerootBlock6 = "Chucklehuck Woods Past Chuckleroot Block 6" WinkleAreaBeanstarRoomBlock = "Winkle Area Beanstar Room Block" WinkleAreaDigspot = "Winkle Area Digspot" WinkleAreaOutsideColosseumBlock = "Winkle Area Outside Colosseum Block" @@ -232,21 +232,21 @@ class LocationName: WoohooHooniversityPastCacklettaRoom2Digspot = "Woohoo Hooniversity Past Cackletta Room 2 Digspot" AirportEntranceDigspot = "Airport Entrance Digspot" AirportLobbyDigspot = "Airport Lobby Digspot" - AirportLeftsideDigspot1 = "Airport Leftside Digspot 1" - AirportLeftsideDigspot2 = "Airport Leftside Digspot 2" - AirportLeftsideDigspot3 = "Airport Leftside Digspot 3" - AirportLeftsideDigspot4 = "Airport Leftside Digspot 4" - AirportLeftsideDigspot5 = "Airport Leftside Digspot 5" + AirportWestsideDigspot1 = "Airport Westside Digspot 1" + AirportWestsideDigspot2 = "Airport Westside Digspot 2" + AirportWestsideDigspot3 = "Airport Westside Digspot 3" + AirportWestsideDigspot4 = "Airport Westside Digspot 4" + AirportWestsideDigspot5 = "Airport Westside Digspot 5" AirportCenterDigspot1 = "Airport Center Digspot 1" AirportCenterDigspot2 = "Airport Center Digspot 2" AirportCenterDigspot3 = "Airport Center Digspot 3" AirportCenterDigspot4 = "Airport Center Digspot 4" AirportCenterDigspot5 = "Airport Center Digspot 5" - AirportRightsideDigspot1 = "Airport Rightside Digspot 1" - AirportRightsideDigspot2 = "Airport Rightside Digspot 2" - AirportRightsideDigspot3 = "Airport Rightside Digspot 3" - AirportRightsideDigspot4 = "Airport Rightside Digspot 4" - AirportRightsideDigspot5 = "Airport Rightside Digspot 5" + AirportEastsideDigspot1 = "Airport Eastside Digspot 1" + AirportEastsideDigspot2 = "Airport Eastside Digspot 2" + AirportEastsideDigspot3 = "Airport Eastside Digspot 3" + AirportEastsideDigspot4 = "Airport Eastside Digspot 4" + AirportEastsideDigspot5 = "Airport Eastside Digspot 5" GwarharLagoonPipeRoomDigspot = "Gwarhar Lagoon Pipe Room Digspot" GwarharLagoonMassageParlorEntranceDigspot = "Gwarhar Lagoon Massage Parlor Entrance Digspot" GwarharLagoonPastHermieDigspot = "Gwarhar Lagoon Past Hermie Digspot" @@ -276,10 +276,10 @@ class LocationName: WoohooHooniversityBasementRoom4Block = "Woohoo Hooniversity Basement Room 4 Block" WoohooHooniversityPoppleRoomDigspot1 = "Woohoo Hooniversity Popple Room Digspot 1" WoohooHooniversityPoppleRoomDigspot2 = "Woohoo Hooniversity Popple Room Digspot 2" - TeeheeValleyBeforePoppleDigspot1 = "Teehee Valley Before Popple Digspot 1" - TeeheeValleyBeforePoppleDigspot2 = "Teehee Valley Before Popple Digspot 2" - TeeheeValleyBeforePoppleDigspot3 = "Teehee Valley Before Popple Digspot 3" - TeeheeValleyBeforePoppleDigspot4 = "Teehee Valley Before Popple Digspot 4" + TeeheeValleyBeforeBirdoDigspot1 = "Teehee Valley Before Birdo Digspot 1" + TeeheeValleyBeforeBirdoDigspot2 = "Teehee Valley Before Birdo Digspot 2" + TeeheeValleyBeforeBirdoDigspot3 = "Teehee Valley Before Birdo Digspot 3" + TeeheeValleyBeforeBirdoDigspot4 = "Teehee Valley Before Birdo Digspot 4" TeeheeValleyRoom1Digspot1 = "Teehee Valley Room 1 Digspot 1" TeeheeValleyRoom1Digspot2 = "Teehee Valley Room 1 Digspot 2" TeeheeValleyRoom1Digspot3 = "Teehee Valley Room 1 Digspot 3" @@ -317,7 +317,7 @@ class LocationName: JokesEndNortheastOfBoilerRoom1Block = "Joke's End Northeast Of Boiler Room 1 Block" JokesEndNortheastOfBoilerRoom3Digspot = "Joke's End Northeast Of Boiler Room 3 Digspot" JokesEndNortheastOfBoilerRoom2Block1 = "Joke's End Northeast Of Boiler Room 2 Block" - JokesEndNortheastOfBoilerRoom2Block2 = "Joke's End Northeast Of Boiler Room 2 Digspot" + JokesEndNortheastOfBoilerRoom2Digspot = "Joke's End Northeast Of Boiler Room 2 Digspot" JokesEndSecondFloorWestRoomBlock1 = "Joke's End Second Floor West Room Block 1" JokesEndSecondFloorWestRoomBlock2 = "Joke's End Second Floor West Room Block 2" JokesEndSecondFloorWestRoomBlock3 = "Joke's End Second Floor West Room Block 3" @@ -505,7 +505,7 @@ class LocationName: BowsersCastleIggyMortonHallwayBlock1 = "Bowser's Castle Iggy & Morton Hallway Block 1" BowsersCastleIggyMortonHallwayBlock2 = "Bowser's Castle Iggy & Morton Hallway Block 2" BowsersCastleIggyMortonHallwayDigspot = "Bowser's Castle Iggy & Morton Hallway Digspot" - BowsersCastleAfterMortonBlock = "Bowser's Castle After Morton Block" + BowsersCastlePastMortonBlock = "Bowser's Castle Past Morton Block" BowsersCastleLudwigRoyHallwayBlock1 = "Bowser's Castle Ludwig & Roy Hallway Block 1" BowsersCastleLudwigRoyHallwayBlock2 = "Bowser's Castle Ludwig & Roy Hallway Block 2" BowsersCastleRoyCorridorBlock1 = "Bowser's Castle Roy Corridor Block 1" @@ -546,7 +546,7 @@ class LocationName: ChucklehuckWoodsCaveRoom3CoinBlock = "Chucklehuck Woods Cave Room 3 Coin Block" ChucklehuckWoodsPipe5RoomCoinBlock = "Chucklehuck Woods Pipe 5 Room Coin Block" ChucklehuckWoodsRoom7CoinBlock = "Chucklehuck Woods Room 7 Coin Block" - ChucklehuckWoodsAfterChucklerootCoinBlock = "Chucklehuck Woods After Chuckleroot Coin Block" + ChucklehuckWoodsPastChucklerootCoinBlock = "Chucklehuck Woods Past Chuckleroot Coin Block" ChucklehuckWoodsKoopaRoomCoinBlock = "Chucklehuck Woods Koopa Room Coin Block" ChucklehuckWoodsWinkleAreaCaveCoinBlock = "Chucklehuck Woods Winkle Area Cave Coin Block" SewersPrisonRoomCoinBlock = "Sewers Prison Room Coin Block" diff --git a/worlds/mlss/Options.py b/worlds/mlss/Options.py index 14c1ef3a7d5a..46b2cb12d15f 100644 --- a/worlds/mlss/Options.py +++ b/worlds/mlss/Options.py @@ -243,7 +243,7 @@ class HarhallsPants(Toggle): This will remove the Harhall's Pants check from the pool. """ - display_name = "Remove Harhall's Pants" + display_name = "Disable Harhall's Pants" class DifficultLogic(Toggle): @@ -282,7 +282,7 @@ class MLSSOptions(PerGameCommonOptions): extra_pipes: ExtraPipes skip_minecart: SkipMinecart disable_surf: DisableSurf - harhalls_pants: HarhallsPants + disable_harhalls_pants: HarhallsPants block_visibility: HiddenVisible chuckle_beans: ChuckleBeans music_options: MusicOptions diff --git a/worlds/mlss/Rom.py b/worlds/mlss/Rom.py index 3bbbea30cbc9..93832b358b05 100644 --- a/worlds/mlss/Rom.py +++ b/worlds/mlss/Rom.py @@ -320,18 +320,7 @@ def write_tokens(world: "MLSSWorld", patch: MLSSProcedurePatch) -> None: patch.write_token(APTokenTypes.WRITE, address + 3, bytes([world.random.randint(0x0, 0x26)])) for location_name in location_table.keys(): - if ( - (world.options.skip_minecart and "Minecart" in location_name and "After" not in location_name) - or (world.options.castle_skip and "Bowser" in location_name) - or (world.options.disable_surf and "Surf Minigame" in location_name) - or (world.options.harhalls_pants and "Harhall's" in location_name) - ): - continue - if (world.options.chuckle_beans == 0 and "Digspot" in location_name) or ( - world.options.chuckle_beans == 1 and location_table[location_name] in hidden - ): - continue - if not world.options.coins and "Coin" in location_name: + if location_name in world.disabled_locations: continue location = world.get_location(location_name) item = location.item diff --git a/worlds/mlss/Rules.py b/worlds/mlss/Rules.py index c0cb0e4245a3..f477f6446e2e 100644 --- a/worlds/mlss/Rules.py +++ b/worlds/mlss/Rules.py @@ -13,7 +13,7 @@ def set_rules(world: "MLSSWorld", excluded): for location in all_locations: if "Digspot" in location.name: if (world.options.skip_minecart and "Minecart" in location.name) or ( - world.options.castle_skip and "Bowser" in location.name + world.options.castle_skip and "Bowser" in location.name ): continue if world.options.chuckle_beans == 0 or world.options.chuckle_beans == 1 and location.id in hidden: @@ -218,9 +218,9 @@ def set_rules(world: "MLSSWorld", excluded): add_rule( world.get_location(LocationName.BeanbeanOutskirtsUltraHammerUpgrade), lambda state: StateLogic.thunder(state, world.player) - and StateLogic.pieces(state, world.player) - and StateLogic.castleTown(state, world.player) - and StateLogic.rose(state, world.player), + and StateLogic.pieces(state, world.player) + and StateLogic.castleTown(state, world.player) + and StateLogic.rose(state, world.player), ) add_rule( world.get_location(LocationName.BeanbeanOutskirtsSoloLuigiCaveMole), @@ -235,27 +235,27 @@ def set_rules(world: "MLSSWorld", excluded): lambda state: StateLogic.canDig(state, world.player) and StateLogic.canMini(state, world.player), ) add_rule( - world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock1), + world.get_location(LocationName.ChucklehuckWoodsPastChucklerootBlock1), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock2), + world.get_location(LocationName.ChucklehuckWoodsPastChucklerootBlock2), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock3), + world.get_location(LocationName.ChucklehuckWoodsPastChucklerootBlock3), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock4), + world.get_location(LocationName.ChucklehuckWoodsPastChucklerootBlock4), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock5), + world.get_location(LocationName.ChucklehuckWoodsPastChucklerootBlock5), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock6), + world.get_location(LocationName.ChucklehuckWoodsPastChucklerootBlock6), lambda state: StateLogic.fruits(state, world.player), ) add_rule( @@ -458,6 +458,110 @@ def set_rules(world: "MLSSWorld", excluded): lambda state: StateLogic.canCrash(state, world.player), ) + if world.options.randomize_enemies.value != 0: + add_rule( + world.get_location(LocationName.HoohooMountainHoohoorosRoomDigspot1), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainHoohoorosRoomDigspot2), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainHoohoorosRoomBlock1), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainHoohoorosRoomBlock2), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainPastHoohoorosDigspot), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainPastHoohoorosBlock1), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainPastHoohoorosBlock2), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainPastHoohoorosConnectorRoomBlock), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainPastHoohoorosConnectorRoomDigspot1), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainPastHoohoorosConnectorRoomDigspot2), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainBelowSummitBlock1), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainBelowSummitBlock2), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainBelowSummitBlock3), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainBelowSummitDigspot), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainSummitDigspot), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooVillageHammers), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + add_rule( + world.get_location(LocationName.HoohooMountainPeasleysRose), + lambda state: StateLogic.hammers(state, world.player) + or StateLogic.fire(state, world.player) + or StateLogic.thunder(state, world.player), + ) + if world.options.coins: add_rule( world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock1), @@ -512,7 +616,7 @@ def set_rules(world: "MLSSWorld", excluded): lambda state: StateLogic.brooch(state, world.player) and StateLogic.hammers(state, world.player), ) add_rule( - world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootCoinBlock), + world.get_location(LocationName.ChucklehuckWoodsPastChucklerootCoinBlock), lambda state: StateLogic.brooch(state, world.player) and StateLogic.fruits(state, world.player), ) add_rule( @@ -542,26 +646,55 @@ def set_rules(world: "MLSSWorld", excluded): add_rule( world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2CoinBlock), lambda state: StateLogic.canDash(state, world.player) - and (StateLogic.membership(state, world.player) or StateLogic.surfable(state, world.player)), + and (StateLogic.membership(state, world.player) or StateLogic.surfable(state, world.player)), ) add_rule( world.get_location(LocationName.JokesEndSecondFloorWestRoomCoinBlock), lambda state: StateLogic.ultra(state, world.player) - and StateLogic.fire(state, world.player) - and ( - StateLogic.membership(state, world.player) - or (StateLogic.canDig(state, world.player) and StateLogic.canMini(state, world.player)) - ), + and StateLogic.fire(state, world.player) + and ( + StateLogic.membership(state, world.player) + or (StateLogic.canDig(state, world.player) and StateLogic.canMini(state, + world.player)) + ), ) add_rule( world.get_location(LocationName.JokesEndNorthofBridgeRoomCoinBlock), lambda state: StateLogic.ultra(state, world.player) - and StateLogic.fire(state, world.player) - and StateLogic.canDig(state, world.player) - and (StateLogic.membership(state, world.player) or StateLogic.canMini(state, world.player)), + and StateLogic.fire(state, world.player) + and StateLogic.canDig(state, world.player) + and (StateLogic.membership(state, world.player) or StateLogic.canMini(state, world.player)), ) if not world.options.difficult_logic: add_rule( world.get_location(LocationName.JokesEndNorthofBridgeRoomCoinBlock), lambda state: StateLogic.canCrash(state, world.player), ) + add_rule( + world.get_location(LocationName.JokesEndNortheastOfBoilerRoom1Block), + lambda state: StateLogic.canCrash(state, world.player), + ) + add_rule( + world.get_location(LocationName.JokesEndNortheastOfBoilerRoom2Block1), + lambda state: StateLogic.canCrash(state, world.player), + ) + add_rule( + world.get_location(LocationName.JokesEndNortheastOfBoilerRoom2Digspot), + lambda state: StateLogic.canCrash(state, world.player), + ) + add_rule( + world.get_location(LocationName.JokesEndNortheastOfBoilerRoom3Digspot), + lambda state: StateLogic.canCrash(state, world.player), + ) + add_rule( + world.get_location(LocationName.JokesEndFurnaceRoom1Block1), + lambda state: StateLogic.canCrash(state, world.player), + ) + add_rule( + world.get_location(LocationName.JokesEndFurnaceRoom1Block2), + lambda state: StateLogic.canCrash(state, world.player), + ) + add_rule( + world.get_location(LocationName.JokesEndFurnaceRoom1Block3), + lambda state: StateLogic.canCrash(state, world.player), + ) diff --git a/worlds/mlss/__init__.py b/worlds/mlss/__init__.py index 1269550c0b21..abb853c75584 100644 --- a/worlds/mlss/__init__.py +++ b/worlds/mlss/__init__.py @@ -71,7 +71,7 @@ def generate_early(self) -> None: self.disabled_locations += [LocationName.HoohooMountainBaseMinecartCaveDigspot] if self.options.disable_surf: self.disabled_locations += [LocationName.SurfMinigame] - if self.options.harhalls_pants: + if self.options.disable_harhalls_pants: self.disabled_locations += [LocationName.HarhallsPants] if not self.options.coins: self.disabled_locations += [location.name for location in all_locations if location in coins] @@ -96,7 +96,7 @@ def fill_slot_data(self) -> Dict[str, Any]: "CastleSkip": self.options.castle_skip.value, "SkipMinecart": self.options.skip_minecart.value, "DisableSurf": self.options.disable_surf.value, - "HarhallsPants": self.options.harhalls_pants.value, + "HarhallsPants": self.options.disable_harhalls_pants.value, "ChuckleBeans": self.options.chuckle_beans.value, "DifficultLogic": self.options.difficult_logic.value, "Coins": self.options.coins.value, @@ -111,7 +111,7 @@ def create_items(self) -> None: freq = item_frequencies.get(item.itemName, 1) if item in precollected: freq = max(freq - precollected.count(item), 0) - if self.options.harhalls_pants and "Harhall's" in item.itemName: + if self.options.disable_harhalls_pants and "Harhall's" in item.itemName: continue required_items += [item.itemName for _ in range(freq)] diff --git a/worlds/mlss/data/basepatch.bsdiff b/worlds/mlss/data/basepatch.bsdiff index 8f9324995ec4c9ef9992397d64b33847c207600d..551cccdf236eda8af70ca76a514d1ceab9c4c8f7 100644 GIT binary patch literal 17595 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