diff --git a/Client.py b/Client.py index 7b963cc..c8a659c 100644 --- a/Client.py +++ b/Client.py @@ -118,7 +118,7 @@ async def game_watcher(self, ctx: "BizHawkClientContext") -> None: (0x4808, 2, "EWRAM"), (0x4407, 1, "EWRAM"), (0x2339, 1, "IWRAM"), - ], + ] ) flags = read_state[0] current_room = int.from_bytes(read_state[1], "little") @@ -149,7 +149,7 @@ async def game_watcher(self, ctx: "BizHawkClientContext") -> None: if location in ctx.server_locations: locs_to_send.add(location) - # Loop for recieving items. Item is written as an ID into 0x3057. + # Loop for receiving items. Item is written as an ID into 0x3057. # ASM reads the ID in a loop and give the player the item before resetting the RAM address to 0x0. # If RAM address isn't 0x0 yet break out and try again later to give the rest of the items for i in range(len(ctx.items_received) - received_index): diff --git a/Data.py b/Data.py index 55d0ced..749e63b 100644 --- a/Data.py +++ b/Data.py @@ -5702,4 +5702,4 @@ [0x3CCA02, 0xF7, 0x02, 0], [0x3CCA00, 0xFF, 0x07, 0], [0x3D14C6, 0xFF, 0x07, 0], -[0x3D1506, 0xFF, 0x07, 1]] \ No newline at end of file +[0x3D1506, 0xFF, 0x07, 1]] diff --git a/Items.py b/Items.py index 0d115ef..b95f1a0 100644 --- a/Items.py +++ b/Items.py @@ -6,7 +6,7 @@ class ItemData(typing.NamedTuple): code: int itemName: str - progression: ItemClassification + classification: ItemClassification itemID: int @@ -32,8 +32,8 @@ class MLSSItem(Item): ItemData(77771014, "1-UP Super", ItemClassification.useful, 0x17), ItemData(77771015, "Golden Mushroom", ItemClassification.useful, 0x18), ItemData(77771016, "Refreshing Herb", ItemClassification.filler, 0x19), - ItemData(77771017, "Red Pepper", ItemClassification.filler, 0x1A), - ItemData(77771018, "Green Pepper", ItemClassification.filler, 0x1B), + ItemData(77771017, "Red Pepper", ItemClassification.useful, 0x1A), + ItemData(77771018, "Green Pepper", ItemClassification.useful, 0x1B), ItemData(77771019, "Hoo Bean", ItemClassification.filler, 0x1D), ItemData(77771020, "Chuckle Bean", ItemClassification.filler, 0x1E), ItemData(77771021, "Woohoo Blend", ItemClassification.useful, 0x20), @@ -78,21 +78,21 @@ class MLSSItem(Item): ItemData(77771060, "Beanstar Piece 3", ItemClassification.progression, 0x67), ItemData(77771061, "Beanstar Piece 4", ItemClassification.progression, 0x70), ItemData(77771062, "Spangle", ItemClassification.progression, 0x72), - ItemData(77771063, "Beanlet 1", ItemClassification.useful, 0x73), - ItemData(77771064, "Beanlet 2", ItemClassification.useful, 0x74), - ItemData(77771065, "Beanlet 3", ItemClassification.useful, 0x75), - ItemData(77771066, "Beanlet 4", ItemClassification.useful, 0x76), - ItemData(77771067, "Beanlet 5", ItemClassification.useful, 0x77), - ItemData(77771068, "Beanstone 1", ItemClassification.useful, 0x80), - ItemData(77771069, "Beanstone 2", ItemClassification.useful, 0x81), - ItemData(77771070, "Beanstone 3", ItemClassification.useful, 0x82), - ItemData(77771071, "Beanstone 4", ItemClassification.useful, 0x83), - ItemData(77771072, "Beanstone 5", ItemClassification.useful, 0x84), - ItemData(77771073, "Beanstone 6", ItemClassification.useful, 0x85), - ItemData(77771074, "Beanstone 7", ItemClassification.useful, 0x86), - ItemData(77771075, "Beanstone 8", ItemClassification.useful, 0x87), - ItemData(77771076, "Beanstone 9", ItemClassification.useful, 0x90), - ItemData(77771077, "Beanstone 10", ItemClassification.useful, 0x91), + ItemData(77771063, "Beanlet 1", ItemClassification.filler, 0x73), + ItemData(77771064, "Beanlet 2", ItemClassification.filler, 0x74), + ItemData(77771065, "Beanlet 3", ItemClassification.filler, 0x75), + ItemData(77771066, "Beanlet 4", ItemClassification.filler, 0x76), + ItemData(77771067, "Beanlet 5", ItemClassification.filler, 0x77), + ItemData(77771068, "Beanstone 1", ItemClassification.filler, 0x80), + ItemData(77771069, "Beanstone 2", ItemClassification.filler, 0x81), + ItemData(77771070, "Beanstone 3", ItemClassification.filler, 0x82), + ItemData(77771071, "Beanstone 4", ItemClassification.filler, 0x83), + ItemData(77771072, "Beanstone 5", ItemClassification.filler, 0x84), + ItemData(77771073, "Beanstone 6", ItemClassification.filler, 0x85), + ItemData(77771074, "Beanstone 7", ItemClassification.filler, 0x86), + ItemData(77771075, "Beanstone 8", ItemClassification.filler, 0x87), + ItemData(77771076, "Beanstone 9", ItemClassification.filler, 0x90), + ItemData(77771077, "Beanstone 10", ItemClassification.filler, 0x91), ItemData(77771078, "Secret Scroll 1", ItemClassification.useful, 0x92), ItemData(77771079, "Secret Scroll 2", ItemClassification.useful, 0x93), ItemData(77771080, "Castle Badge", ItemClassification.useful, 0x9F), diff --git a/Names/LocationName.py b/Names/LocationName.py index 84098f8..7cbc2e4 100644 --- a/Names/LocationName.py +++ b/Names/LocationName.py @@ -534,3 +534,26 @@ class LocationName: BadgeShopMomPiranhaFlag3 = "Badge Shop Mom Piranha Flag 3" HarhallsPants = "Harhall's Pants" HoohooMountainBaseBooStatueCaveCoinBlock1 = "Hoohoo Mountain Base Boo Statue Cave Coin Block 1" + HoohooMountainBaseBooStatueCaveCoinBlock2 = "Hoohoo Mountain Base Boo Statue Cave Coin Block 2" + HoohooMountainBaseBooStatueCaveCoinBlock3 = "Hoohoo Mountain Base Boo Statue Cave Coin Block 3" + BeanbeanOutskirtsNWCoinBlock = "Beanbean Outskirts NW Coin Block" + BeanbeanOutskirtsSRoom1CoinBlock = "Beanbean Outskirts S Room 1 Coin Block" + BeanbeanOutskirtsSRoom2CoinBlock = "Beanbean Outskirts S Room 2 Coin Block" + ChateauPoppleRoomCoinBlock1 = "Chateau Popple Room Coin Block 1" + ChateauPoppleRoomCoinBlock2 = "Chateau Popple Room Coin Block 2" + ChucklehuckWoodsCaveRoom1CoinBlock = "Chucklehuck Woods Cave Room 1 Coin Block" + ChucklehuckWoodsCaveRoom2CoinBlock = "Chucklehuck Woods Cave Room 2 Coin Block" + 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" + ChucklehuckWoodsKoopaRoomCoinBlock = "Chucklehuck Woods Koopa Room Coin Block" + ChucklehuckWoodsWinkleAreaCaveCoinBlock = "Chucklehuck Woods Winkle Area Cave Coin Block" + SewersPrisonRoomCoinBlock = "Sewers Prison Room Coin Block" + TeeheeValleyPastUltraHammerRocksCoinBlock = "Teehee Valley Past Ultra Hammer Rocks Coin Block" + SSChuckolaStorageRoomCoinBlock1 = "S.S. Chuckola Storage Room Coin Block 1" + SSChuckolaStorageRoomCoinBlock2 = "S.S. Chuckola Storage Room Coin Block 2" + GwarharLagoonFirstUnderwaterAreaRoom2CoinBlock = "Gwarhar Lagoon First Underwater Area Room 2 Coin Block" + JokesEndSecondFloorWestRoomCoinBlock = "Joke's End Second Floor West Room Coin Block" + JokesEndNorthofBridgeRoomCoinBlock = "Joke's End North of Bridge Room Coin Block" + diff --git a/Options.py b/Options.py index df0f6ae..14c1ef3 100644 --- a/Options.py +++ b/Options.py @@ -4,8 +4,8 @@ class BowsersCastleSkip(Toggle): """ - Skip straight from the entrance hall to bowletta in Bowser's Castle. - All Bowser's Castle items will be removed from the location pool. + Skip straight from the entrance hall to Bowletta in Bowser's Castle. + All Bowser's Castle locations will be removed from the location pool. """ display_name = "Bowser's Castle Skip" @@ -22,7 +22,7 @@ class ExtraPipes(Toggle): class SkipMinecart(Toggle): """ Skip the minecart minigame that leads you through Hoohoo Mountain Base. - This will remove the 1 item in the minecart cave from the location pool. + This will remove the 1 location in the minecart cave from the location pool. """ display_name = "Skip Minecart Minigame" @@ -30,7 +30,7 @@ class SkipMinecart(Toggle): class DisableSurf(Toggle): """ - Remove the surf minigame item from the location pool. + Remove the surf minigame location from the location pool. """ display_name = "Disable Surf Minigame" @@ -53,7 +53,7 @@ class MusicOptions(Choice): class RandomSounds(Toggle): """ - Randomizes every sound in the game, minus a select few that can softlock the game + Randomizes every sound in the game, minus a select few that can softlock the game. """ display_name = "Randomize Sounds" @@ -77,7 +77,7 @@ class MarioColor(Choice): option_white = 9 option_silhouette = 10 option_chaos = 11 - option_truechaos = 12 + option_true_chaos = 12 default = 0 @@ -99,7 +99,7 @@ class LuigiColor(Choice): option_white = 9 option_silhouette = 10 option_chaos = 11 - option_truechaos = 12 + option_true_chaos = 12 default = 1 @@ -148,11 +148,11 @@ class LuigiPants(Choice): class RandomizeEnemies(Choice): """ Randomize all normal enemy encounters in the game. - If Bowser's castle skip is enabled then enemies from Bowser's Castle will not be included. - disabled: Enemies will not be randomized - vanilla_groups: Vanilla enemy groups will be shuffled with each other. Custom enemy groups will not be made. - custom_groups: Custom enemy groups will be made and shuffled. Some enemy groups will only be semi-random. - (Groups including flying enemies or pestnuts) + If Bowser's castle skip is enabled, then enemies from Bowser's Castle will not be included. + Disabled: Enemies will not be randomized. + Vanilla Groups: Vanilla enemy groups will be shuffled with each other. Custom enemy groups will not be made. + Custom Groups: Custom enemy groups will be made and shuffled. Some enemy groups will only be semi-random, + including groups with flying enemies or pestnuts in them. """ display_name = "Randomize Enemies" @@ -166,15 +166,15 @@ class RandomizeBosses(Choice): """ Randomize all boss encounters in the game. If Bowser's castle skip is enabled then bosses from Bowser's Castle will not be included. - Some bosses are not randomized due to flags, and story (Such as the final boss) + Some bosses are not randomized due to flags, and story (such as the final boss). Boss Only: Bosses will only be swapped with another boss. Boss Normal: Bosses can be swapped with normal enemy encounters. """ display_name = "Randomize Bosses" option_disabled = 0 - option_bossonly = 1 - option_bossnormal = 2 + option_boss_only = 1 + option_boss_normal = 2 default = 0 @@ -191,7 +191,6 @@ class ScaleStats(Toggle): class XPMultiplier(Range): """ This will multiply any XP you receive in battle by the chosen multiplier. - """ display_name = "XP Multiplier" @@ -202,7 +201,7 @@ class XPMultiplier(Range): class TattleHp(Toggle): """ - This will display the enemies current and max health while in battle. + This will display the enemies' current and max health while in battle. """ display_name = "Tattle HP" @@ -210,7 +209,7 @@ class TattleHp(Toggle): class RandomizeBackgrounds(Toggle): """ - This randomizes the background image in battles + This randomizes the background image in battles. """ display_name = "Randomize Battle Backgrounds" @@ -218,7 +217,10 @@ class RandomizeBackgrounds(Toggle): class HiddenVisible(Choice): """ - This makes any hidden blocks in the game into regular item blocks. + This makes any hidden blocks in the game into regular item blocks and vice versa. + Disabled: Hidden blocks will remain invisible. + Hidden Visible: Hidden blocks will turn visible to the player. + Blocks Invisible: All item blocks will turn invisible. Hidden blocks will also remain invisible. """ display_name = "Item Block Visibility" @@ -247,19 +249,21 @@ class HarhallsPants(Toggle): class DifficultLogic(Toggle): """ This adjusts the logic to be more difficult in a few areas, - allowing for the logic to account for players getting to certain area's in unintended ways. + allowing for the logic to account for players getting to certain areas in unintended ways. Enable at your own risk, this is not an option made for beginners. """ - display_name = "Difficult Logic Toggle" + display_name = "Difficult Logic" class ChuckleBeans(Choice): """ Choose how you want chuckle bean digspots to be randomized. - none: No chuckle bean digspots will be added into the item pool. - only_visible: Only chuckle bean digspots clearly marked with an X will be added into the item pool. - all: All chuckle bean digspots will be added into the item pool. + An amount of chuckle beans will be removed from the item pool, + equal to the amount of locations removed by the setting that you choose. + None: No chuckle bean digspots will be added into the location pool. + Only Visible: Only chuckle bean digspots clearly marked with an X will be added into the location pool. + All: All chuckle bean digspots will be added into the location pool. """ display_name = "Chuckle Beans" diff --git a/Rom.py b/Rom.py index 685235d..1b8a182 100644 --- a/Rom.py +++ b/Rom.py @@ -29,7 +29,7 @@ Data.truechaosHat ] -pants = [ +cpants = [ Data.vanilla, Data.redPants, Data.greenPants, @@ -361,7 +361,7 @@ def swap_colors(world: "MLSSWorld", patch: MLSSProcedurePatch, color: int, bro: chaos = True if pants_option and color == 11: chaos = True - for c in [c for c in (pants[color] if pants_option else colors[color]) + for c in [c for c in (cpants[color] if pants_option else colors[color]) if (c[3] == bro if not chaos else c[1] == bro)]: if chaos: patch.write_token(APTokenTypes.WRITE, c[0], diff --git a/Rules.py b/Rules.py index 02bb566..13627ea 100644 --- a/Rules.py +++ b/Rules.py @@ -19,537 +19,537 @@ def set_rules(world: "MLSSWorld", excluded): if world.options.chuckle_beans == 0 or world.options.chuckle_beans == 1 and location.id in hidden: continue add_rule( - world.multiworld.get_location(location.name, world.player), + world.get_location(location.name), lambda state: StateLogic.canDig(state, world.player), ) if "Beanstone" in location.name: add_rule( - world.multiworld.get_location(location.name, world.player), + world.get_location(location.name), lambda state: StateLogic.canDig(state, world.player), ) if "Shop" in location.name and "Coffee" not in location.name and location.name not in excluded: - forbid_item(world.multiworld.get_location(location.name, world.player), "Hammers", world.player) + forbid_item(world.get_location(location.name), "Hammers", world.player) if "Badge" in location.name or "Pants" in location.name: add_rule( - world.multiworld.get_location(location.name, world.player), + world.get_location(location.name), lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), ) if location.itemType != 0 and location.name not in excluded: if "Bowser" in location.name and world.options.castle_skip: continue - forbid_item(world.multiworld.get_location(location.name, world.player), "5 Coins", world.player) + forbid_item(world.get_location(location.name), "5 Coins", world.player) if world.options.chuckle_beans == 2: add_rule( - world.multiworld.get_location(LocationName.HoohooVillageSuperHammerCaveDigspot, world.player), + world.get_location(LocationName.HoohooVillageSuperHammerCaveDigspot), lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot2, world.player), + world.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot2), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot3, world.player), + world.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot3), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsWhiteFruitRoomDigspot3, world.player), + world.get_location(LocationName.ChucklehuckWoodsWhiteFruitRoomDigspot3), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.JokesEndJojoraRoomDigspot, world.player), + world.get_location(LocationName.JokesEndJojoraRoomDigspot), lambda state: StateLogic.canDash(state, world.player), ) - if world.options.chuckle_beans == 1 or world.options.chuckle_beans == 2: + if world.options.chuckle_beans != 0: add_rule( - world.multiworld.get_location(LocationName.HoohooMountainBaseBoostatueRoomDigspot2, world.player), + world.get_location(LocationName.HoohooMountainBaseBoostatueRoomDigspot2), lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot1, world.player), + world.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot1), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsWhiteFruitRoomDigspot2, world.player), + world.get_location(LocationName.ChucklehuckWoodsWhiteFruitRoomDigspot2), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.TeeheeValleyPastUltraHammersDigspot1, world.player), + world.get_location(LocationName.TeeheeValleyPastUltraHammersDigspot1), lambda state: StateLogic.ultra(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.TeeheeValleyPastUltraHammersDigspot3, world.player), + world.get_location(LocationName.TeeheeValleyPastUltraHammersDigspot3), lambda state: StateLogic.ultra(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsNorthBeachDigspot3, world.player), + world.get_location(LocationName.BeanbeanOutskirtsNorthBeachDigspot3), lambda state: StateLogic.canDash(state, world.player) or StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsEDigspot2, world.player), + world.get_location(LocationName.BeanbeanOutskirtsEDigspot2), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsNEDigspot1, world.player), + world.get_location(LocationName.BeanbeanOutskirtsNEDigspot1), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsSRoom1Digspot2, world.player), + world.get_location(LocationName.BeanbeanOutskirtsSRoom1Digspot2), lambda state: StateLogic.ultra(state, world.player) and StateLogic.thunder(state, world.player), ) forbid_item( - world.multiworld.get_location(LocationName.SSChuckolaMembershipCard, world.player), "Nuts", world.player + world.get_location(LocationName.SSChuckolaMembershipCard), "Nuts", world.player ) # Bandaid Fix add_rule( - world.multiworld.get_location(LocationName.HoohooVillageHammerHouseBlock, world.player), + world.get_location(LocationName.HoohooVillageHammerHouseBlock), lambda state: StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.HoohooMountainBaseBoostatueRoomBlock2, world.player), + world.get_location(LocationName.HoohooMountainBaseBoostatueRoomBlock2), lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsBooStatueMole, world.player), + world.get_location(LocationName.BeanbeanOutskirtsBooStatueMole), lambda state: StateLogic.canMini(state, world.player) and StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.HoohooVillageSuperHammerCaveBlock, world.player), + world.get_location(LocationName.HoohooVillageSuperHammerCaveBlock), lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsFarmRoomMoleReward1, world.player), + world.get_location(LocationName.BeanbeanOutskirtsFarmRoomMoleReward1), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsFarmRoomMoleReward2, world.player), + world.get_location(LocationName.BeanbeanOutskirtsFarmRoomMoleReward2), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsThunderHandMole, world.player), + world.get_location(LocationName.BeanbeanOutskirtsThunderHandMole), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsNWBlock, world.player), + world.get_location(LocationName.BeanbeanOutskirtsNWBlock), lambda state: StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsBeanFruit1, world.player), + world.get_location(LocationName.BeanbeanOutskirtsBeanFruit1), lambda state: StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsBeanFruit2, world.player), + world.get_location(LocationName.BeanbeanOutskirtsBeanFruit2), lambda state: StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsBeanFruit3, world.player), + world.get_location(LocationName.BeanbeanOutskirtsBeanFruit3), lambda state: StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsBeanFruit4, world.player), + world.get_location(LocationName.BeanbeanOutskirtsBeanFruit4), lambda state: StateLogic.super(state, world.player) and StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsBeanFruit5, world.player), + world.get_location(LocationName.BeanbeanOutskirtsBeanFruit5), lambda state: StateLogic.super(state, world.player) and StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsBeanFruit6, world.player), + world.get_location(LocationName.BeanbeanOutskirtsBeanFruit6), lambda state: StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsBeanFruit7, world.player), + world.get_location(LocationName.BeanbeanOutskirtsBeanFruit7), lambda state: StateLogic.teehee(state, world.player) and StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsSRoom1Block, world.player), + world.get_location(LocationName.BeanbeanOutskirtsSRoom1Block), lambda state: StateLogic.ultra(state, world.player) and StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsSRoom2Block1, world.player), + world.get_location(LocationName.BeanbeanOutskirtsSRoom2Block1), lambda state: StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock1, world.player), + world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock1), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock2, world.player), + world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock2), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock3, world.player), + world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock3), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock4, world.player), + world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock4), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleBlock, world.player), + world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleBlock), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsSecretScroll1, world.player), + world.get_location(LocationName.BeanbeanOutskirtsSecretScroll1), lambda state: StateLogic.thunder(state, world.player) and StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsSecretScroll2, world.player), + world.get_location(LocationName.BeanbeanOutskirtsSecretScroll2), lambda state: StateLogic.thunder(state, world.player) and StateLogic.ultra(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.HoohooVillageMoleBehindTurtle, world.player), + world.get_location(LocationName.HoohooVillageMoleBehindTurtle), lambda state: StateLogic.canDash(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsNESoloMarioMole1, world.player), + world.get_location(LocationName.BeanbeanOutskirtsNESoloMarioMole1), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsNESoloMarioMole2, world.player), + world.get_location(LocationName.BeanbeanOutskirtsNESoloMarioMole2), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsSuperHammerUpgrade, world.player), + world.get_location(LocationName.BeanbeanOutskirtsSuperHammerUpgrade), lambda state: StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsUltraHammerUpgrade, world.player), + 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), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanOutskirtsSoloLuigiCaveMole, world.player), + world.get_location(LocationName.BeanbeanOutskirtsSoloLuigiCaveMole), lambda state: StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsRedChuckolaFruit, world.player), + world.get_location(LocationName.ChucklehuckWoodsRedChuckolaFruit), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsWhiteChuckolaFruit, world.player), + world.get_location(LocationName.ChucklehuckWoodsWhiteChuckolaFruit), lambda state: StateLogic.canDig(state, world.player) and StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock1, world.player), + world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock1), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock2, world.player), + world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock2), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock3, world.player), + world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock3), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock4, world.player), + world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock4), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock5, world.player), + world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock5), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock6, world.player), + world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock6), lambda state: StateLogic.fruits(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsRoom7Block1, world.player), + world.get_location(LocationName.ChucklehuckWoodsRoom7Block1), lambda state: StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsRoom7Block2, world.player), + world.get_location(LocationName.ChucklehuckWoodsRoom7Block2), lambda state: StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsRoom4Block1, world.player), + world.get_location(LocationName.ChucklehuckWoodsRoom4Block1), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsRoom4Block2, world.player), + world.get_location(LocationName.ChucklehuckWoodsRoom4Block2), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsRoom4Block3, world.player), + world.get_location(LocationName.ChucklehuckWoodsRoom4Block3), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsPipeRoomBlock1, world.player), + world.get_location(LocationName.ChucklehuckWoodsPipeRoomBlock1), lambda state: StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChucklehuckWoodsPipeRoomBlock2, world.player), + world.get_location(LocationName.ChucklehuckWoodsPipeRoomBlock2), lambda state: StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock1, world.player), + world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock1), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock2, world.player), + world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock2), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock3, world.player), + world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock3), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock4, world.player), + world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock4), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock5, world.player), + world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock5), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanCastleFakeBeastar, world.player), + world.get_location(LocationName.BeanbeanCastleFakeBeastar), lambda state: StateLogic.pieces(state, world.player) and StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanbeanCastlePeachsExtraDress, world.player), + world.get_location(LocationName.BeanbeanCastlePeachsExtraDress), lambda state: StateLogic.pieces(state, world.player) and StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.SewersRoom5Block1, world.player), + world.get_location(LocationName.SewersRoom5Block1), lambda state: StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.SewersRoom5Block2, world.player), + world.get_location(LocationName.SewersRoom5Block2), lambda state: StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom1Block, world.player), + world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom1Block), lambda state: StateLogic.canDash(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2Block1, world.player), + world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2Block1), lambda state: StateLogic.canDash(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2Block2, world.player), + world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2Block2), lambda state: StateLogic.canDash(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonRedPearlBean, world.player), + world.get_location(LocationName.GwarharLagoonRedPearlBean), lambda state: StateLogic.fire(state, world.player) and StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonGreenPearlBean, world.player), + world.get_location(LocationName.GwarharLagoonGreenPearlBean), lambda state: StateLogic.fire(state, world.player) and StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.TeeheeValleyPastUltraHammersBlock1, world.player), + world.get_location(LocationName.TeeheeValleyPastUltraHammersBlock1), lambda state: StateLogic.ultra(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.TeeheeValleyPastUltraHammersBlock2, world.player), + world.get_location(LocationName.TeeheeValleyPastUltraHammersBlock2), lambda state: StateLogic.ultra(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.TeeheeValleySoloLuigiMazeRoom1Block, world.player), + world.get_location(LocationName.TeeheeValleySoloLuigiMazeRoom1Block), lambda state: StateLogic.ultra(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.OhoOasisFirebrand, world.player), + world.get_location(LocationName.OhoOasisFirebrand), lambda state: StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.OhoOasisThunderhand, world.player), + world.get_location(LocationName.OhoOasisThunderhand), lambda state: StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanstarPieceYoshiTheater, world.player), + world.get_location(LocationName.BeanstarPieceYoshiTheater), lambda state: StateLogic.neon(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.YoshiTheaterAzureYoshi, world.player), + world.get_location(LocationName.YoshiTheaterAzureYoshi), lambda state: StateLogic.beanFruit(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.YoshiTheaterBlueYoshi, world.player), + world.get_location(LocationName.YoshiTheaterBlueYoshi), lambda state: StateLogic.beanFruit(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.YoshiTheaterGreenYoshi, world.player), + world.get_location(LocationName.YoshiTheaterGreenYoshi), lambda state: StateLogic.beanFruit(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.YoshiTheaterOrangeYoshi, world.player), + world.get_location(LocationName.YoshiTheaterOrangeYoshi), lambda state: StateLogic.beanFruit(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.YoshiTheaterPurpleYoshi, world.player), + world.get_location(LocationName.YoshiTheaterPurpleYoshi), lambda state: StateLogic.beanFruit(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.YoshiTheaterRedYoshi, world.player), + world.get_location(LocationName.YoshiTheaterRedYoshi), lambda state: StateLogic.beanFruit(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.YoshiTheaterYellowYoshi, world.player), + world.get_location(LocationName.YoshiTheaterYellowYoshi), lambda state: StateLogic.beanFruit(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.WinkleAreaBeanstarRoomBlock, world.player), + world.get_location(LocationName.WinkleAreaBeanstarRoomBlock), lambda state: StateLogic.winkle(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanstarPieceWinkleArea, world.player), + world.get_location(LocationName.BeanstarPieceWinkleArea), lambda state: StateLogic.winkle(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonSpangleReward, world.player), + world.get_location(LocationName.GwarharLagoonSpangleReward), lambda state: StateLogic.spangle(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.PantsShopMomPiranhaFlag1, world.player), + world.get_location(LocationName.PantsShopMomPiranhaFlag1), lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.PantsShopMomPiranhaFlag2, world.player), + world.get_location(LocationName.PantsShopMomPiranhaFlag2), lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.PantsShopMomPiranhaFlag3, world.player), + world.get_location(LocationName.PantsShopMomPiranhaFlag3), lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BadgeShopMomPiranhaFlag1, world.player), + world.get_location(LocationName.BadgeShopMomPiranhaFlag1), lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BadgeShopMomPiranhaFlag2, world.player), + world.get_location(LocationName.BadgeShopMomPiranhaFlag2), lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BadgeShopMomPiranhaFlag3, world.player), + world.get_location(LocationName.BadgeShopMomPiranhaFlag3), lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChateauGreenGoblet, world.player), + world.get_location(LocationName.ChateauGreenGoblet), lambda state: StateLogic.brooch(state, world.player) and StateLogic.canDig(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.ChateauRedGoblet, world.player), + world.get_location(LocationName.ChateauRedGoblet), lambda state: StateLogic.brooch(state, world.player) and StateLogic.canMini(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonSpangle, world.player), + world.get_location(LocationName.GwarharLagoonSpangle), lambda state: StateLogic.ultra(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonSpangleRoomBlock, world.player), + world.get_location(LocationName.GwarharLagoonSpangleRoomBlock), lambda state: StateLogic.ultra(state, world.player), ) if world.options.difficult_logic: add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonSpangleReward, world.player), + world.get_location(LocationName.GwarharLagoonSpangleReward), lambda state: StateLogic.canCrash(state, world.player), ) add_rule( - world.multiworld.get_location(LocationName.BeanstarPieceHermie, world.player), + world.get_location(LocationName.BeanstarPieceHermie), lambda state: StateLogic.canCrash(state, world.player), ) if world.options.chuckle_beans != 0: add_rule( - world.multiworld.get_location(LocationName.GwarharLagoonPastHermieDigspot, world.player), + world.get_location(LocationName.GwarharLagoonPastHermieDigspot), lambda state: StateLogic.canCrash(state, world.player), ) if world.options.coins: add_rule( - world.multiworld.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock1, world.player), + world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock1), lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location("Hoohoo Mountain Base Boo Statue Cave Coin Block 2", world.player), + world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock2), lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location("Hoohoo Mountain Base Boo Statue Cave Coin Block 3", world.player), + world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock3), lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location("Beanbean Outskirts NW Coin Block", world.player), + world.get_location(LocationName.BeanbeanOutskirtsNWCoinBlock), lambda state: StateLogic.super(state, world.player), ) add_rule( - world.multiworld.get_location("Beanbean Outskirts S Room 1 Coin Block", world.player), + world.get_location(LocationName.BeanbeanOutskirtsSRoom1CoinBlock), lambda state: StateLogic.ultra(state, world.player) and StateLogic.thunder(state, world.player), ) add_rule( - world.multiworld.get_location("Beanbean Outskirts S Room 2 Coin Block", world.player), + world.get_location(LocationName.BeanbeanOutskirtsSRoom2CoinBlock), lambda state: StateLogic.canCrash(state, world.player), ) add_rule( - world.multiworld.get_location("Chateau Popple Room Coin Block 1", world.player), + world.get_location(LocationName.ChateauPoppleRoomCoinBlock1), lambda state: StateLogic.brooch(state, world.player), ) add_rule( - world.multiworld.get_location("Chateau Popple Room Coin Block 2", world.player), + world.get_location(LocationName.ChateauPoppleRoomCoinBlock2), lambda state: StateLogic.brooch(state, world.player), ) add_rule( - world.multiworld.get_location("Chucklehuck Woods Cave Room 1 Coin Block", world.player), + world.get_location(LocationName.ChucklehuckWoodsCaveRoom1CoinBlock), lambda state: StateLogic.brooch(state, world.player), ) add_rule( - world.multiworld.get_location("Chucklehuck Woods Cave Room 2 Coin Block", world.player), + world.get_location(LocationName.ChucklehuckWoodsCaveRoom2CoinBlock), lambda state: StateLogic.brooch(state, world.player), ) add_rule( - world.multiworld.get_location("Chucklehuck Woods Cave Room 3 Coin Block", world.player), + world.get_location(LocationName.ChucklehuckWoodsCaveRoom3CoinBlock), lambda state: StateLogic.brooch(state, world.player), ) add_rule( - world.multiworld.get_location("Chucklehuck Woods Pipe 5 Room Coin Block", world.player), + world.get_location(LocationName.ChucklehuckWoodsPipe5RoomCoinBlock), lambda state: StateLogic.brooch(state, world.player) and StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location("Chucklehuck Woods Room 7 Coin Block", world.player), + world.get_location(LocationName.ChucklehuckWoodsRoom7CoinBlock), lambda state: StateLogic.brooch(state, world.player) and StateLogic.hammers(state, world.player), ) add_rule( - world.multiworld.get_location("Chucklehuck Woods After Chuckleroot Coin Block", world.player), + world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootCoinBlock), lambda state: StateLogic.brooch(state, world.player) and StateLogic.fruits(state, world.player), ) add_rule( - world.multiworld.get_location("Chucklehuck Woods Koopa Room Coin Block", world.player), + world.get_location(LocationName.ChucklehuckWoodsKoopaRoomCoinBlock), lambda state: StateLogic.brooch(state, world.player), ) add_rule( - world.multiworld.get_location("Chucklehuck Woods Winkle Area Cave Coin Block", world.player), + world.get_location(LocationName.ChucklehuckWoodsWinkleAreaCaveCoinBlock), lambda state: StateLogic.brooch(state, world.player) and StateLogic.canDash(state, world.player), ) add_rule( - world.multiworld.get_location("Sewers Prison Room Coin Block", world.player), + world.get_location(LocationName.SewersPrisonRoomCoinBlock), lambda state: StateLogic.rose(state, world.player), ) add_rule( - world.multiworld.get_location("Teehee Valley Past Ultra Hammer Rocks Coin Block", world.player), + world.get_location(LocationName.TeeheeValleyPastUltraHammerRocksCoinBlock), lambda state: StateLogic.ultra(state, world.player), ) add_rule( - world.multiworld.get_location("S.S. Chuckola Storage Room Coin Block 1", world.player), + world.get_location(LocationName.SSChuckolaStorageRoomCoinBlock1), lambda state: StateLogic.super(state, world.player) or StateLogic.canDash(state, world.player), ) add_rule( - world.multiworld.get_location("Gwarhar Lagoon First Underwater Area Room 2 Coin Block", world.player), - lambda state: StateLogic.canDash(state, world.player) - and (StateLogic.membership(state, world.player) or StateLogic.surfable(state, world.player)), + world.get_location(LocationName.SSChuckolaStorageRoomCoinBlock2), + lambda state: StateLogic.super(state, world.player) or StateLogic.canDash(state, world.player), ) add_rule( - world.multiworld.get_location("S.S. Chuckola Storage Room Coin Block 2", world.player), - lambda state: StateLogic.super(state, world.player) or StateLogic.canDash(state, world.player), + world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2CoinBlock), + lambda state: StateLogic.canDash(state, world.player) + and (StateLogic.membership(state, world.player) or StateLogic.surfable(state, world.player)), ) add_rule( - world.multiworld.get_location("Joke's End Second Floor West Room Coin Block", world.player), + world.get_location(LocationName.JokesEndSecondFloorWestRoomCoinBlock), lambda state: StateLogic.ultra(state, world.player) and StateLogic.fire(state, world.player) and ( @@ -558,7 +558,7 @@ def set_rules(world: "MLSSWorld", excluded): ), ) add_rule( - world.multiworld.get_location("Joke's End North of Bridge Room Coin Block", world.player), + world.get_location(LocationName.JokesEndNorthofBridgeRoomCoinBlock), lambda state: StateLogic.ultra(state, world.player) and StateLogic.fire(state, world.player) and StateLogic.canDig(state, world.player) @@ -566,6 +566,6 @@ def set_rules(world: "MLSSWorld", excluded): ) if not world.options.difficult_logic: add_rule( - world.multiworld.get_location("Joke's End North of Bridge Room Coin Block", world.player), + world.get_location(LocationName.JokesEndNorthofBridgeRoomCoinBlock), lambda state: StateLogic.canCrash(state, world.player), ) diff --git a/__init__.py b/__init__.py index 2e15eb7..f44343c 100644 --- a/__init__.py +++ b/__init__.py @@ -45,7 +45,7 @@ class RomFile(settings.UserFilePath): class MLSSWorld(World): """ Adventure with Mario and Luigi together in the Beanbean Kingdom - to stop the evil cackletta and retrieve the Beanstar. + to stop the evil Cackletta and retrieve the Beanstar. """ game = "Mario & Luigi Superstar Saga" @@ -57,9 +57,10 @@ class MLSSWorld(World): location_name_to_id = {loc_data.name: loc_data.id for loc_data in all_locations} required_client_version = (0, 4, 5) - disabled_locations: List[str] = [] + disabled_locations: List[str] def generate_early(self) -> None: + self.disabled_locations = [] if self.options.chuckle_beans == 0: self.disabled_locations += [location.name for location in all_locations if "Digspot" in location.name] if self.options.castle_skip: @@ -106,7 +107,7 @@ def create_items(self) -> None: required_items = [] precollected = [item for item in itemList if item in self.multiworld.precollected_items] for item in itemList: - if item.progression != ItemClassification.filler and item.progression != ItemClassification.skip_balancing: + if item.classification != ItemClassification.filler and item.classification != ItemClassification.skip_balancing: freq = item_frequencies.get(item.itemName, 1) if item in precollected: freq = max(freq - precollected.count(item), 0) @@ -120,7 +121,7 @@ def create_items(self) -> None: # Then, create our list of filler items filler_items = [] for item in itemList: - if item.progression != ItemClassification.filler: + if item.classification != ItemClassification.filler: continue if item.itemName == "5 Coins" and not self.options.coins: continue @@ -167,10 +168,10 @@ def set_rules(self) -> None: def create_item(self, name: str) -> MLSSItem: item = item_table[name] - return MLSSItem(item.itemName, item.progression, item.code, self.player) + return MLSSItem(item.itemName, item.classification, item.code, self.player) def get_filler_item_name(self) -> str: - return self.random.choice(list(filter(lambda item: item.progression == ItemClassification.filler, itemList))) + return self.random.choice(list(filter(lambda item: item.classification == ItemClassification.filler, itemList))) def generate_output(self, output_directory: str) -> None: patch = MLSSProcedurePatch(player=self.player, player_name=self.multiworld.player_name[self.player]) diff --git a/data/basepatch.bsdiff b/data/basepatch.bsdiff index ba90b89..a25f8e3 100644 Binary files a/data/basepatch.bsdiff and b/data/basepatch.bsdiff differ diff --git a/docs/en_Mario & Luigi Superstar Saga.md b/docs/en_Mario & Luigi Superstar Saga.md index a70a863..4f83427 100644 --- a/docs/en_Mario & Luigi Superstar Saga.md +++ b/docs/en_Mario & Luigi Superstar Saga.md @@ -17,7 +17,7 @@ Other Features such as Turbo through textboxes (Hold L/R+A) and Pipe Warping fro Enemies and Bosses can be randomized, and their stats can be scaled to feel more like the vanilla game's stats. -Other aspects of the game can be randomized as well such as music, sounds, battle backgrounds, Mario and Luigis Colors, and more. +Other aspects of the game can be randomized as well such as music, sounds, battle backgrounds, Mario and Luigi's Colors, and more. ## What is the goal of Mario & Luigi: Superstar Saga when randomized? @@ -63,4 +63,4 @@ Items in a shop from another player's world will display the player name and ite ## When the player receives an item, what happens? -Items will be placed directly into the players inventory after a few seconds. Sometimes for certain events and cutscenes to be properly triggered right after you recieved an item, you may have to leave and re-enter the room to properly load everything required for the respective event or cutscene. +Items will be placed directly into the players inventory after a few seconds. Sometimes for certain events and cutscenes to be properly triggered right after you received an item, you may have to leave and re-enter the room to properly load everything required for the respective event or cutscene.