572 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			572 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import typing | ||
|  | 
 | ||
|  | from worlds.generic.Rules import add_rule, forbid_item | ||
|  | from .Names.LocationName import LocationName | ||
|  | from .Locations import all_locations, hidden | ||
|  | from . import StateLogic | ||
|  | 
 | ||
|  | if typing.TYPE_CHECKING: | ||
|  |     from . import MLSSWorld | ||
|  | 
 | ||
|  | 
 | ||
|  | 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 | ||
|  |             ): | ||
|  |                 continue | ||
|  |             if world.options.chuckle_beans == 0 or world.options.chuckle_beans == 1 and location.id in hidden: | ||
|  |                 continue | ||
|  |             add_rule( | ||
|  |                 world.get_location(location.name), | ||
|  |                 lambda state: StateLogic.canDig(state, world.player), | ||
|  |             ) | ||
|  |         if "Beanstone" in location.name: | ||
|  |             add_rule( | ||
|  |                 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.get_location(location.name), "Hammers", world.player) | ||
|  |             if "Badge" in location.name or "Pants" in location.name: | ||
|  |                 add_rule( | ||
|  |                     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.get_location(location.name), "5 Coins", world.player) | ||
|  | 
 | ||
|  |     if world.options.chuckle_beans == 2: | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.HoohooVillageSuperHammerCaveDigspot), | ||
|  |             lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot2), | ||
|  |             lambda state: StateLogic.thunder(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot3), | ||
|  |             lambda state: StateLogic.thunder(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsWhiteFruitRoomDigspot3), | ||
|  |             lambda state: StateLogic.canMini(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.JokesEndJojoraRoomDigspot), | ||
|  |             lambda state: StateLogic.canDash(state, world.player), | ||
|  |         ) | ||
|  | 
 | ||
|  |     if world.options.chuckle_beans != 0: | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.HoohooMountainBaseBoostatueRoomDigspot2), | ||
|  |             lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsFarmRoomDigspot1), | ||
|  |             lambda state: StateLogic.thunder(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsWhiteFruitRoomDigspot2), | ||
|  |             lambda state: StateLogic.canMini(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.TeeheeValleyPastUltraHammersDigspot1), | ||
|  |             lambda state: StateLogic.ultra(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.TeeheeValleyPastUltraHammersDigspot3), | ||
|  |             lambda state: StateLogic.ultra(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsNorthBeachDigspot3), | ||
|  |             lambda state: StateLogic.canDash(state, world.player) or StateLogic.super(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsEDigspot2), | ||
|  |             lambda state: StateLogic.thunder(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsNEDigspot1), | ||
|  |             lambda state: StateLogic.thunder(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsSRoom1Digspot2), | ||
|  |             lambda state: StateLogic.ultra(state, world.player) and StateLogic.thunder(state, world.player), | ||
|  |         ) | ||
|  | 
 | ||
|  |     forbid_item( | ||
|  |         world.get_location(LocationName.SSChuckolaMembershipCard), "Nuts", world.player | ||
|  |     )  # Bandaid Fix | ||
|  | 
 | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.HoohooVillageHammerHouseBlock), | ||
|  |         lambda state: StateLogic.hammers(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.HoohooMountainBaseBoostatueRoomBlock2), | ||
|  |         lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsBooStatueMole), | ||
|  |         lambda state: StateLogic.canMini(state, world.player) and StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.HoohooVillageSuperHammerCaveBlock), | ||
|  |         lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsFarmRoomMoleReward1), | ||
|  |         lambda state: StateLogic.thunder(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsFarmRoomMoleReward2), | ||
|  |         lambda state: StateLogic.thunder(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsThunderHandMole), | ||
|  |         lambda state: StateLogic.thunder(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsNWBlock), | ||
|  |         lambda state: StateLogic.super(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsBeanFruit1), | ||
|  |         lambda state: StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsBeanFruit2), | ||
|  |         lambda state: StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsBeanFruit3), | ||
|  |         lambda state: StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsBeanFruit4), | ||
|  |         lambda state: StateLogic.super(state, world.player) and StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsBeanFruit5), | ||
|  |         lambda state: StateLogic.super(state, world.player) and StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsBeanFruit6), | ||
|  |         lambda state: StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsBeanFruit7), | ||
|  |         lambda state: StateLogic.teehee(state, world.player) and StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsSRoom1Block), | ||
|  |         lambda state: StateLogic.ultra(state, world.player) and StateLogic.thunder(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsSRoom2Block1), | ||
|  |         lambda state: StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock1), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock2), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock3), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleSecretAreaBlock4), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.WoohooHooniversityMiniMarioPuzzleBlock), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsSecretScroll1), | ||
|  |         lambda state: StateLogic.thunder(state, world.player) and StateLogic.super(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsSecretScroll2), | ||
|  |         lambda state: StateLogic.thunder(state, world.player) and StateLogic.ultra(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.HoohooVillageMoleBehindTurtle), | ||
|  |         lambda state: StateLogic.canDash(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsNESoloMarioMole1), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsNESoloMarioMole2), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsSuperHammerUpgrade), | ||
|  |         lambda state: StateLogic.thunder(state, world.player), | ||
|  |     ) | ||
|  |     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), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanOutskirtsSoloLuigiCaveMole), | ||
|  |         lambda state: StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsRedChuckolaFruit), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsWhiteChuckolaFruit), | ||
|  |         lambda state: StateLogic.canDig(state, world.player) and StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock1), | ||
|  |         lambda state: StateLogic.fruits(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock2), | ||
|  |         lambda state: StateLogic.fruits(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock3), | ||
|  |         lambda state: StateLogic.fruits(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock4), | ||
|  |         lambda state: StateLogic.fruits(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock5), | ||
|  |         lambda state: StateLogic.fruits(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootBlock6), | ||
|  |         lambda state: StateLogic.fruits(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsRoom7Block1), | ||
|  |         lambda state: StateLogic.hammers(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsRoom7Block2), | ||
|  |         lambda state: StateLogic.hammers(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsRoom4Block1), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsRoom4Block2), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsRoom4Block3), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsPipeRoomBlock1), | ||
|  |         lambda state: StateLogic.hammers(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChucklehuckWoodsPipeRoomBlock2), | ||
|  |         lambda state: StateLogic.hammers(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock1), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock2), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock3), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock4), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanCastleTownMiniMarioBlock5), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanCastleFakeBeastar), | ||
|  |         lambda state: StateLogic.pieces(state, world.player) and StateLogic.rose(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanbeanCastlePeachsExtraDress), | ||
|  |         lambda state: StateLogic.pieces(state, world.player) and StateLogic.rose(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.SewersRoom5Block1), | ||
|  |         lambda state: StateLogic.hammers(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.SewersRoom5Block2), | ||
|  |         lambda state: StateLogic.hammers(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom1Block), | ||
|  |         lambda state: StateLogic.canDash(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2Block1), | ||
|  |         lambda state: StateLogic.canDash(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.GwarharLagoonFirstUnderwaterAreaRoom2Block2), | ||
|  |         lambda state: StateLogic.canDash(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.GwarharLagoonRedPearlBean), | ||
|  |         lambda state: StateLogic.fire(state, world.player) and StateLogic.thunder(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.GwarharLagoonGreenPearlBean), | ||
|  |         lambda state: StateLogic.fire(state, world.player) and StateLogic.thunder(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.TeeheeValleyPastUltraHammersBlock1), | ||
|  |         lambda state: StateLogic.ultra(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.TeeheeValleyPastUltraHammersBlock2), | ||
|  |         lambda state: StateLogic.ultra(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.TeeheeValleySoloLuigiMazeRoom1Block), | ||
|  |         lambda state: StateLogic.ultra(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.OhoOasisFirebrand), | ||
|  |         lambda state: StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.OhoOasisThunderhand), | ||
|  |         lambda state: StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanstarPieceYoshiTheater), | ||
|  |         lambda state: StateLogic.neon(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.YoshiTheaterAzureYoshi), | ||
|  |         lambda state: StateLogic.beanFruit(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.YoshiTheaterBlueYoshi), | ||
|  |         lambda state: StateLogic.beanFruit(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.YoshiTheaterGreenYoshi), | ||
|  |         lambda state: StateLogic.beanFruit(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.YoshiTheaterOrangeYoshi), | ||
|  |         lambda state: StateLogic.beanFruit(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.YoshiTheaterPurpleYoshi), | ||
|  |         lambda state: StateLogic.beanFruit(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.YoshiTheaterRedYoshi), | ||
|  |         lambda state: StateLogic.beanFruit(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.YoshiTheaterYellowYoshi), | ||
|  |         lambda state: StateLogic.beanFruit(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.WinkleAreaBeanstarRoomBlock), | ||
|  |         lambda state: StateLogic.winkle(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BeanstarPieceWinkleArea), | ||
|  |         lambda state: StateLogic.winkle(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.GwarharLagoonSpangleReward), | ||
|  |         lambda state: StateLogic.spangle(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.PantsShopMomPiranhaFlag1), | ||
|  |         lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.PantsShopMomPiranhaFlag2), | ||
|  |         lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.PantsShopMomPiranhaFlag3), | ||
|  |         lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BadgeShopMomPiranhaFlag1), | ||
|  |         lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BadgeShopMomPiranhaFlag2), | ||
|  |         lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.BadgeShopMomPiranhaFlag3), | ||
|  |         lambda state: StateLogic.brooch(state, world.player) or StateLogic.rose(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChateauGreenGoblet), | ||
|  |         lambda state: StateLogic.brooch(state, world.player) and StateLogic.canDig(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.ChateauRedGoblet), | ||
|  |         lambda state: StateLogic.brooch(state, world.player) and StateLogic.canMini(state, world.player), | ||
|  |     ) | ||
|  | 
 | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.GwarharLagoonSpangle), | ||
|  |         lambda state: StateLogic.ultra(state, world.player), | ||
|  |     ) | ||
|  |     add_rule( | ||
|  |         world.get_location(LocationName.GwarharLagoonSpangleRoomBlock), | ||
|  |         lambda state: StateLogic.ultra(state, world.player), | ||
|  |     ) | ||
|  |     if world.options.difficult_logic: | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.GwarharLagoonSpangleReward), | ||
|  |             lambda state: StateLogic.canCrash(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanstarPieceHermie), | ||
|  |             lambda state: StateLogic.canCrash(state, world.player), | ||
|  |         ) | ||
|  |         if world.options.chuckle_beans != 0: | ||
|  |             add_rule( | ||
|  |                 world.get_location(LocationName.GwarharLagoonPastHermieDigspot), | ||
|  |                 lambda state: StateLogic.canCrash(state, world.player), | ||
|  |             ) | ||
|  | 
 | ||
|  |     if world.options.coins: | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock1), | ||
|  |             lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock2), | ||
|  |             lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.HoohooMountainBaseBooStatueCaveCoinBlock3), | ||
|  |             lambda state: StateLogic.canCrash(state, world.player) or StateLogic.super(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsNWCoinBlock), | ||
|  |             lambda state: StateLogic.super(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsSRoom1CoinBlock), | ||
|  |             lambda state: StateLogic.ultra(state, world.player) and StateLogic.thunder(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.BeanbeanOutskirtsSRoom2CoinBlock), | ||
|  |             lambda state: StateLogic.canCrash(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChateauPoppleRoomCoinBlock1), | ||
|  |             lambda state: StateLogic.brooch(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChateauPoppleRoomCoinBlock2), | ||
|  |             lambda state: StateLogic.brooch(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsCaveRoom1CoinBlock), | ||
|  |             lambda state: StateLogic.brooch(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsCaveRoom2CoinBlock), | ||
|  |             lambda state: StateLogic.brooch(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsCaveRoom3CoinBlock), | ||
|  |             lambda state: StateLogic.brooch(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsPipe5RoomCoinBlock), | ||
|  |             lambda state: StateLogic.brooch(state, world.player) and StateLogic.hammers(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsRoom7CoinBlock), | ||
|  |             lambda state: StateLogic.brooch(state, world.player) and StateLogic.hammers(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsAfterChucklerootCoinBlock), | ||
|  |             lambda state: StateLogic.brooch(state, world.player) and StateLogic.fruits(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsKoopaRoomCoinBlock), | ||
|  |             lambda state: StateLogic.brooch(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.ChucklehuckWoodsWinkleAreaCaveCoinBlock), | ||
|  |             lambda state: StateLogic.brooch(state, world.player) and StateLogic.canDash(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.SewersPrisonRoomCoinBlock), | ||
|  |             lambda state: StateLogic.rose(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.TeeheeValleyPastUltraHammerRocksCoinBlock), | ||
|  |             lambda state: StateLogic.ultra(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.SSChuckolaStorageRoomCoinBlock1), | ||
|  |             lambda state: StateLogic.super(state, world.player) or StateLogic.canDash(state, world.player), | ||
|  |         ) | ||
|  |         add_rule( | ||
|  |             world.get_location(LocationName.SSChuckolaStorageRoomCoinBlock2), | ||
|  |             lambda state: StateLogic.super(state, world.player) or StateLogic.canDash(state, world.player), | ||
|  |         ) | ||
|  |         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)), | ||
|  |         ) | ||
|  |         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)) | ||
|  |             ), | ||
|  |         ) | ||
|  |         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)), | ||
|  |         ) | ||
|  |         if not world.options.difficult_logic: | ||
|  |             add_rule( | ||
|  |                 world.get_location(LocationName.JokesEndNorthofBridgeRoomCoinBlock), | ||
|  |                 lambda state: StateLogic.canCrash(state, world.player), | ||
|  |             ) |