From 5c8a076790ed504be772b1426f6b99eba703d221 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 16 Jul 2021 12:41:37 +0200 Subject: [PATCH] Add Ori and the Blind Forest TODO: Mapstone counting, Open, OpenWorld, connection rules, goals --- worlds/oribf/Items.py | 10 ++ worlds/oribf/Locations.py | 262 ++++++++++++++++++++++++++++++++++++++ worlds/oribf/Options.py | 12 ++ worlds/oribf/Regions.py | 251 ++++++++++++++++++++++++++++++++++++ worlds/oribf/Rules.py | 52 ++++++++ worlds/oribf/RulesData.py | 6 + worlds/oribf/Types.py | 5 + worlds/oribf/__init__.py | 75 +++++++++++ 8 files changed, 673 insertions(+) create mode 100644 worlds/oribf/Items.py create mode 100644 worlds/oribf/Locations.py create mode 100644 worlds/oribf/Options.py create mode 100644 worlds/oribf/Regions.py create mode 100644 worlds/oribf/Rules.py create mode 100644 worlds/oribf/RulesData.py create mode 100644 worlds/oribf/Types.py create mode 100644 worlds/oribf/__init__.py diff --git a/worlds/oribf/Items.py b/worlds/oribf/Items.py new file mode 100644 index 00000000..788b802d --- /dev/null +++ b/worlds/oribf/Items.py @@ -0,0 +1,10 @@ +# generated by https://github.com/Berserker66/ori_rando_server +# do not edit manually + +from typing import Dict + +item_table: Dict[str, int] = \ + {'EX100': 262144, 'AC': 262145, 'Bash': 262146, 'HC': 262147, 'Plant': 262148, 'MapStone': 262149, 'ChargeFlame': 262150, 'ChargeJump': 262151, 'Climb': 262152, 'MS': 262153, 'Dash': 262154, 'EC': 262155, 'EX200': 262156, 'DoubleJump': 262157, 'EX15': 262158, 'Wind': 262159, 'KS': 262160, 'Water': 262161, 'Glide': 262162, 'Grenade': 262163, 'ForlornKey': 262164, 'CS': 262165, 'Stomp': 262166, 'HoruKey': 262167, 'WallJump': 262168, 'GinsoKey': 262169} + +default_pool: Dict[str, int] = \ + {'EX100': 53, 'AC': 33, 'Bash': 1, 'HC': 12, 'Plant': 24, 'MapStone': 9, 'ChargeFlame': 1, 'ChargeJump': 1, 'Climb': 1, 'MS': 9, 'Dash': 1, 'EC': 14, 'EX200': 29, 'DoubleJump': 1, 'EX15': 6, 'Wind': 1, 'KS': 40, 'Water': 1, 'Glide': 1, 'Grenade': 1, 'ForlornKey': 1, 'CS': 8, 'Stomp': 1, 'HoruKey': 1, 'WallJump': 1, 'GinsoKey': 1} \ No newline at end of file diff --git a/worlds/oribf/Locations.py b/worlds/oribf/Locations.py new file mode 100644 index 00000000..1522fb55 --- /dev/null +++ b/worlds/oribf/Locations.py @@ -0,0 +1,262 @@ +# generated by https://github.com/Berserker66/ori_rando_server +# do not edit manually + +from .Types import * + +locations_data = \ + {'AboveChargeFlameTreeExp': Location(code=262144, vanilla_item='EX100'), + 'AboveChargeJumpAbilityCell': Location(code=262145, vanilla_item='AC'), + 'AboveFourthHealth': Location(code=262146, vanilla_item='AC'), + 'AboveGrottoTeleporterExp': Location(code=262147, vanilla_item='EX100'), + 'BashAreaExp': Location(code=262148, vanilla_item='EX100'), + 'BashSkillTree': Location(code=262149, vanilla_item='SKBash'), + 'BelowGrottoTeleporterHealthCell': Location(code=262150, vanilla_item='HC'), + 'BelowGrottoTeleporterPlant': Location(code=262151, vanilla_item='Plant'), + 'BlackrootBoulderExp': Location(code=262152, vanilla_item='EX100'), + 'BlackrootMap': Location(code=262153, vanilla_item='MapStone'), + 'BlackrootTeleporterHealthCell': Location(code=262154, vanilla_item='HC'), + 'ChargeFlameAreaExp': Location(code=262155, vanilla_item='EX100'), + 'ChargeFlameAreaPlant': Location(code=262156, vanilla_item='Plant'), + 'ChargeFlameSkillTree': Location(code=262157, vanilla_item='SKChargeFlame'), + 'ChargeJumpSkillTree': Location(code=262158, vanilla_item='SKChargeJump'), + 'ClimbSkillTree': Location(code=262159, vanilla_item='SKClimb'), + 'DashAreaAbilityCell': Location(code=262160, vanilla_item='AC'), + 'DashAreaMapstone': Location(code=262161, vanilla_item='MS'), + 'DashAreaOrbRoomExp': Location(code=262162, vanilla_item='EX100'), + 'DashAreaPlant': Location(code=262163, vanilla_item='Plant'), + 'DashAreaRoofExp': Location(code=262164, vanilla_item='EX100'), + 'DashSkillTree': Location(code=262165, vanilla_item='SKDash'), + 'DeathGauntletEnergyCell': Location(code=262166, vanilla_item='EC'), + 'DeathGauntletExp': Location(code=262167, vanilla_item='EX100'), + 'DeathGauntletRoofHealthCell': Location(code=262168, vanilla_item='HC'), + 'DeathGauntletRoofPlant': Location(code=262169, vanilla_item='Plant'), + 'DeathGauntletStompSwim': Location(code=262170, vanilla_item='EX200'), + 'DeathGauntletSwimEnergyDoor': Location(code=262171, vanilla_item='AC'), + 'DoorWarpExp': Location(code=262172, vanilla_item='EX200'), + 'DoubleJumpAreaExp': Location(code=262173, vanilla_item='EX100'), + 'DoubleJumpSkillTree': Location(code=262174, vanilla_item='SKDoubleJump'), + 'FarLeftGumoHideoutExp': Location(code=262175, vanilla_item='EX100'), + 'FirstPickup': Location(code=262176, vanilla_item='EX15'), + 'ForlornEntranceExp': Location(code=262177, vanilla_item='EX200'), + 'ForlornEscape': Location(code=262178, vanilla_item='EVWind'), + 'ForlornHiddenSpiderExp': Location(code=262179, vanilla_item='EX100'), + 'ForlornKeystone1': Location(code=262180, vanilla_item='KS'), + 'ForlornKeystone2': Location(code=262181, vanilla_item='KS'), + 'ForlornKeystone3': Location(code=262182, vanilla_item='KS'), + 'ForlornKeystone4': Location(code=262183, vanilla_item='KS'), + 'ForlornMap': Location(code=262184, vanilla_item='MapStone'), + 'ForlornPlant': Location(code=262185, vanilla_item='Plant'), + 'FourthHealthCell': Location(code=262186, vanilla_item='HC'), + 'FronkeyFight': Location(code=262187, vanilla_item='EX15'), + 'FronkeyWalkRoof': Location(code=262188, vanilla_item='EX200'), + 'GinsoEscapeExit': Location(code=262189, vanilla_item='EVWater'), + 'GinsoEscapeHangingExp': Location(code=262190, vanilla_item='EX100'), + 'GinsoEscapeJumpPadExp': Location(code=262191, vanilla_item='EX100'), + 'GinsoEscapeProjectileExp': Location(code=262192, vanilla_item='EX100'), + 'GinsoEscapeSpiderExp': Location(code=262193, vanilla_item='EX200'), + 'GladesGrenadePool': Location(code=262194, vanilla_item='EX200'), + 'GladesGrenadeTree': Location(code=262195, vanilla_item='AC'), + 'GladesKeystone1': Location(code=262196, vanilla_item='KS'), + 'GladesKeystone2': Location(code=262197, vanilla_item='KS'), + 'GladesLaser': Location(code=262198, vanilla_item='EC'), + 'GladesLaserGrenade': Location(code=262199, vanilla_item='AC'), + 'GladesMainPool': Location(code=262200, vanilla_item='EX100'), + 'GladesMainPoolDeep': Location(code=262201, vanilla_item='EC'), + 'GladesMap': Location(code=262202, vanilla_item='MapStone'), + 'GladesMapKeystone': Location(code=262203, vanilla_item='KS'), + 'GlideSkillFeather': Location(code=262204, vanilla_item='SKGlide'), + 'GrenadeAreaAbilityCell': Location(code=262205, vanilla_item='AC'), + 'GrenadeAreaExp': Location(code=262206, vanilla_item='EX100'), + 'GrenadeSkillTree': Location(code=262207, vanilla_item='SKGrenade'), + 'GrottoEnergyDoorHealthCell': Location(code=262208, vanilla_item='HC'), + 'GrottoEnergyDoorSwim': Location(code=262209, vanilla_item='EX100'), + 'GrottoHideoutFallAbilityCell': Location(code=262210, vanilla_item='AC'), + 'GrottoLasersRoofExp': Location(code=262211, vanilla_item='EX100'), + 'GrottoSwampDrainAccessExp': Location(code=262212, vanilla_item='EX100'), + 'GrottoSwampDrainAccessPlant': Location(code=262213, vanilla_item='Plant'), + 'GroveAboveSpiderWaterEnergyCell': Location(code=262214, vanilla_item='EC'), + 'GroveAboveSpiderWaterExp': Location(code=262215, vanilla_item='EX200'), + 'GroveAboveSpiderWaterHealthCell': Location(code=262216, vanilla_item='HC'), + 'GroveSpiderWaterSwim': Location(code=262217, vanilla_item='EX100'), + 'GroveWaterStompAbilityCell': Location(code=262218, vanilla_item='AC'), + 'GumoHideoutCrusherExp': Location(code=262219, vanilla_item='EX100'), + 'GumoHideoutCrusherKeystone': Location(code=262220, vanilla_item='KS'), + 'GumoHideoutEnergyCell': Location(code=262221, vanilla_item='EC'), + 'GumoHideoutLeftHangingExp': Location(code=262222, vanilla_item='EX15'), + 'GumoHideoutMap': Location(code=262223, vanilla_item='MapStone'), + 'GumoHideoutMapstone': Location(code=262224, vanilla_item='MS'), + 'GumoHideoutMiniboss': Location(code=262225, vanilla_item='KS'), + 'GumoHideoutRedirectAbilityCell': Location(code=262226, vanilla_item='AC'), + 'GumoHideoutRedirectEnergyCell': Location(code=262227, vanilla_item='EC'), + 'GumoHideoutRedirectExp': Location(code=262228, vanilla_item='EX200'), + 'GumoHideoutRedirectPlant': Location(code=262229, vanilla_item='Plant'), + 'GumoHideoutRightHangingExp': Location(code=262230, vanilla_item='EX15'), + 'GumoHideoutRockfallExp': Location(code=262231, vanilla_item='EX100'), + 'GumonSeal': Location(code=262232, vanilla_item='EVForlornKey'), + 'HollowGroveMap': Location(code=262233, vanilla_item='MapStone'), + 'HollowGroveMapPlant': Location(code=262234, vanilla_item='Plant'), + 'HollowGroveMapstone': Location(code=262235, vanilla_item='MS'), + 'HollowGroveTreeAbilityCell': Location(code=262236, vanilla_item='AC'), + 'HollowGroveTreePlant': Location(code=262237, vanilla_item='Plant'), + 'HoruFieldsAbilityCell': Location(code=262238, vanilla_item='AC'), + 'HoruFieldsEnergyCell': Location(code=262239, vanilla_item='EC'), + 'HoruFieldsHealthCell': Location(code=262240, vanilla_item='HC'), + 'HoruFieldsHiddenExp': Location(code=262241, vanilla_item='EX200'), + 'HoruFieldsPlant': Location(code=262242, vanilla_item='Plant'), + 'HoruL1': Location(code=262243, vanilla_item='CS'), + 'HoruL2': Location(code=262244, vanilla_item='CS'), + 'HoruL3': Location(code=262245, vanilla_item='CS'), + 'HoruL4': Location(code=262246, vanilla_item='CS'), + 'HoruL4ChaseExp': Location(code=262247, vanilla_item='EX200'), + 'HoruL4LowerExp': Location(code=262248, vanilla_item='EX200'), + 'HoruLavaDrainedLeftExp': Location(code=262249, vanilla_item='EX200'), + 'HoruLavaDrainedRightExp': Location(code=262250, vanilla_item='EX200'), + 'HoruMap': Location(code=262251, vanilla_item='MapStone'), + 'HoruR1': Location(code=262252, vanilla_item='CS'), + 'HoruR1EnergyCell': Location(code=262253, vanilla_item='EC'), + 'HoruR1HangingExp': Location(code=262254, vanilla_item='EX100'), + 'HoruR1Mapstone': Location(code=262255, vanilla_item='MS'), + 'HoruR2': Location(code=262256, vanilla_item='CS'), + 'HoruR3': Location(code=262257, vanilla_item='CS'), + 'HoruR3Plant': Location(code=262258, vanilla_item='Plant'), + 'HoruR4': Location(code=262259, vanilla_item='CS'), + 'HoruR4DrainedExp': Location(code=262260, vanilla_item='EX200'), + 'HoruR4LaserExp': Location(code=262261, vanilla_item='EX200'), + 'HoruR4StompExp': Location(code=262262, vanilla_item='EX200'), + 'HoruTeleporterExp': Location(code=262263, vanilla_item='EX200'), + 'IcelessExp': Location(code=262264, vanilla_item='EX100'), + 'InnerSwampDrainExp': Location(code=262265, vanilla_item='EX100'), + 'InnerSwampEnergyCell': Location(code=262266, vanilla_item='EC'), + 'InnerSwampHiddenSwimExp': Location(code=262267, vanilla_item='EX100'), + 'InnerSwampStompExp': Location(code=262268, vanilla_item='EX100'), + 'InnerSwampSwimLeftKeystone': Location(code=262269, vanilla_item='KS'), + 'InnerSwampSwimMapstone': Location(code=262270, vanilla_item='MS'), + 'InnerSwampSwimRightKeystone': Location(code=262271, vanilla_item='KS'), + 'KuroPerchExp': Location(code=262272, vanilla_item='EX200'), + 'LeftGladesExp': Location(code=262273, vanilla_item='EX15'), + 'LeftGladesHiddenExp': Location(code=262274, vanilla_item='EX15'), + 'LeftGladesKeystone': Location(code=262275, vanilla_item='KS'), + 'LeftGladesMapstone': Location(code=262276, vanilla_item='MS'), + 'LeftGrottoTeleporterExp': Location(code=262277, vanilla_item='EX200'), + 'LeftGumoHideoutExp': Location(code=262278, vanilla_item='EX100'), + 'LeftGumoHideoutHealthCell': Location(code=262279, vanilla_item='HC'), + 'LeftGumoHideoutLowerPlant': Location(code=262280, vanilla_item='Plant'), + 'LeftGumoHideoutSwim': Location(code=262281, vanilla_item='EX100'), + 'LeftGumoHideoutUpperPlant': Location(code=262282, vanilla_item='Plant'), + 'LeftSorrowAbilityCell': Location(code=262283, vanilla_item='AC'), + 'LeftSorrowEnergyCell': Location(code=262284, vanilla_item='EC'), + 'LeftSorrowGrenade': Location(code=262285, vanilla_item='EX200'), + 'LeftSorrowKeystone1': Location(code=262286, vanilla_item='KS'), + 'LeftSorrowKeystone2': Location(code=262287, vanilla_item='KS'), + 'LeftSorrowKeystone3': Location(code=262288, vanilla_item='KS'), + 'LeftSorrowKeystone4': Location(code=262289, vanilla_item='KS'), + 'LeftSorrowPlant': Location(code=262290, vanilla_item='Plant'), + 'LostGroveAbilityCell': Location(code=262291, vanilla_item='AC'), + 'LostGroveHiddenExp': Location(code=262292, vanilla_item='EX100'), + 'LostGroveLongSwim': Location(code=262293, vanilla_item='AC'), + 'LostGroveTeleporter': Location(code=262294, vanilla_item='EX100'), + 'LowerBlackrootAbilityCell': Location(code=262295, vanilla_item='AC'), + 'LowerBlackrootGrenadeThrow': Location(code=262296, vanilla_item='AC'), + 'LowerBlackrootLaserAbilityCell': Location(code=262297, vanilla_item='AC'), + 'LowerBlackrootLaserExp': Location(code=262298, vanilla_item='EX100'), + 'LowerGinsoHiddenExp': Location(code=262299, vanilla_item='EX100'), + 'LowerGinsoKeystone1': Location(code=262300, vanilla_item='KS'), + 'LowerGinsoKeystone2': Location(code=262301, vanilla_item='KS'), + 'LowerGinsoKeystone3': Location(code=262302, vanilla_item='KS'), + 'LowerGinsoKeystone4': Location(code=262303, vanilla_item='KS'), + 'LowerGinsoPlant': Location(code=262304, vanilla_item='Plant'), + 'LowerValleyExp': Location(code=262305, vanilla_item='EX100'), + 'LowerValleyMapstone': Location(code=262306, vanilla_item='MS'), + 'MistyAbilityCell': Location(code=262307, vanilla_item='AC'), + 'MistyEntranceStompExp': Location(code=262308, vanilla_item='EX100'), + 'MistyEntranceTreeExp': Location(code=262309, vanilla_item='EX100'), + 'MistyFrogNookExp': Location(code=262310, vanilla_item='EX100'), + 'MistyGrenade': Location(code=262311, vanilla_item='EX200'), + 'MistyKeystone1': Location(code=262312, vanilla_item='KS'), + 'MistyKeystone2': Location(code=262313, vanilla_item='KS'), + 'MistyKeystone3': Location(code=262314, vanilla_item='KS'), + 'MistyKeystone4': Location(code=262315, vanilla_item='KS'), + 'MistyMortarCorridorHiddenExp': Location(code=262316, vanilla_item='EX100'), + 'MistyMortarCorridorUpperExp': Location(code=262317, vanilla_item='EX100'), + 'MistyPlant': Location(code=262318, vanilla_item='Plant'), + 'MistyPostClimbAboveSpikePit': Location(code=262319, vanilla_item='EX200'), + 'MistyPostClimbSpikeCave': Location(code=262320, vanilla_item='EX100'), + 'MoonGrottoStompPlant': Location(code=262321, vanilla_item='Plant'), + 'OuterSwampAbilityCell': Location(code=262322, vanilla_item='AC'), + 'OuterSwampGrenadeExp': Location(code=262323, vanilla_item='EX200'), + 'OuterSwampHealthCell': Location(code=262324, vanilla_item='HC'), + 'OuterSwampMortarAbilityCell': Location(code=262325, vanilla_item='AC'), + 'OuterSwampMortarPlant': Location(code=262326, vanilla_item='Plant'), + 'OuterSwampStompExp': Location(code=262327, vanilla_item='EX100'), + 'OutsideForlornCliffExp': Location(code=262328, vanilla_item='EX200'), + 'OutsideForlornTreeExp': Location(code=262329, vanilla_item='EX100'), + 'OutsideForlornWaterExp': Location(code=262330, vanilla_item='EX100'), + 'RazielNo': Location(code=262331, vanilla_item='EX100'), + 'RightForlornHealthCell': Location(code=262332, vanilla_item='HC'), + 'RightForlornPlant': Location(code=262333, vanilla_item='Plant'), + 'SorrowEntranceAbilityCell': Location(code=262334, vanilla_item='AC'), + 'SorrowHealthCell': Location(code=262335, vanilla_item='HC'), + 'SorrowHiddenKeystone': Location(code=262336, vanilla_item='KS'), + 'SorrowLowerLeftKeystone': Location(code=262337, vanilla_item='KS'), + 'SorrowMainShaftKeystone': Location(code=262338, vanilla_item='KS'), + 'SorrowMap': Location(code=262339, vanilla_item='MapStone'), + 'SorrowMapstone': Location(code=262340, vanilla_item='MS'), + 'SorrowSpikeKeystone': Location(code=262341, vanilla_item='KS'), + 'SpiderSacEnergyCell': Location(code=262342, vanilla_item='EC'), + 'SpiderSacEnergyDoor': Location(code=262343, vanilla_item='AC'), + 'SpiderSacGrenadeDoor': Location(code=262344, vanilla_item='AC'), + 'SpiderSacHealthCell': Location(code=262345, vanilla_item='HC'), + 'SpiritCavernsAbilityCell': Location(code=262346, vanilla_item='AC'), + 'SpiritCavernsKeystone1': Location(code=262347, vanilla_item='KS'), + 'SpiritCavernsKeystone2': Location(code=262348, vanilla_item='KS'), + 'SpiritCavernsTopLeftKeystone': Location(code=262349, vanilla_item='KS'), + 'SpiritCavernsTopRightKeystone': Location(code=262350, vanilla_item='KS'), + 'StompAreaExp': Location(code=262351, vanilla_item='EX100'), + 'StompAreaGrenadeExp': Location(code=262352, vanilla_item='EX200'), + 'StompAreaRoofExp': Location(code=262353, vanilla_item='EX200'), + 'StompSkillTree': Location(code=262354, vanilla_item='SKStomp'), + 'Sunstone': Location(code=262355, vanilla_item='EVHoruKey'), + 'SunstonePlant': Location(code=262356, vanilla_item='Plant'), + 'SwampEntranceAbilityCell': Location(code=262357, vanilla_item='AC'), + 'SwampEntrancePlant': Location(code=262358, vanilla_item='Plant'), + 'SwampEntranceSwim': Location(code=262359, vanilla_item='EX200'), + 'SwampMap': Location(code=262360, vanilla_item='MapStone'), + 'SwampTeleporterAbilityCell': Location(code=262361, vanilla_item='AC'), + 'TopGinsoLeftLowerExp': Location(code=262362, vanilla_item='EX100'), + 'TopGinsoLeftUpperExp': Location(code=262363, vanilla_item='EX100'), + 'TopGinsoRightPlant': Location(code=262364, vanilla_item='Plant'), + 'UpperGinsoEnergyCell': Location(code=262365, vanilla_item='EC'), + 'UpperGinsoLowerKeystone': Location(code=262366, vanilla_item='KS'), + 'UpperGinsoRedirectLowerExp': Location(code=262367, vanilla_item='EX100'), + 'UpperGinsoRedirectUpperExp': Location(code=262368, vanilla_item='EX100'), + 'UpperGinsoRightKeystone': Location(code=262369, vanilla_item='KS'), + 'UpperGinsoUpperLeftKeystone': Location(code=262370, vanilla_item='KS'), + 'UpperGinsoUpperRightKeystone': Location(code=262371, vanilla_item='KS'), + 'UpperSorrowFarLeftKeystone': Location(code=262372, vanilla_item='KS'), + 'UpperSorrowFarRightKeystone': Location(code=262373, vanilla_item='KS'), + 'UpperSorrowLeftKeystone': Location(code=262374, vanilla_item='KS'), + 'UpperSorrowRightKeystone': Location(code=262375, vanilla_item='KS'), + 'UpperSorrowSpikeExp': Location(code=262376, vanilla_item='EX100'), + 'ValleyEntryAbilityCell': Location(code=262377, vanilla_item='AC'), + 'ValleyEntryGrenadeLongSwim': Location(code=262378, vanilla_item='EC'), + 'ValleyEntryTreeExp': Location(code=262379, vanilla_item='EX100'), + 'ValleyEntryTreePlant': Location(code=262380, vanilla_item='Plant'), + 'ValleyForlornApproachGrenade': Location(code=262381, vanilla_item='AC'), + 'ValleyForlornApproachMapstone': Location(code=262382, vanilla_item='MS'), + 'ValleyMainFACS': Location(code=262383, vanilla_item='AC'), + 'ValleyMainPlant': Location(code=262384, vanilla_item='Plant'), + 'ValleyMap': Location(code=262385, vanilla_item='MapStone'), + 'ValleyRightBirdStompCell': Location(code=262386, vanilla_item='AC'), + 'ValleyRightExp': Location(code=262387, vanilla_item='EX100'), + 'ValleyRightFastStomplessCell': Location(code=262388, vanilla_item='AC'), + 'ValleyRightSwimExp': Location(code=262389, vanilla_item='EX100'), + 'ValleyThreeBirdAbilityCell': Location(code=262390, vanilla_item='AC'), + 'WallJumpAreaEnergyCell': Location(code=262391, vanilla_item='EC'), + 'WallJumpAreaExp': Location(code=262392, vanilla_item='EX200'), + 'WallJumpSkillTree': Location(code=262393, vanilla_item='SKWallJump'), + 'WaterVein': Location(code=262394, vanilla_item='EVGinsoKey'), + 'WilhelmExp': Location(code=262395, vanilla_item='EX200')} + + + +lookup_name_to_id = {location_name: location_data.code for location_name, location_data in locations_data.items()} \ No newline at end of file diff --git a/worlds/oribf/Options.py b/worlds/oribf/Options.py new file mode 100644 index 00000000..ac6808aa --- /dev/null +++ b/worlds/oribf/Options.py @@ -0,0 +1,12 @@ +from .RulesData import location_rules +from Options import Toggle + + +options = { + "open" : Toggle, + "openworld": Toggle +} + +for logic_set in location_rules: + if logic_set != "casual-core": + options[logic_set.replace("-", "_")] = Toggle diff --git a/worlds/oribf/Regions.py b/worlds/oribf/Regions.py new file mode 100644 index 00000000..c8660873 --- /dev/null +++ b/worlds/oribf/Regions.py @@ -0,0 +1,251 @@ +# generated by https://github.com/Berserker66/ori_rando_server +# do not edit manually + +locations_by_region = \ + {'AboveChargeJumpArea': {'AboveChargeJumpAbilityCell'}, 'BashTree': {'BashAreaExp', 'BashSkillTree'}, + 'BashTreeDoorClosed': set(), 'BashTreeDoorOpened': set(), 'BelowSunstoneArea': set(), + 'BlackrootDarknessRoom': {'DashAreaOrbRoomExp', 'DashAreaAbilityCell', 'DashAreaRoofExp'}, + 'BlackrootGrottoConnection': {'BlackrootBoulderExp', 'BlackrootMap', 'BlackrootTeleporterHealthCell'}, + 'ChargeFlameAreaPlantAccess': {'ChargeFlameAreaPlant'}, 'ChargeFlameAreaStump': set(), + 'ChargeFlameSkillTreeChamber': {'ChargeFlameSkillTree'}, 'ChargeJumpArea': {'ChargeJumpSkillTree'}, + 'ChargeJumpDoor': set(), 'ChargeJumpDoorOpen': set(), + 'ChargeJumpDoorOpenLeft': {'UpperSorrowSpikeExp', 'UpperSorrowRightKeystone', 'UpperSorrowLeftKeystone', + 'UpperSorrowFarRightKeystone', 'UpperSorrowFarLeftKeystone'}, + 'DashArea': {'DashAreaMapstone', 'DashSkillTree'}, 'DashPlantAccess': {'DashAreaPlant'}, + 'DeathGauntlet': {'DeathGauntletEnergyCell', 'DeathGauntletStompSwim', 'DeathGauntletExp'}, + 'DeathGauntletDoor': set(), 'DeathGauntletDoorOpened': set(), 'DeathGauntletMoat': {'DeathGauntletSwimEnergyDoor'}, + 'DeathGauntletRoof': {'DeathGauntletRoofHealthCell'}, 'DeathGauntletRoofPlantAccess': {'DeathGauntletRoofPlant'}, + 'DoubleJumpKeyDoor': set(), 'DoubleJumpKeyDoorOpened': {'DoubleJumpSkillTree', 'DoubleJumpAreaExp'}, + 'ForlornGravityRoom': {'ForlornKeystone2', 'ForlornHiddenSpiderExp', 'ForlornKeystone1'}, + 'ForlornInnerDoor': {'ForlornEntranceExp'}, 'ForlornKeyDoor': set(), 'ForlornLaserRoom': {'ForlornEscape'}, + 'ForlornMapArea': {'ForlornMap', 'ForlornKeystone4'}, + 'ForlornOrbPossession': {'ForlornKeystone2', 'ForlornHiddenSpiderExp', 'ForlornKeystone1', 'ForlornKeystone4', + 'ForlornKeystone3'}, 'ForlornOuterDoor': set(), 'ForlornPlantAccess': {'ForlornPlant'}, + 'ForlornStompDoor': set(), 'ForlornTeleporter': {'ForlornKeystone3'}, 'GinsoEscape': set(), + 'GinsoEscapeComplete': {'GinsoEscapeExit', 'GinsoEscapeSpiderExp', 'GinsoEscapeProjectileExp', + 'GinsoEscapeJumpPadExp', 'GinsoEscapeHangingExp'}, 'GinsoInnerDoor': set(), + 'GinsoMiniBossDoor': {'LowerGinsoKeystone2', 'LowerGinsoKeystone1', 'LowerGinsoKeystone3', 'LowerGinsoKeystone4'}, + 'GinsoOuterDoor': set(), 'GinsoTeleporter': set(), 'GladesLaserArea': {'GladesLaserGrenade', 'GladesLaser'}, + 'GladesMain': {'FourthHealthCell', 'GladesMap', 'GladesMapKeystone'}, 'GladesMainAttic': {'AboveFourthHealth'}, + 'GrenadeArea': {'GrenadeAreaAbilityCell', 'GrenadeAreaExp', 'GrenadeSkillTree'}, 'GrenadeAreaAccess': set(), + 'GumoHideout': {'GumoHideoutMapstone', 'GumoHideoutCrusherExp', 'GumoHideoutRightHangingExp', + 'GumoHideoutEnergyCell', 'GumoHideoutCrusherKeystone', 'GumoHideoutMap', 'GumoHideoutMiniboss'}, + 'GumoHideoutRedirectArea': {'GumoHideoutRedirectAbilityCell', 'GumoHideoutRedirectPlant'}, + 'GumoHideoutRedirectEnergyVault': {'GumoHideoutRedirectExp', 'GumoHideoutRedirectEnergyCell'}, + 'HollowGrove': {'GroveWaterStompAbilityCell', 'HollowGroveTreeAbilityCell', 'HollowGroveMapPlant', + 'HoruFieldsHealthCell', 'HollowGroveMap', 'SwampTeleporterAbilityCell', 'HollowGroveMapstone', + 'HollowGroveTreePlant'}, 'HoruBasement': {'DoorWarpExp'}, 'HoruEscapeInnerDoor': set(), + 'HoruEscapeOuterDoor': set(), 'HoruFields': set(), + 'HoruFieldsPushBlock': {'HoruFieldsEnergyCell', 'HoruFieldsPlant', 'HoruFieldsHiddenExp', 'HoruFieldsAbilityCell'}, + 'HoruInnerDoor': {'HoruLavaDrainedLeftExp', 'HoruLavaDrainedRightExp'}, + 'HoruL4CutscenePeg': {'HoruL4', 'HoruL4LowerExp'}, 'HoruL4LavaChasePeg': {'HoruL4ChaseExp'}, + 'HoruMapLedge': {'HoruMap'}, 'HoruOuterDoor': set(), 'HoruR1CutsceneTrigger': {'HoruR1EnergyCell', 'HoruR1'}, + 'HoruR1MapstoneSecret': {'HoruR1Mapstone'}, 'HoruR3CutsceneTrigger': {'HoruR3'}, 'HoruR3ElevatorLever': set(), + 'HoruR3PlantCove': {'HoruR3Plant'}, 'HoruR4CutsceneTrigger': {'HoruR4DrainedExp', 'HoruR4'}, + 'HoruR4PuzzleEntrance': {'HoruR4LaserExp'}, 'HoruR4StompHideout': {'HoruR4StompExp'}, + 'HoruTeleporter': {'HoruTeleporterExp'}, 'Iceless': {'IcelessExp'}, 'InnerSwampAboveDrainArea': set(), + 'InnerSwampDrainBroken': {'InnerSwampDrainExp'}, 'InnerSwampSkyArea': {'InnerSwampEnergyCell'}, 'L1': {'HoruL1'}, + 'L1InnerDoor': set(), 'L1OuterDoor': set(), 'L2': {'HoruL2'}, 'L2InnerDoor': set(), 'L2OuterDoor': set(), + 'L3': {'HoruL3'}, 'L3InnerDoor': set(), 'L3OuterDoor': set(), 'L4': set(), 'L4InnerDoor': set(), + 'L4OuterDoor': {'HoruLavaDrainedLeftExp'}, + 'LeftGlades': {'WallJumpAreaEnergyCell', 'LeftGladesHiddenExp', 'WallJumpAreaExp', 'WallJumpSkillTree'}, + 'LeftGumoHideout': {'FarLeftGumoHideoutExp', 'LeftGumoHideoutUpperPlant'}, + 'LeftSorrow': {'LeftSorrowAbilityCell', 'LeftSorrowPlant', 'LeftSorrowGrenade'}, + 'LeftSorrowKeystones': {'LeftSorrowEnergyCell', 'LeftSorrowKeystone1', 'LeftSorrowKeystone2', + 'LeftSorrowKeystone4', 'LeftSorrowKeystone3'}, 'LeftSorrowLowerDoor': set(), + 'LeftSorrowMiddleDoor': set(), 'LostGrove': {'LostGroveLongSwim'}, + 'LostGroveExit': {'LostGroveTeleporter', 'LostGroveAbilityCell', 'LostGroveHiddenExp'}, + 'LowerBlackroot': {'LowerBlackrootAbilityCell', 'LowerBlackrootLaserAbilityCell', 'LowerBlackrootGrenadeThrow', + 'LowerBlackrootLaserExp'}, 'LowerChargeFlameArea': {'ChargeFlameAreaExp'}, + 'LowerGinsoTree': {'LowerGinsoPlant', 'LowerGinsoHiddenExp'}, + 'LowerLeftGumoHideout': {'LeftGumoHideoutSwim', 'LeftGumoHideoutHealthCell', 'LeftGumoHideoutExp', + 'GumoHideoutLeftHangingExp', 'GumoHideoutRightHangingExp', 'LeftGumoHideoutLowerPlant'}, + 'LowerSorrow': {'SorrowLowerLeftKeystone', 'SorrowHiddenKeystone', 'SorrowEntranceAbilityCell', 'SorrowHealthCell', + 'SorrowSpikeKeystone'}, + 'LowerSpiritCaverns': {'SpiritCavernsKeystone1', 'SpiritCavernsAbilityCell', 'SpiritCavernsKeystone2'}, + 'LowerValley': {'LowerValleyExp', 'LowerValleyMapstone', 'KuroPerchExp'}, + 'LowerValleyPlantApproach': {'ValleyMainPlant'}, 'MidSpiritCaverns': set(), 'MiddleSorrow': set(), + 'MistyAbove200xp': {'MistyGrenade'}, 'MistyBeforeDocks': set(), 'MistyBeforeMiniBoss': set(), + 'MistyEntrance': {'MistyEntranceStompExp', 'MistyEntranceTreeExp'}, 'MistyKeystone3Ledge': {'MistyKeystone3'}, + 'MistyKeystone4Ledge': {'MistyKeystone4'}, 'MistyMortarSpikeCave': {'MistyPostClimbAboveSpikePit'}, + 'MistyOrbRoom': {'GumonSeal'}, 'MistyPostClimb': set(), + 'MistyPostFeatherTutorial': {'MistyFrogNookExp', 'MistyKeystone1'}, 'MistyPostKeystone1': set(), + 'MistyPostLasers': {'MistyPostClimbSpikeCave'}, 'MistyPostMortarCorridor': set(), + 'MistyPreClimb': {'ClimbSkillTree'}, 'MistyPreKeystone2': {'MistyKeystone2', 'MistyAbilityCell'}, + 'MistyPreLasers': set(), 'MistyPreMortarCorridor': {'MistyMortarCorridorUpperExp', 'MistyMortarCorridorHiddenExp'}, + 'MistyPrePlantLedge': {'MistyPlant'}, 'MistySpikeCave': set(), + 'MoonGrotto': {'GrottoEnergyDoorHealthCell', 'GrottoEnergyDoorSwim'}, + 'MoonGrottoAboveTeleporter': {'LeftGrottoTeleporterExp', 'AboveGrottoTeleporterExp'}, + 'MoonGrottoBelowTeleporter': {'BelowGrottoTeleporterPlant', 'BelowGrottoTeleporterHealthCell'}, + 'MoonGrottoStompPlantAccess': {'MoonGrottoStompPlant'}, + 'MoonGrottoSwampAccessArea': {'GrottoSwampDrainAccessExp', 'GrottoSwampDrainAccessPlant'}, + 'OuterSwampAbilityCellNook': {'OuterSwampAbilityCell'}, + 'OuterSwampLowerArea': {'OuterSwampHealthCell', 'OuterSwampStompExp'}, + 'OuterSwampMortarAbilityCellLedge': {'OuterSwampMortarAbilityCell'}, + 'OuterSwampMortarPlantAccess': {'OuterSwampMortarPlant'}, 'OuterSwampUpperArea': {'OuterSwampGrenadeExp'}, + 'OutsideForlorn': {'OutsideForlornTreeExp', 'OutsideForlornWaterExp'}, + 'OutsideForlornCliff': {'OutsideForlornCliffExp'}, 'R1': {'HoruR1HangingExp'}, 'R1InnerDoor': set(), + 'R1OuterDoor': set(), 'R2': {'HoruR2'}, 'R2InnerDoor': set(), 'R2OuterDoor': set(), 'R3': set(), + 'R3InnerDoor': set(), 'R3OuterDoor': set(), 'R4': {'HoruR4DrainedExp'}, 'R4InnerDoor': set(), + 'R4OuterDoor': {'HoruLavaDrainedRightExp'}, 'RazielNoArea': {'RazielNo'}, + 'RightForlorn': {'RightForlornPlant', 'RightForlornHealthCell'}, + 'RightSwamp': {'StompAreaGrenadeExp', 'StompSkillTree', 'StompAreaExp', 'StompAreaRoofExp'}, + 'SideFallCell': {'GrottoHideoutFallAbilityCell'}, 'SorrowBashLedge': set(), + 'SorrowMainShaftKeystoneArea': {'SorrowMainShaftKeystone'}, 'SorrowMapstoneArea': {'SorrowMap', 'SorrowMapstone'}, + 'SorrowTeleporter': set(), 'SpiderSacArea': {'AboveChargeFlameTreeExp'}, + 'SpiderSacEnergyNook': {'SpiderSacEnergyCell'}, + 'SpiderSacTetherArea': {'SpiderSacGrenadeDoor', 'SpiderSacEnergyDoor', 'SpiderSacHealthCell'}, + 'SpiderWaterArea': {'GroveSpiderWaterSwim', 'GroveAboveSpiderWaterEnergyCell', 'GroveAboveSpiderWaterExp', + 'GroveAboveSpiderWaterHealthCell'}, 'SpiritCavernsDoor': set(), + 'SpiritCavernsDoorOpened': set(), 'SpiritTreeDoor': set(), 'SpiritTreeDoorOpened': set(), + 'SpiritTreeRefined': {'AboveChargeFlameTreeExp'}, + 'SunkenGladesRunaway': {'FronkeyWalkRoof', 'GladesGrenadePool', 'GladesMainPoolDeep', 'FirstPickup', + 'FronkeyFight', 'GladesMainPool', 'GladesKeystone1', 'GladesGrenadeTree', + 'GladesKeystone2'}, 'SunstoneArea': {'Sunstone', 'SunstonePlant'}, + 'Swamp': {'InnerSwampDrainExp', 'SwampMap'}, 'SwampDrainlessArea': {'SwampEntranceAbilityCell'}, + 'SwampEntryArea': {'SwampEntrancePlant', 'SwampEntranceSwim'}, 'SwampKeyDoorOpened': set(), + 'SwampKeyDoorPlatform': {'InnerSwampStompExp'}, 'SwampTeleporter': set(), + 'SwampWater': {'InnerSwampSwimRightKeystone', 'InnerSwampSwimMapstone', 'InnerSwampHiddenSwimExp', + 'InnerSwampSwimLeftKeystone'}, + 'TopGinsoTree': {'TopGinsoLeftLowerExp', 'TopGinsoLeftUpperExp', 'TopGinsoRightPlant'}, + 'UpperGinsoDoorClosed': set(), 'UpperGinsoDoorOpened': set(), + 'UpperGinsoRedirectArea': {'BashAreaExp', 'UpperGinsoRedirectUpperExp', 'UpperGinsoRedirectLowerExp'}, + 'UpperGinsoTree': {'UpperGinsoUpperLeftKeystone', 'UpperGinsoLowerKeystone', 'UpperGinsoRightKeystone', + 'UpperGinsoUpperRightKeystone', 'UpperGinsoEnergyCell'}, 'UpperGrotto': {'GrottoLasersRoofExp'}, + 'UpperLeftGlades': {'LeftGladesKeystone', 'LeftGladesExp', 'LeftGladesMapstone'}, + 'UpperSorrow': {'UpperSorrowSpikeExp', 'UpperSorrowRightKeystone', 'UpperSorrowLeftKeystone', + 'UpperSorrowFarRightKeystone', 'UpperSorrowFarLeftKeystone'}, + 'UpperSpiritCaverns': {'SpiritCavernsTopRightKeystone', 'SpiritCavernsTopLeftKeystone'}, + 'ValleyEntry': {'ValleyEntryAbilityCell', 'ValleyThreeBirdAbilityCell'}, + 'ValleyEntryTree': {'ValleyEntryTreeExp', 'ValleyEntryGrenadeLongSwim'}, + 'ValleyEntryTreePlantAccess': {'ValleyEntryTreePlant'}, + 'ValleyForlornApproach': {'ValleyMap', 'ValleyForlornApproachGrenade', 'ValleyForlornApproachMapstone'}, + 'ValleyMain': {'GlideSkillFeather', 'KuroPerchExp'}, 'ValleyPostStompDoor': {'ValleyRightSwimExp'}, + 'ValleyRight': set(), 'ValleyStompFloor': set(), 'ValleyStompless': {'KuroPerchExp'}, + 'ValleyStomplessApproach': {'ValleyRightFastStomplessCell', 'ValleyRightBirdStompCell', 'ValleyRightExp'}, + 'ValleyTeleporter': set(), 'ValleyThreeBirdLever': {'ValleyThreeBirdAbilityCell', 'ValleyMainFACS'}, + 'WaterVeinArea': {'WaterVein', 'GumoHideoutRockfallExp'}, 'WilhelmLedge': {'WilhelmExp', 'KuroPerchExp'}} + +connectors = \ + {'AboveChargeJumpArea': {'SorrowTeleporter', 'ChargeJumpArea'}, + 'BashTree': {'BashTreeDoorClosed', 'UpperGinsoRedirectArea'}, 'BashTreeDoorClosed': {'BashTreeDoorOpened'}, + 'BashTreeDoorOpened': {'GinsoMiniBossDoor', 'BashTree'}, 'BelowSunstoneArea': {'SunstoneArea', 'UpperSorrow'}, + 'BlackrootDarknessRoom': {'DashArea'}, 'BlackrootGrottoConnection': {'SideFallCell'}, + 'ChargeFlameAreaStump': {'LowerChargeFlameArea', 'ChargeFlameSkillTreeChamber', 'ChargeFlameAreaPlantAccess'}, + 'ChargeFlameSkillTreeChamber': {'SpiritTreeRefined', 'ChargeFlameAreaStump'}, + 'ChargeJumpArea': {'AboveChargeJumpArea', 'ChargeJumpDoor'}, 'ChargeJumpDoor': {'ChargeJumpDoorOpen'}, + 'ChargeJumpDoorOpen': {'ChargeJumpDoorOpenLeft', 'ChargeJumpArea'}, 'ChargeJumpDoorOpenLeft': {'UpperSorrow'}, + 'DashArea': {'RazielNoArea', 'GrenadeAreaAccess', 'DashPlantAccess'}, + 'DeathGauntlet': {'DeathGauntletRoofPlantAccess', 'MoonGrotto', 'DeathGauntletMoat', 'MoonGrottoAboveTeleporter', + 'DeathGauntletRoof', 'DeathGauntletDoor'}, 'DeathGauntletDoor': {'DeathGauntletDoorOpened'}, + 'DeathGauntletDoorOpened': {'SunkenGladesRunaway', 'DeathGauntlet', 'DeathGauntletMoat'}, + 'DeathGauntletRoof': {'DeathGauntlet', 'DeathGauntletRoofPlantAccess'}, + 'DoubleJumpKeyDoor': {'DoubleJumpKeyDoorOpened'}, 'ForlornGravityRoom': {'ForlornMapArea', 'ForlornInnerDoor'}, + 'ForlornInnerDoor': {'ForlornGravityRoom', 'ForlornOrbPossession', 'ForlornOuterDoor'}, + 'ForlornKeyDoor': {'ForlornLaserRoom'}, 'ForlornLaserRoom': {'ForlornStompDoor'}, + 'ForlornMapArea': {'ForlornGravityRoom', 'ForlornKeyDoor', 'ForlornPlantAccess', 'ForlornTeleporter'}, + 'ForlornOrbPossession': {'ForlornMapArea', 'ForlornKeyDoor', 'ForlornPlantAccess', 'ForlornInnerDoor'}, + 'ForlornOuterDoor': {'OutsideForlorn', 'ForlornInnerDoor'}, 'ForlornStompDoor': {'RightForlorn'}, + 'ForlornTeleporter': {'ForlornMapArea', 'ForlornGravityRoom', 'ForlornOrbPossession'}, + 'GinsoEscape': {'GinsoEscapeComplete'}, 'GinsoEscapeComplete': {'Swamp'}, 'GinsoInnerDoor': {'LowerGinsoTree'}, + 'GinsoMiniBossDoor': {'BashTreeDoorClosed'}, 'GinsoOuterDoor': {'GinsoInnerDoor'}, + 'GinsoTeleporter': {'UpperGinsoDoorClosed', 'TopGinsoTree'}, 'GladesLaserArea': {'MidSpiritCaverns', 'GladesMain'}, + 'GladesMain': {'LeftGlades', 'SpiritCavernsDoor', 'LowerChargeFlameArea', 'GladesMainAttic', 'GladesLaserArea'}, + 'GladesMainAttic': {'LowerChargeFlameArea', 'GladesMain'}, 'GrenadeAreaAccess': {'LowerBlackroot', 'GrenadeArea'}, + 'GumoHideout': {'SideFallCell', 'LeftGumoHideout', 'LowerLeftGumoHideout', 'DoubleJumpKeyDoor'}, + 'GumoHideoutRedirectArea': {'GumoHideoutRedirectEnergyVault'}, + 'HollowGrove': {'MoonGrottoStompPlantAccess', 'Iceless', 'SwampTeleporter', 'SpiderWaterArea', 'HoruFields', + 'OuterSwampUpperArea'}, 'HoruBasement': {'HoruEscapeOuterDoor'}, + 'HoruEscapeOuterDoor': {'HoruEscapeInnerDoor'}, 'HoruFields': {'HoruOuterDoor', 'HoruFieldsPushBlock'}, + 'HoruFieldsPushBlock': {'HollowGrove'}, + 'HoruInnerDoor': {'HoruBasement', 'R2OuterDoor', 'HoruMapLedge', 'L1OuterDoor', 'L2OuterDoor', 'HoruTeleporter', + 'L3OuterDoor', 'R1OuterDoor', 'R4OuterDoor', 'HoruOuterDoor', 'L4OuterDoor', 'R3OuterDoor'}, + 'HoruL4LavaChasePeg': {'HoruL4CutscenePeg'}, 'HoruOuterDoor': {'HoruFieldsPushBlock', 'HoruInnerDoor'}, + 'HoruR1CutsceneTrigger': {'LowerGinsoTree'}, 'HoruR1MapstoneSecret': {'HoruR1CutsceneTrigger'}, + 'HoruR3CutsceneTrigger': {'HoruR3PlantCove'}, 'HoruR3ElevatorLever': {'HoruR3PlantCove', 'HoruR3CutsceneTrigger'}, + 'HoruR4PuzzleEntrance': {'HoruR4CutsceneTrigger'}, + 'HoruR4StompHideout': {'HoruR4CutsceneTrigger', 'HoruR4PuzzleEntrance'}, 'HoruTeleporter': {'HoruInnerDoor'}, + 'Iceless': {'HollowGrove', 'UpperGrotto'}, 'InnerSwampAboveDrainArea': {'InnerSwampDrainBroken'}, + 'InnerSwampDrainBroken': {'Swamp'}, 'InnerSwampSkyArea': {'SwampKeyDoorPlatform', 'Swamp'}, 'L1InnerDoor': {'L1'}, + 'L1OuterDoor': {'L1InnerDoor', 'HoruInnerDoor'}, 'L2InnerDoor': {'L2'}, + 'L2OuterDoor': {'L2InnerDoor', 'HoruInnerDoor'}, 'L3InnerDoor': {'L3'}, + 'L3OuterDoor': {'L3InnerDoor', 'HoruInnerDoor'}, 'L4': {'HoruL4CutscenePeg', 'HoruL4LavaChasePeg'}, + 'L4InnerDoor': {'L4'}, 'L4OuterDoor': {'L4InnerDoor', 'HoruInnerDoor'}, + 'LeftGlades': {'UpperLeftGlades', 'GladesMain'}, 'LeftGumoHideout': {'WaterVeinArea', 'LowerLeftGumoHideout'}, + 'LeftSorrow': {'LeftSorrowKeystones'}, 'LeftSorrowKeystones': {'LeftSorrowMiddleDoor', 'MiddleSorrow'}, + 'LeftSorrowLowerDoor': {'LeftSorrow'}, 'LeftSorrowMiddleDoor': {'MiddleSorrow'}, 'LostGrove': {'LostGroveExit'}, + 'LowerBlackroot': {'LostGrove'}, 'LowerChargeFlameArea': {'ChargeFlameAreaStump', 'GladesMain'}, + 'LowerGinsoTree': {'R4InnerDoor', 'GinsoMiniBossDoor'}, + 'LowerLeftGumoHideout': {'LowerBlackroot', 'GumoHideoutRedirectArea'}, + 'LowerSorrow': {'SorrowMainShaftKeystoneArea', 'SorrowMapstoneArea', 'LeftSorrowLowerDoor', 'LeftSorrow', + 'SunstoneArea', 'WilhelmLedge', 'MiddleSorrow'}, + 'LowerSpiritCaverns': {'SpiritCavernsDoor', 'MidSpiritCaverns', 'GladesLaserArea'}, + 'LowerValley': {'ValleyThreeBirdLever', 'LowerValleyPlantApproach', 'ValleyTeleporter', 'MistyEntrance'}, + 'MidSpiritCaverns': {'UpperSpiritCaverns', 'LowerSpiritCaverns', 'GladesLaserArea'}, + 'MiddleSorrow': {'SorrowMainShaftKeystoneArea', 'LeftSorrowKeystones', 'LeftSorrow', 'LowerSorrow', 'UpperSorrow', + 'SunstoneArea'}, 'MistyAbove200xp': {'MistyBeforeMiniBoss'}, + 'MistyBeforeDocks': {'MistyAbove200xp'}, 'MistyBeforeMiniBoss': {'MistyOrbRoom'}, + 'MistyEntrance': {'MistyPostFeatherTutorial'}, 'MistyKeystone3Ledge': {'MistyPreLasers'}, + 'MistyKeystone4Ledge': {'MistyBeforeDocks'}, 'MistyMortarSpikeCave': {'MistyKeystone4Ledge'}, + 'MistyOrbRoom': {'MistyPreKeystone2'}, 'MistyPostClimb': {'MistySpikeCave'}, + 'MistyPostFeatherTutorial': {'MistyPostKeystone1'}, 'MistyPostKeystone1': {'MistyPreMortarCorridor'}, + 'MistyPostLasers': {'MistyMortarSpikeCave'}, 'MistyPostMortarCorridor': {'MistyPrePlantLedge'}, + 'MistyPreClimb': {'MistyPostClimb', 'ForlornTeleporter', 'RightForlorn'}, 'MistyPreLasers': {'MistyPostLasers'}, + 'MistyPreMortarCorridor': {'MistyPostMortarCorridor', 'RightForlorn'}, 'MistyPrePlantLedge': {'MistyPreClimb'}, + 'MistySpikeCave': {'MistyKeystone3Ledge'}, + 'MoonGrotto': {'MoonGrottoBelowTeleporter', 'MoonGrottoAboveTeleporter', 'WaterVeinArea', 'DeathGauntlet', + 'GumoHideout'}, + 'MoonGrottoAboveTeleporter': {'MoonGrottoSwampAccessArea', 'MoonGrottoBelowTeleporter', + 'MoonGrottoStompPlantAccess', 'MoonGrotto', 'DeathGauntletRoof', 'UpperGrotto'}, + 'MoonGrottoSwampAccessArea': {'InnerSwampAboveDrainArea'}, 'OuterSwampAbilityCellNook': {'InnerSwampSkyArea'}, + 'OuterSwampLowerArea': {'OuterSwampAbilityCellNook', 'OuterSwampMortarPlantAccess', 'SwampEntryArea', + 'OuterSwampMortarAbilityCellLedge', 'UpperGrotto', 'OuterSwampUpperArea'}, + 'OuterSwampMortarAbilityCellLedge': {'OuterSwampMortarPlantAccess', 'UpperGrotto'}, + 'OuterSwampUpperArea': {'OuterSwampLowerArea', 'OuterSwampAbilityCellNook', 'GinsoOuterDoor'}, + 'OutsideForlorn': {'OutsideForlornCliff', 'RightForlorn', 'ForlornOuterDoor'}, + 'OutsideForlornCliff': {'OutsideForlorn', 'ValleyForlornApproach'}, 'R1': {'HoruR1MapstoneSecret'}, + 'R1InnerDoor': {'R1'}, 'R1OuterDoor': {'R1InnerDoor', 'L1OuterDoor'}, 'R2InnerDoor': {'R2'}, + 'R2OuterDoor': {'R2InnerDoor', 'HoruInnerDoor'}, 'R3': {'HoruR3ElevatorLever'}, 'R3InnerDoor': {'R3'}, + 'R3OuterDoor': {'R3InnerDoor', 'HoruInnerDoor'}, 'R4': {'HoruR4StompHideout'}, 'R4InnerDoor': {'R4'}, + 'R4OuterDoor': {'R4InnerDoor', 'HoruInnerDoor'}, 'RazielNoArea': {'GumoHideout', 'BlackrootGrottoConnection'}, + 'SideFallCell': {'LeftGumoHideout', 'GumoHideout'}, 'SorrowBashLedge': {'LowerSorrow'}, + 'SorrowMainShaftKeystoneArea': {'LowerSorrow'}, 'SorrowMapstoneArea': {'HoruInnerDoor'}, + 'SorrowTeleporter': {'AboveChargeJumpArea', 'BelowSunstoneArea'}, + 'SpiderSacArea': {'SpiritTreeRefined', 'SpiderWaterArea', 'SpiderSacTetherArea', 'SpiderSacEnergyNook'}, + 'SpiderSacEnergyNook': {'ChargeFlameAreaPlantAccess'}, + 'SpiderSacTetherArea': {'SpiderWaterArea', 'SpiderSacEnergyNook'}, + 'SpiderWaterArea': {'HollowGrove', 'DeathGauntletRoof', 'SpiderSacEnergyNook', 'SpiderSacArea'}, + 'SpiritCavernsDoor': {'SpiritCavernsDoorOpened'}, 'SpiritCavernsDoorOpened': {'LowerSpiritCaverns', 'GladesMain'}, + 'SpiritTreeDoor': {'SpiritTreeDoorOpened'}, 'SpiritTreeDoorOpened': {'SpiritTreeRefined', 'UpperSpiritCaverns'}, + 'SpiritTreeRefined': {'ChargeFlameAreaStump', 'SpiritTreeDoor', 'ChargeFlameSkillTreeChamber', 'ValleyEntry', + 'SpiderSacArea'}, + 'SunkenGladesRunaway': {'MoonGrotto', 'LowerChargeFlameArea', 'ValleyTeleporter', 'SorrowTeleporter', + 'HoruTeleporter', 'GladesMain', 'GinsoTeleporter', 'SwampTeleporter', 'SpiritTreeRefined', + 'BlackrootDarknessRoom', 'DeathGauntletDoor', 'ForlornTeleporter'}, + 'SunstoneArea': {'SorrowTeleporter', 'UpperSorrow'}, + 'Swamp': {'SwampKeyDoorPlatform', 'SwampDrainlessArea', 'SwampWater'}, + 'SwampEntryArea': {'SwampDrainlessArea', 'Swamp'}, 'SwampKeyDoorOpened': {'RightSwamp'}, + 'SwampKeyDoorPlatform': {'SwampKeyDoorOpened', 'InnerSwampSkyArea'}, + 'SwampTeleporter': {'HollowGrove', 'OuterSwampMortarAbilityCellLedge'}, 'TopGinsoTree': {'GinsoEscape'}, + 'UpperGinsoDoorClosed': {'UpperGinsoDoorOpened'}, 'UpperGinsoDoorOpened': {'GinsoTeleporter', 'UpperGinsoTree'}, + 'UpperGinsoRedirectArea': {'UpperGinsoTree', 'BashTree'}, + 'UpperGinsoTree': {'UpperGinsoDoorClosed', 'UpperGinsoRedirectArea'}, + 'UpperGrotto': {'MoonGrottoStompPlantAccess', 'Iceless', 'MoonGrottoAboveTeleporter', + 'OuterSwampMortarAbilityCellLedge', 'OuterSwampLowerArea'}, 'UpperLeftGlades': {'LeftGlades'}, + 'UpperSorrow': {'SunstoneArea', 'MiddleSorrow', 'SorrowTeleporter', 'ChargeJumpDoor'}, + 'UpperSpiritCaverns': {'SpiritTreeDoor', 'MidSpiritCaverns'}, + 'ValleyEntry': {'ValleyThreeBirdLever', 'ValleyStompFloor', 'ValleyPostStompDoor', 'ValleyEntryTreePlantAccess', + 'ValleyEntryTree', 'SpiritTreeRefined'}, + 'ValleyEntryTree': {'ValleyPostStompDoor', 'ValleyEntryTreePlantAccess'}, + 'ValleyForlornApproach': {'ValleyStompFloor', 'OutsideForlornCliff'}, + 'ValleyMain': {'LowerValleyPlantApproach', 'LowerValley', 'MistyEntrance', 'WilhelmLedge', 'ValleyStompless'}, + 'ValleyPostStompDoor': {'ValleyEntry', 'ValleyRight', 'ValleyEntryTree'}, + 'ValleyRight': {'ValleyPostStompDoor', 'ValleyStomplessApproach'}, + 'ValleyStompFloor': {'ValleyThreeBirdLever', 'ValleyEntry', 'ValleyForlornApproach'}, + 'ValleyStompless': {'LowerValleyPlantApproach', 'ValleyMain', 'LowerValley', 'WilhelmLedge', 'MistyEntrance', + 'ValleyStomplessApproach'}, 'ValleyStomplessApproach': {'ValleyRight', 'ValleyStompless'}, + 'ValleyTeleporter': {'LowerValleyPlantApproach', 'ValleyRight', 'ValleyPostStompDoor', 'LowerValley', + 'MistyEntrance', 'ValleyStompless'}, + 'ValleyThreeBirdLever': {'ValleyStompFloor', 'ValleyEntry', 'LowerValley'}, + 'WaterVeinArea': {'MoonGrotto', 'LeftGumoHideout', 'LowerLeftGumoHideout'}, + 'WilhelmLedge': {'ValleyMain', 'SorrowBashLedge', 'ValleyStompless'}} diff --git a/worlds/oribf/Rules.py b/worlds/oribf/Rules.py new file mode 100644 index 00000000..346810c8 --- /dev/null +++ b/worlds/oribf/Rules.py @@ -0,0 +1,52 @@ +from .RulesData import location_rules +from ..generic.Rules import set_rule +from BaseClasses import Location + + +# TODO: implement Mapstone counting, Open, OpenWorld, connection rules + +def set_rules(world): + temp_base_rule(world.world, world.player) + for logicset in world.logic_sets: + apply_or_ruleset(world.world, world.player, logicset) + + +tautology = lambda state: True + + +def add_or_rule_check_first(world, location: str, player: int, conditionsets): + location = world.get_location(location, player) + for set in conditionsets: + if "Free" in set: + location.access_rule = tautology + return + rule = lambda state, conditionsets=conditionsets: any( + state._oribf_has_all(conditionset, player) for conditionset in conditionsets) + if location.access_rule is Location.access_rule: + location.access_rule = rule + else: + old_rule = location.access_rule + location.access_rule = lambda state: rule(state) or old_rule(state) + + +def temp_base_rule(world, player): + world.completion_condition[player] = lambda state: state._oribf_has_all( + {"Bash", "ChargeFlame", "ChargeJump", "Climb", "Dash", "DoubleJump", "Glide", "Grenade", "Stomp", "WallJump"}, + player) + + +def base_rule(world, player): + if world.logic[player] != 'nologic': + # Victory gets placed on Escaped Horu Event + world.completion_condition[player] = lambda state: state.has('Victory', player) + # Events + # Also add: can complete goal + set_rule(world.get_location("Escaped Horu", player), + lambda state: state.can_reach("HoruEscapeInnerDoor", player) + and state.has_any({"Dash", "Stomp", "ChargeJump", "ChargeFlame"}, player)) + + +def apply_or_ruleset(world, player, rulesetname): + rules = location_rules[rulesetname] + for location, conditionsets in rules.items(): + add_or_rule_check_first(world, location, player, conditionsets) diff --git a/worlds/oribf/RulesData.py b/worlds/oribf/RulesData.py new file mode 100644 index 00000000..cffa494b --- /dev/null +++ b/worlds/oribf/RulesData.py @@ -0,0 +1,6 @@ +# generated by https://github.com/Berserker66/ori_rando_server +# do not edit manually + +# Rules from areas.ori +location_rules = {'casual-core': {'AboveChargeJumpAbilityCell': {frozenset({'ChargeJump'}), frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'}), frozenset({'Grenade', 'Bash'})}, 'BashSkillTree': {frozenset({'GinsoKey'})}, 'BashAreaExp': {frozenset({'Bash', 'GinsoKey'}), frozenset({'GinsoKey', 'ChargeJump'})}, 'DashAreaOrbRoomExp': {frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'Bash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'DashAreaAbilityCell': {frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'Bash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'DashAreaRoofExp': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}, 'BlackrootBoulderExp': {frozenset({'Stomp'})}, 'BlackrootMap': {frozenset({'Mapstone', 'ChargeJump'}), frozenset({'Climb', 'Mapstone', 'DoubleJump'}), frozenset({'Mapstone', 'WallJump'}), frozenset({'Grenade', 'Bash', 'Mapstone'})}, 'ChargeFlameAreaPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'DashAreaMapstone': {frozenset({'Dash'})}, 'DashAreaPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'DeathGauntletExp': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'DeathGauntletStompSwim': {frozenset({'Stomp', 'Water'})}, 'DeathGauntletEnergyCell': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'DeathGauntletSwimEnergyDoor': {frozenset({('EC', 4)})}, 'DeathGauntletRoofPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'DoubleJumpSkillTree': {frozenset({'Glide'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'WallJump'}), frozenset({'Climb', 'Bash', 'Grenade'}), frozenset({'DoubleJump'})}, 'DoubleJumpAreaExp': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Glide', 'Bash'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Climb', 'Bash', 'Grenade'}), frozenset({'Bash', 'WallJump', 'Water'}), frozenset({'ChargeJump', 'WallJump', 'Water'})}, 'ForlornHiddenSpiderExp': {frozenset({'ForlornKey', 'ChargeJump'}), frozenset({'ForlornKey', 'Bash'})}, 'ForlornKeystone1': {frozenset({'ForlornKey', 'ChargeJump'}), frozenset({'ForlornKey'}), frozenset({'Grenade', 'ForlornKey', 'Bash'}), frozenset({'ForlornKey', 'DoubleJump', 'Bash'})}, 'ForlornKeystone2': {frozenset({'ForlornKey', 'ChargeJump'}), frozenset({'Grenade', 'ForlornKey', 'Bash'}), frozenset({'Glide', 'ForlornKey', 'DoubleJump', 'WallJump'}), frozenset({'ForlornKey'}), frozenset({'Climb', 'ForlornKey', 'Glide', 'DoubleJump'})}, 'ForlornEntranceExp': {frozenset({'Grenade', 'ForlornKey', 'Bash'}), frozenset({'ForlornKey', 'ChargeJump', 'Open'}), frozenset({'ForlornKey', 'ChargeJump', 'DoubleJump'}), frozenset({'ForlornKey', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'ForlornKey', 'WallJump', 'Open'}), frozenset({'ForlornKey', 'DoubleJump', 'Open'}), frozenset({'Climb', 'ForlornKey', 'DoubleJump'}), frozenset({'ForlornKey', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'ForlornKey', 'ChargeJump'}), frozenset({'Glide', 'ForlornKey', 'Climb', 'Open'})}, 'ForlornEscape': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'ForlornMap': {frozenset({'ForlornKey', 'Mapstone'})}, 'ForlornKeystone4': {frozenset({'ForlornKey'}), frozenset({'Grenade', 'ForlornKey', 'WallJump', 'Bash'}), frozenset({'ForlornKey', 'ChargeJump', 'WallJump'}), frozenset({'Grenade', 'ForlornKey', 'Climb', 'Bash'}), frozenset({'Climb', 'ForlornKey', 'ChargeJump'})}, 'ForlornKeystone3': {frozenset({'Grenade', 'ForlornKey', 'Climb', 'Bash'}), frozenset({'Glide', 'ForlornKey', 'ChargeJump'}), frozenset({'ForlornKey'}), frozenset({'ForlornKey', 'ChargeJump', 'DoubleJump'})}, 'ForlornPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'LowerGinsoKeystone1': {frozenset({'DoubleJump'}), frozenset({'Glide'})}, 'LowerGinsoKeystone2': {frozenset({'DoubleJump'}), frozenset({'Glide'})}, 'LowerGinsoKeystone3': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'LowerGinsoKeystone4': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'GladesLaser': {frozenset({'ChargeJump'}), frozenset({'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'GladesLaserGrenade': {frozenset({'Grenade', 'Climb', 'ChargeJump', 'Bash'}), frozenset({'Grenade', 'Bash', 'DoubleJump', 'WallJump'})}, 'GladesMap': {frozenset({'Mapstone'})}, 'GrenadeSkillTree': {frozenset({'Climb', 'Dash'}), frozenset({'Grenade', 'Dash', 'Bash'}), frozenset({'Dash', 'WallJump'}), frozenset({'Dash', 'ChargeJump'})}, 'GrenadeAreaExp': {frozenset({'Climb', 'Dash', 'Glide'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide', 'Dash', 'Bash'}), frozenset({'Glide', 'Dash', 'WallJump'})}, 'GrenadeAreaAbilityCell': {frozenset({'Grenade', 'Dash', 'Bash'}), frozenset({'Grenade', 'Dash', 'ChargeJump'})}, 'GumoHideoutMap': {frozenset({'Mapstone'})}, 'GumoHideoutRightHangingExp': {frozenset({'Glide', 'Wind'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'Glide'}), frozenset({'ChargeJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Glide', 'WallJump'})}, 'GumoHideoutMapstone': {frozenset({'Glide'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'WallJump'}), frozenset({'Climb', 'Bash', 'Grenade'}), frozenset({'DoubleJump'})}, 'GumoHideoutMiniboss': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'GumoHideoutEnergyCell': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'GumoHideoutCrusherExp': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'GumoHideoutCrusherKeystone': {frozenset({'Climb'}), frozenset({'WallJump'})}, 'GumoHideoutRedirectAbilityCell': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump'}), frozenset({'Glide'})}, 'GumoHideoutRedirectPlant': {frozenset({'ChargeFlame', 'WallJump'}), frozenset({'Grenade', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'ChargeFlame'}), frozenset({'Grenade', 'ChargeJump'}), frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'Climb', 'Grenade'})}, 'GumoHideoutRedirectEnergyCell': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'Glide'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'Climb', 'DoubleJump'})}, 'GumoHideoutRedirectExp': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'Glide'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'Climb', 'DoubleJump'})}, 'GroveWaterStompAbilityCell': {frozenset({'Stomp', 'Water'})}, 'HoruFieldsHealthCell': {frozenset({'Stomp'})}, 'HollowGroveTreePlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'HollowGroveTreeAbilityCell': {frozenset({'ChargeJump'}), frozenset({'Glide', 'Wind'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'})}, 'HollowGroveMap': {frozenset({'Mapstone'})}, 'HollowGroveMapPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'SwampTeleporterAbilityCell': {frozenset({'Glide', 'Wind'}), frozenset({'Grenade', 'Bash', 'Glide', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Glide', 'WallJump'}), frozenset({'Climb', 'Glide', 'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Climb', 'Glide'}), frozenset({'Glide', 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'DoorWarpExp': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'HoruFieldsPlant': {frozenset({'Grenade', 'Glide', 'ChargeJump'}), frozenset({'ChargeFlame', 'Glide', 'ChargeJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'ChargeFlame', 'Bash'}), frozenset({'Climb', 'ChargeJump', 'Grenade'}), frozenset({'Climb', 'ChargeJump', 'ChargeFlame'})}, 'HoruFieldsEnergyCell': {frozenset({'Glide', 'Bash'}), frozenset({'Glide', 'ChargeJump', 'DoubleJump'}), frozenset({'Bash', 'DoubleJump'})}, 'HoruFieldsHiddenExp': {frozenset({'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'HoruFieldsAbilityCell': {frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'ChargeJump'})}, 'HoruLavaDrainedLeftExp': {frozenset({'Open', 'Bash'}), frozenset({'Glide', 'Open', 'DoubleJump'}), frozenset({'Open', 'ChargeJump'})}, 'HoruLavaDrainedRightExp': {frozenset({'Glide', 'Open', 'Bash'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide'}), frozenset({'Grenade', 'Open', 'Bash'}), frozenset({'DoubleJump'}), frozenset({'Glide', 'Open', 'ChargeJump'})}, 'HoruL4': {frozenset({'Stomp'})}, 'HoruL4LowerExp': {frozenset({'Grenade', 'Bash', 'Stomp'}), frozenset({'Stomp', 'WallJump'}), frozenset({'Stomp', 'ChargeJump'})}, 'HoruL4ChaseExp': {frozenset({'Free'})}, 'HoruMap': {frozenset({'Mapstone'})}, 'HoruR1EnergyCell': {frozenset({'Climb', 'Glide', 'DoubleJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'Bash', 'Grenade'}), frozenset({'Glide', 'WallJump'})}, 'HoruR3Plant': {frozenset({'Grenade'})}, 'HoruR4DrainedExp': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Glide', 'DoubleJump'})}, 'HoruR4LaserExp': {frozenset({'Bash', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'InnerSwampDrainExp': {frozenset({'Grenade', 'Bash', 'WallJump', 'Water'}), frozenset({'Climb', 'ChargeJump', 'Water'}), frozenset({'Glide'}), frozenset({'Climb', 'Bash', 'Grenade', 'Water'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeFlame', 'Water', 'Glide', 'Stomp', 'WallJump'}), frozenset({'DoubleJump', 'WallJump', 'Water'}), frozenset({'Grenade', 'Glide', 'Water', 'Bash'}), frozenset({'Glide', 'ChargeJump', 'DoubleJump', 'Water'}), frozenset({'Grenade', 'Bash', 'DoubleJump', 'Water'}), frozenset({'DoubleJump'}), frozenset({'Water', 'Grenade', 'Glide', 'Stomp', 'WallJump'}), frozenset({'Climb', 'DoubleJump', 'Water'}), frozenset({'Climb', 'Dash', 'Glide', 'Water'})}, 'HoruL1': {frozenset({'Grenade', 'Glide', 'Stomp', 'Bash'}), frozenset({'Glide', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Bash', 'Stomp', 'DoubleJump'})}, 'HoruL2': {frozenset({'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Stomp', 'Bash'}), frozenset({'Stomp', 'ChargeJump'})}, 'HoruL3': {frozenset({'Glide', 'Bash', 'Stomp', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb', 'Stomp'}), frozenset({'Stomp', 'DoubleJump', 'Bash'})}, 'WallJumpAreaExp': {frozenset({'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'WallJumpAreaEnergyCell': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'LeftGumoHideoutUpperPlant': {frozenset({'ChargeFlame', 'WallJump'}), frozenset({'Climb', 'ChargeFlame'}), frozenset({'Grenade'}), frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'ChargeFlame', 'DoubleJump'})}, 'FarLeftGumoHideoutExp': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Glide', 'DoubleJump'})}, 'LeftSorrowAbilityCell': {frozenset({'Glide', 'Bash'}), frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Glide', 'DoubleJump', 'WallJump'})}, 'LeftSorrowGrenade': {frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Grenade', 'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Grenade', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash', 'Glide'})}, 'LeftSorrowPlant': {frozenset({'ChargeFlame', 'Bash'}), frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'ChargeFlame', 'DoubleJump', 'WallJump'}), frozenset({'Grenade'})}, 'LeftSorrowKeystone1': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide'})}, 'LeftSorrowKeystone2': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide'})}, 'LeftSorrowKeystone3': {frozenset({'Glide'})}, 'LeftSorrowKeystone4': {frozenset({'Glide'})}, 'LeftSorrowEnergyCell': {frozenset({'Glide'})}, 'LostGroveLongSwim': {frozenset({'Water'})}, 'LostGroveHiddenExp': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'LostGroveTeleporter': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}, 'LowerBlackrootAbilityCell': {frozenset({'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'LowerBlackrootLaserAbilityCell': {frozenset({'Grenade', 'Dash', 'Bash'})}, 'LowerBlackrootLaserExp': {frozenset({'Grenade', 'Dash', 'Bash'}), frozenset({'Dash', 'WallJump'}), frozenset({'Dash', 'ChargeJump'}), frozenset({'Climb', 'Dash', 'DoubleJump'})}, 'LowerBlackrootGrenadeThrow': {frozenset({'Grenade', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Grenade', 'ChargeJump'}), frozenset({'Climb', 'Grenade'}), frozenset({'Grenade', 'Glide'}), frozenset({'Grenade', 'DoubleJump'})}, 'LowerGinsoHiddenExp': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'LowerGinsoPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'LeftGumoHideoutLowerPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'GumoHideoutLeftHangingExp': {frozenset({'Glide', 'Wind'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'LeftGumoHideoutExp': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'})}, 'LeftGumoHideoutHealthCell': {frozenset({'ChargeJump', 'WallJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'ChargeJump'})}, 'LeftGumoHideoutSwim': {frozenset({'Water'})}, 'SorrowSpikeKeystone': {frozenset({'Glide'}), frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Climb', 'Bash', 'DoubleJump'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'})}, 'SorrowHiddenKeystone': {frozenset({'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump'}), frozenset({'Glide'})}, 'SorrowHealthCell': {frozenset({'Glide', 'ChargeJump', 'Bash'})}, 'SorrowLowerLeftKeystone': {frozenset({'Glide'})}, 'SpiritCavernsKeystone2': {frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'Bash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'SpiritCavernsAbilityCell': {frozenset({'ChargeJump'}), frozenset({'Bash'})}, 'LowerValleyMapstone': {frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'Bash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'KuroPerchExp': {frozenset({'Glide', 'Wind'}), frozenset({'Bash', 'OpenWorld'}), frozenset({'Glide'}), frozenset({'Bash'}), frozenset({'Glide', 'OpenWorld'}), frozenset({'Stomp'})}, 'ValleyMainPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'MistyGrenade': {frozenset({'Grenade'})}, 'MistyEntranceStompExp': {frozenset({'Stomp'})}, 'MistyEntranceTreeExp': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'MistyPostClimbAboveSpikePit': {frozenset({'Glide', 'Bash', 'WallJump'}), frozenset({'Climb', 'Bash', 'Glide'})}, 'GumonSeal': {frozenset({'Climb'}), frozenset({'DoubleJump'}), frozenset({'Bash'}), frozenset({'WallJump'})}, 'MistyFrogNookExp': {frozenset({'Grenade', 'Bash', 'DoubleJump'}), frozenset({'Glide', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Glide', 'DoubleJump'})}, 'MistyPostClimbSpikeCave': {frozenset({'Glide', 'Bash', 'DoubleJump'})}, 'MistyAbilityCell': {frozenset({'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'MistyMortarCorridorUpperExp': {frozenset({'Glide', 'Bash'})}, 'MistyMortarCorridorHiddenExp': {frozenset({'Glide'})}, 'MistyPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'GrottoEnergyDoorSwim': {frozenset({('EC', 2), 'Water'})}, 'GrottoEnergyDoorHealthCell': {frozenset({('EC', 2), 'ChargeJump'}), frozenset({('EC', 2), 'Bash', 'Grenade'}), frozenset({('EC', 2), 'DoubleJump', 'WallJump'})}, 'AboveGrottoTeleporterExp': {frozenset({'Grenade', 'Bash'}), frozenset({'ChargeJump'}), frozenset({'Climb', 'Bash'}), frozenset({'DoubleJump'}), frozenset({'Bash', 'WallJump'})}, 'LeftGrottoTeleporterExp': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'})}, 'BelowGrottoTeleporterHealthCell': {frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'DoubleJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump'})}, 'BelowGrottoTeleporterPlant': {frozenset({'ChargeFlame', 'Glide'}), frozenset({'Grenade', 'Glide'}), frozenset({'ChargeFlame', 'DoubleJump'}), frozenset({'Grenade', 'DoubleJump'})}, 'MoonGrottoStompPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'GrottoSwampDrainAccessExp': {frozenset({'ChargeJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Glide', 'Bash', 'DoubleJump'})}, 'GrottoSwampDrainAccessPlant': {frozenset({'Grenade', 'Stomp'}), frozenset({'ChargeFlame', 'Stomp', 'Climb', 'ChargeJump'}), frozenset({'ChargeFlame', 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'ChargeFlame', 'Stomp', 'ChargeJump', 'Glide'}), frozenset({'ChargeFlame', 'Stomp', 'ChargeJump', 'DoubleJump'})}, 'OuterSwampStompExp': {frozenset({'Glide', 'Wind'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'Bash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'OuterSwampHealthCell': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'})}, 'OuterSwampMortarPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'OuterSwampGrenadeExp': {frozenset({'Grenade', 'ChargeJump'}), frozenset({'Grenade', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Grenade', 'Climb'})}, 'OutsideForlornTreeExp': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'OutsideForlornWaterExp': {frozenset({'Water'})}, 'OutsideForlornCliffExp': {frozenset({'Glide'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'Dash'}), frozenset({'Bash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'HoruR1HangingExp': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Glide', 'DoubleJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'})}, 'HoruR2': {frozenset({'ChargeJump', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'Grenade', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump', 'Bash'})}, 'RightForlornPlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'StompAreaExp': {frozenset({'Bash'}), frozenset({'Stomp'})}, 'StompAreaRoofExp': {frozenset({'ChargeJump'})}, 'StompAreaGrenadeExp': {frozenset({'Grenade', 'Bash', 'Glide', 'Water'}), frozenset({'Climb', 'Water', 'Grenade', 'Glide', 'ChargeJump'}), frozenset({'Grenade', 'Stomp', 'ChargeJump', 'Water'}), frozenset({'Grenade', 'Bash', 'Stomp', 'Water'})}, 'SorrowMapstone': {frozenset({'Bash'})}, 'SorrowMap': {frozenset({'Bash', 'Mapstone'}), frozenset({'Stomp', 'Mapstone'})}, 'SpiderSacHealthCell': {frozenset({'ChargeFlame', 'WallJump'}), frozenset({'Grenade', 'WallJump'}), frozenset({'Grenade', 'Climb', 'ChargeJump'}), frozenset({'ChargeFlame', 'DoubleJump'}), frozenset({'ChargeFlame', 'Climb', 'ChargeJump'}), frozenset({'Grenade', 'DoubleJump'})}, 'SpiderSacEnergyDoor': {frozenset({('EC', 4)})}, 'SpiderSacGrenadeDoor': {frozenset({'Grenade', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'GroveSpiderWaterSwim': {frozenset({'Water'})}, 'GroveAboveSpiderWaterExp': {frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'DoubleJump'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'})}, 'GroveAboveSpiderWaterHealthCell': {frozenset({'Grenade', 'Bash'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Glide', 'Bash'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'})}, 'GroveAboveSpiderWaterEnergyCell': {frozenset({'Grenade', 'Climb', 'ChargeJump', 'DoubleJump'})}, 'AboveChargeFlameTreeExp': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'})}, 'GladesGrenadePool': {frozenset({'Grenade', 'Water'})}, 'GladesGrenadeTree': {frozenset({'Grenade', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'GladesMainPool': {frozenset({'Water'})}, 'GladesMainPoolDeep': {frozenset({'Water'})}, 'FronkeyWalkRoof': {frozenset({'ChargeJump'}), frozenset({'Glide', 'Wind'}), frozenset({'Grenade', 'Bash'})}, 'SunstonePlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'SwampMap': {frozenset({'Mapstone'})}, 'SwampEntranceSwim': {frozenset({'Water'})}, 'SwampEntrancePlant': {frozenset({'ChargeFlame', 'WallJump'}), frozenset({'Grenade', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'ChargeFlame', 'Climb'}), frozenset({'Grenade', 'ChargeJump'}), frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'Grenade', 'Climb'})}, 'InnerSwampStompExp': {frozenset({'Stomp', 'Water'})}, 'InnerSwampSwimRightKeystone': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Glide'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'Bash'}), frozenset({'ChargeJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'Glide', 'WallJump'})}, 'TopGinsoLeftLowerExp': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Glide', 'Bash'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Climb', 'DoubleJump'})}, 'TopGinsoLeftUpperExp': {frozenset({'ChargeJump'}), frozenset({'Bash'})}, 'TopGinsoRightPlant': {frozenset({'ChargeFlame', 'Bash'}), frozenset({'Grenade', 'ChargeJump'}), frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'UpperGinsoRedirectLowerExp': {frozenset({'Bash', 'GinsoKey'}), frozenset({'Stomp', 'GinsoKey'})}, 'UpperGinsoRedirectUpperExp': {frozenset({'Bash', 'GinsoKey'}), frozenset({'Stomp', 'GinsoKey'})}, 'UpperGinsoLowerKeystone': {frozenset({'Glide', 'Bash', 'GinsoKey'}), frozenset({'Bash', 'GinsoKey', 'DoubleJump'})}, 'UpperGinsoRightKeystone': {frozenset({'Glide', 'Bash', 'GinsoKey'}), frozenset({'Bash', 'GinsoKey', 'DoubleJump'})}, 'UpperGinsoUpperRightKeystone': {frozenset({'Bash', 'GinsoKey', 'DoubleJump'})}, 'UpperGinsoUpperLeftKeystone': {frozenset({'Bash', 'GinsoKey', 'DoubleJump'})}, 'UpperGinsoEnergyCell': {frozenset({'Bash', 'GinsoKey'}), frozenset({'Stomp', 'GinsoKey'})}, 'GrottoLasersRoofExp': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'})}, 'LeftGladesExp': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}, 'UpperSorrowRightKeystone': {frozenset({'Glide'})}, 'UpperSorrowFarRightKeystone': {frozenset({'Glide'})}, 'UpperSorrowLeftKeystone': {frozenset({'Glide'})}, 'UpperSorrowSpikeExp': {frozenset({'Glide'})}, 'UpperSorrowFarLeftKeystone': {frozenset({'Glide'})}, 'SpiritCavernsTopLeftKeystone': {frozenset({'Climb', 'DoubleJump'}), frozenset({'WallJump'}), frozenset({'Climb', 'Glide'})}, 'ValleyThreeBirdAbilityCell': {frozenset({'Glide', 'Wind'}), frozenset({'Glide', 'OpenWorld', 'Wind'}), frozenset({'Bash', 'OpenWorld'}), frozenset({'ChargeJump', 'OpenWorld'}), frozenset({'Bash'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'Climb', 'Glide', 'ChargeJump'})}, 'ValleyEntryGrenadeLongSwim': {frozenset({'Grenade', 'Water'})}, 'ValleyEntryTreePlant': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'ValleyForlornApproachGrenade': {frozenset({'Grenade'})}, 'ValleyMap': {frozenset({'Bash', 'Mapstone'})}, 'ValleyRightSwimExp': {frozenset({'Water'})}, 'ValleyRightBirdStompCell': {frozenset({'Climb', 'ChargeJump'})}, 'ValleyRightFastStomplessCell': {frozenset({'Glide', 'Wind'})}, 'ValleyRightExp': {frozenset({'Bash'})}, 'ValleyMainFACS': {frozenset({'Climb', 'ChargeJump'})}, 'WilhelmExp': {frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash', 'Climb'})}}, 'dbash': {'AboveChargeJumpAbilityCell': {frozenset({'Bash'})}, 'GrenadeSkillTree': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'ChargeJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'Bash', 'DoubleJump'})}, 'GrenadeAreaExp': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'ChargeJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'Bash', 'DoubleJump'})}, 'HollowGroveTreeAbilityCell': {frozenset({'Bash'})}, 'HoruFieldsEnergyCell': {frozenset({'Bash'})}, 'HoruLavaDrainedRightExp': {frozenset({'Open', 'Bash'}), frozenset({'Bash'})}, 'HoruR4DrainedExp': {frozenset({'Bash'})}, 'HoruR4LaserExp': {frozenset({'Bash'})}, 'LeftSorrowGrenade': {frozenset({'Grenade', 'Bash'})}, 'GumoHideoutLeftHangingExp': {frozenset({'Bash'})}, 'GumoHideoutRightHangingExp': {frozenset({'Bash'})}, 'LeftGumoHideoutExp': {frozenset({'Bash'})}, 'LeftGumoHideoutHealthCell': {frozenset({'Bash'})}, 'SorrowSpikeKeystone': {frozenset({'Bash'})}, 'SorrowHiddenKeystone': {frozenset({'Bash'})}, 'SorrowHealthCell': {frozenset({'Bash'})}, 'AboveGrottoTeleporterExp': {frozenset({'Bash'})}, 'GrottoSwampDrainAccessExp': {frozenset({'Bash'})}, 'StompAreaRoofExp': {frozenset({'Bash'})}, 'StompAreaGrenadeExp': {frozenset({'Grenade', 'Bash', 'Water'})}, 'GroveAboveSpiderWaterExp': {frozenset({'Bash'})}, 'GroveAboveSpiderWaterHealthCell': {frozenset({'Bash'})}, 'ValleyMainFACS': {frozenset({'Bash'})}, 'WilhelmExp': {frozenset({'Bash'})}}, 'expert-abilities': {'AboveChargeJumpAbilityCell': {frozenset({'Dash', ('AC', 6)})}, 'BashAreaExp': {frozenset({('AC', 6), 'Dash', 'GinsoKey'}), frozenset({('AC', 6), 'Dash', 'GinsoKey', 'DoubleJump', 'WallJump'})}, 'ChargeFlameAreaPlant': {frozenset({'Dash', ('AC', 6)})}, 'DashAreaPlant': {frozenset({'Dash', ('AC', 6)})}, 'DeathGauntletRoofPlant': {frozenset({'Dash', ('AC', 6)})}, 'DoubleJumpAreaExp': {frozenset({'Dash', ('AC', 6), ('EC', 1)})}, 'ForlornHiddenSpiderExp': {frozenset({'ForlornKey', ('AC', 6), 'Dash'})}, 'ForlornPlant': {frozenset({'Dash', ('AC', 6)})}, 'ForlornKeystone3': {frozenset({'ForlornKey', ('AC', 6), 'Dash', 'WallJump'}), frozenset({'Climb', 'ForlornKey', ('AC', 6), 'Dash'})}, 'GladesLaser': {frozenset({'Dash', ('AC', 6)})}, 'GladesLaserGrenade': {frozenset({('AC', 6), ('EC', 1), 'Dash', 'Grenade', 'DoubleJump', 'WallJump'}), frozenset({('AC', 6), ('EC', 1), 'Climb', 'Dash', 'Grenade', 'Glide', 'ChargeJump'}), frozenset({('AC', 6), ('EC', 2), 'Climb', 'Dash', 'Grenade', 'ChargeJump'})}, 'GrenadeSkillTree': {frozenset({'Dash', ('AC', 6)})}, 'GrenadeAreaExp': {frozenset({'Dash', ('AC', 6)})}, 'GrenadeAreaAbilityCell': {frozenset({'Grenade', 'Dash', ('AC', 6)})}, 'GumoHideoutRedirectPlant': {frozenset({'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6)}), frozenset({('AC', 6), 'Dash', 'ChargeJump'})}, 'HollowGroveTreePlant': {frozenset({'Dash', ('AC', 6)})}, 'HollowGroveTreeAbilityCell': {frozenset({'Dash', ('AC', 6)})}, 'HollowGroveMapPlant': {frozenset({'Dash', ('AC', 6)})}, 'SwampTeleporterAbilityCell': {frozenset({'Dash', ('AC', 6)})}, 'HoruFieldsPlant': {frozenset({'Dash', ('AC', 6), ('EC', 3)})}, 'HoruFieldsEnergyCell': {frozenset({('EC', 2), 'Dash', ('AC', 6)})}, 'HoruFieldsHiddenExp': {frozenset({'Dash', ('AC', 6)})}, 'HoruLavaDrainedLeftExp': {frozenset({'Open', ('AC', 6), 'Dash'})}, 'HoruLavaDrainedRightExp': {frozenset({'Open', ('AC', 6), 'Dash'})}, 'HoruL4LowerExp': {frozenset({('EC', 2), 'Dash', ('AC', 6)}), frozenset({'Dash', 'Stomp', ('AC', 3)})}, 'HoruR3Plant': {frozenset({'Dash', ('AC', 6)})}, 'HoruR4DrainedExp': {frozenset({'Dash', ('AC', 6), ('EC', 1)}), frozenset({'Dash', ('AC', 6)})}, 'HoruR4LaserExp': {frozenset({('AC', 6), 'Dash', 'ChargeJump', ('EC', 2)})}, 'HoruL1': {frozenset({'Dash', 'Stomp', ('AC', 3), 'Bash'}), frozenset({('AC', 6), 'Dash', ('EC', 2), 'Stomp', 'DoubleJump'}), frozenset({('AC', 6), 'Dash', 'Stomp', ('EC', 3)})}, 'HoruL2': {frozenset({'Stomp', ('AC', 6), 'Dash', ('EC', 1)}), frozenset({'Climb', 'Stomp', 'Dash', ('AC', 3)})}, 'HoruL3': {frozenset({('AC', 6), 'Climb', 'Dash', ('EC', 2), 'ChargeJump'})}, 'LeftGumoHideoutUpperPlant': {frozenset({'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6)}), frozenset({('AC', 6), 'Dash', 'ChargeJump'})}, 'LeftSorrowPlant': {frozenset({'Dash', ('AC', 6)})}, 'LowerBlackrootAbilityCell': {frozenset({'Dash', ('AC', 6)})}, 'LowerBlackrootLaserExp': {frozenset({'Dash', ('AC', 6)})}, 'LowerGinsoPlant': {frozenset({'Dash', ('AC', 6)})}, 'LeftGumoHideoutLowerPlant': {frozenset({'Dash', ('AC', 6)})}, 'LeftGumoHideoutHealthCell': {frozenset({'Dash', ('AC', 6)})}, 'SorrowSpikeKeystone': {frozenset({'Dash', ('AC', 6)})}, 'SorrowHiddenKeystone': {frozenset({'Dash', ('AC', 6)})}, 'SorrowLowerLeftKeystone': {frozenset({'Dash', ('AC', 6), 'Bash'}), frozenset({('EC', 2), 'Dash', ('AC', 6)}), frozenset({'Dash', ('AC', 6), 'DoubleJump'}), frozenset({('AC', 6), 'Dash', 'Stomp'})}, 'SpiritCavernsKeystone2': {frozenset({'Dash', ('AC', 6)})}, 'SpiritCavernsAbilityCell': {frozenset({'Dash', ('AC', 6)})}, 'LowerValleyMapstone': {frozenset({'Dash', ('AC', 6)})}, 'KuroPerchExp': {frozenset({'Dash', ('AC', 6), 'OpenWorld'}), frozenset({'Dash', ('AC', 3), 'ChargeJump', 'WallJump'}), frozenset({'Dash', ('AC', 6)})}, 'ValleyMainPlant': {frozenset({'Dash', ('AC', 6)})}, 'MistyEntranceTreeExp': {frozenset({'Dash', ('AC', 6)})}, 'MistyFrogNookExp': {frozenset({'Dash', ('AC', 6)})}, 'MistyMortarCorridorUpperExp': {frozenset({'Dash', ('AC', 6)})}, 'MistyMortarCorridorHiddenExp': {frozenset({'Dash', ('AC', 6), 'DoubleJump'})}, 'MistyPlant': {frozenset({'Dash', ('AC', 6)})}, 'GrottoEnergyDoorHealthCell': {frozenset({('EC', 2), 'Dash', ('AC', 6)})}, 'AboveGrottoTeleporterExp': {frozenset({'Dash', ('AC', 6)})}, 'BelowGrottoTeleporterHealthCell': {frozenset({'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6)}), frozenset({('AC', 6), 'Dash', 'ChargeJump'})}, 'BelowGrottoTeleporterPlant': {frozenset({'Dash', ('AC', 6)})}, 'MoonGrottoStompPlant': {frozenset({'Dash', ('AC', 6)})}, 'GrottoSwampDrainAccessExp': {frozenset({'Dash', ('AC', 6)})}, 'GrottoSwampDrainAccessPlant': {frozenset({'Dash', ('AC', 6)})}, 'OuterSwampStompExp': {frozenset({'Dash', ('AC', 6)})}, 'OuterSwampHealthCell': {frozenset({'Dash', ('AC', 6)})}, 'OuterSwampMortarPlant': {frozenset({'Dash', ('AC', 6)})}, 'RightForlornPlant': {frozenset({'Dash', ('AC', 6)})}, 'StompAreaExp': {frozenset({'Dash', ('AC', 6), ('EC', 1)})}, 'StompAreaGrenadeExp': {frozenset({('AC', 6), 'Dash', 'Water', 'Grenade', 'Stomp'}), frozenset({('AC', 6), 'Dash', ('EC', 3), 'Water', 'Grenade'})}, 'SorrowMapstone': {frozenset({'Dash', ('AC', 6)})}, 'AboveChargeFlameTreeExp': {frozenset({'Dash', ('AC', 6)})}, 'SpiderSacHealthCell': {frozenset({'Dash', ('AC', 6)})}, 'SpiderSacGrenadeDoor': {frozenset({'Grenade', 'Dash', ('AC', 6)})}, 'GroveAboveSpiderWaterExp': {frozenset({'Dash', ('AC', 6)})}, 'GroveAboveSpiderWaterHealthCell': {frozenset({'Dash', ('AC', 6)})}, 'GroveAboveSpiderWaterEnergyCell': {frozenset({'Grenade', 'Dash', ('AC', 6)})}, 'GladesGrenadeTree': {frozenset({'Grenade', 'Dash', ('AC', 6)})}, 'FronkeyWalkRoof': {frozenset({'Dash', ('AC', 6)})}, 'SunstonePlant': {frozenset({'Dash', ('AC', 6)})}, 'InnerSwampDrainExp': {frozenset({'Climb', 'Dash', 'Water', 'Grenade', 'Stomp', ('AC', 3)}), frozenset({'Climb', 'Dash', ('AC', 6), 'Water'}), frozenset({'ChargeFlame', 'Climb', 'Dash', 'Water', 'Stomp', ('AC', 3)}), frozenset({'Dash', ('AC', 3), 'WallJump', 'Water'})}, 'SwampEntrancePlant': {frozenset({'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6)}), frozenset({('AC', 6), 'Dash', 'ChargeJump'})}, 'InnerSwampStompExp': {frozenset({'Dash', 'ChargeJump', ('AC', 3), 'Water'})}, 'TopGinsoLeftLowerExp': {frozenset({'Dash', ('AC', 6)})}, 'TopGinsoLeftUpperExp': {frozenset({'Dash', ('AC', 6)})}, 'TopGinsoRightPlant': {frozenset({'Dash', ('AC', 6)})}, 'UpperGinsoRedirectLowerExp': {frozenset({'Dash', ('AC', 3), 'GinsoKey', 'ChargeJump'})}, 'UpperGinsoRedirectUpperExp': {frozenset({'Dash', ('AC', 3), 'GinsoKey', 'ChargeJump'})}, 'UpperGinsoLowerKeystone': {frozenset({('AC', 6), 'Dash', 'GinsoKey'})}, 'GrottoLasersRoofExp': {frozenset({'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6)})}, 'UpperSorrowLeftKeystone': {frozenset({('EC', 2), 'Dash', ('AC', 6)})}, 'ValleyThreeBirdAbilityCell': {frozenset({'Dash', ('AC', 6)}), frozenset({'Dash', ('AC', 6), 'OpenWorld'})}, 'ValleyEntryTreePlant': {frozenset({'Dash', ('AC', 6)})}, 'ValleyMap': {frozenset({'Grenade', 'Dash', 'Mapstone', ('AC', 3)}), frozenset({'ChargeFlame', 'Dash', 'Mapstone', ('AC', 3)})}, 'ValleyMainFACS': {frozenset({'WallJump', 'Dash', 'ChargeJump', 'DoubleJump', ('AC', 3)}), frozenset({'Wind', 'Dash', 'Glide', ('AC', 3), 'ChargeJump', 'WallJump'})}}, 'master-abilities': {'BashAreaExp': {frozenset({('AC', 12), 'GinsoKey', 'DoubleJump'})}, 'ForlornHiddenSpiderExp': {frozenset({'ForlornKey', ('AC', 12), 'DoubleJump'})}, 'ForlornKeystone2': {frozenset({'ForlornKey', ('AC', 12), 'DoubleJump'})}, 'ForlornEntranceExp': {frozenset({'ForlornKey', ('AC', 12), 'DoubleJump'})}, 'GumoHideoutRedirectPlant': {frozenset({'Dash', ('AC', 6), 'DoubleJump'})}, 'SwampTeleporterAbilityCell': {frozenset({('AC', 12), 'ChargeJump', 'DoubleJump'})}, 'HoruFieldsAbilityCell': {frozenset({'Glide', ('AC', 12), 'DoubleJump'}), frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}, 'HoruLavaDrainedLeftExp': {frozenset({'Open', ('AC', 12), 'DoubleJump'})}, 'HoruLavaDrainedRightExp': {frozenset({'Open', 'ChargeJump', 'DoubleJump', ('AC', 12)}), frozenset({'Glide', 'Open', ('AC', 12), 'DoubleJump'})}, 'HoruR4DrainedExp': {frozenset({('AC', 12), 'DoubleJump'})}, 'HoruL1': {frozenset({('AC', 6), ('EC', 1), 'Dash', 'Stomp', 'DoubleJump'})}, 'HoruL2': {frozenset({'Stomp', 'DoubleJump', ('AC', 3), 'Dash'}), frozenset({'Stomp', ('AC', 12), 'DoubleJump'})}, 'HoruL3': {frozenset({('AC', 6), 'Dash', ('EC', 6), 'DoubleJump', 'WallJump'}), frozenset({('AC', 6), 'Dash', ('EC', 2), 'Stomp', 'DoubleJump'}), frozenset({('AC', 6), 'Dash', 'Stomp', ('EC', 3)}), frozenset({('AC', 6), ('EC', 4), 'Dash', 'Glide', 'DoubleJump'}), frozenset({'Dash', ('AC', 6), ('EC', 7)}), frozenset({'Glide', 'Dash', ('AC', 6), ('EC', 6)}), frozenset({('AC', 12), 'Climb', 'Dash', 'Glide', 'ChargeJump', 'DoubleJump'}), frozenset({'Bash', ('AC', 6), 'Dash', ('EC', 1)}), frozenset({('AC', 6), 'Climb', 'Dash', ('EC', 6), 'DoubleJump'})}, 'LeftSorrowAbilityCell': {frozenset({'Climb', ('AC', 12), 'DoubleJump'}), frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}, 'LowerGinsoHiddenExp': {frozenset({'Climb', 'Dash', ('AC', 6)}), frozenset({'Dash', ('AC', 6), 'WallJump'})}, 'LeftGumoHideoutExp': {frozenset({('AC', 12), 'DoubleJump'})}, 'LeftGumoHideoutHealthCell': {frozenset({('AC', 12), 'DoubleJump'})}, 'SorrowSpikeKeystone': {frozenset({'Climb', ('AC', 12), 'DoubleJump'}), frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}, 'SorrowLowerLeftKeystone': {frozenset({('AC', 12), 'DoubleJump'})}, 'SpiritCavernsAbilityCell': {frozenset({('AC', 12), 'DoubleJump'})}, 'MistyFrogNookExp': {frozenset({('AC', 12), 'DoubleJump'})}, 'MistyMortarCorridorUpperExp': {frozenset({('AC', 12), 'DoubleJump'})}, 'MistyMortarCorridorHiddenExp': {frozenset({('AC', 12), 'DoubleJump'}), frozenset({'Dash', ('AC', 6)})}, 'BelowGrottoTeleporterHealthCell': {frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}, 'OuterSwampHealthCell': {frozenset({('AC', 12), 'DoubleJump'})}, 'SpiderSacHealthCell': {frozenset({'Dash', ('AC', 6), 'DoubleJump'})}, 'TopGinsoLeftUpperExp': {frozenset({('AC', 12), 'DoubleJump'})}, 'TopGinsoRightPlant': {frozenset({'ChargeFlame', ('AC', 12), 'DoubleJump'}), frozenset({'Grenade', ('AC', 12), 'DoubleJump'})}, 'UpperSorrowRightKeystone': {frozenset({('AC', 6), 'Dash', 'Grenade', 'Bash', 'DoubleJump'})}, 'UpperSorrowFarRightKeystone': {frozenset({('AC', 12), 'Dash', 'Grenade', 'Bash', 'DoubleJump'})}, 'ValleyThreeBirdAbilityCell': {frozenset({('AC', 12), 'DoubleJump'})}, 'WilhelmExp': {frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}, 'KuroPerchExp': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'master-core': {'DashAreaRoofExp': {frozenset({'DoubleJump'}), frozenset({'Bash'})}, 'DoubleJumpAreaExp': {frozenset({'DoubleJump'})}, 'ForlornKeystone4': {frozenset({'Grenade', 'ForlornKey', 'DoubleJump', 'Bash'}), frozenset({'ForlornKey', 'ChargeJump', 'DoubleJump'})}, 'LowerGinsoKeystone3': {frozenset({'DoubleJump'})}, 'LowerGinsoKeystone4': {frozenset({'DoubleJump'})}, 'GladesLaserGrenade': {frozenset({'Grenade', 'Bash', 'DoubleJump'})}, 'GrenadeSkillTree': {frozenset({'ChargeJump'})}, 'GrenadeAreaAbilityCell': {frozenset({'Grenade', 'ChargeJump'})}, 'GumoHideoutMiniboss': {frozenset({'DoubleJump'})}, 'GumoHideoutEnergyCell': {frozenset({'Climb', 'Dash'}), frozenset({'Dash', 'WallJump'}), frozenset({'DoubleJump'})}, 'HollowGroveTreeAbilityCell': {frozenset({'Stomp', 'DoubleJump'})}, 'SwampTeleporterAbilityCell': {frozenset({'Glide', 'ChargeJump', 'DoubleJump'})}, 'DoorWarpExp': {frozenset({'DoubleJump'})}, 'HoruFieldsPlant': {frozenset({'Grenade', 'Glide'}), frozenset({'Grenade', 'Dash'}), frozenset({'Grenade', 'DoubleJump'})}, 'HoruFieldsAbilityCell': {frozenset({'Bash'})}, 'HoruL4LowerExp': {frozenset({'Dash', 'Stomp'})}, 'HoruR1EnergyCell': {frozenset({'DoubleJump'})}, 'HoruL2': {frozenset({'Glide', 'Stomp', 'DoubleJump'})}, 'HoruL3': {frozenset({'ChargeFlame', 'Bash'}), frozenset({'Bash', 'Stomp'})}, 'WallJumpAreaEnergyCell': {frozenset({'DoubleJump'})}, 'FarLeftGumoHideoutExp': {frozenset({'Bash'})}, 'LeftSorrowAbilityCell': {frozenset({'Bash'})}, 'LeftSorrowKeystone2': {frozenset({'Bash'})}, 'LeftSorrowKeystone3': {frozenset({'Bash'})}, 'LeftSorrowKeystone4': {frozenset({'Bash'})}, 'LeftSorrowEnergyCell': {frozenset({'Bash'})}, 'LowerBlackrootAbilityCell': {frozenset({'DoubleJump'})}, 'LowerGinsoHiddenExp': {frozenset({'DoubleJump'})}, 'SorrowSpikeKeystone': {frozenset({'ChargeJump', 'WallJump'}), frozenset({'Climb', 'ChargeJump'})}, 'SorrowLowerLeftKeystone': {frozenset({'Bash'})}, 'SpiritCavernsKeystone2': {frozenset({'Free'})}, 'LowerValleyMapstone': {frozenset({'Free'})}, 'MistyEntranceStompExp': {frozenset({('EC', 2), 'Dash', ('AC', 6)}), frozenset({'ChargeFlame', 'Dash'})}, 'MistyEntranceTreeExp': {frozenset({'DoubleJump'}), frozenset({'WallJump'})}, 'MistyPostClimbAboveSpikePit': {frozenset({'Bash'})}, 'MistyMortarCorridorUpperExp': {frozenset({'Bash'})}, 'MistyMortarCorridorHiddenExp': {frozenset({'Bash'})}, 'OuterSwampHealthCell': {frozenset({'Glide', 'DoubleJump'}), frozenset({'Bash'})}, 'OutsideForlornTreeExp': {frozenset({'Bash'})}, 'HoruR1HangingExp': {frozenset({'Glide', 'WallJump'})}, 'HoruR2': {frozenset({'Stomp', 'DoubleJump'})}, 'HoruR4DrainedExp': {frozenset({'Bash'})}, 'StompAreaExp': {frozenset({'Grenade'})}, 'AboveChargeFlameTreeExp': {frozenset({'Glide', 'Bash', 'DoubleJump'}), frozenset({'Stomp', 'DoubleJump'}), frozenset({'ChargeFlame', 'DoubleJump'}), frozenset({'Grenade', 'DoubleJump'})}, 'SpiderSacHealthCell': {frozenset({'ChargeFlame', 'DoubleJump'}), frozenset({'Grenade', 'DoubleJump'})}, 'SpiderSacEnergyDoor': {frozenset({('EC', 2)})}, 'InnerSwampDrainExp': {frozenset({'DoubleJump', 'Water'})}, 'TopGinsoLeftLowerExp': {frozenset({'DoubleJump'})}, 'UpperGinsoRedirectLowerExp': {frozenset({'Grenade', 'GinsoKey'})}, 'GrottoLasersRoofExp': {frozenset({'Glide', 'DoubleJump'}), frozenset({'Bash'})}, 'SpiritCavernsTopLeftKeystone': {frozenset({'DoubleJump'}), frozenset({'Climb'})}, 'KuroPerchExp': {frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Bash'}), frozenset({'Glide', 'ChargeJump'})}}, 'glitched': {'BlackrootBoulderExp': {frozenset({'Free'})}, 'GroveWaterStompAbilityCell': {frozenset({'Bash'})}, 'SpiderSacEnergyDoor': {frozenset({('EC', 3)})}, 'GladesGrenadeTree': {frozenset({'Grenade'})}, 'KuroPerchExp': {frozenset({'ChargeJump'})}}, 'standard-abilities': {'BlackrootMap': {frozenset({'Climb', 'Dash', 'Mapstone', ('AC', 3)})}, 'DoubleJumpSkillTree': {frozenset({'Dash', ('AC', 3)})}, 'DoubleJumpAreaExp': {frozenset({'Dash', 'ChargeJump', ('AC', 3)}), frozenset({'Bash', 'Dash', ('AC', 3)})}, 'ForlornKeystone3': {frozenset({'ForlornKey', 'ChargeJump', 'Dash', ('AC', 3)})}, 'LowerGinsoKeystone1': {frozenset({'Dash', ('AC', 3)})}, 'LowerGinsoKeystone2': {frozenset({'Dash', ('AC', 3)})}, 'GladesLaserGrenade': {frozenset({'Dash', 'Grenade', 'Glide', ('AC', 3), 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Dash', 'Grenade', 'ChargeJump', 'DoubleJump', ('AC', 3)})}, 'GumoHideoutMapstone': {frozenset({'Dash', ('AC', 3)})}, 'GumoHideoutRedirectAbilityCell': {frozenset({'Dash', ('AC', 3)})}, 'HollowGroveTreeAbilityCell': {frozenset({'WallJump', 'Dash', 'Glide', 'Stomp', ('AC', 3)}), frozenset({'Climb', 'Dash', 'Glide', 'Stomp', ('AC', 3)})}, 'SwampTeleporterAbilityCell': {frozenset({'Dash', 'Glide', 'ChargeJump', 'DoubleJump', ('AC', 3)})}, 'HoruFieldsPlant': {frozenset({'Dash', 'Grenade', 'ChargeJump', 'DoubleJump', ('AC', 3)}), frozenset({'ChargeFlame', 'Dash', 'ChargeJump', 'DoubleJump', ('AC', 3)})}, 'HoruFieldsEnergyCell': {frozenset({'Dash', 'ChargeJump', 'DoubleJump', ('AC', 3)}), frozenset({'Glide', 'ChargeJump', 'Dash', ('AC', 3)})}, 'HoruLavaDrainedLeftExp': {frozenset({'Glide', 'Open', 'Dash', ('AC', 3)})}, 'HoruR1EnergyCell': {frozenset({'Dash', ('AC', 3), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 3)})}, 'HoruR4DrainedExp': {frozenset({'Dash', 'DoubleJump', ('AC', 3)}), frozenset({'Glide', 'Dash', ('AC', 3)})}, 'InnerSwampDrainExp': {frozenset({'Dash', ('AC', 3)})}, 'HoruL1': {frozenset({'WallJump', 'Dash', 'Stomp', ('AC', 3), 'Bash'}), frozenset({'Dash', 'Grenade', 'Stomp', ('AC', 3), 'Bash'}), frozenset({'Dash', 'Stomp', 'ChargeJump', ('AC', 3), 'Bash'}), frozenset({'Climb', 'Dash', 'Stomp', ('AC', 3), 'Bash'})}, 'HoruL2': {frozenset({'Stomp', ('AC', 3), 'Dash', 'WallJump'}), frozenset({'Climb', 'Dash', 'Stomp', 'DoubleJump', ('AC', 3)})}, 'HoruL3': {frozenset({'Bash', 'Stomp', 'Dash', ('AC', 3)}), frozenset({'ChargeFlame', 'Bash', 'Dash', ('AC', 3)})}, 'FarLeftGumoHideoutExp': {frozenset({'Dash', ('AC', 3), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 3)})}, 'GumoHideoutLeftHangingExp': {frozenset({'Dash', ('AC', 3)})}, 'MistyFrogNookExp': {frozenset({'Dash', ('AC', 3), 'DoubleJump', 'WallJump'})}, 'GrottoEnergyDoorHealthCell': {frozenset({('EC', 2), 'Climb', 'Dash', ('AC', 3)})}, 'BelowGrottoTeleporterPlant': {frozenset({'Grenade', 'Dash', ('AC', 3)}), frozenset({'ChargeFlame', 'Dash', ('AC', 3)})}, 'GrottoSwampDrainAccessPlant': {frozenset({'ChargeFlame', 'Dash', ('AC', 3), 'WallJump'}), frozenset({'ChargeFlame', 'Glide', 'Dash', ('AC', 3)})}, 'HoruR1HangingExp': {frozenset({'Dash', ('AC', 3), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 3)})}, 'HoruLavaDrainedRightExp': {frozenset({'Dash', ('AC', 3)})}, 'AboveChargeFlameTreeExp': {frozenset({'Dash', ('AC', 3), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 3)})}, 'UpperGinsoLowerKeystone': {frozenset({'Dash', ('AC', 3), 'GinsoKey', 'ChargeJump'})}, 'UpperGinsoRightKeystone': {frozenset({'Dash', ('AC', 3), 'GinsoKey', 'ChargeJump'})}, 'UpperGinsoUpperLeftKeystone': {frozenset({'Dash', ('AC', 3), 'GinsoKey', 'ChargeJump'})}}, 'expert-core': {'BlackrootMap': {frozenset({'Climb', 'Mapstone'})}, 'DashAreaMapstone': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'DoubleJumpSkillTree': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'})}, 'DoubleJumpAreaExp': {frozenset({'Climb', 'Bash', 'Water'}), frozenset({'Grenade', 'Bash'})}, 'ForlornHiddenSpiderExp': {frozenset({'ForlornKey', 'DoubleJump', 'WallJump'})}, 'ForlornEntranceExp': {frozenset({'ForlornKey', 'Open'})}, 'GladesLaserGrenade': {frozenset({'Water', 'Grenade', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Glide', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Climb', 'ChargeJump', 'Water'})}, 'GrenadeSkillTree': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Dash', 'Bash'})}, 'GumoHideoutCrusherExp': {frozenset({'DoubleJump'})}, 'GumoHideoutCrusherKeystone': {frozenset({'DoubleJump'})}, 'SwampTeleporterAbilityCell': {frozenset({'Grenade', 'Bash'})}, 'HoruL4LowerExp': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide'})}, 'HoruR1EnergyCell': {frozenset({'Climb', 'Dash'}), frozenset({'Dash', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Climb', 'Glide'})}, 'HoruR4DrainedExp': {frozenset({'Glide', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'HoruL1': {frozenset({'Glide', 'Stomp', 'Bash'})}, 'HoruL2': {frozenset({'Climb', 'Stomp', 'Glide', 'DoubleJump'})}, 'HoruL3': {frozenset({'Grenade', 'Bash', 'ChargeJump'})}, 'LeftGumoHideoutUpperPlant': {frozenset({'ChargeFlame'})}, 'LeftSorrowKeystone1': {frozenset({'ChargeJump', 'WallJump'})}, 'LeftSorrowKeystone2': {frozenset({'ChargeJump', 'WallJump'})}, 'LowerBlackrootLaserAbilityCell': {frozenset({'Glide', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'LowerBlackrootLaserExp': {frozenset({'Grenade', 'Bash'}), frozenset({'DoubleJump'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}, 'GumoHideoutRightHangingExp': {frozenset({'DoubleJump'})}, 'LeftGumoHideoutExp': {frozenset({'Climb', 'DoubleJump'})}, 'SorrowHiddenKeystone': {frozenset({'Bash', 'ChargeJump', 'WallJump'})}, 'SorrowHealthCell': {frozenset({'Climb', 'ChargeJump'})}, 'SorrowLowerLeftKeystone': {frozenset({'Bash', 'DoubleJump'})}, 'SpiritCavernsAbilityCell': {frozenset({'Climb', 'DoubleJump'})}, 'KuroPerchExp': {frozenset({'Glide', 'ChargeJump', 'WallJump'}), frozenset({'Bash', 'ChargeJump'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'})}, 'MistyEntranceStompExp': {frozenset({'Climb', 'Dash', 'ChargeJump'})}, 'MistyEntranceTreeExp': {frozenset({'Bash'})}, 'MistyPostClimbAboveSpikePit': {frozenset({'Bash', 'DoubleJump'})}, 'MistyMortarCorridorHiddenExp': {frozenset({'Bash', 'DoubleJump'})}, 'GrottoEnergyDoorHealthCell': {frozenset({('EC', 2), 'Climb', 'Glide'})}, 'LeftGrottoTeleporterExp': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'HoruR1HangingExp': {frozenset({'DoubleJump'}), frozenset({'Dash'})}, 'HoruR2': {frozenset({'Stomp', 'WallJump'}), frozenset({'Grenade', 'Stomp', 'Bash'}), frozenset({'Climb', 'Stomp'}), frozenset({'Stomp', 'ChargeJump'})}, 'StompAreaExp': {frozenset({'ChargeFlame'})}, 'AboveChargeFlameTreeExp': {frozenset({'ChargeFlame', 'Climb', 'Glide'}), frozenset({'Dash', 'WallJump'}), frozenset({'Grenade', 'Climb', 'Glide'}), frozenset({'ChargeFlame', 'Glide', 'WallJump'}), frozenset({'Grenade', 'Glide', 'WallJump'}), frozenset({'Climb', 'Stomp', 'Glide'}), frozenset({'Glide', 'Stomp', 'WallJump'}), frozenset({'Climb', 'Dash'})}, 'SpiderSacGrenadeDoor': {frozenset({'Grenade', 'Climb', 'DoubleJump'})}, 'InnerSwampDrainExp': {frozenset({'ChargeJump', 'DoubleJump', 'Water'}), frozenset({'Glide', 'Dash', 'WallJump', 'Water'})}, 'SwampEntrancePlant': {frozenset({'Grenade'})}, 'InnerSwampStompExp': {frozenset({'Grenade', 'Bash', 'ChargeJump', 'Water'})}, 'InnerSwampSwimRightKeystone': {frozenset({'DoubleJump'})}, 'UpperGinsoRedirectLowerExp': {frozenset({'ChargeFlame', 'GinsoKey'})}, 'UpperGinsoRedirectUpperExp': {frozenset({'Climb', 'GinsoKey', 'ChargeJump'}), frozenset({'ChargeFlame', 'GinsoKey'})}, 'UpperGinsoEnergyCell': {frozenset({'Dash', 'GinsoKey', 'ChargeJump'}), frozenset({'ChargeFlame', 'GinsoKey'})}, 'LeftGladesExp': {frozenset({'DoubleJump'}), frozenset({'Bash'})}, 'UpperSorrowLeftKeystone': {frozenset({'Grenade', 'Bash'})}, 'ValleyMap': {frozenset({'Grenade', 'Mapstone', 'DoubleJump'}), frozenset({'Grenade', 'Mapstone', 'ChargeJump'}), frozenset({'ChargeFlame', 'Mapstone', 'ChargeJump'}), frozenset({'ChargeFlame', 'Mapstone', 'DoubleJump'})}, 'WilhelmExp': {frozenset({'Climb', 'Bash'}), frozenset({'Grenade', 'Bash'})}}, 'expert-dboost': {'UpperSorrowSpikeExp': {frozenset({('AC', 6), 'Dash', 'ChargeJump', ('HC', 2)}), frozenset({('EC', 2), 'Dash', ('AC', 6), ('HC', 2)}), frozenset({'Grenade', 'Bash', 'DoubleJump', ('HC', 2)}), frozenset({('AC', 6), 'Dash', ('HC', 2), 'Grenade', 'Bash'})}, 'DeathGauntletStompSwim': {frozenset({('HC', 0)})}, 'DoubleJumpAreaExp': {frozenset({'Climb', 'Bash', ('HC', -1)})}, 'ForlornEntranceExp': {frozenset({'ForlornKey', 'WallJump', ('HC', 1)})}, 'GladesLaser': {frozenset({'Glide', 'WallJump'})}, 'GladesLaserGrenade': {frozenset({('AC', 6), ('HC', 0), ('EC', 1), 'Climb', 'Dash', 'Grenade', 'Glide'}), frozenset({'Grenade', 'Glide', 'ChargeJump', ('HC', 0)}), frozenset({('AC', 6), ('EC', 1), 'Climb', 'Dash', ('HC', 2), 'Grenade'}), frozenset({('AC', 6), ('HC', 0), ('EC', 1), 'Climb', 'Dash', 'Grenade', 'DoubleJump'}), frozenset({('HC', 0), 'Grenade', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({('AC', 6), ('HC', 0), ('EC', 1), 'Grenade', 'ChargeJump'}), frozenset({('AC', 6), ('HC', 0), ('EC', 1), 'Climb', 'Dash', 'Water', 'Grenade'}), frozenset({('AC', 6), ('HC', 0), ('EC', 1), 'Dash', 'Grenade', 'Glide', 'WallJump'}), frozenset({'Grenade', 'Climb', 'ChargeJump', ('HC', 0)}), frozenset({'Grenade', 'ChargeJump', ('HC', 2)}), frozenset({('HC', 0), ('EC', 2), 'Grenade', 'ChargeJump', ('AC', 3)}), frozenset({('AC', 6), ('HC', 0), ('EC', 2), 'Dash', 'Grenade', 'WallJump'}), frozenset({('AC', 6), ('HC', 0), ('EC', 1), 'Dash', 'Water', 'Grenade', 'WallJump'}), frozenset({'Grenade', 'Bash', 'ChargeJump', ('HC', 0)}), frozenset({'Grenade', 'ChargeJump', ('HC', 0), 'Water'}), frozenset({('AC', 6), ('HC', 0), ('EC', 2), 'Climb', 'Dash', 'Grenade'}), frozenset({('EC', 1), ('HC', 1), 'Grenade', 'ChargeJump', ('AC', 3)}), frozenset({('AC', 6), ('EC', 1), 'Dash', ('HC', 2), 'Grenade', 'WallJump'})}, 'GroveWaterStompAbilityCell': {frozenset({'Stomp', ('HC', 2)}), frozenset({('HC', 3), 'Bash'})}, 'HoruFieldsAbilityCell': {frozenset({'Bash', 'WallJump', ('HC', 2)})}, 'HoruR1EnergyCell': {frozenset({'WallJump', ('HC', 2)}), frozenset({'Climb', ('HC', 2)})}, 'HoruR4DrainedExp': {frozenset({('HC', 3), 'DoubleJump'}), frozenset({('HC', 3), 'Dash', ('AC', 3)}), frozenset({('HC', 3), 'Glide'})}, 'LeftSorrowAbilityCell': {frozenset({'Climb', 'ChargeJump', ('HC', 2)}), frozenset({'ChargeJump', 'WallJump', ('HC', 2)})}, 'LeftSorrowKeystone3': {frozenset({'Climb', 'ChargeJump', ('HC', 2)})}, 'LeftSorrowKeystone4': {frozenset({'Climb', 'ChargeJump', 'DoubleJump', ('HC', 2)}), frozenset({'Climb', 'Dash', 'ChargeJump', ('HC', 2)})}, 'LeftSorrowEnergyCell': {frozenset({'Climb', 'ChargeJump', 'DoubleJump', ('HC', 2)})}, 'LowerBlackrootAbilityCell': {frozenset({'DoubleJump', ('HC', 2)})}, 'LowerBlackrootLaserAbilityCell': {frozenset({'DoubleJump', ('HC', 1)}), frozenset({'ChargeJump', ('HC', 1)}), frozenset({'Glide', 'Stomp', ('HC', 1)}), frozenset({'Glide', 'WallJump', ('HC', 1)}), frozenset({'Dash', ('AC', 3), ('HC', 1)})}, 'LeftGumoHideoutSwim': {frozenset({'Free'})}, 'SorrowSpikeKeystone': {frozenset({'Climb', 'DoubleJump', ('HC', 2)}), frozenset({'ChargeJump', 'WallJump', ('HC', 2)}), frozenset({'Climb', 'ChargeJump', ('HC', 2)}), frozenset({'DoubleJump', 'WallJump', ('HC', 2)})}, 'SorrowHiddenKeystone': {frozenset({'Climb', 'Bash', ('HC', 2)}), frozenset({'Bash', 'WallJump', ('HC', 2)})}, 'SorrowHealthCell': {frozenset({'ChargeJump', 'DoubleJump', 'WallJump', ('HC', 2)})}, 'MistyFrogNookExp': {frozenset({'Dash', ('AC', 3), 'WallJump'}), frozenset({('HC', 4), 'Dash', 'WallJump'})}, 'MistyPostClimbSpikeCave': {frozenset({'Glide', ('HC', 1)})}, 'MistyMortarCorridorUpperExp': {frozenset({'ChargeJump', ('HC', 1)}), frozenset({'Bash', ('HC', 1)})}, 'MistyMortarCorridorHiddenExp': {frozenset({'Grenade', 'Bash', ('HC', 1)}), frozenset({'ChargeJump', 'DoubleJump', ('HC', 1)}), frozenset({'Dash', ('AC', 3), ('HC', 1)}), frozenset({('HC', 4), 'Bash'})}, 'GrottoEnergyDoorSwim': {frozenset({('EC', 2)})}, 'GrottoEnergyDoorHealthCell': {frozenset({('EC', 2), 'Climb', 'DoubleJump'})}, 'LeftGrottoTeleporterExp': {frozenset({('HC', 4), 'WallJump'}), frozenset({'Glide', 'DoubleJump', ('HC', 1)}), frozenset({'Climb', 'Glide', ('HC', 1)}), frozenset({'ChargeJump', ('HC', 1)}), frozenset({'Climb', ('HC', 4)}), frozenset({'Glide', 'WallJump', ('HC', 1)})}, 'BelowGrottoTeleporterHealthCell': {frozenset({'Bash', ('HC', 2)})}, 'OutsideForlornWaterExp': {frozenset({('HC', 1)}), frozenset({'Stomp', ('HC', -1)})}, 'HoruR1HangingExp': {frozenset({'ChargeJump', ('HC', 2)})}, 'StompAreaGrenadeExp': {frozenset({'Grenade', 'Bash', ('HC', 0)}), frozenset({('HC', 0), 'Climb', 'Dash', 'Water', 'Grenade', 'Stomp', 'DoubleJump', ('AC', 3)}), frozenset({'Climb', 'Dash', ('HC', 1), 'Grenade', 'Stomp', 'DoubleJump', ('AC', 3)}), frozenset({('HC', 0), 'Water', 'Grenade', 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({('AC', 6), 'Dash', ('EC', 3), 'Grenade', ('HC', 1)}), frozenset({('HC', 1), 'Grenade', 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'ChargeJump', ('HC', 1)})}, 'GroveSpiderWaterSwim': {frozenset({'Bash', ('HC', 2)}), frozenset({('HC', 3)})}, 'GladesGrenadePool': {frozenset({'Grenade', ('HC', 3)}), frozenset({'Grenade', 'Stomp', ('HC', 2)})}, 'GladesMainPool': {frozenset({'Bash', ('HC', 0)}), frozenset({('HC', 1)}), frozenset({'Stomp', ('HC', 0)})}, 'GladesMainPoolDeep': {frozenset({('HC', 4)})}, 'SwampEntranceSwim': {frozenset({'Free'})}, 'InnerSwampStompExp': {frozenset({'Dash', 'ChargeJump', ('AC', 3)}), frozenset({'Stomp'}), frozenset({'Grenade', 'Bash', 'ChargeJump'})}, 'TopGinsoLeftLowerExp': {frozenset({('HC', 2)})}, 'TopGinsoRightPlant': {frozenset({'ChargeFlame', 'DoubleJump', 'WallJump', ('HC', 0)}), frozenset({'Climb', ('HC', 0), 'DoubleJump', 'ChargeFlame'})}, 'UpperGinsoLowerKeystone': {frozenset({'GinsoKey', ('HC', 2)})}, 'UpperGinsoRightKeystone': {frozenset({'GinsoKey', 'DoubleJump', 'WallJump', ('HC', 2)})}, 'UpperSorrowRightKeystone': {frozenset({('AC', 6), 'Dash', 'ChargeJump', ('HC', 2)})}, 'UpperSorrowLeftKeystone': {frozenset({'ChargeJump', ('HC', 2)})}, 'ValleyRightSwimExp': {frozenset({('HC', 1)})}, 'ValleyRightFastStomplessCell': {frozenset({'ChargeJump', 'WallJump', ('HC', 1)}), frozenset({'Climb', 'ChargeJump', ('HC', 1)}), frozenset({'ChargeJump', 'DoubleJump', ('HC', 1)})}, 'ValleyRightExp': {frozenset({'ChargeJump', 'DoubleJump', 'WallJump', ('HC', 1)}), frozenset({'Climb', 'ChargeJump', 'DoubleJump', ('HC', 1)})}, 'ValleyMainFACS': {frozenset({'WallJump', 'Dash', ('HC', 1), 'ChargeJump', ('AC', 3)})}, 'WilhelmExp': {frozenset({'ChargeJump', ('HC', 2)})}}, 'master-lure': {'UpperSorrowSpikeExp': {frozenset({'Bash'})}, 'UpperSorrowFarLeftKeystone': {frozenset({'Bash'})}, 'UpperSorrowRightKeystone': {frozenset({'Bash'})}, 'UpperSorrowFarRightKeystone': {frozenset({'Bash'})}, 'UpperSorrowLeftKeystone': {frozenset({'Bash'})}, 'ForlornKeystone2': {frozenset({'ForlornKey', 'Bash'})}, 'ForlornEscape': {frozenset({'Bash'})}, 'ForlornKeystone3': {frozenset({'ForlornKey', 'Bash'})}, 'GroveWaterStompAbilityCell': {frozenset({('AC', 12)}), frozenset({('HC', 2)})}, 'SwampTeleporterAbilityCell': {frozenset({'Bash'})}, 'WallJumpAreaExp': {frozenset({'Bash'})}, 'WallJumpAreaEnergyCell': {frozenset({'Bash'})}, 'SorrowHealthCell': {frozenset({'Glide', 'Stomp', 'WallJump'}), frozenset({'Glide', 'Stomp', 'DoubleJump'}), frozenset({'Climb', 'Glide', 'Stomp'})}, 'KuroPerchExp': {frozenset({'Bash'})}, 'LeftGrottoTeleporterExp': {frozenset({'Bash'})}, 'InnerSwampDrainExp': {frozenset({'Bash', 'Water'})}, 'InnerSwampStompExp': {frozenset({'Bash', 'Water'}), frozenset({'Bash', ('HC', 0)})}}, 'master-dboost': {'UpperSorrowSpikeExp': {frozenset({('AC', 12), 'Dash', 'Grenade', 'Bash', ('HC', 1)}), frozenset({('AC', 12), 'Grenade', 'Bash', 'DoubleJump', ('HC', 1)}), frozenset({('EC', 2), 'Dash', ('AC', 12), ('HC', 1)}), frozenset({('AC', 12), 'Dash', 'ChargeJump', ('HC', 1)}), frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', ('HC', 1)})}, 'UpperSorrowFarLeftKeystone': {frozenset({('AC', 12), 'Dash', ('HC', 1), 'Grenade', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({('AC', 12), 'Dash', ('HC', 1), 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({('HC', 4), ('AC', 12), 'Climb', 'Grenade', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({('AC', 12), 'Climb', 'Dash', 'ChargeJump', 'DoubleJump', ('HC', 1)}), frozenset({('AC', 12), 'Climb', 'ChargeJump', 'DoubleJump', ('HC', 7)}), frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', ('HC', 1)}), frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', 'WallJump', ('HC', 7)}), frozenset({('AC', 12), 'Climb', 'Dash', 'Grenade', 'Bash', 'DoubleJump', ('HC', 1)}), frozenset({('HC', 4), ('AC', 12), 'Grenade', 'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'ForlornEntranceExp': {frozenset({'ForlornKey', ('AC', 12), ('HC', 0), 'WallJump'})}, 'HoruR1EnergyCell': {frozenset({('AC', 12), 'WallJump', ('HC', 1)}), frozenset({'Climb', ('AC', 12), ('HC', 1)})}, 'HoruR4DrainedExp': {frozenset({('HC', 8)}), frozenset({('AC', 12), ('HC', 6)})}, 'HoruL1': {frozenset({('EC', 1), ('AC', 12), 'Climb', ('HC', 2), 'Stomp', 'DoubleJump'}), frozenset({('AC', 12), 'Climb', ('EC', 2), 'Stomp', 'DoubleJump', ('HC', 1)}), frozenset({('HC', 4), ('AC', 12), 'Climb', 'Stomp', 'DoubleJump'}), frozenset({('AC', 12), ('HC', 1), 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Bash', 'Stomp', ('HC', 2)}), frozenset({'Stomp', 'ChargeJump', ('HC', 2)})}, 'HoruL3': {frozenset({('HC', 3), ('AC', 12), 'Climb', 'Dash', ('EC', 2), 'Glide', 'DoubleJump'}), frozenset({('HC', 0), ('AC', 12), 'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'ChargeFlame', ('HC', 0), ('AC', 12), 'ChargeJump', 'DoubleJump'}), frozenset({('EC', 1), ('AC', 12), 'Climb', 'Dash', 'Glide', 'Stomp', 'DoubleJump', ('HC', 1)}), frozenset({'Climb', 'Glide', 'ChargeJump', 'DoubleJump', ('HC', 1)}), frozenset({('HC', 0), ('AC', 12), 'Stomp', 'ChargeJump', 'DoubleJump'})}, 'LeftSorrowAbilityCell': {frozenset({('AC', 12), 'ChargeJump', 'WallJump', ('HC', 1)}), frozenset({'Climb', ('AC', 12), 'ChargeJump', ('HC', 1)})}, 'LeftSorrowKeystone3': {frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', ('HC', 1)})}, 'LeftSorrowKeystone4': {frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', ('HC', 1)})}, 'LeftSorrowEnergyCell': {frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', ('HC', 1)})}, 'LostGroveLongSwim': {frozenset({('HC', 3), ('AC', 12)}), frozenset({('HC', 9)})}, 'LowerBlackrootLaserAbilityCell': {frozenset({'Stomp', ('HC', 1)})}, 'SorrowLowerLeftKeystone': {frozenset({('AC', 12), 'ChargeJump', ('HC', 7)})}, 'MistyFrogNookExp': {frozenset({'DoubleJump', ('HC', 1)})}, 'MistyPostClimbSpikeCave': {frozenset({'Bash', ('HC', 1)}), frozenset({'DoubleJump', ('HC', 8)})}, 'MistyMortarCorridorHiddenExp': {frozenset({('HC', 7)}), frozenset({('HC', 4), ('AC', 12)}), frozenset({'DoubleJump', ('HC', 1)})}, 'LeftGrottoTeleporterExp': {frozenset({'DoubleJump', ('HC', 1)})}, 'OutsideForlornWaterExp': {frozenset({('AC', 12), ('HC', -1)})}, 'HoruR1HangingExp': {frozenset({('AC', 12), 'ChargeJump', ('HC', 1)})}, 'StompAreaGrenadeExp': {frozenset({'Grenade', 'DoubleJump', ('HC', 2)}), frozenset({'Water', ('HC', 2), 'Grenade', 'Stomp', 'DoubleJump'}), frozenset({'Grenade', 'Stomp', 'DoubleJump', ('HC', 1)}), frozenset({('AC', 12), 'Water', ('HC', 2), 'Grenade', 'DoubleJump'})}, 'GroveSpiderWaterSwim': {frozenset({('HC', 2)}), frozenset({'Bash', ('AC', 12)}), frozenset({('AC', 12), ('HC', 1)})}, 'GladesGrenadePool': {frozenset({'Grenade', ('HC', 2)})}, 'GladesMainPool': {frozenset({('HC', 0)})}, 'InnerSwampDrainExp': {frozenset({('HC', 4), 'Dash', ('AC', 12), 'WallJump'}), frozenset({('HC', 4), 'Bash', ('AC', 12)}), frozenset({('HC', 4), ('AC', 12), 'Grenade', 'Glide', 'Stomp', 'WallJump'}), frozenset({'Climb', ('HC', 4), 'ChargeJump', ('AC', 12)}), frozenset({'ChargeFlame', ('HC', 4), ('AC', 12), 'Glide', 'Stomp', 'WallJump'}), frozenset({('HC', 4), ('AC', 12), 'DoubleJump'}), frozenset({'Climb', 'Dash', ('HC', 4), ('AC', 12)})}, 'TopGinsoLeftUpperExp': {frozenset({('HC', 0), 'Glide', 'DoubleJump'}), frozenset({('HC', 0), 'Dash', 'DoubleJump'})}, 'TopGinsoRightPlant': {frozenset({'ChargeFlame', 'DoubleJump', ('HC', 0)}), frozenset({'Grenade', 'DoubleJump', ('HC', 0)})}, 'UpperGinsoRightKeystone': {frozenset({('HC', 0), ('AC', 12), 'GinsoKey', 'DoubleJump'})}, 'UpperGinsoUpperRightKeystone': {frozenset({('AC', 12), 'GinsoKey', 'DoubleJump', ('HC', 2)})}, 'UpperGinsoUpperLeftKeystone': {frozenset({('AC', 12), 'GinsoKey', 'DoubleJump', ('HC', 2)})}, 'UpperSorrowRightKeystone': {frozenset({('HC', 4), 'ChargeJump', 'DoubleJump', ('AC', 12)}), frozenset({('AC', 12), 'Grenade', 'Bash', 'DoubleJump', ('HC', 1)}), frozenset({('AC', 12), 'Dash', 'ChargeJump', ('HC', 1)}), frozenset({('AC', 12), 'ChargeJump', ('HC', 7)})}, 'UpperSorrowFarRightKeystone': {frozenset({('HC', 4), 'Dash', 'ChargeJump', ('AC', 12)}), frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', ('HC', 7)}), frozenset({('HC', 4), ('AC', 12), 'Grenade', 'Bash', 'DoubleJump'})}, 'UpperSorrowLeftKeystone': {frozenset({('AC', 12), 'ChargeJump', ('HC', 1)})}, 'ValleyEntryGrenadeLongSwim': {frozenset({'Grenade', 'Bash', ('HC', 10)}), frozenset({'Grenade', ('HC', 11)}), frozenset({'Grenade', ('HC', 4), ('AC', 12)})}, 'ValleyRightFastStomplessCell': {frozenset({'Climb', ('HC', 4), ('AC', 12), 'DoubleJump'}), frozenset({('AC', 12), 'DoubleJump', 'WallJump', ('HC', 2)})}, 'ValleyRightExp': {frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}, 'WilhelmExp': {frozenset({('AC', 12), 'ChargeJump', ('HC', 1)})}}, 'standard-lure': {'DeathGauntletExp': {frozenset({'Bash'})}, 'DeathGauntletStompSwim': {frozenset({'Water'})}, 'GladesLaser': {frozenset({'Bash'})}, 'HoruFieldsHealthCell': {frozenset({'Free'})}, 'HollowGroveTreeAbilityCell': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}, 'HoruL2': {frozenset({'Stomp', 'DoubleJump', 'Bash'})}, 'LeftSorrowKeystone1': {frozenset({'Bash'})}, 'MistyEntranceStompExp': {frozenset({'Bash'})}, 'MistyAbilityCell': {frozenset({'Bash'})}, 'GrottoSwampDrainAccessPlant': {frozenset({'ChargeFlame', 'Bash'}), frozenset({'Grenade'})}, 'SorrowMap': {frozenset({'Mapstone'})}, 'FronkeyWalkRoof': {frozenset({'Bash'})}, 'ValleyRightFastStomplessCell': {frozenset({'Bash'})}, 'WilhelmExp': {frozenset({'Bash', 'WallJump'})}, 'KuroPerchExp': {frozenset({'HoruKey'})}}, 'casual-dboost': {'DoubleJumpSkillTree': {frozenset({'Bash', ('HC', 0)}), frozenset({'Climb', ('HC', 0)}), frozenset({'ChargeJump', ('HC', 0)})}, 'DoubleJumpAreaExp': {frozenset({'Grenade', 'Bash', ('HC', 0)}), frozenset({'ChargeJump', ('HC', 0), 'Water'}), frozenset({('HC', -1), 'ChargeJump', 'WallJump'}), frozenset({'Bash', ('HC', 0), 'Water'}), frozenset({'Bash', 'WallJump', ('HC', -1)})}, 'GrenadeAreaExp': {frozenset({'ChargeJump'})}, 'GumoHideoutCrusherKeystone': {frozenset({'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'GumoHideoutRedirectAbilityCell': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'WallJump'})}, 'StompAreaGrenadeExp': {frozenset({'Grenade', 'ChargeJump', 'Water'})}, 'SpiderSacHealthCell': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'InnerSwampSwimRightKeystone': {frozenset({'Climb'}), frozenset({'WallJump'})}, 'SpiritCavernsTopLeftKeystone': {frozenset({'ChargeJump'}), frozenset({'Bash'})}}, 'standard-dboost': {'DoubleJumpSkillTree': {frozenset({'Dash', ('HC', 0)})}, 'DoubleJumpAreaExp': {frozenset({'Dash', 'ChargeJump', ('HC', 0)}), frozenset({('HC', 0), 'Bash', 'Dash'}), frozenset({'ChargeJump', ('HC', 0), ('AC', 3), ('EC', 1)}), frozenset({'Bash', ('HC', 0), ('AC', 3), ('EC', 1)}), frozenset({'Bash', ('HC', 1)}), frozenset({'ChargeJump', ('HC', 1)})}, 'ForlornKeystone3': {frozenset({'ForlornKey', 'ChargeJump', ('HC', 1)})}, 'LowerGinsoKeystone1': {frozenset({('HC', 0)})}, 'LowerGinsoKeystone2': {frozenset({'ChargeJump', ('HC', 0)})}, 'GumoHideoutMapstone': {frozenset({'ChargeJump', ('HC', 1)})}, 'LowerBlackrootLaserAbilityCell': {frozenset({'Dash', 'ChargeJump', ('HC', 1)})}, 'MistyAbilityCell': {frozenset({'DoubleJump', 'WallJump', ('HC', 1)})}, 'GrottoEnergyDoorHealthCell': {frozenset({('EC', 2), 'WallJump'})}, 'BelowGrottoTeleporterHealthCell': {frozenset({('HC', 0), 'Bash', 'DoubleJump'}), frozenset({'Bash', ('HC', 0), 'WallJump'}), frozenset({'ChargeJump', ('HC', 0)})}, 'BelowGrottoTeleporterPlant': {frozenset({'ChargeFlame', ('HC', 1)}), frozenset({'Grenade', ('HC', 1)})}, 'GrottoSwampDrainAccessPlant': {frozenset({'ChargeFlame', 'Glide', ('HC', 1)}), frozenset({'ChargeFlame', 'DoubleJump', ('HC', 1)}), frozenset({'ChargeFlame', 'ChargeJump', ('HC', 1)}), frozenset({'ChargeFlame', 'WallJump', ('HC', 1)})}, 'StompAreaGrenadeExp': {frozenset({'Grenade', 'Bash', ('HC', 0), 'Water'})}, 'InnerSwampDrainExp': {frozenset({'Grenade', 'Bash', ('HC', 1), 'Water'})}, 'TopGinsoLeftLowerExp': {frozenset({('HC', 0), 'DoubleJump'}), frozenset({'ChargeJump', ('HC', 0)})}, 'TopGinsoLeftUpperExp': {frozenset({('HC', 0), 'Dash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Dash', 'DoubleJump', ('HC', 0)}), frozenset({'Climb', 'Glide', 'DoubleJump', ('HC', 0)}), frozenset({('HC', 0), 'Glide', 'DoubleJump', 'WallJump'})}, 'TopGinsoRightPlant': {frozenset({'Grenade', 'DoubleJump', 'WallJump', ('HC', 0)}), frozenset({'Climb', 'Grenade', 'DoubleJump', ('HC', 0)})}, 'UpperGinsoLowerKeystone': {frozenset({'Bash', 'GinsoKey', ('HC', 0)}), frozenset({'GinsoKey', ('HC', 0), 'ChargeJump'}), frozenset({('HC', 0), 'GinsoKey', 'DoubleJump'})}, 'UpperGinsoRightKeystone': {frozenset({'GinsoKey', ('HC', 0), 'ChargeJump'})}, 'UpperGinsoUpperRightKeystone': {frozenset({'GinsoKey', ('HC', 0), 'ChargeJump'})}, 'UpperGinsoUpperLeftKeystone': {frozenset({'GinsoKey', ('HC', 0), 'ChargeJump'})}}, 'standard-core': {'DoubleJumpAreaExp': {frozenset({'ChargeJump', 'WallJump'})}, 'ForlornKeystone2': {frozenset({'ForlornKey', 'Dash', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'ForlornKey', 'Dash', 'WallJump'}), frozenset({'Climb', 'ForlornKey', 'Dash', 'DoubleJump'}), frozenset({'Glide', 'ForlornKey', 'Climb', 'Dash'})}, 'ForlornEntranceExp': {frozenset({'ForlornKey', 'Dash', 'WallJump', 'Open'}), frozenset({'Climb', 'ForlornKey', 'Dash', 'Open'})}, 'LowerGinsoKeystone1': {frozenset({'Grenade', 'Bash'})}, 'LowerGinsoKeystone2': {frozenset({'Grenade', 'Bash'})}, 'GladesLaserGrenade': {frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Grenade', 'Climb', 'Bash'}), frozenset({'Climb', 'Grenade', 'Glide', 'ChargeJump', 'DoubleJump'})}, 'GrenadeSkillTree': {frozenset({'Grenade', 'Bash'})}, 'GrenadeAreaExp': {frozenset({'Dash', 'DoubleJump'})}, 'GrenadeAreaAbilityCell': {frozenset({'Grenade', 'Bash'})}, 'GumoHideoutMapstone': {frozenset({'Climb'}), frozenset({'Grenade', 'Bash'})}, 'GumoHideoutRedirectAbilityCell': {frozenset({'Grenade', 'Bash'})}, 'SwampTeleporterAbilityCell': {frozenset({'Grenade', 'Bash', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Glide'})}, 'HoruFieldsHiddenExp': {frozenset({'Bash'})}, 'HoruLavaDrainedLeftExp': {frozenset({'Open', 'Dash', 'DoubleJump'})}, 'HoruL4LowerExp': {frozenset({'Climb', 'Stomp'})}, 'HoruR1EnergyCell': {frozenset({'Grenade', 'Bash'})}, 'HoruR3Plant': {frozenset({'ChargeFlame'})}, 'HoruR4DrainedExp': {frozenset({'Grenade', 'Bash', 'Climb'})}, 'HoruL1': {frozenset({'Glide', 'ChargeJump', 'Stomp', 'Bash'})}, 'HoruL3': {frozenset({'ChargeFlame', 'Bash', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Stomp'}), frozenset({'Glide', 'Bash', 'ChargeFlame', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump'}), frozenset({'Glide', 'Bash', 'Climb', 'ChargeFlame'}), frozenset({'Grenade', 'Bash', 'ChargeFlame'})}, 'FarLeftGumoHideoutExp': {frozenset({'Climb', 'Bash', 'Grenade'})}, 'LeftSorrowKeystone1': {frozenset({'Dash'})}, 'LowerBlackrootLaserAbilityCell': {frozenset({'Dash', 'DoubleJump'})}, 'LowerBlackrootGrenadeThrow': {frozenset({'ChargeJump', 'DoubleJump'})}, 'GumoHideoutRightHangingExp': {frozenset({'Climb', 'Dash'}), frozenset({'Dash', 'WallJump'})}, 'SorrowSpikeKeystone': {frozenset({'Climb', 'Dash', 'DoubleJump'}), frozenset({'Dash', 'DoubleJump', 'WallJump'})}, 'SorrowHiddenKeystone': {frozenset({'Climb', 'Bash', 'Dash', 'DoubleJump'}), frozenset({'Bash', 'Dash', 'DoubleJump', 'WallJump'})}, 'SorrowHealthCell': {frozenset({'Bash', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump'})}, 'SpiritCavernsAbilityCell': {frozenset({'DoubleJump', 'WallJump'})}, 'MistyFrogNookExp': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Bash'})}, 'MistyPostClimbSpikeCave': {frozenset({'Glide', 'Bash'})}, 'MistyMortarCorridorUpperExp': {frozenset({'Grenade', 'Bash'})}, 'OuterSwampHealthCell': {frozenset({'Climb', 'DoubleJump'})}, 'HoruR1HangingExp': {frozenset({'Grenade', 'Bash'})}, 'HoruR2': {frozenset({'Glide', 'Stomp', 'Climb', 'Bash'}), frozenset({'Glide', 'Stomp', 'ChargeJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'WallJump', 'Bash'})}, 'StompAreaExp': {frozenset({'Climb', 'ChargeJump'})}, 'StompAreaGrenadeExp': {frozenset({'Grenade', 'Bash', 'DoubleJump', 'Water'})}, 'GroveAboveSpiderWaterExp': {frozenset({'Bash', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump'})}, 'GroveAboveSpiderWaterHealthCell': {frozenset({'Bash', 'ChargeJump'})}, 'GroveAboveSpiderWaterEnergyCell': {frozenset({'Dash', 'Grenade', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Grenade', 'Glide', 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'AboveChargeFlameTreeExp': {frozenset({'Glide', 'Bash', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb'})}, 'GladesGrenadeTree': {frozenset({'Grenade', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Glide', 'Climb', 'Wind'}), frozenset({'Grenade', 'Glide', 'WallJump', 'Wind'})}, 'InnerSwampSwimRightKeystone': {frozenset({'Climb', 'Dash'}), frozenset({'Dash', 'WallJump'})}, 'TopGinsoLeftLowerExp': {frozenset({'Bash'})}, 'UpperGinsoRedirectLowerExp': {frozenset({'Climb', 'GinsoKey', 'ChargeJump'})}, 'UpperGinsoRightKeystone': {frozenset({'Bash', 'GinsoKey'}), frozenset({'Glide', 'GinsoKey', 'ChargeJump'}), frozenset({'GinsoKey', 'DoubleJump', 'ChargeJump'})}, 'UpperGinsoUpperRightKeystone': {frozenset({'Bash', 'GinsoKey'}), frozenset({'GinsoKey', 'DoubleJump', 'ChargeJump'})}, 'UpperGinsoUpperLeftKeystone': {frozenset({'Bash', 'GinsoKey'}), frozenset({'Glide', 'GinsoKey', 'ChargeJump'}), frozenset({'GinsoKey', 'DoubleJump', 'ChargeJump'})}, 'UpperGinsoEnergyCell': {frozenset({'Climb', 'GinsoKey', 'ChargeJump'})}, 'GrottoLasersRoofExp': {frozenset({'Climb', 'DoubleJump'})}, 'SpiritCavernsTopLeftKeystone': {frozenset({'ChargeJump'}), frozenset({'Bash'})}, 'ValleyRightBirdStompCell': {frozenset({'Stomp', 'DoubleJump'}), frozenset({'Climb', 'Stomp'}), frozenset({'Stomp', 'WallJump'})}, 'ValleyThreeBirdAbilityCell': {frozenset({'Dash', 'DoubleJump'})}, 'KuroPerchExp': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-lure': {'ForlornKeystone1': {frozenset({'ForlornKey', 'Bash'})}, 'GumoHideoutMiniboss': {frozenset({'Bash'})}, 'GroveWaterStompAbilityCell': {frozenset({'Bash', 'Water'})}, 'SorrowHealthCell': {frozenset({'Grenade', 'Glide', 'Stomp', 'Bash'}), frozenset({('AC', 6), 'Dash', ('EC', 2), 'Glide', 'Stomp'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump'}), frozenset({'Glide', 'Stomp', 'ChargeJump'})}}, 'gjump': {'GladesLaserGrenade': {frozenset({'Grenade', 'Climb', 'ChargeJump'})}, 'SwampTeleporterAbilityCell': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'HoruFieldsEnergyCell': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'HoruR4LaserExp': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'HoruL3': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'SorrowSpikeKeystone': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'SorrowHiddenKeystone': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'SorrowLowerLeftKeystone': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'KuroPerchExp': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'MistyMortarCorridorUpperExp': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'StompAreaGrenadeExp': {frozenset({'Grenade', 'Climb', 'ChargeJump', 'Water'})}, 'SorrowMapstone': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'GroveAboveSpiderWaterExp': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'GroveAboveSpiderWaterHealthCell': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'UpperSorrowLeftKeystone': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'ValleyThreeBirdAbilityCell': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'insane': {'GrenadeSkillTree': {frozenset({'WallJump'})}, 'ValleyRightBirdStompCell': {frozenset({'Bash'})}}, 'timed-level': {'LowerBlackrootGrenadeThrow': {frozenset({'Free'})}, 'SpiderSacEnergyDoor': {frozenset({('EC', 2)})}}} +connection_rules = {'AboveChargeJumpArea': {'casual-core': {'SorrowTeleporter': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Glide', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'Grenade'})}}, 'expert-dboost': {'SorrowTeleporter': {frozenset({'Dash', 'ChargeJump', 'WallJump', ('HC', 2)})}, 'ChargeJumpArea': {frozenset({('HC', 3), 'Bash', 'ChargeJump'}), frozenset({('HC', 3), 'Dash', 'ChargeJump', ('AC', 6)})}}, 'master-core': {'SorrowTeleporter': {frozenset({'Bash'})}, 'ChargeJumpArea': {frozenset({'Bash'})}}, 'standard-lure': {'ChargeJumpArea': {frozenset({'Climb', 'Bash', 'Stomp'}), frozenset({'Bash', 'Stomp', 'WallJump'})}}, 'expert-core': {'ChargeJumpArea': {frozenset({'Climb', 'Bash', 'ChargeJump'}), frozenset({'Grenade', 'Bash', 'ChargeJump', 'WallJump'})}}, 'expert-abilities': {'ChargeJumpArea': {frozenset({('AC', 6), 'Dash', 'Stomp', 'WallJump'}), frozenset({'Climb', 'Dash', 'ChargeJump', ('AC', 6)}), frozenset({'Bash', 'ChargeJump', 'Dash', ('AC', 3)}), frozenset({'Climb', 'Dash', 'Stomp', ('AC', 6)})}}, 'gjump': {'ChargeJumpArea': {frozenset({'Climb', 'Dash', 'ChargeJump', 'Grenade'}), frozenset({'Climb', ('HC', 3), 'ChargeJump', 'Grenade'})}}, 'dbash': {'ChargeJumpArea': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}}}, 'BashTree': {'casual-core': {'BashTreeDoorClosed': {frozenset({'Open'})}, 'UpperGinsoRedirectArea': {frozenset({'Glide', 'ChargeJump', 'DoubleJump'}), frozenset({'Bash'}), frozenset({'Dash', 'ChargeJump', 'DoubleJump'})}}, 'standard-dboost': {'UpperGinsoRedirectArea': {frozenset({'ChargeJump', ('HC', 1)})}}, 'expert-dboost': {'UpperGinsoRedirectArea': {frozenset({'ChargeJump', ('HC', 0)})}}, 'expert-abilities': {'UpperGinsoRedirectArea': {frozenset({('AC', 6), 'Dash', 'ChargeJump'})}}, 'master-core': {'UpperGinsoRedirectArea': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Dash', 'DoubleJump'})}}, 'master-abilities': {'UpperGinsoRedirectArea': {frozenset({('AC', 12), 'DoubleJump'})}}}, 'BashTreeDoorClosed': {'casual-core': {'BashTreeDoorOpened': {frozenset({('KS', 4)})}}}, 'BashTreeDoorOpened': {'casual-core': {'GinsoMiniBossDoor': {frozenset({'Open', 'GinsoKey'})}, 'BashTree': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}}, 'master-core': {'BashTree': {frozenset({'DoubleJump'})}}}, 'BelowSunstoneArea': {'casual-core': {'SunstoneArea': {frozenset({'Glide', 'Stomp'})}, 'UpperSorrow': {frozenset({'Stomp'})}}, 'standard-core': {'SunstoneArea': {frozenset({'Climb', 'Glide', 'ChargeJump'})}, 'UpperSorrow': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-core': {'SunstoneArea': {frozenset({'Glide', 'Dash', 'ChargeJump'}), frozenset({'Grenade', 'Bash', 'ChargeJump', 'Glide'})}, 'UpperSorrow': {frozenset({'Grenade', 'Bash', 'ChargeJump'})}}, 'gjump': {'SunstoneArea': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'master-core': {'SunstoneArea': {frozenset({'Bash'})}, 'UpperSorrow': {frozenset({'Bash'})}}, 'master-dboost': {'SunstoneArea': {frozenset({('AC', 12), 'Climb', 'ChargeJump', 'DoubleJump', ('HC', 1)})}}, 'expert-abilities': {'UpperSorrow': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}}, 'BlackrootDarknessRoom': {'casual-core': {'DashArea': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}}, 'expert-core': {'DashArea': {frozenset({'DoubleJump'})}}, 'master-core': {'DashArea': {frozenset({'Bash'})}}}, 'BlackrootGrottoConnection': {'casual-core': {'SideFallCell': {frozenset({'Climb', 'Stomp', 'DoubleJump'}), frozenset({'Grenade', 'Stomp', 'Bash'}), frozenset({'Stomp', 'WallJump'}), frozenset({'Stomp', 'ChargeJump'})}}, 'standard-abilities': {'SideFallCell': {frozenset({'Climb', 'Stomp', 'Dash', ('AC', 3)})}}, 'expert-core': {'SideFallCell': {frozenset({'Climb', 'Stomp'})}}}, 'ChargeFlameAreaStump': {'casual-core': {'ChargeFlameSkillTreeChamber': {frozenset({'ChargeFlame'}), frozenset({'Grenade'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'})}}, 'standard-core': {'ChargeFlameSkillTreeChamber': {frozenset({'Stomp'})}}, 'expert-abilities': {'ChargeFlameSkillTreeChamber': {frozenset({'Dash', ('AC', 6)})}}, 'master-core': {'ChargeFlameSkillTreeChamber': {frozenset({'DoubleJump'})}}}, 'ChargeFlameSkillTreeChamber': {'casual-core': {'SpiritTreeRefined': {frozenset({'ChargeJump'})}, 'ChargeFlameAreaStump': {frozenset({'ChargeJump'}), frozenset({'ChargeFlame'}), frozenset({'Grenade'})}}, 'expert-abilities': {'ChargeFlameAreaStump': {frozenset({'Dash', ('AC', 6)})}}}, 'ChargeJumpArea': {'casual-core': {'AboveChargeJumpArea': {frozenset({'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump'})}, 'ChargeJumpDoor': {frozenset({'Open'})}}, 'gjump': {'AboveChargeJumpArea': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'expert-dboost': {'AboveChargeJumpArea': {frozenset({'Bash', 'ChargeJump', 'WallJump', ('HC', 2)}), frozenset({'Dash', 'ChargeJump', ('HC', 2)})}}, 'expert-abilities': {'AboveChargeJumpArea': {frozenset({'Climb', 'Dash', 'ChargeJump', ('AC', 6)})}}, 'master-core': {'AboveChargeJumpArea': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}}}, 'ChargeJumpDoor': {'casual-core': {'ChargeJumpDoorOpen': {frozenset({('KS', 4)})}}}, 'ChargeJumpDoorOpen': {'casual-core': {'ChargeJumpArea': {frozenset({'Glide'})}}, 'master-dboost': {'ChargeJumpArea': {frozenset({('AC', 12), 'Dash', 'ChargeJump', 'DoubleJump', ('HC', 1)}), frozenset({('AC', 12), 'Dash', ('HC', 1), 'Grenade', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({('HC', 4), ('AC', 12), 'Grenade', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', ('HC', 7)}), frozenset({('HC', 10), ('AC', 12), 'Grenade', 'Bash', 'DoubleJump', 'WallJump'})}, 'ChargeJumpDoorOpenLeft': {frozenset({'ChargeJump', ('HC', 2)})}}, 'expert-dboost': {'ChargeJumpDoorOpenLeft': {frozenset({('HC', 3), 'ChargeJump'})}}, 'master-lure': {'ChargeJumpDoorOpenLeft': {frozenset({'Bash'})}}}, 'ChargeJumpDoorOpenLeft': {'casual-core': {'UpperSorrow': {frozenset({'Glide'})}}, 'master-dboost': {'UpperSorrow': {frozenset({('AC', 12), 'ChargeJump', 'DoubleJump', ('HC', 7)}), frozenset({('AC', 6), ('HC', 6), 'Dash', ('EC', 2), 'ChargeJump'}), frozenset({('HC', 4), ('AC', 12), 'Dash', ('EC', 2), 'ChargeJump'})}}, 'master-lure': {'UpperSorrow': {frozenset({'Bash'})}}}, 'DashArea': {'casual-core': {'DashPlantAccess': {frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide', 'WallJump'})}, 'GrenadeAreaAccess': {frozenset({'Stomp', 'Dash'}), frozenset({'Grenade', 'Stomp', 'Bash'}), frozenset({'Stomp', 'ChargeJump'})}, 'RazielNoArea': {frozenset({'Grenade', 'Dash', 'Bash'}), frozenset({'Dash', 'WallJump'}), frozenset({'Dash', 'ChargeJump'}), frozenset({'Climb', 'Dash', 'DoubleJump'})}}, 'standard-abilities': {'DashPlantAccess': {frozenset({'Climb', 'Dash', 'DoubleJump', ('AC', 3)}), frozenset({'Dash', ('AC', 3), 'DoubleJump', 'WallJump'})}, 'RazielNoArea': {frozenset({'ChargeJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Climb', 'Dash', ('AC', 3)}), frozenset({'WallJump'})}}, 'expert-core': {'DashPlantAccess': {frozenset({'Grenade', 'ChargeJump'}), frozenset({'Grenade', 'Glide'}), frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'Grenade', 'DoubleJump'})}, 'GrenadeAreaAccess': {frozenset({'Stomp'})}}, 'expert-abilities': {'DashPlantAccess': {frozenset({'Climb', 'Dash', ('AC', 6), ('EC', 2)}), frozenset({'Grenade', 'Dash', ('AC', 3)}), frozenset({'ChargeFlame', 'Dash', ('AC', 6), 'WallJump'}), frozenset({('EC', 2), 'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6), 'ChargeFlame'})}, 'RazielNoArea': {frozenset({'Climb'})}}, 'master-core': {'DashPlantAccess': {frozenset({'Glide', 'DoubleJump'}), frozenset({'Bash'}), frozenset({'Dash', 'DoubleJump'})}, 'GrenadeAreaAccess': {frozenset({'Bash'})}}, 'master-abilities': {'DashPlantAccess': {frozenset({'Climb', 'ChargeFlame', ('AC', 3)}), frozenset({'ChargeFlame', ('AC', 3), 'WallJump'}), frozenset({('AC', 12), 'DoubleJump'}), frozenset({'ChargeFlame', 'DoubleJump', ('AC', 3)})}, 'RazielNoArea': {frozenset({'DoubleJump'})}}, 'standard-core': {'GrenadeAreaAccess': {frozenset({'Climb', 'ChargeJump'})}, 'RazielNoArea': {frozenset({'Grenade', 'Bash'})}}, 'glitched': {'GrenadeAreaAccess': {frozenset({'Free'})}}, 'insane': {'GrenadeAreaAccess': {frozenset({'Free'})}}}, 'DeathGauntlet': {'casual-core': {'DeathGauntletMoat': {frozenset({'Water'})}, 'DeathGauntletDoor': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump'}), frozenset({'Glide'})}, 'DeathGauntletRoof': {frozenset({'ChargeJump'})}, 'MoonGrotto': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}}, 'expert-dboost': {'DeathGauntletMoat': {frozenset({('HC', 1)})}}, 'master-dboost': {'DeathGauntletMoat': {frozenset({('HC', 0)})}}, 'expert-core': {'DeathGauntletRoofPlantAccess': {frozenset({'ChargeFlame', 'Climb', 'DoubleJump'}), frozenset({'ChargeFlame', 'Bash', 'WallJump'}), frozenset({'ChargeFlame', 'Bash', 'Grenade'}), frozenset({'ChargeFlame', 'DoubleJump', 'WallJump'}), frozenset({'ChargeFlame', 'Bash', 'Climb'})}}, 'master-core': {'DeathGauntletRoofPlantAccess': {frozenset({'ChargeFlame', 'DoubleJump'})}}, 'master-abilities': {'DeathGauntletRoofPlantAccess': {frozenset({'ChargeFlame', ('AC', 3)})}}, 'master-lure': {'MoonGrotto': {frozenset({'Dash', ('AC', 6), ('EC', 1)}), frozenset({'Bash'})}, 'MoonGrottoAboveTeleporter': {frozenset({'Bash'})}}}, 'DeathGauntletDoor': {'casual-core': {'DeathGauntletDoorOpened': {frozenset({('EC', 4)})}}, 'glitched': {'DeathGauntletDoorOpened': {frozenset({('EC', 3)})}}, 'timed-level': {'DeathGauntletDoorOpened': {frozenset({('EC', 2)})}}}, 'DeathGauntletDoorOpened': {'casual-core': {'DeathGauntlet': {frozenset({'Climb', 'Glide', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Glide', 'Bash'}), frozenset({'WallJump', 'Water'}), frozenset({'Climb', 'Water'}), frozenset({'Bash', 'Water'}), frozenset({'Glide', 'DoubleJump', 'WallJump'})}, 'DeathGauntletMoat': {frozenset({'Water'})}}, 'standard-dboost': {'DeathGauntlet': {frozenset({'Climb', ('HC', 1)}), frozenset({'WallJump', ('HC', 1)}), frozenset({'Bash', ('HC', 1)})}}, 'expert-dboost': {'DeathGauntlet': {frozenset({'Climb', ('HC', 0)}), frozenset({'Bash', ('HC', 0)}), frozenset({('HC', 0), 'WallJump'})}, 'DeathGauntletMoat': {frozenset({('HC', 2)})}}, 'expert-abilities': {'DeathGauntlet': {frozenset({'Dash', ('AC', 6), ('EC', 1)})}}, 'master-core': {'DeathGauntlet': {frozenset({'DoubleJump'})}}, 'master-dboost': {'DeathGauntletMoat': {frozenset({('HC', 1)})}}}, 'DeathGauntletRoof': {'casual-core': {'DeathGauntlet': {frozenset({'Stomp'})}}, 'standard-lure': {'DeathGauntlet': {frozenset({'Free'})}}}, 'DoubleJumpKeyDoor': {'casual-core': {'DoubleJumpKeyDoorOpened': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}}, 'expert-core': {'DoubleJumpKeyDoorOpened': {frozenset({'DoubleJump'})}}}, 'ForlornGravityRoom': {'casual-core': {'ForlornMapArea': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'ForlornInnerDoor': {frozenset({'Climb', 'Glide', 'DoubleJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Bash'}), frozenset({'Glide', 'DoubleJump', 'WallJump'})}}, 'master-core': {'ForlornMapArea': {frozenset({'DoubleJump'})}}, 'master-lure': {'ForlornMapArea': {frozenset({'Bash'})}}, 'standard-dboost': {'ForlornInnerDoor': {frozenset({('HC', 1)})}}, 'standard-core': {'ForlornInnerDoor': {frozenset({'Dash', 'DoubleJump'})}}, 'standard-abilities': {'ForlornInnerDoor': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'expert-core': {'ForlornInnerDoor': {frozenset({'ChargeJump'})}}, 'master-dboost': {'ForlornInnerDoor': {frozenset({('AC', 12), ('HC', 0)})}}}, 'ForlornInnerDoor': {'casual-core': {'ForlornOuterDoor': {frozenset({'ForlornKey'})}, 'ForlornOrbPossession': {frozenset({'Climb', 'Glide', 'Open'}), frozenset({'Open', 'ChargeJump'}), frozenset({'Grenade', 'Bash', 'Open'}), frozenset({'Glide', 'WallJump', 'Open'}), frozenset({'Open', 'DoubleJump'})}, 'ForlornGravityRoom': {frozenset({'Climb', 'Glide', 'DoubleJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Glide', 'DoubleJump', 'WallJump'})}}, 'standard-core': {'ForlornOrbPossession': {frozenset({'Dash', 'WallJump', 'Open'}), frozenset({'Climb', 'Dash', 'Open'})}, 'ForlornGravityRoom': {frozenset({'Climb', 'Dash', 'DoubleJump'}), frozenset({'Dash', 'DoubleJump', 'WallJump'})}}, 'expert-core': {'ForlornOrbPossession': {frozenset({'Open'})}, 'ForlornGravityRoom': {frozenset({'ChargeJump'})}}, 'standard-dboost': {'ForlornGravityRoom': {frozenset({'DoubleJump', 'WallJump', ('HC', 1)}), frozenset({'ChargeJump', ('HC', 1)}), frozenset({'Climb', 'DoubleJump', ('HC', 1)})}}, 'standard-abilities': {'ForlornGravityRoom': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'expert-dboost': {'ForlornGravityRoom': {frozenset({'WallJump', ('HC', 1)})}}, 'master-dboost': {'ForlornGravityRoom': {frozenset({('AC', 12), ('HC', 0), 'WallJump'})}}}, 'ForlornKeyDoor': {'casual-core': {'ForlornLaserRoom': {frozenset({'ForlornKey', ('KS', 4)})}}}, 'ForlornLaserRoom': {'casual-core': {'ForlornStompDoor': {frozenset({'Grenade', 'Stomp', 'Bash'}), frozenset({'Glide', 'Stomp', 'ChargeJump'})}}, 'standard-abilities': {'ForlornStompDoor': {frozenset({'Dash', 'Glide', ('AC', 3), 'Stomp', 'DoubleJump', ('HC', 1)}), frozenset({'Dash', ('HC', 1), 'Stomp', 'ChargeJump', ('AC', 3)}), frozenset({'Dash', 'Stomp', 'ChargeJump', 'DoubleJump', ('AC', 3)})}}, 'standard-dboost': {'ForlornStompDoor': {frozenset({'Stomp', 'ChargeJump', 'DoubleJump', ('HC', 1)})}}, 'expert-abilities': {'ForlornStompDoor': {frozenset({'Stomp', ('AC', 6), 'Dash', 'DoubleJump'}), frozenset({'Climb', 'Stomp', ('AC', 6), 'Dash'}), frozenset({('AC', 6), 'Stomp', 'ChargeJump', 'Dash'}), frozenset({'Stomp', ('AC', 6), 'Dash', 'WallJump'})}}, 'master-abilities': {'ForlornStompDoor': {frozenset({'Glide', 'Stomp', ('AC', 12), 'DoubleJump'}), frozenset({'Stomp', 'ChargeJump', 'DoubleJump', ('AC', 12)})}}, 'master-lure': {'ForlornStompDoor': {frozenset({'Stomp', 'Bash'})}}, 'gjump': {'ForlornStompDoor': {frozenset({'Climb', 'Stomp', 'ChargeJump', 'Grenade'})}}}, 'ForlornMapArea': {'casual-core': {'ForlornTeleporter': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Climb', 'DoubleJump'})}, 'ForlornPlantAccess': {frozenset({'Grenade', 'ForlornKey', 'WallJump', 'Bash'}), frozenset({'ForlornKey', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'ForlornKey', 'ChargeJump'}), frozenset({'Grenade', 'ForlornKey', 'Climb', 'Bash'})}}, 'standard-abilities': {'ForlornTeleporter': {frozenset({'Glide', 'Dash', ('AC', 3), 'WallJump'}), frozenset({'Climb', 'Dash', 'Glide', ('AC', 3)}), frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'standard-dboost': {'ForlornTeleporter': {frozenset({'ChargeJump', ('HC', 1)})}}, 'master-core': {'ForlornTeleporter': {frozenset({'DoubleJump'})}, 'ForlornPlantAccess': {frozenset({'Grenade', 'ForlornKey', 'DoubleJump', 'Bash'}), frozenset({'ForlornKey', 'ChargeJump', 'DoubleJump'})}}, 'master-lure': {'ForlornTeleporter': {frozenset({'Bash'})}}, 'master-dboost': {'ForlornTeleporter': {frozenset({('AC', 12), 'ChargeJump', ('HC', 0)})}}}, 'ForlornOrbPossession': {'casual-core': {'ForlornPlantAccess': {frozenset({'ForlornKey'})}, 'ForlornInnerDoor': {frozenset({'Climb', 'Glide', 'DoubleJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Bash'}), frozenset({'Glide', 'DoubleJump', 'WallJump'})}}, 'standard-dboost': {'ForlornInnerDoor': {frozenset({('HC', 1)})}}, 'standard-core': {'ForlornInnerDoor': {frozenset({'Dash', 'DoubleJump'})}}, 'standard-abilities': {'ForlornInnerDoor': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'expert-core': {'ForlornInnerDoor': {frozenset({'ChargeJump'})}}, 'master-dboost': {'ForlornInnerDoor': {frozenset({('AC', 12), ('HC', 0)})}}}, 'ForlornStompDoor': {'casual-core': {'RightForlorn': {frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Bash', 'ChargeJump'}), frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}}, 'standard-abilities': {'RightForlorn': {frozenset({'Dash', 'ChargeJump', ('AC', 3)}), frozenset({'Climb', 'Dash', 'DoubleJump', ('AC', 3)}), frozenset({'Dash', ('AC', 3), 'DoubleJump', 'WallJump'})}}, 'standard-dboost': {'RightForlorn': {frozenset({'DoubleJump', 'WallJump', ('HC', 1)}), frozenset({'Climb', 'DoubleJump', ('HC', 1)})}}, 'expert-dboost': {'RightForlorn': {frozenset({'Climb', ('HC', 1)}), frozenset({'WallJump', ('HC', 1)})}}, 'master-dboost': {'RightForlorn': {frozenset({'Climb', ('AC', 12), ('HC', 0)}), frozenset({('AC', 12), ('HC', 0), 'WallJump'})}}, 'master-lure': {'RightForlorn': {frozenset({'Bash'})}}, 'master-abilities': {'RightForlorn': {frozenset({('AC', 12), 'DoubleJump'})}}}, 'ForlornTeleporter': {'casual-core': {'ForlornOrbPossession': {frozenset({'ForlornKey', 'Open'})}, 'ForlornMapArea': {frozenset({'Grenade', 'Bash'}), frozenset({'Glide'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}}}, 'GinsoEscape': {'casual-core': {'GinsoEscapeComplete': {frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'DoubleJump'})}}, 'standard-core': {'GinsoEscapeComplete': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}}, 'expert-core': {'GinsoEscapeComplete': {frozenset({'Climb', 'ChargeJump', 'DoubleJump'})}}, 'expert-dboost': {'GinsoEscapeComplete': {frozenset({'Climb', 'ChargeJump', ('HC', 0)}), frozenset({('AC', 6), ('HC', 0), 'Dash', 'ChargeJump', 'DoubleJump'}), frozenset({'ChargeJump', ('HC', 6), 'WallJump'})}}, 'dbash': {'GinsoEscapeComplete': {frozenset({'Bash'})}}, 'master-dboost': {'GinsoEscapeComplete': {frozenset({('HC', 3), ('AC', 12), 'DoubleJump', 'WallJump'}), frozenset({'Climb', ('AC', 12), 'DoubleJump', ('HC', 7)}), frozenset({('HC', 4), 'ChargeJump', 'DoubleJump'})}}, 'insane': {'GinsoEscapeComplete': {frozenset({('HC', 9), ('AC', 12), 'DoubleJump'})}}}, 'GinsoInnerDoor': {'casual-core': {'LowerGinsoTree': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}}, 'master-core': {'LowerGinsoTree': {frozenset({'DoubleJump'})}}, 'master-abilities': {'LowerGinsoTree': {frozenset({'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6)})}}}, 'GinsoMiniBossDoor': {'casual-core': {'BashTreeDoorClosed': {frozenset({'Free'})}}}, 'GinsoTeleporter': {'casual-core': {'TopGinsoTree': {frozenset({'Bash', 'GinsoKey', 'DoubleJump', 'WallJump'}), frozenset({'GinsoKey', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'GinsoKey', 'DoubleJump'}), frozenset({'Climb', 'GinsoKey', 'ChargeJump'})}, 'UpperGinsoDoorClosed': {frozenset({'Open'})}}, 'standard-core': {'TopGinsoTree': {frozenset({'Grenade', 'GinsoKey', 'DoubleJump', 'WallJump'}), frozenset({'ChargeFlame', 'GinsoKey', 'DoubleJump', 'WallJump'})}}, 'expert-core': {'TopGinsoTree': {frozenset({'Stomp', 'GinsoKey', 'DoubleJump', 'WallJump'}), frozenset({'GinsoKey', 'ChargeJump'})}}, 'master-abilities': {'TopGinsoTree': {frozenset({'ChargeFlame', ('AC', 12), 'GinsoKey', 'DoubleJump'}), frozenset({'Grenade', ('AC', 12), 'GinsoKey', 'DoubleJump'}), frozenset({'Stomp', 'GinsoKey', 'DoubleJump', ('AC', 12)})}}}, 'GladesLaserArea': {'casual-core': {'MidSpiritCaverns': {frozenset({('EC', 4), 'DoubleJump'}), frozenset({('EC', 4), 'WallJump'}), frozenset({'Grenade', 'Bash', ('EC', 4)}), frozenset({'Climb', ('EC', 4)}), frozenset({'ChargeJump', ('EC', 4)})}}, 'expert-core': {'MidSpiritCaverns': {frozenset({'Dash', ('EC', 4)})}}, 'dbash': {'MidSpiritCaverns': {frozenset({'Bash', ('EC', 4)})}}, 'timed-level': {'MidSpiritCaverns': {frozenset({'Climb', ('EC', 2)}), frozenset({('EC', 2), 'WallJump'}), frozenset({('EC', 2), 'DoubleJump'}), frozenset({('EC', 2), 'Dash'}), frozenset({('EC', 2), 'ChargeJump'}), frozenset({('EC', 2), 'Bash'})}}}, 'GladesMain': {'casual-core': {'GladesMainAttic': {frozenset({'ChargeJump'}), frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'}), frozenset({'Grenade', 'Bash'})}, 'GladesLaserArea': {frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Glide', 'Bash', 'DoubleJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'Bash', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'})}, 'LowerChargeFlameArea': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}}, 'standard-core': {'GladesMainAttic': {frozenset({'DoubleJump', 'WallJump'})}}, 'expert-core': {'GladesMainAttic': {frozenset({'Climb', 'DoubleJump'}), frozenset({'Bash'})}, 'GladesLaserArea': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}}, 'expert-abilities': {'GladesMainAttic': {frozenset({'Dash', ('AC', 6)})}, 'GladesLaserArea': {frozenset({'Dash', ('AC', 6)})}, 'LowerChargeFlameArea': {frozenset({'Dash', ('AC', 6)})}}, 'dbash': {'GladesMainAttic': {frozenset({'Bash'})}, 'GladesLaserArea': {frozenset({'Bash'})}}, 'master-core': {'GladesMainAttic': {frozenset({'DoubleJump'})}}}, 'GladesMainAttic': {'glitched': {'LowerChargeFlameArea': {frozenset({'Dash'})}}}, 'GrenadeAreaAccess': {'casual-core': {'GrenadeArea': {frozenset({'Dash'})}, 'LowerBlackroot': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump'})}}, 'expert-core': {'GrenadeArea': {frozenset({'DoubleJump'}), frozenset({'Grenade', 'Bash'})}}, 'gjump': {'GrenadeArea': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'glitched': {'GrenadeArea': {frozenset({'Free'})}}, 'insane': {'GrenadeArea': {frozenset({'Free'})}}, 'casual-dboost': {'LowerBlackroot': {frozenset({'Free'})}}, 'standard-core': {'LowerBlackroot': {frozenset({'Grenade', 'Bash'})}}, 'expert-abilities': {'LowerBlackroot': {frozenset({'Dash', ('AC', 3)})}}, 'dbash': {'LowerBlackroot': {frozenset({'Bash'})}}}, 'GumoHideout': {'casual-core': {'DoubleJumpKeyDoor': {frozenset({('KS', 2)})}, 'LeftGumoHideout': {frozenset({'ChargeJump', 'WallJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'ChargeJump'})}, 'SideFallCell': {frozenset({'Glide', 'Wind'}), frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'Bash', 'Grenade'}), frozenset({'ChargeJump', 'WallJump'})}}, 'expert-core': {'LeftGumoHideout': {frozenset({'ChargeJump'})}}, 'master-core': {'LeftGumoHideout': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}, 'LowerLeftGumoHideout': {frozenset({'Climb', 'Dash'}), frozenset({'Dash', 'WallJump'}), frozenset({'DoubleJump'})}}, 'master-abilities': {'LeftGumoHideout': {frozenset({('AC', 12), 'DoubleJump'})}}, 'dbash': {'SideFallCell': {frozenset({'Bash'})}}}, 'GumoHideoutRedirectArea': {'casual-core': {'GumoHideoutRedirectEnergyVault': {frozenset({('EC', 4)})}}, 'glitched': {'GumoHideoutRedirectEnergyVault': {frozenset({'Free'})}}}, 'HollowGrove': {'casual-core': {'SpiderWaterArea': {frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'Water'}), frozenset({'DoubleJump'})}, 'SwampTeleporter': {frozenset({'Glide', 'Wind'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'})}, 'OuterSwampUpperArea': {frozenset({'Glide', 'Wind'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'})}, 'HoruFields': {frozenset({'Bash'})}, 'Iceless': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}}, 'standard-core': {'SpiderWaterArea': {frozenset({'Bash'})}, 'HoruFields': {frozenset({'Climb', 'Stomp', 'DoubleJump'}), frozenset({'Stomp', 'WallJump'}), frozenset({'Stomp', 'ChargeJump'})}}, 'master-core': {'SpiderWaterArea': {frozenset({'Free'})}, 'SwampTeleporter': {frozenset({'DoubleJump'})}, 'OuterSwampUpperArea': {frozenset({'DoubleJump'})}, 'HoruFields': {frozenset({'DoubleJump'})}, 'Iceless': {frozenset({'DoubleJump'}), frozenset({'WallJump'})}}, 'standard-abilities': {'HoruFields': {frozenset({'Climb', 'Stomp', 'Dash', ('AC', 3)})}}, 'expert-core': {'HoruFields': {frozenset({'ChargeJump'}), frozenset({'WallJump'})}}, 'expert-abilities': {'HoruFields': {frozenset({'Climb', 'Dash', ('AC', 3)})}, 'Iceless': {frozenset({'Dash', ('AC', 6)})}}, 'standard-lure': {'Iceless': {frozenset({'Bash'})}}, 'master-lure': {'MoonGrottoStompPlantAccess': {frozenset({'Dash', ('AC', 6)}), frozenset({'WallJump', ('HC', 1)}), frozenset({'ChargeJump', ('HC', 1)}), frozenset({'DoubleJump'}), frozenset({'Glide', 'WallJump'})}}}, 'HoruBasement': {'casual-core': {'HoruEscapeOuterDoor': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Dash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}}}, 'HoruFields': {'casual-core': {'HoruFieldsPushBlock': {frozenset({'Glide', 'Bash'}), frozenset({'Bash', 'DoubleJump'})}, 'HoruOuterDoor': {frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb'})}}, 'standard-core': {'HoruFieldsPushBlock': {frozenset({'Glide', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'Glide', 'ChargeJump', 'DoubleJump'})}, 'HoruOuterDoor': {frozenset({'Grenade', 'Bash'}), frozenset({'Glide', 'ChargeJump'})}}, 'standard-abilities': {'HoruFieldsPushBlock': {frozenset({'Climb', 'Dash', 'Glide', 'ChargeJump', ('AC', 3)}), frozenset({'WallJump', 'Dash', 'Glide', 'ChargeJump', ('AC', 3)})}}, 'expert-core': {'HoruFieldsPushBlock': {frozenset({'Glide', 'ChargeJump', 'DoubleJump'})}}, 'expert-abilities': {'HoruFieldsPushBlock': {frozenset({('AC', 6), 'Dash', 'ChargeJump', ('EC', 4)}), frozenset({('AC', 6), 'Dash', ('EC', 3), 'Glide', 'ChargeJump'})}}, 'dbash': {'HoruFieldsPushBlock': {frozenset({'Bash'})}}, 'master-abilities': {'HoruFieldsPushBlock': {frozenset({('EC', 4), ('AC', 12), 'Climb', 'Dash', 'DoubleJump'}), frozenset({('AC', 12), 'Dash', ('EC', 5), 'DoubleJump', 'WallJump'})}, 'HoruOuterDoor': {frozenset({('AC', 12), 'Dash', ('EC', 3), 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 12), 'DoubleJump'}), frozenset({('AC', 12), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'})}}, 'gjump': {'HoruFieldsPushBlock': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}, 'HoruOuterDoor': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'master-core': {'HoruOuterDoor': {frozenset({'Bash'})}}}, 'HoruFieldsPushBlock': {'master-lure': {'HollowGrove': {frozenset({'Bash'})}}}, 'HoruInnerDoor': {'casual-core': {'HoruMapLedge': {frozenset({'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'Bash', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'Climb', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb', 'ChargeJump'})}, 'L1OuterDoor': {frozenset({'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'Bash', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'Climb', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb', 'ChargeJump'})}, 'L2OuterDoor': {frozenset({'ChargeJump', 'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Stomp', 'ChargeJump', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'ChargeJump', 'Glide', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Open', 'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Stomp', 'ChargeJump', 'DoubleJump', 'Bash'}), frozenset({'Open', 'Climb', 'Glide', 'ChargeJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'Open', 'Climb', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Open', 'Glide', 'ChargeJump', 'WallJump', 'Bash'})}, 'L3OuterDoor': {frozenset({'ChargeJump', 'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Stomp', 'ChargeJump', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'ChargeJump', 'Glide', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Open', 'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Stomp', 'ChargeJump', 'DoubleJump', 'Bash'}), frozenset({'Open', 'Climb', 'Glide', 'ChargeJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'Open', 'Climb', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Open', 'Glide', 'ChargeJump', 'WallJump', 'Bash'})}, 'L4OuterDoor': {frozenset({'ChargeJump', 'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Open', 'ChargeJump'}), frozenset({'Stomp', 'ChargeJump', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'Open', 'Bash'}), frozenset({'ChargeJump', 'Glide', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Climb', 'Stomp', 'ChargeJump', 'DoubleJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump', 'Bash'})}, 'R1OuterDoor': {frozenset({'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'Bash', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'Climb', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb', 'ChargeJump'})}, 'R2OuterDoor': {frozenset({'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'Bash', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Open', 'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Open', 'Climb', 'Glide', 'ChargeJump', 'Bash'}), frozenset({'Glide', 'Bash', 'Climb', 'DoubleJump'}), frozenset({'Open', 'Climb', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Open', 'Glide', 'ChargeJump', 'WallJump', 'Bash'}), frozenset({'Glide', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb', 'ChargeJump'})}, 'R3OuterDoor': {frozenset({'ChargeJump', 'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Stomp', 'ChargeJump', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'ChargeJump', 'Glide', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Open', 'Bash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Stomp', 'ChargeJump', 'DoubleJump', 'Bash'}), frozenset({'Open', 'Climb', 'Glide', 'ChargeJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'Open', 'Climb', 'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Open', 'Glide', 'ChargeJump', 'WallJump', 'Bash'})}, 'R4OuterDoor': {frozenset({'ChargeJump', 'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Stomp', 'ChargeJump', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'Grenade', 'Open', 'Bash'}), frozenset({'Open', 'ChargeJump', 'DoubleJump'}), frozenset({'ChargeJump', 'Glide', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Open', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Stomp', 'ChargeJump', 'DoubleJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'Climb', 'Open', 'ChargeJump'})}, 'HoruBasement': {frozenset({'ChargeJump', 'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Stomp', 'ChargeJump', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'Open'}), frozenset({'ChargeJump', 'Glide', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Climb', 'Stomp', 'ChargeJump', 'DoubleJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump', 'Bash'})}, 'HoruTeleporter': {frozenset({'ChargeJump', 'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Stomp', 'ChargeJump', 'DoubleJump', 'WallJump', 'Bash'}), frozenset({'Open'}), frozenset({'ChargeJump', 'Glide', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Glide', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Climb', 'Stomp', 'ChargeJump', 'DoubleJump', 'Bash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump', 'Bash'})}}, 'expert-core': {'HoruMapLedge': {frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Grenade', 'Bash', 'WallJump'})}, 'L1OuterDoor': {frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Grenade', 'Bash', 'WallJump'})}, 'L2OuterDoor': {frozenset({'Grenade', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Grenade', 'Stomp', 'Climb', 'Bash'})}, 'L3OuterDoor': {frozenset({'Grenade', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Grenade', 'Stomp', 'Climb', 'Bash'})}, 'L4OuterDoor': {frozenset({'Grenade', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Grenade', 'Stomp', 'Climb', 'Bash'})}, 'R1OuterDoor': {frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Grenade', 'Bash', 'WallJump'})}, 'R2OuterDoor': {frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Grenade', 'Bash', 'WallJump'})}, 'R3OuterDoor': {frozenset({'Grenade', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Grenade', 'Stomp', 'Climb', 'Bash'})}, 'R4OuterDoor': {frozenset({'Grenade', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Grenade', 'Stomp', 'Climb', 'Bash'})}, 'HoruBasement': {frozenset({'Free'})}, 'HoruTeleporter': {frozenset({'Grenade', 'Stomp', 'WallJump', 'Bash'}), frozenset({'Grenade', 'Stomp', 'Climb', 'Bash'})}}, 'dbash': {'HoruMapLedge': {frozenset({'Bash'})}, 'L1OuterDoor': {frozenset({'Bash'})}, 'L2OuterDoor': {frozenset({'Open', 'Bash'})}, 'L3OuterDoor': {frozenset({'Open', 'Bash'})}, 'R1OuterDoor': {frozenset({'Bash'})}, 'R2OuterDoor': {frozenset({'Open', 'Bash'})}, 'R3OuterDoor': {frozenset({'Open', 'Bash'})}, 'R4OuterDoor': {frozenset({'Open', 'Bash'})}}, 'master-dboost': {'HoruMapLedge': {frozenset({('AC', 12), ('HC', 1), 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'L1OuterDoor': {frozenset({('AC', 12), ('HC', 5), 'Glide', 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'L2OuterDoor': {frozenset({'ChargeJump', ('AC', 12), ('HC', 5), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'})}, 'L3OuterDoor': {frozenset({'ChargeJump', ('AC', 12), ('HC', 5), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'})}, 'L4OuterDoor': {frozenset({'ChargeJump', ('AC', 12), ('HC', 5), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'})}, 'R1OuterDoor': {frozenset({('AC', 12), ('HC', 5), 'Glide', 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'R2OuterDoor': {frozenset({('AC', 12), ('HC', 5), 'Glide', 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'R3OuterDoor': {frozenset({'ChargeJump', ('AC', 12), ('HC', 5), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'})}, 'R4OuterDoor': {frozenset({'ChargeJump', ('AC', 12), ('HC', 5), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'})}, 'HoruBasement': {frozenset({'ChargeJump', ('AC', 12), ('HC', 5), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'})}, 'HoruTeleporter': {frozenset({'ChargeJump', ('AC', 12), ('HC', 5), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'})}}, 'standard-core': {'L2OuterDoor': {frozenset({'Glide', 'Open', 'DoubleJump', 'Bash'}), frozenset({'Climb', 'Open', 'ChargeJump', 'Bash'}), frozenset({'Grenade', 'Open', 'Bash'}), frozenset({'Open', 'ChargeJump', 'WallJump', 'Bash'}), frozenset({'Glide', 'Open', 'ChargeJump', 'WallJump'}), frozenset({'Open', 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'L3OuterDoor': {frozenset({'Glide', 'Open', 'DoubleJump', 'Bash'}), frozenset({'Climb', 'Open', 'ChargeJump', 'Bash'}), frozenset({'Grenade', 'Open', 'Bash'}), frozenset({'Open', 'ChargeJump', 'WallJump', 'Bash'}), frozenset({'Glide', 'Open', 'ChargeJump', 'WallJump'}), frozenset({'Open', 'ChargeJump', 'DoubleJump', 'WallJump'})}, 'R2OuterDoor': {frozenset({'Glide', 'Open', 'DoubleJump', 'Bash'}), frozenset({'Open', 'Dash', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Open', 'ChargeJump', 'Bash'}), frozenset({'Grenade', 'Open', 'Bash'}), frozenset({'Open', 'Dash', 'Glide', 'ChargeJump', 'WallJump'}), frozenset({'Open', 'ChargeJump', 'WallJump', 'Bash'})}, 'R3OuterDoor': {frozenset({'Glide', 'Open', 'DoubleJump', 'Bash'}), frozenset({'Climb', 'Open', 'ChargeJump', 'Bash'}), frozenset({'Grenade', 'Open', 'Bash'}), frozenset({'Open', 'ChargeJump', 'WallJump', 'Bash'}), frozenset({'Glide', 'Open', 'ChargeJump', 'WallJump'}), frozenset({'Open', 'ChargeJump', 'DoubleJump', 'WallJump'})}}, 'expert-dboost': {'L2OuterDoor': {frozenset({'ChargeJump', 'WallJump', ('HC', 2)})}, 'L3OuterDoor': {frozenset({'ChargeJump', 'WallJump', ('HC', 2)})}, 'R3OuterDoor': {frozenset({'ChargeJump', 'WallJump', ('HC', 2)})}}, 'expert-abilities': {'L2OuterDoor': {frozenset({'Open', ('AC', 6), 'Dash', 'WallJump'}), frozenset({'Climb', 'Open', ('AC', 6), 'Dash'})}, 'L3OuterDoor': {frozenset({'Open', ('AC', 6), 'Dash', 'WallJump'}), frozenset({'Climb', 'Open', ('AC', 6), 'Dash'})}, 'L4OuterDoor': {frozenset({'Open', ('AC', 6), 'Dash'})}, 'R2OuterDoor': {frozenset({'Open', ('AC', 6), 'Dash', 'WallJump'}), frozenset({'Climb', 'Open', ('AC', 6), 'Dash'})}, 'R3OuterDoor': {frozenset({'Open', ('AC', 6), 'Dash', 'WallJump'}), frozenset({'Climb', 'Open', ('AC', 6), 'Dash'})}, 'R4OuterDoor': {frozenset({'Open', ('AC', 6), 'Dash'})}}, 'master-abilities': {'L2OuterDoor': {frozenset({'Open', 'ChargeJump', 'DoubleJump', ('AC', 12)})}, 'L3OuterDoor': {frozenset({'Open', 'ChargeJump', 'DoubleJump', ('AC', 12)})}, 'R2OuterDoor': {frozenset({'Open', 'ChargeJump', 'DoubleJump', ('AC', 12)})}, 'R3OuterDoor': {frozenset({'Open', 'ChargeJump', 'DoubleJump', ('AC', 12)})}}, 'gjump': {'L2OuterDoor': {frozenset({'Climb', 'Open', 'ChargeJump', 'Grenade'})}, 'L3OuterDoor': {frozenset({'Climb', 'Open', 'ChargeJump', 'Grenade'})}, 'R2OuterDoor': {frozenset({'Climb', 'Open', 'ChargeJump', 'Grenade'})}, 'R3OuterDoor': {frozenset({'Climb', 'Open', 'ChargeJump', 'Grenade'})}}}, 'HoruL4LavaChasePeg': {'casual-core': {'HoruL4CutscenePeg': {frozenset({'Bash', 'Stomp', 'ChargeJump'}), frozenset({'Grenade', 'Bash', 'Stomp'})}}, 'standard-core': {'HoruL4CutscenePeg': {frozenset({'Bash', 'Stomp', 'DoubleJump', 'WallJump'})}}, 'expert-core': {'HoruL4CutscenePeg': {frozenset({'Climb', 'Bash', 'Stomp', 'DoubleJump'})}}, 'expert-abilities': {'HoruL4CutscenePeg': {frozenset({('AC', 6), 'Dash', ('EC', 2), 'Bash', 'Stomp'})}}, 'master-core': {'HoruL4CutscenePeg': {frozenset({'Bash', 'Stomp', 'DoubleJump'})}}}, 'HoruOuterDoor': {'casual-core': {'HoruInnerDoor': {frozenset({'HoruKey'})}, 'HoruFieldsPushBlock': {frozenset({'Grenade', 'Bash'}), frozenset({'Glide', 'Bash'}), frozenset({'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'})}}, 'standard-core': {'HoruFieldsPushBlock': {frozenset({'Dash', 'DoubleJump', 'Bash'})}}, 'standard-abilities': {'HoruFieldsPushBlock': {frozenset({'Climb', 'Dash', 'Glide', 'ChargeJump', ('AC', 3)}), frozenset({'WallJump', 'Dash', 'Glide', 'ChargeJump', ('AC', 3)})}}, 'expert-core': {'HoruFieldsPushBlock': {frozenset({'Glide', 'ChargeJump', 'DoubleJump'})}}, 'expert-abilities': {'HoruFieldsPushBlock': {frozenset({('AC', 6), 'Dash', 'ChargeJump'})}}, 'master-core': {'HoruFieldsPushBlock': {frozenset({'ChargeJump', 'DoubleJump'})}}, 'master-abilities': {'HoruFieldsPushBlock': {frozenset({'Bash', ('AC', 12), 'DoubleJump'})}}, 'gjump': {'HoruFieldsPushBlock': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}}, 'HoruR1CutsceneTrigger': {'glitched': {'LowerGinsoTree': {frozenset({'Dash'})}}}, 'HoruR1MapstoneSecret': {'casual-core': {'HoruR1CutsceneTrigger': {frozenset({'Glide', 'Bash', 'ChargeJump'}), frozenset({'Grenade', 'Bash', 'DoubleJump'}), frozenset({'Bash', 'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Glide'})}}, 'expert-core': {'HoruR1CutsceneTrigger': {frozenset({'Glide', 'Bash', 'DoubleJump'})}}, 'expert-dboost': {'HoruR1CutsceneTrigger': {frozenset({'Glide', 'ChargeJump', 'DoubleJump', ('HC', 2)}), frozenset({('AC', 6), ('EC', 1), 'Dash', ('HC', 2), 'ChargeJump'})}}, 'dbash': {'HoruR1CutsceneTrigger': {frozenset({'Glide', 'Bash'}), frozenset({'Bash', 'Dash', ('AC', 3)}), frozenset({'Bash', 'DoubleJump'})}}, 'master-core': {'HoruR1CutsceneTrigger': {frozenset({'Bash', 'DoubleJump'})}}, 'master-dboost': {'HoruR1CutsceneTrigger': {frozenset({('HC', 4), ('EC', 4), ('AC', 12), 'Dash', 'DoubleJump'})}}, 'gjump': {'HoruR1CutsceneTrigger': {frozenset({('AC', 12), 'Climb', 'Grenade', 'Glide', 'ChargeJump', ('HC', 1)}), frozenset({'Climb', ('HC', 2), 'Grenade', 'ChargeJump', 'DoubleJump'}), frozenset({'Climb', 'ChargeJump', 'Grenade', ('HC', 6)}), frozenset({('AC', 12), 'Climb', 'Grenade', 'ChargeJump', 'DoubleJump', ('HC', 1)}), frozenset({'Climb', ('HC', 2), 'Grenade', 'Glide', 'ChargeJump'})}}}, 'HoruR3ElevatorLever': {'casual-core': {'HoruR3CutsceneTrigger': {frozenset({'ChargeJump', 'WallJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'Glide', 'WallJump'})}}, 'casual-dboost': {'HoruR3CutsceneTrigger': {frozenset({'Climb', ('HC', -1), 'ChargeJump'})}}, 'standard-core': {'HoruR3CutsceneTrigger': {frozenset({'WallJump'})}}, 'master-core': {'HoruR3CutsceneTrigger': {frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'})}}, 'master-abilities': {'HoruR3CutsceneTrigger': {frozenset({('AC', 12), 'DoubleJump'})}, 'HoruR3PlantCove': {frozenset({'Glide', ('AC', 6), 'Dash', ('EC', 1)}), frozenset({('EC', 2), 'Dash', ('AC', 6)}), frozenset({'Dash', ('AC', 6), 'DoubleJump', ('EC', 1)}), frozenset({('AC', 6), 'Dash', 'ChargeJump', ('EC', 1)})}}}, 'HoruR4PuzzleEntrance': {'casual-core': {'HoruR4CutsceneTrigger': {frozenset({'Bash', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}}, 'expert-abilities': {'HoruR4CutsceneTrigger': {frozenset({('AC', 6), 'Dash', 'ChargeJump', ('EC', 2)})}}, 'gjump': {'HoruR4CutsceneTrigger': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}}, 'HoruR4StompHideout': {'casual-core': {'HoruR4PuzzleEntrance': {frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Glide', 'Bash', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb'})}}, 'standard-abilities': {'HoruR4PuzzleEntrance': {frozenset({'Dash', 'ChargeJump', ('AC', 3)}), frozenset({'Bash', 'Dash', ('AC', 3)})}}, 'expert-dboost': {'HoruR4PuzzleEntrance': {frozenset({'ChargeJump', ('HC', 2)}), frozenset({'Bash', ('HC', 2)})}, 'HoruR4CutsceneTrigger': {frozenset({'ChargeJump', 'DoubleJump', ('HC', 2)})}}, 'dbash': {'HoruR4PuzzleEntrance': {frozenset({'Bash'})}, 'HoruR4CutsceneTrigger': {frozenset({'Bash'})}}, 'master-dboost': {'HoruR4PuzzleEntrance': {frozenset({('AC', 12), 'DoubleJump', ('HC', 1)})}}, 'gjump': {'HoruR4PuzzleEntrance': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'expert-core': {'HoruR4CutsceneTrigger': {frozenset({'Bash', 'ChargeJump'})}}}, 'HoruTeleporter': {'casual-core': {'HoruInnerDoor': {frozenset({'Climb', 'Open', 'ChargeJump'}), frozenset({'Open', 'ChargeJump', 'WallJump'}), frozenset({'Grenade', 'Open', 'Bash'})}}, 'dbash': {'HoruInnerDoor': {frozenset({'Open', 'Bash'})}}, 'master-core': {'HoruInnerDoor': {frozenset({'Open', 'ChargeJump', 'DoubleJump'})}}, 'master-abilities': {'HoruInnerDoor': {frozenset({'Open', ('AC', 12), 'DoubleJump', 'WallJump'})}}}, 'Iceless': {'casual-core': {'UpperGrotto': {frozenset({'DoubleJump'}), frozenset({'Glide'})}}, 'standard-core': {'UpperGrotto': {frozenset({'Grenade', 'Bash'})}}, 'standard-dboost': {'UpperGrotto': {frozenset({('HC', 1)})}}, 'gjump': {'UpperGrotto': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}}, 'InnerSwampAboveDrainArea': {'casual-core': {'InnerSwampDrainBroken': {frozenset({'ChargeFlame', 'Water'}), frozenset({'Grenade'})}}, 'casual-dboost': {'InnerSwampDrainBroken': {frozenset({'ChargeFlame'})}}}, 'InnerSwampDrainBroken': {'casual-core': {'Swamp': {frozenset({'Climb', 'ChargeJump', 'Water'}), frozenset({'Climb', 'Bash', 'Grenade', 'Water'}), frozenset({'Glide', 'ChargeJump', 'WallJump'}), frozenset({'DoubleJump', 'WallJump', 'Water'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'Climb', 'Glide', 'ChargeJump'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'WallJump', 'Water'})}}, 'casual-dboost': {'Swamp': {frozenset({'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Glide', 'Water'}), frozenset({'Climb', 'ChargeJump'})}}, 'expert-core': {'Swamp': {frozenset({'DoubleJump', 'Water'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump'})}}, 'expert-dboost': {'Swamp': {frozenset({'ChargeJump'}), frozenset({'Climb', ('HC', 0), 'Water'})}}, 'master-core': {'Swamp': {frozenset({'Bash'})}}, 'standard-core': {'Swamp': {frozenset({'Climb', 'DoubleJump', 'Water'})}}, 'standard-abilities': {'Swamp': {frozenset({'Climb', 'Dash', ('AC', 3), 'Water'}), frozenset({'Dash', ('AC', 3), 'WallJump', 'Water'})}}, 'master-dboost': {'Swamp': {frozenset({('HC', 10), 'WallJump'}), frozenset({'Climb', ('HC', 4), ('AC', 12)}), frozenset({'Climb', ('HC', 10)}), frozenset({('HC', 10), 'DoubleJump'}), frozenset({('HC', 4), ('AC', 12), 'DoubleJump'}), frozenset({('HC', 4), ('AC', 12), 'WallJump'})}}}, 'L2OuterDoor': {'casual-core': {'HoruInnerDoor': {frozenset({'Stomp'})}}}, 'L3OuterDoor': {'casual-core': {'HoruInnerDoor': {frozenset({'Stomp'})}}}, 'L4': {'casual-core': {'HoruL4LavaChasePeg': {frozenset({'Bash'})}}, 'expert-core': {'HoruL4CutscenePeg': {frozenset({'Free'})}}}, 'LeftGlades': {'casual-core': {'UpperLeftGlades': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}}, 'standard-lure': {'UpperLeftGlades': {frozenset({'Bash'})}}, 'expert-core': {'UpperLeftGlades': {frozenset({'DoubleJump'})}}}, 'LeftGumoHideout': {'casual-core': {'WaterVeinArea': {frozenset({'Glide', 'Wind'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'WallJump'})}}, 'standard-core': {'WaterVeinArea': {frozenset({'Climb', 'DoubleJump'})}}, 'standard-abilities': {'WaterVeinArea': {frozenset({'Dash', ('AC', 3), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 3)})}}, 'master-core': {'WaterVeinArea': {frozenset({'Dash', 'WallJump'}), frozenset({'DoubleJump'})}}}, 'LeftSorrow': {'casual-core': {'LeftSorrowKeystones': {frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Glide'})}}, 'expert-dboost': {'LeftSorrowKeystones': {frozenset({'ChargeJump', 'WallJump', ('HC', 2)})}}, 'master-dboost': {'LeftSorrowKeystones': {frozenset({('AC', 12), 'ChargeJump', 'WallJump', ('HC', 1)})}}, 'master-abilities': {'LeftSorrowKeystones': {frozenset({'Climb', ('AC', 12), 'DoubleJump'}), frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}}, 'master-core': {'LeftSorrowKeystones': {frozenset({'Bash'})}}}, 'LeftSorrowKeystones': {'casual-core': {'LeftSorrowMiddleDoor': {frozenset({('KS', 4)})}}, 'standard-core': {'MiddleSorrow': {frozenset({'Bash', 'Dash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'Dash', 'DoubleJump'})}}, 'expert-abilities': {'MiddleSorrow': {frozenset({'Bash', ('AC', 6), 'Dash', 'WallJump'}), frozenset({'Climb', 'Bash', ('AC', 6), 'Dash'})}}, 'dbash': {'MiddleSorrow': {frozenset({'Bash'})}}, 'master-abilities': {'MiddleSorrow': {frozenset({'ChargeJump', ('AC', 12), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Dash', 'Stomp', 'ChargeJump', ('AC', 3)}), frozenset({('AC', 12), 'Climb', 'Stomp', 'ChargeJump', 'DoubleJump'}), frozenset({('AC', 6), 'Dash', 'Stomp', 'ChargeJump', 'WallJump'})}}}, 'LeftSorrowLowerDoor': {'casual-core': {'LeftSorrow': {frozenset({'Glide', 'Stomp', 'Bash'})}}, 'standard-core': {'LeftSorrow': {frozenset({'Climb', 'Bash', 'ChargeJump', 'Stomp'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({'Bash', 'ChargeJump', 'Stomp', 'WallJump'})}}, 'expert-dboost': {'LeftSorrow': {frozenset({'Climb', 'ChargeJump', ('HC', 2)})}}, 'dbash': {'LeftSorrow': {frozenset({'Bash', 'Stomp', ('HC', 2)}), frozenset({'Grenade', 'Bash', 'Stomp'}), frozenset({'Bash', 'Stomp', 'DoubleJump'})}}}, 'LeftSorrowMiddleDoor': {'casual-core': {'MiddleSorrow': {frozenset({'Bash', 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Glide', 'Stomp', 'Bash'}), frozenset({'Climb', 'Bash', 'Stomp', 'DoubleJump'}), frozenset({'Glide', 'Stomp', 'WallJump', 'Bash'})}}, 'standard-core': {'MiddleSorrow': {frozenset({'Climb', 'Bash', 'Stomp'}), frozenset({'Bash', 'Stomp', 'WallJump'}), frozenset({'Bash', 'Stomp', 'DoubleJump'})}}, 'expert-dboost': {'MiddleSorrow': {frozenset({'Climb', ('HC', 2), 'Bash', 'ChargeJump', 'DoubleJump'})}}, 'master-abilities': {'MiddleSorrow': {frozenset({('AC', 6), 'Climb', 'Dash', 'Bash', 'ChargeJump'}), frozenset({('AC', 6), 'Bash', 'Stomp', 'Dash'})}}, 'master-dboost': {'MiddleSorrow': {frozenset({('AC', 12), 'Climb', 'Bash', 'ChargeJump', 'DoubleJump', ('HC', 1)})}}, 'glitched': {'MiddleSorrow': {frozenset({'Dash'})}}}, 'LostGrove': {'casual-core': {'LostGroveExit': {frozenset({'Grenade', 'Bash', 'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'DoubleJump', 'WallJump'})}}, 'casual-dboost': {'LostGroveExit': {frozenset({'Grenade', 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Climb', 'ChargeJump', 'DoubleJump'})}}, 'expert-core': {'LostGroveExit': {frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Grenade', 'Glide', 'Climb', 'ChargeJump'}), frozenset({'Grenade', 'Bash', 'WallJump'})}}, 'expert-dboost': {'LostGroveExit': {frozenset({'Grenade', ('HC', 4), 'ChargeJump', 'WallJump'}), frozenset({'Grenade', 'Dash', 'ChargeJump', 'WallJump'}), frozenset({'Grenade', 'Climb', 'ChargeJump', ('HC', 4)}), frozenset({'Grenade', 'Glide', 'ChargeJump', 'WallJump'})}}, 'expert-abilities': {'LostGroveExit': {frozenset({'Climb', 'Dash', 'Grenade', 'ChargeJump', ('AC', 3)})}}, 'master-abilities': {'LostGroveExit': {frozenset({'Grenade', 'Climb', ('AC', 12), 'DoubleJump'}), frozenset({'Grenade', ('AC', 12), 'DoubleJump', 'WallJump'})}}, 'gjump': {'LostGroveExit': {frozenset({'Grenade', 'Climb', 'ChargeJump'})}}}, 'LowerBlackroot': {'casual-core': {'LostGrove': {frozenset({'Grenade', 'ChargeJump'}), frozenset({'Grenade', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'Grenade'})}}, 'expert-core': {'LostGrove': {frozenset({'Grenade', 'DoubleJump'})}}}, 'LowerChargeFlameArea': {'casual-core': {'GladesMain': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'ChargeFlameAreaStump': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}}, 'standard-core': {'GladesMain': {frozenset({'Stomp'})}}, 'expert-abilities': {'GladesMain': {frozenset({'Dash', ('AC', 6)})}}, 'master-core': {'ChargeFlameAreaStump': {frozenset({'DoubleJump'})}}, 'master-lure': {'ChargeFlameAreaStump': {frozenset({'ChargeFlame', 'Bash'}), frozenset({'Bash', ('AC', 6), 'Dash'}), frozenset({'Bash', 'Stomp'})}}}, 'LowerGinsoTree': {'casual-core': {'GinsoMiniBossDoor': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Climb', 'Glide'}), frozenset({'Grenade', 'Bash', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Glide'}), frozenset({'Glide', 'WallJump'})}}, 'standard-dboost': {'GinsoMiniBossDoor': {frozenset({'Climb', ('HC', 0)}), frozenset({('HC', 0), 'WallJump'}), frozenset({'ChargeJump', ('HC', 0)})}}, 'standard-abilities': {'GinsoMiniBossDoor': {frozenset({'Dash', 'ChargeJump', ('AC', 3)}), frozenset({'Dash', ('AC', 3), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 3)})}}, 'expert-core': {'GinsoMiniBossDoor': {frozenset({'WallJump'})}}, 'master-core': {'GinsoMiniBossDoor': {frozenset({'DoubleJump'}), frozenset({'Bash'})}}, 'glitched': {'R4InnerDoor': {frozenset({'Dash'})}}}, 'LowerLeftGumoHideout': {'glitched': {'LowerBlackroot': {frozenset({'Dash'})}}}, 'LowerSorrow': {'casual-core': {'WilhelmLedge': {frozenset({'Glide', 'DoubleJump'})}, 'SorrowMainShaftKeystoneArea': {frozenset({'Glide'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'Bash'}), frozenset({'ChargeJump', 'WallJump'}), frozenset({'Bash', 'WallJump'})}, 'SorrowMapstoneArea': {frozenset({'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'}), frozenset({'Climb', 'ChargeJump'})}, 'LeftSorrowLowerDoor': {frozenset({('KS', 4)})}, 'LeftSorrow': {frozenset({'Glide', 'Bash'}), frozenset({'Glide', 'ChargeJump'})}, 'MiddleSorrow': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-core': {'WilhelmLedge': {frozenset({'Glide', 'Dash'}), frozenset({'Dash', 'DoubleJump'})}, 'MiddleSorrow': {frozenset({'Glide', 'Bash'})}}, 'expert-dboost': {'WilhelmLedge': {frozenset({'Glide', ('HC', 2)}), frozenset({'DoubleJump', ('HC', 2)})}}, 'expert-abilities': {'WilhelmLedge': {frozenset({'Dash', ('AC', 6), 'Bash'}), frozenset({('EC', 2), 'Dash', ('AC', 6)}), frozenset({('AC', 6), 'Dash', 'Stomp'})}, 'SorrowMainShaftKeystoneArea': {frozenset({'Dash', ('AC', 6)})}, 'LeftSorrow': {frozenset({'Dash', ('AC', 6), 'Bash'}), frozenset({('AC', 6), 'Dash', 'Stomp', 'ChargeJump'}), frozenset({('AC', 6), 'Dash', 'ChargeJump', 'DoubleJump'}), frozenset({('EC', 2), 'Dash', 'ChargeJump', ('AC', 6)})}, 'MiddleSorrow': {frozenset({'Dash', ('AC', 6)})}}, 'dbash': {'WilhelmLedge': {frozenset({'Bash'})}, 'SorrowMainShaftKeystoneArea': {frozenset({'Bash'})}, 'SorrowMapstoneArea': {frozenset({'Bash'})}, 'LeftSorrow': {frozenset({'Bash'})}, 'SunstoneArea': {frozenset({'Glide', 'Bash'})}}, 'master-dboost': {'WilhelmLedge': {frozenset({'Glide', ('AC', 12), ('HC', 1)})}, 'LeftSorrow': {frozenset({('AC', 12), 'ChargeJump', ('HC', 7)})}}, 'master-abilities': {'WilhelmLedge': {frozenset({('AC', 12), 'DoubleJump'})}, 'LeftSorrow': {frozenset({('AC', 12), 'ChargeJump', 'DoubleJump'})}}, 'standard-lure': {'SorrowMapstoneArea': {frozenset({'Climb', 'Glide'}), frozenset({'Glide', 'WallJump'})}}, 'gjump': {'LeftSorrow': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'master-core': {'MiddleSorrow': {frozenset({'Bash'})}}, 'glitched': {'MiddleSorrow': {frozenset({'Glide', 'ChargeJump'})}}}, 'LowerSpiritCaverns': {'casual-core': {'MidSpiritCaverns': {frozenset({'Grenade', 'Bash'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'})}, 'GladesLaserArea': {frozenset({'Bash', ('EC', 4)})}, 'SpiritCavernsDoor': {frozenset({'Open'})}}, 'expert-core': {'MidSpiritCaverns': {frozenset({'Bash', 'Dash'})}}, 'dbash': {'MidSpiritCaverns': {frozenset({'Bash'})}}, 'master-core': {'MidSpiritCaverns': {frozenset({'DoubleJump'})}}}, 'LowerValley': {'casual-core': {'LowerValleyPlantApproach': {frozenset({'Glide', 'Wind'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Glide', 'Bash'}), frozenset({'Glide', 'ChargeJump'})}, 'ValleyThreeBirdLever': {frozenset({'Glide', 'Wind'}), frozenset({'Glide', 'DoubleJump'})}, 'MistyEntrance': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Glide', 'Wind'})}, 'ValleyTeleporter': {frozenset({'Glide', 'OpenWorld', 'Wind'}), frozenset({'Climb', 'Glide', 'ChargeJump', 'OpenWorld'}), frozenset({'Climb', 'Bash', 'ChargeJump', 'OpenWorld'}), frozenset({'Climb', 'OpenWorld', 'ChargeJump', 'DoubleJump'})}}, 'standard-lure': {'LowerValleyPlantApproach': {frozenset({'Bash'})}, 'ValleyThreeBirdLever': {frozenset({'Glide', 'Bash'}), frozenset({'Bash', 'DoubleJump'})}}, 'standard-core': {'ValleyThreeBirdLever': {frozenset({'Glide', 'Dash'}), frozenset({'Dash', 'DoubleJump'})}, 'MistyEntrance': {frozenset({'Climb', 'Bash', 'Grenade'})}, 'ValleyTeleporter': {frozenset({'Climb', 'Bash', 'Grenade', 'OpenWorld'}), frozenset({'OpenWorld', 'Grenade', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({'OpenWorld', 'ChargeJump', 'DoubleJump', 'WallJump'})}}, 'standard-dboost': {'ValleyThreeBirdLever': {frozenset({('HC', 1)})}}, 'expert-dboost': {'ValleyThreeBirdLever': {frozenset({('HC', -1)})}}, 'dbash': {'ValleyThreeBirdLever': {frozenset({'Bash'})}, 'MistyEntrance': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}}, 'expert-abilities': {'MistyEntrance': {frozenset({'Dash', ('AC', 6)})}, 'ValleyTeleporter': {frozenset({'Dash', ('AC', 6), 'OpenWorld'})}}, 'master-lure': {'MistyEntrance': {frozenset({'Bash'})}, 'ValleyTeleporter': {frozenset({'Bash', 'OpenWorld'})}}}, 'MidSpiritCaverns': {'casual-core': {'GladesLaserArea': {frozenset({('EC', 4)})}, 'UpperSpiritCaverns': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}}, 'glitched': {'GladesLaserArea': {frozenset({('EC', 3)})}}, 'casual-dboost': {'UpperSpiritCaverns': {frozenset({'DoubleJump'})}}, 'standard-core': {'UpperSpiritCaverns': {frozenset({'Bash'})}}}, 'MiddleSorrow': {'casual-core': {'UpperSorrow': {frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Glide'})}, 'SorrowMainShaftKeystoneArea': {frozenset({'Stomp'})}, 'LowerSorrow': {frozenset({'Stomp'})}}, 'gjump': {'UpperSorrow': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'expert-dboost': {'UpperSorrow': {frozenset({'ChargeJump', 'WallJump', ('HC', 2)}), frozenset({'Climb', 'ChargeJump', ('HC', 2)})}}, 'master-dboost': {'UpperSorrow': {frozenset({('AC', 12), 'ChargeJump', 'WallJump', ('HC', 1)}), frozenset({'Climb', ('AC', 12), 'ChargeJump', ('HC', 1)})}}, 'expert-abilities': {'LeftSorrow': {frozenset({'Climb', 'Dash', 'Stomp', ('AC', 6)}), frozenset({('AC', 6), 'Dash', 'Stomp', 'WallJump'})}, 'LeftSorrowKeystones': {frozenset({'Climb', 'Dash', 'Stomp', ('AC', 6)}), frozenset({('AC', 6), 'Dash', 'Stomp', 'WallJump'})}, 'SorrowMainShaftKeystoneArea': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}, 'LowerSorrow': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'standard-core': {'SorrowMainShaftKeystoneArea': {frozenset({'Climb', 'ChargeJump'})}, 'LowerSorrow': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-core': {'SorrowMainShaftKeystoneArea': {frozenset({'Grenade', 'Bash', 'ChargeJump'})}, 'LowerSorrow': {frozenset({'Grenade', 'Bash', 'ChargeJump'})}, 'SunstoneArea': {frozenset({'Glide', 'Bash'})}}}, 'MistyAbove200xp': {'casual-core': {'MistyBeforeMiniBoss': {frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Glide'})}}, 'standard-core': {'MistyBeforeMiniBoss': {frozenset({'Grenade', 'Bash'}), frozenset({'Dash', 'DoubleJump'})}}, 'standard-abilities': {'MistyBeforeMiniBoss': {frozenset({('AC', 12), 'DoubleJump'}), frozenset({'Dash', ('AC', 6)})}}, 'master-core': {'MistyBeforeMiniBoss': {frozenset({'Bash'})}}}, 'MistyBeforeDocks': {'casual-core': {'MistyAbove200xp': {frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'Climb', 'DoubleJump'})}}, 'standard-core': {'MistyAbove200xp': {frozenset({'Glide', 'ChargeJump'})}}, 'standard-abilities': {'MistyAbove200xp': {frozenset({'Bash', ('AC', 6), 'Dash'}), frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'expert-abilities': {'MistyAbove200xp': {frozenset({'Dash', ('AC', 6)})}}, 'master-core': {'MistyAbove200xp': {frozenset({'Bash'})}}}, 'MistyBeforeMiniBoss': {'casual-core': {'MistyOrbRoom': {frozenset({('KS', 4)})}}}, 'MistyEntrance': {'casual-core': {'MistyPostFeatherTutorial': {frozenset({'Glide', 'Bash', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'WallJump'}), frozenset({'Glide', 'Bash', 'Climb'})}}, 'standard-core': {'MistyPostFeatherTutorial': {frozenset({'Glide', 'Bash'})}}, 'standard-abilities': {'MistyPostFeatherTutorial': {frozenset({'Climb', 'Dash', 'Glide', 'ChargeJump', 'DoubleJump', ('AC', 3)}), frozenset({'Dash', 'Glide', ('AC', 3), 'ChargeJump', 'DoubleJump', 'WallJump'})}}, 'expert-core': {'MistyPostFeatherTutorial': {frozenset({'Climb', 'Glide', 'ChargeJump', 'DoubleJump'})}}, 'expert-dboost': {'MistyPostFeatherTutorial': {frozenset({('HC', 4), 'ChargeJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump', ('HC', 1)})}}, 'expert-abilities': {'MistyPostFeatherTutorial': {frozenset({'Dash', ('AC', 6), ('EC', 4)}), frozenset({'Dash', 'Glide', 'ChargeJump', 'DoubleJump', ('AC', 3)})}}, 'master-core': {'MistyPostFeatherTutorial': {frozenset({'Bash'})}}, 'gjump': {'MistyPostFeatherTutorial': {frozenset({'Climb', 'ChargeJump', 'Grenade', ('HC', 1)})}}}, 'MistyKeystone3Ledge': {'casual-core': {'MistyPreLasers': {frozenset({'Glide'})}}, 'standard-abilities': {'MistyPreLasers': {frozenset({('AC', 12), 'DoubleJump'}), frozenset({'Dash', ('AC', 6)})}}, 'expert-core': {'MistyPreLasers': {frozenset({'Grenade', 'Bash'}), frozenset({'Dash', 'DoubleJump'})}}, 'expert-dboost': {'MistyPreLasers': {frozenset({'ChargeJump', ('HC', 1)}), frozenset({'DoubleJump', ('HC', 1)})}}, 'master-dboost': {'MistyPreLasers': {frozenset({('HC', 4), 'WallJump'})}}, 'gjump': {'MistyPreLasers': {frozenset({'Grenade', 'Climb', 'ChargeJump'})}}}, 'MistyKeystone4Ledge': {'casual-core': {'MistyBeforeDocks': {frozenset({'Glide', 'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump', 'Glide'}), frozenset({'Climb', 'Bash', 'Glide', 'DoubleJump'})}}, 'standard-core': {'MistyBeforeDocks': {frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'DoubleJump'})}}, 'master-abilities': {'MistyBeforeDocks': {frozenset({'Dash', ('AC', 6)})}}, 'master-dboost': {'MistyBeforeDocks': {frozenset({'ChargeJump', 'DoubleJump', ('HC', 7)})}}, 'master-lure': {'MistyBeforeDocks': {frozenset({'Bash'})}}}, 'MistyMortarSpikeCave': {'casual-core': {'MistyKeystone4Ledge': {frozenset({'Glide', 'Bash', 'WallJump'}), frozenset({'Climb', 'Bash', 'Glide'})}}, 'standard-core': {'MistyKeystone4Ledge': {frozenset({'Glide', 'Bash', 'DoubleJump'})}}, 'expert-core': {'MistyKeystone4Ledge': {frozenset({'Glide', 'Bash'})}}, 'expert-abilities': {'MistyKeystone4Ledge': {frozenset({'Bash', ('AC', 6), 'Dash'})}}, 'master-core': {'MistyKeystone4Ledge': {frozenset({'Bash'})}}, 'master-abilities': {'MistyKeystone4Ledge': {frozenset({'Dash', ('AC', 6)}), frozenset({('AC', 12), 'ChargeJump', 'DoubleJump'})}}}, 'MistyOrbRoom': {'casual-core': {'MistyPreKeystone2': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}}, 'master-core': {'MistyPreKeystone2': {frozenset({'DoubleJump'})}}}, 'MistyPostClimb': {'casual-core': {'MistySpikeCave': {frozenset({'Climb', 'DoubleJump', 'WallJump'})}}, 'standard-core': {'MistySpikeCave': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-core': {'MistySpikeCave': {frozenset({'ChargeJump'})}}, 'expert-abilities': {'MistySpikeCave': {frozenset({'Bash', ('AC', 6), 'Dash'})}}, 'dbash': {'MistySpikeCave': {frozenset({'Bash'})}}, 'master-core': {'MistySpikeCave': {frozenset({'DoubleJump'})}}}, 'MistyPostFeatherTutorial': {'casual-core': {'MistyPostKeystone1': {frozenset({'Free'})}}}, 'MistyPostKeystone1': {'casual-core': {'MistyPreMortarCorridor': {frozenset({'Glide', 'Bash'})}}, 'expert-core': {'MistyPreMortarCorridor': {frozenset({'Glide'})}}, 'expert-dboost': {'MistyPreMortarCorridor': {frozenset({('HC', 6)}), frozenset({'Dash', ('AC', 3), ('HC', 1)}), frozenset({'DoubleJump', ('HC', 1)})}}, 'master-core': {'MistyPreMortarCorridor': {frozenset({'Bash'})}}, 'master-abilities': {'MistyPreMortarCorridor': {frozenset({'Dash', ('AC', 6), 'DoubleJump'}), frozenset({('AC', 12), 'DoubleJump'})}}, 'master-dboost': {'MistyPreMortarCorridor': {frozenset({('HC', 3)}), frozenset({('AC', 12), ('HC', 1)})}}}, 'MistyPostLasers': {'casual-core': {'MistyMortarSpikeCave': {frozenset({'Glide', 'Bash', 'DoubleJump'})}}, 'standard-core': {'MistyMortarSpikeCave': {frozenset({'Glide', 'Bash'})}}, 'expert-core': {'MistyMortarSpikeCave': {frozenset({'Glide'})}}, 'master-core': {'MistyMortarSpikeCave': {frozenset({'Bash'})}}}, 'MistyPostMortarCorridor': {'casual-core': {'MistyPrePlantLedge': {frozenset({'Bash'})}}, 'standard-core': {'MistyPrePlantLedge': {frozenset({'ChargeJump', 'WallJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Climb', 'ChargeJump'})}}, 'master-core': {'MistyPrePlantLedge': {frozenset({'DoubleJump'})}}, 'master-abilities': {'MistyPrePlantLedge': {frozenset({'Dash', ('AC', 6)})}}}, 'MistyPreClimb': {'casual-core': {'MistyPostClimb': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'Stomp', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Stomp'})}}, 'expert-core': {'MistyPostClimb': {frozenset({'Grenade', 'Bash', 'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'DoubleJump', 'WallJump'})}}, 'master-core': {'MistyPostClimb': {frozenset({'Stomp', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'DoubleJump'})}}, 'glitched': {'ForlornTeleporter': {frozenset({'Dash'})}, 'RightForlorn': {frozenset({'Dash'})}}}, 'MistyPreLasers': {'casual-core': {'MistyPostLasers': {frozenset({'Climb', 'Glide', 'WallJump'})}}, 'standard-core': {'MistyPostLasers': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump'})}}, 'expert-core': {'MistyPostLasers': {frozenset({'Climb', 'Dash'}), frozenset({'Dash', 'WallJump'}), frozenset({'Dash', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}}, 'master-core': {'MistyPostLasers': {frozenset({'DoubleJump'}), frozenset({'Bash'})}}}, 'MistyPreMortarCorridor': {'casual-core': {'MistyPostMortarCorridor': {frozenset({'Glide'})}}, 'expert-dboost': {'MistyPostMortarCorridor': {frozenset({'ChargeJump', 'DoubleJump', ('HC', 1)}), frozenset({'Dash', 'DoubleJump', ('AC', 3), ('HC', 1)})}}, 'master-core': {'MistyPostMortarCorridor': {frozenset({'Grenade', 'Bash', 'DoubleJump'})}}, 'master-abilities': {'MistyPostMortarCorridor': {frozenset({'Dash', ('AC', 6)})}}, 'master-dboost': {'MistyPostMortarCorridor': {frozenset({('AC', 12), ('HC', 6)}), frozenset({('HC', 7)})}}, 'glitched': {'RightForlorn': {frozenset({'Free'})}}}, 'MistyPrePlantLedge': {'casual-core': {'MistyPreClimb': {frozenset({'ChargeJump'}), frozenset({'Glide', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Glide', 'DoubleJump'})}}, 'standard-core': {'MistyPreClimb': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'})}}, 'expert-core': {'MistyPreClimb': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'WallJump'})}}, 'master-core': {'MistyPreClimb': {frozenset({'DoubleJump'}), frozenset({'Bash'})}}}, 'MistySpikeCave': {'casual-core': {'MistyKeystone3Ledge': {frozenset({'Climb', 'DoubleJump', 'WallJump'})}}, 'standard-core': {'MistyKeystone3Ledge': {frozenset({'Glide', 'Bash', 'DoubleJump'})}}, 'expert-core': {'MistyKeystone3Ledge': {frozenset({'DoubleJump'})}}, 'master-core': {'MistyKeystone3Ledge': {frozenset({'Bash'})}}, 'master-dboost': {'MistyKeystone3Ledge': {frozenset({'ChargeJump', ('HC', 1)})}}}, 'MoonGrotto': {'casual-core': {'MoonGrottoAboveTeleporter': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}, 'DeathGauntlet': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'WaterVeinArea': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide'})}, 'MoonGrottoBelowTeleporter': {frozenset({'DoubleJump'}), frozenset({'Glide', 'ChargeJump'})}}, 'master-core': {'MoonGrottoAboveTeleporter': {frozenset({'DoubleJump'})}}, 'expert-abilities': {'MoonGrottoAboveTeleporter': {frozenset({'Dash', ('AC', 6), ('EC', 1)})}}, 'standard-core': {'WaterVeinArea': {frozenset({'Dash'})}}, 'expert-core': {'WaterVeinArea': {frozenset({'WallJump'})}}, 'master-lure': {'WaterVeinArea': {frozenset({'Bash'})}}, 'standard-dboost': {'MoonGrottoBelowTeleporter': {frozenset({'Glide', ('HC', 1)})}}, 'standard-abilities': {'MoonGrottoBelowTeleporter': {frozenset({'Dash', ('AC', 3)})}}}, 'MoonGrottoAboveTeleporter': {'casual-core': {'UpperGrotto': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'WallJump'})}, 'MoonGrottoSwampAccessArea': {frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Bash'})}}, 'standard-core': {'UpperGrotto': {frozenset({'Grenade', 'Bash'})}}, 'expert-core': {'UpperGrotto': {frozenset({'Climb', 'Glide'})}, 'MoonGrottoStompPlantAccess': {frozenset({'ChargeFlame'})}}, 'master-core': {'UpperGrotto': {frozenset({'DoubleJump'}), frozenset({'Bash', 'Dash', ('AC', 3)})}}, 'casual-dboost': {'MoonGrottoSwampAccessArea': {frozenset({'DoubleJump'})}}, 'standard-dboost': {'MoonGrottoSwampAccessArea': {frozenset({'ChargeJump', ('HC', 0)})}}, 'expert-dboost': {'MoonGrottoSwampAccessArea': {frozenset({'Dash', ('HC', 1)})}}, 'expert-abilities': {'MoonGrottoSwampAccessArea': {frozenset({'Dash', ('AC', 6)})}}, 'gjump': {'MoonGrottoSwampAccessArea': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'master-lure': {'DeathGauntletRoof': {frozenset({'Bash'})}, 'MoonGrottoBelowTeleporter': {frozenset({'Bash'})}}}, 'MoonGrottoSwampAccessArea': {'casual-core': {'InnerSwampAboveDrainArea': {frozenset({'ChargeJump'})}}, 'standard-lure': {'InnerSwampAboveDrainArea': {frozenset({'Bash'})}}, 'expert-lure': {'InnerSwampAboveDrainArea': {frozenset({'ChargeFlame', 'WallJump'}), frozenset({'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Stomp', 'DoubleJump'}), frozenset({'Climb', 'ChargeFlame'})}}, 'master-lure': {'InnerSwampAboveDrainArea': {frozenset({'Grenade', 'DoubleJump'})}}}, 'OuterSwampAbilityCellNook': {'glitched': {'InnerSwampSkyArea': {frozenset({'Dash'})}}}, 'OuterSwampLowerArea': {'casual-core': {'OuterSwampMortarAbilityCellLedge': {frozenset({'Bash'})}, 'OuterSwampUpperArea': {frozenset({'Glide', 'Wind'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'ChargeJump'}), frozenset({'Climb', 'DoubleJump'})}, 'OuterSwampAbilityCellNook': {frozenset({'Glide', 'Wind'}), frozenset({'Grenade', 'Bash'})}, 'OuterSwampMortarPlantAccess': {frozenset({'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Bash'})}, 'SwampEntryArea': {frozenset({'Glide', 'Wind'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'Bash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}, 'UpperGrotto': {frozenset({'Glide', 'Wind'}), frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'Bash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}}, 'expert-abilities': {'OuterSwampMortarAbilityCellLedge': {frozenset({'Dash', ('AC', 6)})}, 'OuterSwampUpperArea': {frozenset({'Dash', ('AC', 6)})}}, 'master-abilities': {'OuterSwampMortarAbilityCellLedge': {frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}}, 'expert-core': {'OuterSwampUpperArea': {frozenset({'Climb'}), frozenset({'WallJump'})}}, 'standard-core': {'OuterSwampAbilityCellNook': {frozenset({'Climb'}), frozenset({'Bash'}), frozenset({'WallJump'})}}}, 'OuterSwampMortarAbilityCellLedge': {'expert-core': {'OuterSwampMortarPlantAccess': {frozenset({'ChargeFlame'})}}}, 'OuterSwampUpperArea': {'casual-core': {'GinsoOuterDoor': {frozenset({'GinsoKey'})}, 'OuterSwampAbilityCellNook': {frozenset({'DoubleJump'}), frozenset({'Glide'})}}, 'standard-core': {'OuterSwampAbilityCellNook': {frozenset({'Free'})}}}, 'OutsideForlorn': {'casual-core': {'OutsideForlornCliff': {frozenset({'Grenade', 'Bash'}), frozenset({'Bash', 'DoubleJump'}), frozenset({'Glide', 'Bash'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'WallJump'})}, 'ForlornOuterDoor': {frozenset({'ForlornKey'})}}, 'expert-abilities': {'OutsideForlornCliff': {frozenset({'Dash', ('AC', 6)})}}, 'dbash': {'OutsideForlornCliff': {frozenset({'Bash'})}}, 'master-core': {'OutsideForlornCliff': {frozenset({'ChargeJump', 'DoubleJump'})}}, 'glitched': {'RightForlorn': {frozenset({'Free'})}}}, 'OutsideForlornCliff': {'casual-core': {'ValleyForlornApproach': {frozenset({'Stomp', 'ChargeJump', 'Bash'}), frozenset({'Climb', 'Stomp', 'DoubleJump', 'Bash'}), frozenset({'Stomp', 'WallJump', 'Bash'}), frozenset({'Grenade', 'Stomp', 'Bash'})}}, 'expert-core': {'ValleyForlornApproach': {frozenset({'ChargeFlame', 'Stomp', 'WallJump'}), frozenset({'ChargeFlame', 'Stomp', 'Climb', 'DoubleJump'}), frozenset({'ChargeFlame', 'Stomp', 'ChargeJump'})}}, 'master-core': {'ValleyForlornApproach': {frozenset({'Bash'})}}}, 'R1': {'casual-core': {'HoruR1MapstoneSecret': {frozenset({'DoubleJump'}), frozenset({'Glide'})}}, 'standard-core': {'HoruR1MapstoneSecret': {frozenset({'Grenade', 'Bash'})}}, 'standard-abilities': {'HoruR1MapstoneSecret': {frozenset({'Dash', ('AC', 3)})}}, 'expert-dboost': {'HoruR1MapstoneSecret': {frozenset({'Climb', 'ChargeJump', ('HC', 2)}), frozenset({'Bash', ('HC', 2)}), frozenset({'Dash', ('HC', 2)})}}, 'master-dboost': {'HoruR1MapstoneSecret': {frozenset({'Dash', ('AC', 12), ('HC', 1)}), frozenset({('HC', 6)}), frozenset({'Climb', ('AC', 12), 'ChargeJump', ('HC', 1)}), frozenset({'Bash', ('AC', 12), ('HC', 1)}), frozenset({('HC', 4), ('AC', 12)})}}, 'gjump': {'HoruR1MapstoneSecret': {frozenset({('AC', 12), 'Climb', 'Grenade', 'ChargeJump', ('HC', 1)}), frozenset({'Climb', 'ChargeJump', 'Grenade', ('HC', 2)}), frozenset({'Climb', 'Stomp', 'ChargeJump', 'Grenade'})}}}, 'R1OuterDoor': {'expert-core': {'L1OuterDoor': {frozenset({'Free'})}}}, 'R3': {'casual-core': {'HoruR3ElevatorLever': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Bash', 'Climb'})}}, 'expert-core': {'HoruR3ElevatorLever': {frozenset({'Grenade', 'Bash', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'WallJump'})}}, 'master-abilities': {'HoruR3ElevatorLever': {frozenset({'Climb', ('AC', 12), 'DoubleJump'}), frozenset({('AC', 12), 'ChargeJump', 'DoubleJump'})}}}, 'R3OuterDoor': {'casual-core': {'HoruInnerDoor': {frozenset({'Stomp'})}}}, 'R4': {'casual-core': {'HoruR4StompHideout': {frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'Grenade', 'Stomp', 'Bash'}), frozenset({'Grenade', 'Bash', 'WallJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'ChargeJump', 'WallJump'}), frozenset({'ChargeFlame', 'Bash', 'Grenade'}), frozenset({'Stomp', 'ChargeJump'})}}, 'standard-core': {'HoruR4StompHideout': {frozenset({'ChargeJump'}), frozenset({'Grenade', 'Bash'})}}, 'expert-core': {'HoruR4StompHideout': {frozenset({'ChargeFlame', 'Bash'}), frozenset({'Bash', 'Stomp'})}}, 'expert-abilities': {'HoruR4StompHideout': {frozenset({'Bash', ('AC', 6), 'Dash'})}}, 'expert-dboost': {'HoruR4StompHideout': {frozenset({('HC', 3), 'Bash'})}}, 'dbash': {'HoruR4StompHideout': {frozenset({'Bash'})}}}, 'RazielNoArea': {'casual-core': {'BlackrootGrottoConnection': {frozenset({'Grenade', 'Dash', 'Bash'}), frozenset({'Dash', 'WallJump'}), frozenset({'Dash', 'ChargeJump'}), frozenset({'Climb', 'Dash', 'DoubleJump'})}}, 'standard-core': {'BlackrootGrottoConnection': {frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'WallJump'}), frozenset({'Grenade', 'Bash'})}}, 'expert-core': {'BlackrootGrottoConnection': {frozenset({'ChargeJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'WallJump'})}}, 'expert-dboost': {'BlackrootGrottoConnection': {frozenset({'Climb', 'Dash', ('AC', 3)})}}, 'glitched': {'BlackrootGrottoConnection': {frozenset({'Climb'})}, 'GumoHideout': {frozenset({'Grenade', 'Dash', 'Bash'}), frozenset({'Dash', 'WallJump'}), frozenset({'Dash', 'ChargeJump'}), frozenset({'Climb', 'Dash', 'DoubleJump'})}}}, 'SorrowBashLedge': {'casual-core': {'LowerSorrow': {frozenset({'Glide', 'Wind'})}}, 'expert-lure': {'LowerSorrow': {frozenset({'Climb', 'Dash', 'Glide', 'DoubleJump', 'Bash'}), frozenset({'Dash', 'Glide', 'DoubleJump', 'WallJump', 'Bash'})}}, 'dbash': {'LowerSorrow': {frozenset({'Bash'})}}, 'expert-dboost': {'LowerSorrow': {frozenset({'Climb', 'ChargeJump', ('HC', 6)}), frozenset({'ChargeJump', ('HC', 6), 'WallJump'})}}, 'master-dboost': {'LowerSorrow': {frozenset({('AC', 12), ('HC', 4), 'ChargeJump', 'WallJump'}), frozenset({'Climb', ('HC', 4), 'ChargeJump', ('AC', 12)}), frozenset({('AC', 12), ('HC', 10), 'DoubleJump', 'WallJump'})}}}, 'SorrowMapstoneArea': {'glitched': {'HoruInnerDoor': {frozenset({'Dash'})}}}, 'SorrowTeleporter': {'casual-core': {'BelowSunstoneArea': {frozenset({'Climb', 'ChargeJump', 'DoubleJump'})}, 'AboveChargeJumpArea': {frozenset({'Climb', 'Stomp', 'ChargeJump'})}}, 'standard-core': {'BelowSunstoneArea': {frozenset({'Climb', 'Glide', 'ChargeJump'}), frozenset({'Climb', 'Bash', 'ChargeJump'})}, 'AboveChargeJumpArea': {frozenset({'Climb', 'ChargeJump'})}}, 'gjump': {'BelowSunstoneArea': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'expert-dboost': {'BelowSunstoneArea': {frozenset({'Grenade', 'Stomp', ('HC', 2), 'Bash'}), frozenset({'Climb', 'ChargeJump', ('HC', 2)}), frozenset({'Glide', 'ChargeJump', 'WallJump', ('HC', 2)}), frozenset({'WallJump', 'Dash', ('HC', 2), 'ChargeJump', ('AC', 3)})}, 'AboveChargeJumpArea': {frozenset({('HC', 2), 'Glide', 'ChargeJump', 'DoubleJump', 'WallJump'})}}, 'master-core': {'BelowSunstoneArea': {frozenset({'Stomp', 'WallJump', 'Bash'}), frozenset({'Bash', 'ChargeJump'}), frozenset({'Climb', 'Stomp', 'Bash'})}, 'AboveChargeJumpArea': {frozenset({'Bash', 'ChargeJump'}), frozenset({'Stomp', 'Bash'})}}, 'master-dboost': {'BelowSunstoneArea': {frozenset({'Climb', ('AC', 12), 'ChargeJump', ('HC', 1)}), frozenset({('AC', 12), 'Dash', ('HC', 1), 'ChargeJump', 'WallJump'}), frozenset({('AC', 12), ('HC', 1), 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({('AC', 12), ('HC', 1), 'Glide', 'ChargeJump', 'WallJump'})}}, 'expert-core': {'AboveChargeJumpArea': {frozenset({'Glide', 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Glide', 'ChargeJump', 'DoubleJump', 'WallJump', 'Bash'})}}, 'expert-abilities': {'AboveChargeJumpArea': {frozenset({'WallJump', 'Dash', 'ChargeJump', 'DoubleJump', ('AC', 3)})}}}, 'SpiderSacArea': {'casual-core': {'SpiderSacTetherArea': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'SpiderWaterArea': {frozenset({'DoubleJump'}), frozenset({'Glide'})}, 'SpiderSacEnergyNook': {frozenset({'DoubleJump'}), frozenset({'Glide'})}, 'SpiritTreeRefined': {frozenset({'ChargeFlame', 'WallJump'}), frozenset({'Grenade', 'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'ChargeFlame', 'Climb'}), frozenset({'Grenade', 'ChargeJump'}), frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'Grenade', 'Climb'})}}, 'master-core': {'SpiderSacTetherArea': {frozenset({'DoubleJump'})}, 'SpiritTreeRefined': {frozenset({'Stomp', 'DoubleJump'}), frozenset({'ChargeFlame', 'DoubleJump'}), frozenset({'Grenade', 'DoubleJump'})}}, 'expert-abilities': {'SpiderWaterArea': {frozenset({'Dash', ('AC', 3)})}, 'SpiderSacEnergyNook': {frozenset({'Dash', ('AC', 3)})}}, 'standard-core': {'SpiritTreeRefined': {frozenset({'Climb', 'Stomp'}), frozenset({'Stomp', 'WallJump'}), frozenset({'Stomp', 'ChargeJump'})}}}, 'SpiderSacEnergyNook': {'master-abilities': {'ChargeFlameAreaPlantAccess': {frozenset({'ChargeFlame', ('AC', 3)})}}}, 'SpiderSacTetherArea': {'casual-core': {'SpiderWaterArea': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'SpiderSacEnergyNook': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}}, 'expert-abilities': {'SpiderWaterArea': {frozenset({'Grenade', 'Dash', ('AC', 6), 'Bash'}), frozenset({('AC', 6), 'Dash', 'ChargeJump'})}, 'SpiderSacEnergyNook': {frozenset({'Grenade', 'Dash', ('AC', 6), 'Bash'}), frozenset({('AC', 6), 'Dash', 'ChargeJump'})}}}, 'SpiderWaterArea': {'casual-core': {'SpiderSacEnergyNook': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide'})}, 'SpiderSacArea': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Glide', 'Bash', 'WallJump'}), frozenset({'Climb', 'Bash', 'Glide'})}, 'HollowGrove': {frozenset({'Climb'}), frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'Water'}), frozenset({'DoubleJump'})}, 'DeathGauntletRoof': {frozenset({'Stomp', 'WallJump', 'Water'}), frozenset({'Bash', 'Stomp', 'Water'}), frozenset({'Climb', 'Stomp', 'Water'})}}, 'standard-core': {'SpiderSacEnergyNook': {frozenset({'Dash', 'DoubleJump'}), frozenset({'Bash', 'DoubleJump'})}, 'SpiderSacArea': {frozenset({'Climb', 'Bash'}), frozenset({'Glide', 'Dash', 'WallJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'Climb', 'Dash', 'Glide'})}, 'HollowGrove': {frozenset({'Bash'})}}, 'expert-core': {'SpiderSacEnergyNook': {frozenset({'DoubleJump'})}}, 'dbash': {'SpiderSacEnergyNook': {frozenset({'Bash'})}, 'SpiderSacArea': {frozenset({'Bash'})}}, 'expert-abilities': {'SpiderSacEnergyNook': {frozenset({'Dash', ('AC', 3)})}, 'SpiderSacArea': {frozenset({'Dash', ('AC', 6)})}}, 'gjump': {'SpiderSacEnergyNook': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'master-core': {'SpiderSacArea': {frozenset({'Climb', 'ChargeJump'})}}, 'master-abilities': {'HollowGrove': {frozenset({'Dash', ('AC', 6)})}}, 'expert-dboost': {'DeathGauntletRoof': {frozenset({'Climb', 'Stomp', ('HC', 2)}), frozenset({'Stomp', 'WallJump', ('HC', 2)}), frozenset({'Bash', 'Stomp', ('HC', 1)}), frozenset({'Stomp', 'DoubleJump', ('HC', 2)})}}, 'master-dboost': {'DeathGauntletRoof': {frozenset({'Climb', 'Stomp', ('AC', 12)}), frozenset({'Stomp', ('AC', 12), 'WallJump'}), frozenset({'Stomp', ('AC', 12), 'DoubleJump'})}}}, 'SpiritCavernsDoor': {'casual-core': {'SpiritCavernsDoorOpened': {frozenset({('KS', 2)})}}}, 'SpiritCavernsDoorOpened': {'casual-core': {'LowerSpiritCaverns': {frozenset({'ChargeJump'}), frozenset({'WallJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb'})}}, 'standard-lure': {'LowerSpiritCaverns': {frozenset({'Bash'})}}, 'expert-abilities': {'LowerSpiritCaverns': {frozenset({'Dash', ('AC', 6)})}}, 'master-core': {'LowerSpiritCaverns': {frozenset({'DoubleJump'})}}}, 'SpiritTreeDoor': {'casual-core': {'SpiritTreeDoorOpened': {frozenset({('KS', 4)})}}}, 'SpiritTreeDoorOpened': {'casual-core': {'SpiritTreeRefined': {frozenset({'Climb'}), frozenset({'Bash'}), frozenset({'WallJump'})}}, 'casual-dboost': {'SpiritTreeRefined': {frozenset({'ChargeJump'})}}, 'master-core': {'SpiritTreeRefined': {frozenset({'DoubleJump'})}}}, 'SpiritTreeRefined': {'casual-core': {'SpiritTreeDoor': {frozenset({'Open'})}, 'ValleyEntry': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}, 'SpiderSacArea': {frozenset({'ChargeFlame', 'WallJump'}), frozenset({'ChargeFlame', 'Climb', 'Glide'}), frozenset({'Grenade', 'WallJump'}), frozenset({'ChargeFlame', 'Climb', 'DoubleJump'}), frozenset({'ChargeFlame', 'Climb', 'Dash'}), frozenset({'Grenade', 'Climb', 'Glide'}), frozenset({'Grenade', 'Climb', 'DoubleJump'}), frozenset({'Grenade', 'ChargeJump'}), frozenset({'Grenade', 'Climb', 'Dash'}), frozenset({'Grenade', 'Bash'}), frozenset({'ChargeFlame', 'ChargeJump'})}}, 'standard-core': {'ValleyEntry': {frozenset({'Stomp', 'DoubleJump'}), frozenset({'Climb', 'Stomp'}), frozenset({'Stomp', 'WallJump'}), frozenset({'Stomp', 'ChargeJump'})}}, 'expert-abilities': {'ValleyEntry': {frozenset({'Dash', ('AC', 6)})}, 'SpiderSacArea': {frozenset({'Climb', 'Dash', ('AC', 6)}), frozenset({'Dash', ('AC', 6), 'WallJump'})}}, 'expert-core': {'SpiderSacArea': {frozenset({'ChargeFlame', 'Climb'}), frozenset({'Grenade', 'Climb'})}}, 'master-core': {'SpiderSacArea': {frozenset({'ChargeFlame', 'DoubleJump'}), frozenset({'Grenade', 'DoubleJump'})}}, 'master-abilities': {'SpiderSacArea': {frozenset({'Dash', ('AC', 6), 'DoubleJump'})}}}, 'SunkenGladesRunaway': {'casual-core': {'GladesMain': {frozenset({('KS', 2)}), frozenset({'OpenWorld'})}, 'BlackrootDarknessRoom': {frozenset({'ChargeJump'}), frozenset({'Climb'}), frozenset({'Grenade', 'Bash'}), frozenset({'WallJump'})}, 'DeathGauntletDoor': {frozenset({'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'SpiritTreeRefined': {frozenset({'TPGrove'})}, 'MoonGrotto': {frozenset({'TPGrotto'})}, 'SwampTeleporter': {frozenset({'TPSwamp'})}, 'ValleyTeleporter': {frozenset({'TPValley'})}, 'SorrowTeleporter': {frozenset({'TPSorrow'})}, 'GinsoTeleporter': {frozenset({'TPGinso'})}, 'ForlornTeleporter': {frozenset({'TPForlorn'})}, 'HoruTeleporter': {frozenset({'TPHoru', 'HoruKey'})}}, 'glitched': {'LowerChargeFlameArea': {frozenset({'Grenade'})}}, 'master-core': {'BlackrootDarknessRoom': {frozenset({'DoubleJump'})}, 'DeathGauntletDoor': {frozenset({'DoubleJump'})}}, 'casual-dboost': {'DeathGauntletDoor': {frozenset({'Climb'}), frozenset({'WallJump'})}}, 'standard-lure': {'DeathGauntletDoor': {frozenset({'Bash'})}}}, 'SunstoneArea': {'casual-core': {'UpperSorrow': {frozenset({'Stomp'})}, 'SorrowTeleporter': {frozenset({'Climb', 'ChargeJump', 'DoubleJump'})}}, 'standard-core': {'UpperSorrow': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-dboost': {'SorrowTeleporter': {frozenset({'ChargeJump', 'DoubleJump', 'WallJump', ('HC', 2)})}}}, 'Swamp': {'casual-core': {'SwampDrainlessArea': {frozenset({'Stomp'})}, 'SwampKeyDoorPlatform': {frozenset({'Grenade', 'Bash'}), frozenset({'Glide'}), frozenset({'ChargeJump'}), frozenset({'Water'}), frozenset({'DoubleJump'})}, 'SwampWater': {frozenset({'Water'})}}, 'expert-core': {'SwampDrainlessArea': {frozenset({'Climb', 'ChargeJump'})}}, 'casual-dboost': {'SwampKeyDoorPlatform': {frozenset({'Free'})}}, 'standard-core': {'SwampKeyDoorPlatform': {frozenset({'Dash'})}}, 'master-dboost': {'SwampWater': {frozenset({('HC', 4), ('AC', 12)}), frozenset({('HC', 12)})}}}, 'SwampEntryArea': {'casual-core': {'SwampDrainlessArea': {frozenset({'Climb', 'Stomp'}), frozenset({'Grenade', 'Stomp', 'Bash'}), frozenset({'Stomp', 'WallJump'}), frozenset({'Stomp', 'ChargeJump'})}, 'Swamp': {frozenset({'Stomp', 'ChargeJump'})}}, 'standard-core': {'SwampDrainlessArea': {frozenset({'Climb', 'ChargeJump'})}, 'Swamp': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-lure': {'SwampDrainlessArea': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'ChargeJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'Grenade', 'Bash'})}, 'Swamp': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'ChargeJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'Grenade', 'Bash'})}}}, 'SwampKeyDoorOpened': {'casual-core': {'RightSwamp': {frozenset({'Bash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Bash', 'ChargeJump'}), frozenset({'Climb', 'Bash', 'Grenade'})}}, 'standard-core': {'RightSwamp': {frozenset({'Climb', 'Bash', 'DoubleJump'}), frozenset({'Glide', 'ChargeJump', 'WallJump'}), frozenset({'Climb', 'Glide', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}}, 'standard-dboost': {'RightSwamp': {frozenset({'Climb', 'ChargeJump', ('HC', 0)}), frozenset({'ChargeJump', ('HC', 0), 'WallJump'}), frozenset({('HC', 0), 'Glide', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Glide', 'DoubleJump', ('HC', 0)})}}, 'expert-dboost': {'RightSwamp': {frozenset({'Climb', 'DoubleJump', ('HC', 2)}), frozenset({('HC', 0), 'ChargeJump', 'DoubleJump'}), frozenset({'Bash', ('HC', 0), 'WallJump', 'Water'}), frozenset({'DoubleJump', 'WallJump', ('HC', 2)}), frozenset({'Climb', 'Dash', ('AC', 6), ('HC', 0)}), frozenset({('AC', 6), ('HC', 0), 'Dash', ('EC', 3), 'Bash'}), frozenset({'Dash', ('AC', 6), ('HC', 0), 'WallJump'})}}, 'expert-abilities': {'RightSwamp': {frozenset({('EC', 2), 'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6), ('EC', 2)})}}, 'dbash': {'RightSwamp': {frozenset({'Bash', 'Water'}), frozenset({'Bash', ('HC', 2)})}}, 'master-dboost': {'RightSwamp': {frozenset({('HC', 9), 'WallJump'}), frozenset({('AC', 12), 'DoubleJump', ('HC', 1)}), frozenset({('HC', 4), 'DoubleJump'}), frozenset({('AC', 12), 'WallJump', 'Water', ('HC', 2)}), frozenset({('HC', 4), ('AC', 12), 'WallJump'}), frozenset({('HC', 6), 'WallJump', 'Water'})}}, 'master-abilities': {'RightSwamp': {frozenset({('EC', 2), 'Dash', ('AC', 6), 'DoubleJump'})}}, 'gjump': {'RightSwamp': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}}, 'SwampKeyDoorPlatform': {'casual-core': {'SwampKeyDoorOpened': {frozenset({('KS', 2)})}, 'InnerSwampSkyArea': {frozenset({'Glide', 'Wind'})}}, 'standard-core': {'InnerSwampSkyArea': {frozenset({'Climb', 'Glide', 'ChargeJump'}), frozenset({'Climb', 'ChargeJump', 'DoubleJump'})}}, 'dbash': {'InnerSwampSkyArea': {frozenset({'Bash'})}}, 'gjump': {'InnerSwampSkyArea': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}}, 'SwampTeleporter': {'glitched': {'OuterSwampMortarAbilityCellLedge': {frozenset({'Free'})}}}, 'TopGinsoTree': {'casual-core': {'GinsoEscape': {frozenset({'Bash', 'ChargeJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Bash', 'DoubleJump'})}}, 'standard-core': {'GinsoEscape': {frozenset({'Bash'}), frozenset({'Stomp', 'ChargeJump'})}}, 'standard-dboost': {'GinsoEscape': {frozenset({('HC', 0), 'Climb', 'Dash', 'Stomp', 'DoubleJump'}), frozenset({('HC', 0), 'Glide', 'Stomp', 'DoubleJump', 'WallJump'}), frozenset({('HC', 0), 'Climb', 'Glide', 'Stomp', 'DoubleJump'}), frozenset({('HC', 0), 'Dash', 'Stomp', 'DoubleJump', 'WallJump'})}}, 'expert-abilities': {'GinsoEscape': {frozenset({'Stomp', ('AC', 6), 'Dash'})}}, 'master-abilities': {'GinsoEscape': {frozenset({'Stomp', ('AC', 12), 'DoubleJump'})}}, 'master-dboost': {'GinsoEscape': {frozenset({('HC', 0), 'Stomp', 'DoubleJump', 'Dash'}), frozenset({'Glide', 'Stomp', 'DoubleJump', ('HC', 0)})}}}, 'UpperGinsoDoorClosed': {'casual-core': {'UpperGinsoDoorOpened': {frozenset({('KS', 4)})}}}, 'UpperGinsoDoorOpened': {'casual-core': {'GinsoTeleporter': {frozenset({'Glide', 'Bash'}), frozenset({'Bash', 'DoubleJump'})}, 'UpperGinsoTree': {frozenset({'Open', 'Bash'}), frozenset({'Open', 'DoubleJump'}), frozenset({'Glide', 'Open'})}}, 'standard-core': {'GinsoTeleporter': {frozenset({'Bash'})}}, 'expert-dboost': {'GinsoTeleporter': {frozenset({'ChargeJump', ('HC', 2)}), frozenset({('HC', 0), 'ChargeJump', 'DoubleJump'})}}, 'master-dboost': {'GinsoTeleporter': {frozenset({('AC', 12), 'DoubleJump', 'WallJump', ('HC', 2)})}}, 'casual-dboost': {'UpperGinsoTree': {frozenset({'Open', ('HC', 0)})}}, 'standard-abilities': {'UpperGinsoTree': {frozenset({'Open', 'Dash', ('AC', 3)})}}}, 'UpperGinsoRedirectArea': {'casual-core': {'UpperGinsoTree': {frozenset({'ChargeJump'}), frozenset({'Bash'})}, 'BashTree': {frozenset({'DoubleJump'}), frozenset({'Bash'})}}, 'master-abilities': {'UpperGinsoTree': {frozenset({'ChargeFlame', 'Climb', ('AC', 12), 'DoubleJump'}), frozenset({'Grenade', ('AC', 12), 'DoubleJump', 'WallJump'}), frozenset({'Grenade', 'Climb', ('AC', 12), 'DoubleJump'}), frozenset({'Stomp', ('AC', 12), 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Stomp', ('AC', 12), 'DoubleJump'}), frozenset({'ChargeFlame', ('AC', 12), 'DoubleJump', 'WallJump'})}}, 'standard-abilities': {'BashTree': {frozenset({'Dash', ('AC', 3)})}}, 'standard-dboost': {'BashTree': {frozenset({'Glide', ('HC', 1)}), frozenset({'Dash', ('HC', 1)}), frozenset({'WallJump', ('HC', 1)}), frozenset({'ChargeJump', ('HC', 1)}), frozenset({'Climb', ('HC', 1)})}}}, 'UpperGinsoTree': {'casual-core': {'UpperGinsoDoorClosed': {frozenset({'Free'})}, 'UpperGinsoRedirectArea': {frozenset({'Bash', 'ChargeJump'}), frozenset({'Stomp'})}}, 'standard-core': {'UpperGinsoRedirectArea': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-core': {'UpperGinsoRedirectArea': {frozenset({'ChargeFlame', 'ChargeJump'})}}, 'expert-abilities': {'UpperGinsoRedirectArea': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'master-core': {'UpperGinsoRedirectArea': {frozenset({'Bash'})}}}, 'UpperGrotto': {'casual-core': {'OuterSwampMortarAbilityCellLedge': {frozenset({'ChargeJump'})}, 'MoonGrottoStompPlantAccess': {frozenset({'Stomp'})}, 'OuterSwampLowerArea': {frozenset({'Grenade', 'Bash'}), frozenset({'Climb'}), frozenset({'WallJump'}), frozenset({'ChargeJump'})}, 'Iceless': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Glide', 'WallJump'})}, 'MoonGrottoAboveTeleporter': {frozenset({'Glide'}), frozenset({'Climb'}), frozenset({'Dash'}), frozenset({'WallJump'}), frozenset({'DoubleJump'})}}, 'standard-core': {'MoonGrottoStompPlantAccess': {frozenset({'Climb', 'ChargeJump'})}, 'Iceless': {frozenset({'Grenade', 'Bash'})}, 'MoonGrottoAboveTeleporter': {frozenset({'Grenade', 'Bash'})}}, 'master-core': {'MoonGrottoStompPlantAccess': {frozenset({'Bash'})}, 'Iceless': {frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Bash'})}}, 'expert-core': {'OuterSwampLowerArea': {frozenset({'DoubleJump'})}}, 'standard-dboost': {'Iceless': {frozenset({'ChargeJump', 'WallJump', ('HC', 1)}), frozenset({'Climb', 'ChargeJump', ('HC', 1)})}}, 'standard-abilities': {'Iceless': {frozenset({'Climb', 'Dash', ('AC', 3)})}}, 'gjump': {'Iceless': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'glitched': {'MoonGrottoAboveTeleporter': {frozenset({'Free'})}}}, 'UpperSorrow': {'glitched': {'SunstoneArea': {frozenset({'Glide', 'ChargeJump'})}, 'SorrowTeleporter': {frozenset({'Climb', 'Glide', 'ChargeJump'})}}, 'casual-core': {'ChargeJumpDoor': {frozenset({'Free'})}}}, 'UpperSpiritCaverns': {'casual-core': {'SpiritTreeDoor': {frozenset({'Free'})}}}, 'ValleyEntry': {'casual-core': {'ValleyEntryTree': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Climb', 'Bash'}), frozenset({'WallJump'})}, 'ValleyEntryTreePlantAccess': {frozenset({'Grenade', 'ChargeJump'}), frozenset({'ChargeFlame', 'ChargeJump'}), frozenset({'Grenade', 'Bash'})}, 'ValleyPostStompDoor': {frozenset({'Stomp', 'ChargeJump', 'WallJump'}), frozenset({'OpenWorld', 'DoubleJump', 'WallJump'}), frozenset({'Stomp', 'WallJump', 'Bash'}), frozenset({'Climb', 'Stomp', 'ChargeJump'}), frozenset({'Stomp', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'ChargeJump', 'OpenWorld'}), frozenset({'Climb', 'Stomp', 'DoubleJump'}), frozenset({'ChargeJump', 'OpenWorld', 'WallJump'}), frozenset({'Climb', 'OpenWorld', 'DoubleJump'}), frozenset({'Bash', 'OpenWorld', 'WallJump'})}, 'ValleyThreeBirdLever': {frozenset({'Glide', 'OpenWorld', 'Wind'}), frozenset({'Bash', 'OpenWorld'}), frozenset({'Climb', 'Glide', 'ChargeJump', 'OpenWorld'}), frozenset({'Climb', 'OpenWorld', 'ChargeJump', 'DoubleJump'})}, 'ValleyStompFloor': {frozenset({'Glide', 'OpenWorld', 'Wind'}), frozenset({'OpenWorld', 'ChargeJump', 'DoubleJump'}), frozenset({'Bash', 'OpenWorld'}), frozenset({'Glide', 'ChargeJump', 'OpenWorld'}), frozenset({'Climb', 'ChargeJump', 'OpenWorld'}), frozenset({'Glide', 'DoubleJump', 'OpenWorld'})}, 'SpiritTreeRefined': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}}, 'standard-lure': {'ValleyEntryTree': {frozenset({'Bash'})}}, 'expert-dboost': {'ValleyEntryTree': {frozenset({'ChargeJump', ('HC', 1)})}, 'ValleyPostStompDoor': {frozenset({'Stomp', 'ChargeJump', ('HC', 1)}), frozenset({'ChargeJump', 'OpenWorld', ('HC', 1)}), frozenset({'Bash', 'ChargeJump', ('HC', 1)})}}, 'expert-abilities': {'ValleyEntryTree': {frozenset({'Dash', ('AC', 6)})}, 'ValleyEntryTreePlantAccess': {frozenset({('EC', 2), 'Dash', ('AC', 6)})}, 'ValleyThreeBirdLever': {frozenset({'Dash', ('AC', 6), 'OpenWorld'})}, 'ValleyStompFloor': {frozenset({'Dash', ('AC', 6), 'OpenWorld'})}, 'SpiritTreeRefined': {frozenset({'Dash', ('AC', 6)})}}, 'expert-core': {'ValleyEntryTreePlantAccess': {frozenset({'ChargeFlame', 'WallJump'}), frozenset({'Grenade'})}}, 'expert-lure': {'ValleyPostStompDoor': {frozenset({'Climb', 'Bash', 'DoubleJump'}), frozenset({'Climb', 'Bash', 'ChargeJump'}), frozenset({'Bash', 'WallJump'})}}, 'standard-core': {'ValleyThreeBirdLever': {frozenset({'Dash', 'ChargeJump', 'DoubleJump', 'OpenWorld'})}, 'ValleyStompFloor': {frozenset({'Glide', 'Dash', 'OpenWorld'}), frozenset({'Dash', 'DoubleJump', 'OpenWorld'})}}, 'gjump': {'ValleyThreeBirdLever': {frozenset({'Climb', 'OpenWorld', 'ChargeJump', 'Grenade'})}}, 'standard-abilities': {'ValleyStompFloor': {frozenset({'Dash', 'ChargeJump', 'OpenWorld', ('AC', 3)})}}, 'standard-dboost': {'ValleyStompFloor': {frozenset({'OpenWorld', ('HC', 1)})}}}, 'ValleyEntryTree': {'casual-core': {'ValleyEntryTreePlantAccess': {frozenset({'Climb', 'ChargeJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Bash'}), frozenset({'Glide'})}, 'ValleyPostStompDoor': {frozenset({'OpenWorld'})}}, 'expert-core': {'ValleyEntryTreePlantAccess': {frozenset({'Grenade'})}}, 'expert-abilities': {'ValleyEntryTreePlantAccess': {frozenset({'Dash', ('AC', 6)})}}}, 'ValleyForlornApproach': {'casual-core': {'OutsideForlornCliff': {frozenset({'ChargeJump'}), frozenset({'Bash'})}, 'ValleyStompFloor': {frozenset({'ChargeJump'})}}, 'standard-core': {'OutsideForlornCliff': {frozenset({'Stomp'})}}, 'master-core': {'ValleyStompFloor': {frozenset({'Bash'})}}}, 'ValleyMain': {'casual-core': {'WilhelmLedge': {frozenset({'Glide', 'Wind'}), frozenset({'Bash'})}, 'MistyEntrance': {frozenset({'Glide'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Dash'}), frozenset({'Bash'}), frozenset({'DoubleJump'})}}, 'expert-abilities': {'WilhelmLedge': {frozenset({('EC', 2), 'Dash', ('AC', 6)})}}, 'gjump': {'WilhelmLedge': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}}, 'ValleyPostStompDoor': {'casual-core': {'ValleyRight': {frozenset({'Climb', 'Bash'}), frozenset({'Bash', 'ChargeJump'}), frozenset({'Bash', 'WallJump'}), frozenset({'Grenade', 'Bash'})}, 'ValleyEntry': {frozenset({'OpenWorld'})}, 'ValleyEntryTree': {frozenset({'Bash', 'OpenWorld'}), frozenset({'OpenWorld', 'WallJump'}), frozenset({'ChargeJump', 'OpenWorld'}), frozenset({'OpenWorld', 'DoubleJump'}), frozenset({'Climb', 'OpenWorld'})}}, 'expert-dboost': {'ValleyRight': {frozenset({('HC', 4), 'ChargeJump', 'DoubleJump', 'WallJump'})}}, 'dbash': {'ValleyRight': {frozenset({'Bash'})}}, 'master-dboost': {'ValleyRight': {frozenset({('HC', 0), ('AC', 12), 'Climb', 'ChargeJump', 'DoubleJump'}), frozenset({('HC', 0), ('AC', 12), 'ChargeJump', 'DoubleJump', 'WallJump'}), frozenset({('AC', 12), 'DoubleJump', 'WallJump', ('HC', 8)})}}, 'gjump': {'ValleyRight': {frozenset({('AC', 12), 'Climb', 'Grenade', 'Stomp', 'ChargeJump', 'DoubleJump'}), frozenset({('AC', 12), 'Climb', ('HC', 2), 'Grenade', 'ChargeJump'}), frozenset({'Climb', 'Grenade', 'Stomp', 'ChargeJump', 'DoubleJump', ('HC', 1)}), frozenset({('AC', 6), 'Climb', 'Dash', 'Grenade', 'ChargeJump'}), frozenset({'Climb', ('HC', 4), 'ChargeJump', 'Grenade'})}}, 'standard-core': {'ValleyEntryTree': {frozenset({'Dash', 'OpenWorld'})}}}, 'ValleyRight': {'expert-dboost': {'ValleyPostStompDoor': {frozenset({'DoubleJump', ('HC', 1)})}}, 'master-dboost': {'ValleyPostStompDoor': {frozenset({('HC', 4)}), frozenset({('AC', 12), ('HC', 2)})}}, 'casual-core': {'ValleyStomplessApproach': {frozenset({'Glide', 'Wind'}), frozenset({'DoubleJump', 'WallJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'Bash', 'DoubleJump'}), frozenset({'Grenade', 'Bash', 'Climb'}), frozenset({'Bash', 'WallJump'})}}, 'expert-abilities': {'ValleyStomplessApproach': {frozenset({'Dash', ('AC', 6), 'WallJump'})}}}, 'ValleyStompFloor': {'casual-core': {'ValleyForlornApproach': {frozenset({'Stomp'})}, 'ValleyThreeBirdLever': {frozenset({'Climb', 'ChargeJump'}), frozenset({'Bash'}), frozenset({'ChargeJump', 'DoubleJump', 'WallJump'})}, 'ValleyEntry': {frozenset({'OpenWorld', 'ChargeJump', 'DoubleJump'}), frozenset({'Bash', 'OpenWorld'}), frozenset({'Glide', 'ChargeJump', 'OpenWorld'})}}, 'standard-core': {'ValleyForlornApproach': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-lure': {'ValleyForlornApproach': {frozenset({'Bash'})}}, 'standard-dboost': {'ValleyEntry': {frozenset({'ChargeJump', 'OpenWorld', ('HC', 1)})}}, 'expert-dboost': {'ValleyEntry': {frozenset({('HC', 0), 'OpenWorld', 'DoubleJump'}), frozenset({'OpenWorld', 'ChargeJump', ('HC', 0)})}}, 'expert-abilities': {'ValleyEntry': {frozenset({'Dash', ('AC', 6), 'OpenWorld'})}}}, 'ValleyStompless': {'casual-core': {'WilhelmLedge': {frozenset({'Glide', 'Wind'}), frozenset({'Bash'})}, 'ValleyStomplessApproach': {frozenset({'Bash'}), frozenset({'Glide'})}, 'MistyEntrance': {frozenset({'Bash', 'OpenWorld'}), frozenset({'Climb', 'ChargeJump', 'OpenWorld'}), frozenset({'OpenWorld', 'DoubleJump'}), frozenset({'Dash', 'OpenWorld'}), frozenset({'Glide', 'OpenWorld'})}, 'LowerValley': {frozenset({'OpenWorld'})}, 'LowerValleyPlantApproach': {frozenset({'OpenWorld'})}}, 'expert-abilities': {'WilhelmLedge': {frozenset({('EC', 2), 'Dash', ('AC', 6)}), frozenset({'Dash', ('AC', 6), 'DoubleJump'})}, 'ValleyStomplessApproach': {frozenset({'Dash', ('AC', 6), ('EC', 3)})}}, 'expert-core': {'ValleyMain': {frozenset({'Bash'})}}, 'master-core': {'ValleyMain': {frozenset({'ChargeFlame'}), frozenset({'Grenade'})}}, 'expert-dboost': {'ValleyStomplessApproach': {frozenset({'Dash', ('AC', 3), ('HC', 1)}), frozenset({'DoubleJump', ('HC', 1)})}}, 'master-dboost': {'ValleyStomplessApproach': {frozenset({('HC', 7)}), frozenset({('HC', 4), 'ChargeJump'}), frozenset({('AC', 12), 'ChargeJump', ('HC', 2)}), frozenset({('HC', 4), ('AC', 12)})}}}, 'ValleyStomplessApproach': {'casual-core': {'ValleyStompless': {frozenset({'Bash'})}}, 'expert-dboost': {'ValleyStompless': {frozenset({'ChargeJump', 'DoubleJump', 'WallJump', ('HC', 1)}), frozenset({'Climb', 'ChargeJump', 'DoubleJump', ('HC', 1)})}}, 'expert-abilities': {'ValleyStompless': {frozenset({('EC', 2), 'Dash', 'DoubleJump', 'WallJump'}), frozenset({'Climb', 'Dash', 'DoubleJump', ('EC', 2)})}}, 'master-dboost': {'ValleyStompless': {frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}}}, 'ValleyTeleporter': {'casual-core': {'ValleyPostStompDoor': {frozenset({'Bash'}), frozenset({'Glide'})}, 'ValleyRight': {frozenset({'Climb', 'Glide', 'ChargeJump'}), frozenset({'Climb', 'Glide', 'DoubleJump'}), frozenset({'Glide', 'DoubleJump', 'WallJump'}), frozenset({'Bash'})}, 'MistyEntrance': {frozenset({'Glide', 'OpenWorld'})}, 'LowerValley': {frozenset({'OpenWorld'})}, 'LowerValleyPlantApproach': {frozenset({'OpenWorld'})}, 'ValleyStompless': {frozenset({'Climb', 'ChargeJump', 'OpenWorld'}), frozenset({'Glide', 'OpenWorld', 'Wind'})}}, 'expert-abilities': {'ValleyPostStompDoor': {frozenset({'Dash', ('AC', 6), 'DoubleJump'}), frozenset({'Dash', ('AC', 6), ('EC', 3)})}, 'ValleyRight': {frozenset({'Dash', ('AC', 6)})}, 'MistyEntrance': {frozenset({'Dash', 'DoubleJump', ('AC', 3), 'OpenWorld'}), frozenset({'Dash', ('AC', 6), 'OpenWorld'})}, 'ValleyStompless': {frozenset({'Dash', ('AC', 6), 'OpenWorld'})}}, 'master-core': {'ValleyPostStompDoor': {frozenset({'DoubleJump'})}}, 'expert-dboost': {'ValleyRight': {frozenset({'DoubleJump', 'WallJump', ('HC', 1)}), frozenset({'Glide', 'WallJump', ('HC', 1)}), frozenset({'Climb', 'DoubleJump', ('HC', 1)}), frozenset({'Climb', 'Glide', ('HC', 1)})}}, 'gjump': {'ValleyRight': {frozenset({'Climb', 'ChargeJump', 'Grenade'})}}, 'master-abilities': {'ValleyRight': {frozenset({('AC', 12), 'DoubleJump'})}, 'ValleyStompless': {frozenset({('AC', 12), 'DoubleJump', 'WallJump', 'OpenWorld'})}}, 'standard-core': {'MistyEntrance': {frozenset({'Grenade', 'Bash', 'DoubleJump', 'OpenWorld'})}}, 'standard-abilities': {'MistyEntrance': {frozenset({'OpenWorld', 'Dash', 'ChargeJump', 'DoubleJump', ('AC', 3)})}}, 'expert-core': {'MistyEntrance': {frozenset({'Bash', 'ChargeJump', 'DoubleJump', 'OpenWorld'}), frozenset({'Dash', 'ChargeJump', 'DoubleJump', 'OpenWorld'}), frozenset({'Grenade', 'Bash', 'OpenWorld'})}, 'ValleyStompless': {frozenset({'Climb', 'Bash', 'Grenade', 'OpenWorld'}), frozenset({'Grenade', 'Bash', 'OpenWorld', 'WallJump'})}}, 'master-lure': {'ValleyStompless': {frozenset({'Bash', 'OpenWorld', 'WallJump'})}}}, 'ValleyThreeBirdLever': {'casual-core': {'ValleyEntry': {frozenset({'Climb', 'ChargeJump'}), frozenset({'DoubleJump'}), frozenset({'Bash'}), frozenset({'Glide'})}, 'LowerValley': {frozenset({'Glide', 'Wind'}), frozenset({'Glide', 'DoubleJump'})}}, 'standard-abilities': {'ValleyEntry': {frozenset({'Dash', ('AC', 3)})}, 'LowerValley': {frozenset({'Dash', ('AC', 3)})}}, 'standard-dboost': {'ValleyEntry': {frozenset({('HC', 4)})}, 'LowerValley': {frozenset({('HC', 4)})}}, 'expert-dboost': {'ValleyEntry': {frozenset({'Climb', ('HC', -1)}), frozenset({('HC', -1), 'WallJump'}), frozenset({('HC', -1), 'ChargeJump'})}, 'LowerValley': {frozenset({('HC', 2)})}}, 'standard-core': {'LowerValley': {frozenset({'Glide', 'Dash'}), frozenset({'Dash', 'DoubleJump'})}}, 'dbash': {'LowerValley': {frozenset({'Bash'})}}}, 'WaterVeinArea': {'casual-core': {'LeftGumoHideout': {frozenset({'ChargeJump'}), frozenset({'Glide', 'Wind'}), frozenset({'DoubleJump'}), frozenset({'Grenade', 'Bash'})}, 'LowerLeftGumoHideout': {frozenset({'ChargeJump'}), frozenset({'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Glide'})}, 'MoonGrotto': {frozenset({'DoubleJump', 'WallJump'}), frozenset({'ChargeJump', 'DoubleJump'}), frozenset({'Grenade', 'Bash'}), frozenset({'Climb', 'Glide'}), frozenset({'Glide', 'ChargeJump'}), frozenset({'Climb', 'ChargeJump'}), frozenset({'Climb', 'DoubleJump'}), frozenset({'Glide', 'WallJump'})}}, 'standard-core': {'LeftGumoHideout': {frozenset({'Dash'})}, 'LowerLeftGumoHideout': {frozenset({'Dash'})}, 'MoonGrotto': {frozenset({'Climb', 'Dash'}), frozenset({'Dash', 'WallJump'})}}}, 'WilhelmLedge': {'casual-core': {'SorrowBashLedge': {frozenset({'Glide', 'Wind'}), frozenset({'Dash', 'DoubleJump', 'WallJump'}), frozenset({'Glide', 'ChargeJump', 'WallJump'}), frozenset({'Bash'}), frozenset({'Climb', 'Glide', 'ChargeJump'})}, 'ValleyStompless': {frozenset({'Bash'}), frozenset({'Glide'})}, 'ValleyMain': {frozenset({'Stomp'})}}, 'standard-core': {'SorrowBashLedge': {frozenset({'Glide', 'Dash', 'Climb', 'DoubleJump'})}, 'ValleyMain': {frozenset({'Climb', 'ChargeJump'})}}, 'expert-abilities': {'SorrowBashLedge': {frozenset({'Dash', ('AC', 6), 'WallJump'}), frozenset({'Climb', 'Dash', ('AC', 6)})}, 'ValleyStompless': {frozenset({'Dash', ('AC', 6)})}}, 'master-abilities': {'SorrowBashLedge': {frozenset({'Climb', ('AC', 12), 'DoubleJump'}), frozenset({('AC', 12), 'DoubleJump', 'WallJump'})}, 'ValleyStompless': {frozenset({('AC', 12), 'DoubleJump'})}, 'ValleyMain': {frozenset({'Dash', 'ChargeJump', ('AC', 3)})}}, 'standard-abilities': {'ValleyStompless': {frozenset({'Dash', 'DoubleJump', ('AC', 3)})}}, 'standard-lure': {'ValleyMain': {frozenset({'HoruKey'})}}, 'expert-core': {'ValleyMain': {frozenset({'Grenade', 'Bash', 'ChargeJump'})}}, 'master-core': {'ValleyMain': {frozenset({'Bash'})}}, 'glitched': {'ValleyMain': {frozenset({'ChargeJump'})}}}} diff --git a/worlds/oribf/Types.py b/worlds/oribf/Types.py new file mode 100644 index 00000000..1ed2423a --- /dev/null +++ b/worlds/oribf/Types.py @@ -0,0 +1,5 @@ +from typing import NamedTuple + +class Location(NamedTuple): + code: int + vanilla_item: str \ No newline at end of file diff --git a/worlds/oribf/__init__.py b/worlds/oribf/__init__.py new file mode 100644 index 00000000..c44b1a05 --- /dev/null +++ b/worlds/oribf/__init__.py @@ -0,0 +1,75 @@ +from typing import Set + +from ..AutoWorld import World, LogicMixin +from .Items import item_table, default_pool +from .Locations import lookup_name_to_id +from .Rules import set_rules, location_rules +from .Regions import locations_by_region, connectors +from .Options import options +from BaseClasses import Region, Item, Location, RegionType, Entrance + + +class OriBlindForest(World): + game: str = "Ori and the Blind Forest" + + topology_present = True + + item_names = frozenset(item_table) + location_names = frozenset(lookup_name_to_id) + + item_name_to_id = item_table + location_name_to_id = lookup_name_to_id + + options = options + + def generate_early(self): + logic_sets = {"casual-core"} + for logic_set in location_rules: + if logic_set != "casual-core" and getattr(self.world, logic_set.replace("-", "_")): + logic_sets.add(logic_set) + self.logic_sets = logic_sets + + set_rules = set_rules + + def create_region(self, name: str): + return Region(name, RegionType.Generic, name, self.player, self.world) + + def create_regions(self): + world = self.world + menu = self.create_region("Menu") + world.regions.append(menu) + start = Entrance(self.player, "Start Game", menu) + menu.exits.append(start) + + # workaround for now, remove duplicate locations + already_placed_locations = set() + + for region_name, locations in locations_by_region.items(): + locations -= already_placed_locations + already_placed_locations |= locations + region = self.create_region(region_name) + if region_name == "SunkenGladesRunaway": # starting point + start.connect(region) + region.locations = {Location(self.player, location, lookup_name_to_id[location], region) + for location in locations} + world.regions.append(region) + + for region_name, exits in connectors.items(): + parent = world.get_region(region_name, self.player) + for exit in exits: + connection = Entrance(self.player, exit, parent) + connection.connect(world.get_region(exit, self.player)) + parent.exits.append(connection) + + def generate_basic(self): + for item_name, count in default_pool.items(): + self.world.itempool.extend([self.create_item(item_name)] * count) + + def create_item(self, name: str) -> Item: + return Item(name, not name.startswith("EX"), item_table[name], self.player) + + +class OriBlindForestLogic(LogicMixin): + def _oribf_has_all(self, items: Set[str], player:int): + return all(self.prog_items[item, player] if type(item) == str + else self.prog_items[item[0], player] >= item[1] for item in items) \ No newline at end of file