diff --git a/constraints.txt b/constraints.txt index 4ec405d..3e683b8 100644 --- a/constraints.txt +++ b/constraints.txt @@ -1,3 +1,136 @@ +# Area 0: SOUTHERN_WOODLAND +0"FOREST_START" : 'CG-24', +1"FOREST_EAST_ABOVE_SPRING" : "CO-22", +2"FOREST_UPPER_EAST" : 'CQ-19', +3"FOREST_UPPER_RIVERBANK_EXIT" : 'CQ-22', +4"FOREST_LOWER_RIVERBANK_EXIT" : 'CQ-24', +5"FOREST_LIGHT_ORB_ROOM" : 'CL-19', +6"FOREST_UPPER_EAST_EGG_LEDGE" : 'CN-21', +7"FOREST_COCOA_ROOM" : "CM-23", +8"FOREST_NORTH_HP_UP_ROOM" : 'CI-20', +9"FOREST_NIGHT_TOXIC_STRIKE" : 'CE-22', +10"FOREST_NIGHT_NORTH_EAST" : 'CE-20', +11"FOREST_NIGHT_WEST" : 'BZ-22', +12"FOREST_NIGHT_ATK_UP_ROOM" : 'CC-23', +13"CAVE_ENTRANCE" : 'CD-26', +14"CAVE_COCOA" : 'CJ-27', +15"SPECTRAL_UPPER" : 'CE-28', +16"SPECTRAL_MID" : 'CG-29', +17"SPECTRAL_WEST" : 'CD-30', +18"SPECTRAL_WEST_EGG_ROOM" : 'CC-29', +19"SPECTRAL_WARP" : 'CL-30', +20"SPECTRAL_CICINI_LEDGE" : 'CP-30', +21"SPECTRAL_CICINI_ROOM" : 'CQ-30', +# Area 1: WESTERN_COAST +0"BEACH_MAIN" : 'BO-22', +1"BEACH_FOREST_ENTRANCE" : 'BW-24', +2"BEACH_UNDERWATER_ENTRANCE" : 'BC-27', +3"BEACH_VOLCANIC_ENTRANCE" : 'BH-26', +4"PYRAMID_MAIN" : 'BP-25', +5"PYRAMID_HOURGLASS_ROOM" : 'BT-26', +6"PYRAMID_WARP_ROOM" : 'BS-27', +7"PYRAMID_SOUTHWEST_ROOM" : 'BM-28', +8"PYRAMID_LOWER" : 'BQ-29', +9"PYRAMID_CHAOS_ROD_ROOM" : 'BO-28', +10"GRAVEYARD_TOP_OF_BRIDGE" : 'BB-13', +11"GRAVEYARD_MAIN" : 'BE-14', +12"GRAVEYARD_KOTRI" : 'BM-15', +13"GRAVEYARD_UPPER" : 'BF-12', +14"SKY_ISLAND_MAIN" : 'BV-14', +15"SKY_ISLAND_UPPER" : 'BU-10', +16"HALLOWEEN_UPPER" : 'BF-11', +17"HALLOWEEN_DARK_SHAFT" : 'BC-16', +18"HALLOWEEN_CENTRAL" : 'BG-16', +19"HALLOWEEN_FLOODED" : 'BE-17', +20"HALLOWEEN_PUMPKIN_HALL" : 'BL-16', +21"HALLOWEEN_EXIT" : 'BP-16', +22"HALLOWEEN_PAST_PILLARS": 'BQ-17', +# Area 2: ISLAND_CORE +0"RAVINE_LOWER" : 'AR-25', +1"RAVINE_UPPER_EAST" : 'AT-21', +2"RAVINE_UPPER_WEST" : 'AQ-19', +3"RAVINE_MANA_SURGE" : 'AT-23', +4"RAVINE_NORTH_ATTACK_UP_ROOM" : "AR-20", +5"RAVINE_CHOCOLATE" : 'AP-24', +6"RAVINE_TOWN_ENTRANCE" : 'AM-26', +7"RAVINE_BEACH_ENTRANCE" : 'AU-24', +8"PARK_MAIN" : 'AA-24', +9"PARK_KOTRI" : 'AD-26', +10"PARK_TOWN_ENTRANCE" : 'AI-26', +11"PARK_UPPER" : 'AB-18', +12"UPRPRC_BASE" : 'AE-23', +13"SKY_BRIDGE_MAIN" : 'AE-13', +14"SKY_BRIDGE_EAST" : 'AM-13', +15"SKY_BRIDGE_EAST_LOWER" : 'AO-14', +16"SKY_BRIDGE_DARK_AREA" : 'AE-17', +17"SKY_BRIDGE_HEALTH_SURGE_ROOM" : 'AD-15', +18"SKY_BRIDGE_REGEN_UP_LEDGE" : 'AI-19', +19"SKY_BRIDGE_SLIDE_AREA" : 'AH-17', +# Area 3: NORTHERN_TUNDRA +0"SNOWLAND_EAST" : 'W-25', +1"SNOWLAND_MID" : "P-24", +2"SNOWLAND_RITA" : "M-24", +3"SNOWLAND_LAKE" : "T-27", +4"SNOWLAND_WEST" : 'G-24', +5"SNOWLAND_EVERNIGHT_ENTRANCE" : 'C-24', +6"SNOWLAND_CHRISTMAS_TREE" : 'K-23', +7"PALACE_WARP_LEVEL_1_2" : "C-22", +8"PALACE_ATTACK_UP_TUNNEL" : "E-20", +9"PALACE_LEVEL_3" : "G-19", +10"PALACE_LEVEL_4" : "E-18", +11"PALACE_LEVEL_5" : "F-17", +12"ICY_SUMMIT_MAIN" : 'P-22', +13"ICY_SUMMIT_UPPER" : 'Q-18', +14"ICY_SUMMIT_NIXIE" : 'N-20', +15"AQUARIUM_TOP_ENTRANCE" : 'N-27', +16"AQUARIUM_MID" : 'O-29', +17"AQUARIUM_EAST" : 'S-30', +18"AQUARIUM_WEST" : 'I-30', +19"AQUARIUM_WATER_TOWER" : 'J-27', +20"AQUARIUM_ORB_SLIDE_MAZE" : 'W-28', +21"AQUARIUM_BOMB_WALLED_AREA" : 'V-29', +22"AQUARIUM_BEACH_ENTRANCE" : 'Y-29', +# Area 4: EASTERN_HIGHLANDS +0"RIVERBANK_MAIN_LEVEL1" : "CW-22", +1"RIVERBANK_LEVEL2" : "CY-21", +2"RIVERBANK_LEVEL3" : "CX-20", +3"RIVERBANK_LOWER_LEFT" : "CX-25", +4"RIVERBANK_LOWER_MID" : "DB-25", +5"RIVERBANK_LOWER_RIGHT" : "DE-25", +6"RIVERBANK_LOWER_HEALTH_UP_ROOM" : "DD-24", +7"RIVERBANK_PACK_UP_ROOM" : 'CT-23', +8"RIVERBANK_LOWER_FOREST_ENTRANCE" : 'CT-24', +9"RIVERBANK_UNDERGROUND" : 'CU-26', +10"EVERNIGHT_WEST_ENTRANCE" : "DG-19", +11"EVERNIGHT_NORTHWEST" : "DI-17", +12"EVERNIGHT_SPIKE_BARRIER_ROOM" : 'DE-16', +13"EVERNIGHT_WARP" : 'DK-20', +14"EVERNIGHT_SAYA" : 'DN-15', +15"EVERNIGHT_CORRIDOR_BELOW_SAYA" : 'DO-16', +16"EVERNIGHT_EAST_OF_WARP" : 'DO-18', +17"EVERNIGHT_LOWER" : 'DK-22', +18"LAB_ENTRANCE" : 'DL-25', +19"LAB_MID" : 'DI-26', +20"LAB_WEST" : 'DC-27', +21"LAB_EAST" : 'DN-28', +22"LAB_EAST_PACK_UP_ROOM" : 'DP-27', +23"LAB_SLIDING_POWDER_ROOM" : 'DG-28', +24"LAB_COMPUTER_ROOM" : 'DJ-28', +# Area 5: RABI_RABI_TOWN +0"TOWN_MAIN" : 'AK-35', +1"TOWN_SHOP" : 'AI-33', +# Area 6: PLURKWOOD +0"PLURKWOOD_MAIN" : 'CK-9', +# Area 7: SUBTERRANEAN_AREA +0"VOLCANIC_MAIN" : 'BM-32', +1"VOLCANIC_BEACH_ENTRANCE" : 'AY-33', +# Area 8: WARP_DESTINATION +# Area 9: SYSTEM_INTERIOR +0"SYSTEM_INTERIOR_MAIN" : 'DJ-35', +# Extra +"UNREACHABLE_LOCATION" : 'A-1', + + // .---------------------' // | Area 0 : Southern Woodland @@ -5,150 +138,150 @@ // Starting Forest { - -"prereq": "", +"edge": "FOREST_START -> FOREST_EAST_ABOVE_SPRING", +"prereq": "NONE", } { - -"prereq": "", +"edge": "FOREST_EAST_ABOVE_SPRING -> FOREST_START", +"prereq": "NONE", } { - -"prereq": "", +"edge": "FOREST_START -> FOREST_COCOA_ROOM", +"prereq": "NONE", } { - -"prereq": "", +"edge": "FOREST_COCOA_ROOM -> FOREST_START", +"prereq": "NONE", } { - -"prereq": " | ( & ) | | ", +"edge": "FOREST_EAST_ABOVE_SPRING -> FOREST_UPPER_EAST", +"prereq": "ITM_HARD | (SPEED1 & ITM) | AIR_DASH | AIR_JUMP", } { - -"prereq": "", +"edge": "FOREST_UPPER_EAST -> FOREST_EAST_ABOVE_SPRING", +"prereq": "NONE", } { - -"prereq": " & & ", +"edge": "FOREST_UPPER_EAST -> FOREST_LIGHT_ORB_ROOM", +"prereq": "EXPLOSIVES_ENEMY & SLIDING_POWDER & PROLOGUE_TRIGGER", } { - +"edge": "FOREST_LIGHT_ORB_ROOM -> FOREST_UPPER_EAST", "prereq": " - & ( - ( & ( | ) & ) - | ( & & ) +DARKNESS & ( + (EXPLOSIVES & (SLIDING_POWDER | HAMMER_ROLL_ZIP) & PROLOGUE_TRIGGER) + | (ADV_VHARD & EXPLOSIVES_ENEMY & SLIDE_ZIP) )", } { - -"prereq": "", +"edge": "FOREST_UPPER_EAST -> FOREST_UPPER_EAST_EGG_LEDGE", +"prereq": "EXPLOSIVES_ENEMY", } { - +"edge": "FOREST_UPPER_EAST_EGG_LEDGE -> FOREST_UPPER_EAST", "prereq": " - ( | ) + (EXPLOSIVES_ENEMY | SLIDE_ZIP) & ( - - | ( & ) - | | | | | + ADV_VHARD + | (ITM_HARD & AMULET_FOOD) + | WHIRL_BONK | RABI_SLIPPERS | BUNNY_STRIKE | AIR_JUMP | AIR_DASH ) ", } { - +"edge": "FOREST_LIGHT_ORB_ROOM -> FOREST_UPPER_EAST_EGG_LEDGE", "prereq": " - & ( - ( & ( | ) & ) - | ( & ) +DARKNESS & ( + (EXPLOSIVES & (SLIDING_POWDER | HAMMER_ROLL_ZIP) & PROLOGUE_TRIGGER) + | (ADV_VHARD & SLIDE_ZIP) )", } { - +"edge": "FOREST_UPPER_EAST_EGG_LEDGE -> FOREST_LIGHT_ORB_ROOM", "prereq": " - & & & - ( - | ( & ( | )) - | | | | ) +EXPLOSIVES_ENEMY & SLIDING_POWDER & PROLOGUE_TRIGGER & + (ADV_VHARD + | (ITM_HARD & (AMULET_FOOD | RABI_SLIPPERS)) + | WHIRL_BONK | BUNNY_STRIKE | AIR_JUMP | AIR_DASH) ", } { - +"edge": "FOREST_EAST_ABOVE_SPRING -> FOREST_UPPER_EAST_EGG_LEDGE", "prereq": " - ( & ( | )) + (WALL_JUMP_LV2 & (AIR_JUMP | WHIRL_BONK_CANCEL)) // jump into hole to reset duck, then hammer roll bonk duck - | ( & & ( | ( & ))) + | (ADV_VHARD & HAMMER_ROLL & (AIR_JUMP | (WALL_JUMP_LV2 & AIR_DASH))) ", } { - -"prereq": "", +"edge": "FOREST_UPPER_EAST_EGG_LEDGE -> FOREST_EAST_ABOVE_SPRING", +"prereq": "NONE", } { - -"prereq": "( & ( | ) & ) | ( & )", +"edge": "FOREST_NORTH_HP_UP_ROOM -> FOREST_LIGHT_ORB_ROOM", +"prereq": "(EXPLOSIVES_ENEMY & (SLIDING_POWDER | HAMMER_ROLL_ZIP) & PROLOGUE_TRIGGER) | (ADV_VHARD & SLIDE_ZIP)", } { - -"prereq": " & & & ", +"edge": "FOREST_LIGHT_ORB_ROOM -> FOREST_NORTH_HP_UP_ROOM", +"prereq": "DARKNESS & EXPLOSIVES & SLIDING_POWDER & PROLOGUE_TRIGGER", } { - -"prereq": "", +"edge": "FOREST_NORTH_HP_UP_ROOM -> FOREST_START", +"prereq": "NONE", } { - +"edge": "FOREST_START -> FOREST_NORTH_HP_UP_ROOM", "prereq": " ( - - | - | ( & ) - | - | - | -) & ( | )", + RABI_SLIPPERS + | AIR_JUMP + | (SLIDING_POWDER & ADV_STUPID) + | BUNNY_STRIKE + | AIR_DASH + | WHIRL_BONK +) & (SLIDING_POWDER | HAMMER_ROLL_ZIP)", } { - -"prereq": "", +"edge": "FOREST_EAST_ABOVE_SPRING -> FOREST_UPPER_RIVERBANK_EXIT", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": "", +"edge": "FOREST_UPPER_RIVERBANK_EXIT -> FOREST_EAST_ABOVE_SPRING", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": "", +"edge": "FOREST_START -> FOREST_LOWER_RIVERBANK_EXIT", +"prereq": "SLIDE_ZIP", } { - -"prereq": "", +"edge": "FOREST_EAST_ABOVE_SPRING -> FOREST_LOWER_RIVERBANK_EXIT", +"prereq": "DOWNDRILL_SEMISOLID_CLIP", } { - -"prereq": "", +"edge": "FOREST_LOWER_RIVERBANK_EXIT -> FOREST_EAST_ABOVE_SPRING", +"prereq": "NONE", } @@ -156,268 +289,268 @@ // Forest Night { - +"edge": "FOREST_START -> FOREST_NIGHT_ATK_UP_ROOM", "prereq": " - & ( - ( & ( | ( & ))) - | () - | ( & ( - - | ( & ( | )) +ITM & ( + (AIR_JUMP & (RABI_SLIPPERS | (HARD & WALL_JUMP))) + | (WHIRL_BONK_CANCEL) + | (SLIDE_JUMP_BUNSTRIKE_CANCEL & ( + AIR_JUMP + | (WALL_JUMP_LV2 & (AIR_DASH | ADV_STUPID)) )) - | ( & & ( - - | + | (ADV_HARD & HAMMER_ROLL & ( + AIR_JUMP + | WALL_JUMP_LV2 )) - | ( & ( + | (ADV_STUPID & ( // slide bonk - ( & & ) + (SLIDING_POWDER & BUNNY_AMULET & WALL_JUMP_LV2) // 4 tile zip. amulet cancel needed for wall jump. consumables don't work. - | ( & ( | ( & ))) + | (SLIDE_ZIP & (AIR_JUMP | (BUNNY_AMULET & WALL_JUMP_LV2))) // get bee into hole, airjump into hole and whirlbonk bee - | ( & ) + | (WHIRL_BONK & AIR_JUMP) )) ) ", } { - -"prereq": "", +"edge": "FOREST_NIGHT_ATK_UP_ROOM -> FOREST_START", +"prereq": "NONE", } { - -"prereq": "", +"edge": "FOREST_START -> FOREST_NIGHT_TOXIC_STRIKE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "FOREST_NIGHT_TOXIC_STRIKE -> FOREST_START", +"prereq": "NONE", } { - -"prereq": "", +"edge": "FOREST_NIGHT_WEST -> FOREST_NIGHT_ATK_UP_ROOM", +"prereq": "EXPLOSIVES_ENEMY", } { - +"edge": "FOREST_NIGHT_WEST -> FOREST_START", "prereq": "IMPOSSIBLE", // dummy edge for template constraint } { - -"prereq": " & ( | ( & ))", +"edge": "FOREST_NIGHT_ATK_UP_ROOM -> FOREST_NIGHT_WEST", +"prereq": "DARKNESS & (CARROT_SHOOTER | (CARROT_BOMB & BACKTRACK_1))", } { - -"prereq": " & & ", +"edge": "FOREST_NORTH_HP_UP_ROOM -> FOREST_NIGHT_NORTH_EAST", +"prereq": "DARKNESS & PROLOGUE_TRIGGER & SLIDING_POWDER", } { - -"prereq": " & ( | )", +"edge": "FOREST_NIGHT_NORTH_EAST -> FOREST_NORTH_HP_UP_ROOM", +"prereq": "PROLOGUE_TRIGGER & (SLIDING_POWDER | HAMMER_ROLL_ZIP)", } { - +"edge": "FOREST_NIGHT_TOXIC_STRIKE -> FOREST_NIGHT_NORTH_EAST", "prereq": " - & & ( - - | ( & ( - - | ( & ) - | ( & ) - | - | ) +ITM & DARKNESS & ( + AIR_JUMP + | (WALL_JUMP_LV2 & ( + RABI_SLIPPERS + | (ITM_HARD & SLIDING_POWDER) + | (ADV_HARD & SPEED1) + | AIR_DASH + | ADV_VHARD) ) - | - | - | ( & ( | )) - | ( & ) + | WHIRL_BONK_CANCEL + | SLIDE_JUMP_BUNSTRIKE_CANCEL + | (ADV_VHARD & (SLIDING_POWDER | WHIRL_BONK)) + | (ADV_STUPID & SPEED5) )", } { - -"prereq": "", +"edge": "FOREST_NIGHT_NORTH_EAST -> FOREST_NIGHT_TOXIC_STRIKE", +"prereq": "NONE", } { - -"prereq": " & ", +"edge": "FOREST_NIGHT_TOXIC_STRIKE -> FOREST_NIGHT_WEST", +"prereq": "DARKNESS & PROLOGUE_TRIGGER", } { - -"prereq": "", +"edge": "FOREST_NIGHT_WEST -> FOREST_NIGHT_TOXIC_STRIKE", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": " & ", +"edge": "FOREST_NIGHT_NORTH_EAST -> FOREST_NIGHT_WEST", +"prereq": "DARKNESS & DOWNDRILL_SEMISOLID_CLIP", } { - -"prereq": "", +"edge": "FOREST_NIGHT_WEST -> FOREST_NIGHT_NORTH_EAST", +"prereq": "NONE", } // Cave { - -"prereq": "", +"edge": "FOREST_START -> CAVE_ENTRANCE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "CAVE_ENTRANCE -> FOREST_START", +"prereq": "NONE", } { - -"prereq": " & & ", +"edge": "CAVE_ENTRANCE -> CAVE_COCOA", +"prereq": "KOTRI_1 & COCOA_1 & CHAPTER_1", } { - -"prereq": "", +"edge": "CAVE_COCOA -> CAVE_ENTRANCE", +"prereq": "NONE", } // Spectral { - -"prereq": "", +"edge": "CAVE_ENTRANCE -> SPECTRAL_UPPER", +"prereq": "NONE", } { - +"edge": "SPECTRAL_UPPER -> CAVE_ENTRANCE", "prereq": " - - | - | - | ( & ( | )) - | ( & ) + SLIDING_POWDER + | HAMMER_ROLL_ZIP + | WHIRL_BONK_CANCEL + | (RABI_SLIPPERS & (WALL_JUMP_LV2 | AIR_JUMP)) + | (AIR_JUMP & WALL_JUMP) ", } { - -"prereq": "", +"edge": "SPECTRAL_UPPER -> SPECTRAL_WARP", +"prereq": "NONE", } { - +"edge": "SPECTRAL_WARP -> SPECTRAL_UPPER", "prereq": " - ( & ( | | )) - | ( & ) - | - | + (AIR_JUMP & (RABI_SLIPPERS | AIR_DASH | ITM_HARD)) + | (BUNNY_STRIKE & ITM_HARD) + | AIR_DASH_LV3 + | WHIRL_BONK ", } { - +"edge": "SPECTRAL_WARP -> SPECTRAL_CICINI_LEDGE", "prereq": " -// standing on the edge of the ledge to avoid the prologue trigger is -( | ) & ( - | | | - | ( & & ) - | +// standing on the edge of the ledge to avoid the prologue trigger is ADV_HARD +(PROLOGUE_TRIGGER | ADV_HARD) & ( + RABI_SLIPPERS | AIR_JUMP | AIR_DASH | SLIDE_JUMP_BUNSTRIKE + | (COCOA_1 & KOTRI_1 & CHAPTER_1) + | ADV_VHARD ) " } { - -"prereq": "" +"edge": "SPECTRAL_CICINI_LEDGE -> SPECTRAL_CICINI_ROOM", +"prereq": "PROLOGUE_TRIGGER" } { - -"prereq": "", +"edge": "SPECTRAL_CICINI_ROOM -> SPECTRAL_CICINI_LEDGE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SPECTRAL_CICINI_LEDGE -> SPECTRAL_WARP", +"prereq": "NONE", } { - -"prereq": " | ", +"edge": "SPECTRAL_UPPER -> SPECTRAL_MID", +"prereq": "SLIDING_POWDER | HAMMER_ROLL_ZIP", } { - -"prereq": "", +"edge": "SPECTRAL_MID -> SPECTRAL_UPPER", +"prereq": "SLIDING_POWDER", } { - -"prereq": " | ", +"edge": "SPECTRAL_MID -> SPECTRAL_WARP", +"prereq": "SLIDING_POWDER | HAMMER_ROLL_ZIP", } { - -"prereq": "", +"edge": "SPECTRAL_WARP -> SPECTRAL_MID", +"prereq": "SLIDE_ZIP", } { - +"edge": "SPECTRAL_WEST_EGG_ROOM -> SPECTRAL_MID", "prereq": " - & ( - ( & ( - - | ( & ) - | ( & ) - | +PROLOGUE_TRIGGER & ( + (AIR_JUMP & ( + AIR_DASH + | (SPEED5 & ADV_HARD) + | (BUNNY_STRIKE & ITM_HARD) + | ADV_STUPID )) - | ( & ) // buffered wall launch - | ( & & & ) - | ( & & ) - | ( & & ) + | (AIR_DASH_LV3 & ADV_VHARD) // buffered wall launch + | (BUNNY_STRIKE & RABI_SLIPPERS & AIR_DASH & ADV_VHARD) + | (SLIDE_JUMP_BUNSTRIKE_CANCEL & RABI_SLIPPERS & AIR_DASH_LV3) + | (SLIDE_JUMP_BUNSTRIKE & BUNNY_AMULET & ADV_STUPID) )", } { - -"prereq": " & ( - & ( - // launch off a 1 tile wall - | ( & ) // slide jump into quickdrop airdash +"edge": "SPECTRAL_MID -> SPECTRAL_WEST_EGG_ROOM", +"prereq": "PROLOGUE_TRIGGER & ( + AIR_DASH & ( + ITM_VHARD // launch off a 1 tile wall + | (SLIDING_POWDER & ITM_HARD) // slide jump into quickdrop airdash ) - | ( & ) // quickdrop airdash or launch off the lower wall - | - | + | (ITM_HARD & AIR_DASH_LV3) // quickdrop airdash or launch off the lower wall + | SLIDE_JUMP_BUNSTRIKE + | AIR_JUMP )", } { - -"prereq": "", +"edge": "SPECTRAL_WEST_EGG_ROOM -> SPECTRAL_WEST", +"prereq": "NONE", } { - +"edge": "SPECTRAL_WEST -> SPECTRAL_WEST_EGG_ROOM", "prereq": " - - | - | ( & ) - | ( & ) // slide bonk off bunny and wallkick up the hole + AIR_JUMP + | WHIRL_BONK_CANCEL + | (SLIDE_JUMP_BUNSTRIKE_CANCEL & RABI_SLIPPERS) + | (ADV_STUPID & SLIDING_POWDER) // slide bonk off bunny and wallkick up the hole ", } { - -"prereq": "", +"edge": "SPECTRAL_MID -> SPECTRAL_WEST", +"prereq": "PROLOGUE_TRIGGER", } // .---------------------' @@ -426,394 +559,394 @@ // Beach and Pyramid { - -"prereq": "", +"edge": "BEACH_MAIN -> BEACH_FOREST_ENTRANCE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "BEACH_FOREST_ENTRANCE -> BEACH_MAIN", +"prereq": "NONE", } { - -"prereq": " | ", +"edge": "BEACH_MAIN -> BEACH_UNDERWATER_ENTRANCE", +"prereq": "DOWNDRILL_SEMISOLID_CLIP | EXPLOSIVES_ENEMY", } { - -"prereq": "", +"edge": "BEACH_UNDERWATER_ENTRANCE -> BEACH_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "BEACH_MAIN -> BEACH_VOLCANIC_ENTRANCE", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": " & - ( | | | ( & )) +"edge": "BEACH_VOLCANIC_ENTRANCE -> BEACH_MAIN", +"prereq": "PROLOGUE_TRIGGER & + (AIR_JUMP | SLIDE_JUMP_BUNSTRIKE_CANCEL | WALL_JUMP_LV2 | (RABI_SLIPPERS & WALL_JUMP)) ", } { - -"prereq": " | ", +"edge": "BEACH_MAIN -> PYRAMID_MAIN", +"prereq": "PROLOGUE_TRIGGER | SLIDE_ZIP", } { - -"prereq": " | ", +"edge": "PYRAMID_MAIN -> BEACH_MAIN", +"prereq": "PROLOGUE_TRIGGER | EXPLOSIVES", } { - -"prereq": "", +"edge": "PYRAMID_MAIN -> PYRAMID_WARP_ROOM", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PYRAMID_WARP_ROOM -> PYRAMID_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PYRAMID_MAIN -> PYRAMID_HOURGLASS_ROOM", +"prereq": "NONE", } { - -"prereq": " | | | ", +"edge": "PYRAMID_HOURGLASS_ROOM -> PYRAMID_MAIN", +"prereq": "ITM_HARD | AIR_JUMP | WALL_JUMP | RABI_SLIPPERS", } { - -"prereq": "", +"edge": "PYRAMID_HOURGLASS_ROOM -> PYRAMID_WARP_ROOM", +"prereq": "NONE", } { - +"edge": "PYRAMID_WARP_ROOM -> PYRAMID_HOURGLASS_ROOM", "prereq": " -( & ( - - | - | -)) | ( & & ) +(AIR_JUMP & ( + RABI_SLIPPERS + | SLIDE_JUMP_BUNSTRIKE_CANCEL + | WALL_JUMP_LV2 +)) | (RABI_SLIPPERS & WALL_JUMP_LV2 & SLIDE_JUMP_BUNSTRIKE_CANCEL) ", } { - +"edge": "PYRAMID_WARP_ROOM -> PYRAMID_LOWER", "prereq": " - - | - | ( & ) - | + AIR_JUMP + | AIR_DASH + | (RABI_SLIPPERS & SLIDE_JUMP_BUNSTRIKE) + | ADV_VHARD ", } { - -"prereq": "", +"edge": "PYRAMID_LOWER -> PYRAMID_WARP_ROOM", +"prereq": "NONE", } { - +"edge": "PYRAMID_LOWER -> PYRAMID_CHAOS_ROD_ROOM", "prereq": " - & ( - - | ( & ( | )) - | + SLIDING_POWDER & ( + AIR_JUMP + | (AIR_DASH & (RABI_SLIPPERS | ITM_HARD)) + | ADV_VHARD ) ", } { - +"edge": "PYRAMID_CHAOS_ROD_ROOM -> PYRAMID_LOWER", "prereq": " - & - ( | ) + SLIDING_POWDER & + (EXPLOSIVES | DOWNDRILL_SEMISOLID_CLIP) ", } { - -"prereq": " & ", +"edge": "PYRAMID_CHAOS_ROD_ROOM -> PYRAMID_SOUTHWEST_ROOM", +"prereq": "TM_PANDORA & SLIDE_ZIP", } { - -"prereq": "( & ) | | ", +"edge": "PYRAMID_SOUTHWEST_ROOM -> PYRAMID_CHAOS_ROD_ROOM", +"prereq": "(TM_PANDORA & SLIDING_POWDER) | SLIDE_ZIP | HAMMER_ROLL_ZIP", } { - -"prereq": "", +"edge": "PYRAMID_SOUTHWEST_ROOM -> PYRAMID_MAIN", +"prereq": "NONE", } { - -"prereq": " | ", +"edge": "PYRAMID_MAIN -> PYRAMID_SOUTHWEST_ROOM", +"prereq": "DOWNDRILL_SEMISOLID_CLIP | EXPLOSIVES", } // Graveyard and Sky Island { - +"edge": "GRAVEYARD_MAIN -> GRAVEYARD_UPPER", "prereq": " ( // First jump - - | ( & ( | ( & ))) - | - | ( & ( | )) + AIR_JUMP + | (RABI_SLIPPERS & (SLIDE_JUMP_BUNSTRIKE | (ADV_VHARD & AMULET_FOOD))) + | WHIRL_BONK + | (AIR_DASH & (ITM_HARD | RABI_SLIPPERS)) // slide bonk - | ( & ) - // damage - | + | (SLIDING_POWDER & ADV_VHARD) + // damage boost + | ADV_STUPID ) & ( // Second jump - - | - | ( & ) - | - | + AIR_JUMP + | RABI_SLIPPERS + | (WALL_JUMP & ITM_HARD) + | WHIRL_BONK_CANCEL + | SLIDE_JUMP_BUNSTRIKE_CANCEL // never ever slide bonk - | ( & ( | )) + | (ADV_STUPID & (SLIDING_POWDER | WHIRL_BONK)) ) ", } { - -"prereq": "", +"edge": "GRAVEYARD_UPPER -> GRAVEYARD_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "GRAVEYARD_UPPER -> GRAVEYARD_TOP_OF_BRIDGE", +"prereq": "NONE", } { - -"prereq": " & & ( | )", +"edge": "GRAVEYARD_TOP_OF_BRIDGE -> GRAVEYARD_UPPER", +"prereq": "AIR_JUMP & RABI_SLIPPERS & (SPEED1 | AIR_DASH)", } { - -"prereq": " | ( & & ( | ))", +"edge": "GRAVEYARD_MAIN -> GRAVEYARD_TOP_OF_BRIDGE", +"prereq": "WHIRL_BONK | (RABI_SLIPPERS & AIR_JUMP & (AIR_DASH | ADV_VHARD))", } { - -"prereq": "", +"edge": "GRAVEYARD_TOP_OF_BRIDGE -> GRAVEYARD_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "GRAVEYARD_MAIN -> GRAVEYARD_KOTRI", +"prereq": "NONE", } { - -"prereq": "", +"edge": "GRAVEYARD_KOTRI -> GRAVEYARD_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "GRAVEYARD_KOTRI -> SKY_ISLAND_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SKY_ISLAND_MAIN -> GRAVEYARD_KOTRI", +"prereq": "NONE", } { - +"edge": "SKY_ISLAND_MAIN -> SKY_ISLAND_UPPER", "prereq": " - ( & ) - | ( & (( & ) | | | )) - | ( & ( | )) + (BUNNY_STRIKE & ITM_HARD) + | (AIR_JUMP & ((RABI_SLIPPERS & SPEED1) | AIR_DASH | WALL_JUMP | ITM_HARD)) + | (AIR_DASH_LV3 & (WALL_JUMP | ADV_HARD)) ", } { - -"prereq": "", +"edge": "SKY_ISLAND_UPPER -> SKY_ISLAND_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SKY_ISLAND_MAIN -> BEACH_MAIN", +"prereq": "EXPLOSIVES", } -// +// Halloween { - +"edge": "GRAVEYARD_UPPER -> HALLOWEEN_UPPER", "prereq": " - & + HALLOWEEN & EXPLOSIVES_ENEMY & ( - - | ( & ) - | ( & ( - - | - | - | - | + WHIRL_BONK + | (SLIDING_POWDER & ADV_STUPID) + | (AIR_JUMP & ( + ITM_HARD + | RABI_SLIPPERS + | SLIDE_JUMP_BUNSTRIKE_CANCEL + | BUNNY_WHIRL + | AIR_DASH ) ) ) ", } -// important nonsense - no necessary +// important nonsense - no explosives necessary { - -"prereq": " & & & & & & & ", +"edge": "SKY_ISLAND_UPPER -> HALLOWEEN_UPPER", +"prereq": "HALLOWEEN & RABI_SLIPPERS & AIR_JUMP & WALL_JUMP_LV2 & BUNNY_STRIKE & BUNNY_AMULET_LV2 & AIR_DASH & ADV_STUPID", } { - -"prereq": "", +"edge": "HALLOWEEN_UPPER -> GRAVEYARD_UPPER", +"prereq": "NONE", } { - +"edge": "GRAVEYARD_MAIN -> HALLOWEEN_DARK_SHAFT", "prereq": " - & + HALLOWEEN & DARKNESS // Divided by room - & ( | ( & )) + & (BUNNY_WHIRL | (CARROT_SHOOTER & BOOST)) & ( - - | ( & ) - | ( & ( | )) - | ( & ) - | - ) & + BUNNY_WHIRL + | (SLIDING_POWDER & ADV_HARD) + | (AIR_DASH & (RABI_SLIPPERS | SLIDE_JUMP_BUNSTRIKE_CANCEL)) + | (RABI_SLIPPERS & SLIDE_JUMP_BUNSTRIKE) + | ADV_STUPID + ) & EXPLOSIVES ", } { - +"edge": "HALLOWEEN_DARK_SHAFT -> GRAVEYARD_MAIN", "prereq": " - & + DARKNESS & EXPLOSIVES & ( - - | - | ( & ( | )) + AIR_JUMP + | WALL_JUMP_LV2 + | (BUNNY_WHIRL & (RABI_SLIPPERS | SLIDE_JUMP_BUNSTRIKE_CANCEL)) ) & ( - - | ( & ) - | ( & ( | )) - | ( & ) - | + BUNNY_WHIRL + | (SLIDING_POWDER & ADV_HARD) + | (AIR_DASH & (RABI_SLIPPERS | SLIDE_JUMP_BUNSTRIKE_CANCEL)) + | (RABI_SLIPPERS & SLIDE_JUMP_BUNSTRIKE) + | ADV_STUPID ) ", } { - +"edge": "HALLOWEEN_DARK_SHAFT -> HALLOWEEN_CENTRAL", "prereq": " - + DARKNESS & ( - ( & ) - | ( & & ) - | ( & & ) - | ( & & ) - | ( & ( | )) + (AIR_JUMP & WALL_JUMP_LV2) + | (AIR_JUMP & BUNNY_WHIRL & RABI_SLIPPERS) + | (AIR_JUMP & BUNNY_WHIRL & SLIDE_JUMP_BUNSTRIKE_CANCEL) + | (AIR_JUMP & RABI_SLIPPERS & SLIDE_JUMP_BUNSTRIKE_CANCEL) + | (WHIRL_BONK_CANCEL & (WALL_JUMP_LV2 | ADV_VHARD)) ) ", } { - -"prereq": "", +"edge": "HALLOWEEN_CENTRAL -> HALLOWEEN_DARK_SHAFT", +"prereq": "DARKNESS", } { - -"prereq": " & ", +"edge": "GRAVEYARD_MAIN -> HALLOWEEN_CENTRAL", +"prereq": "HALLOWEEN & SLIDE_ZIP", } { - -"prereq": " & & ( | ( & ))", +"edge": "HALLOWEEN_CENTRAL -> HALLOWEEN_FLOODED", +"prereq": "SLIDING_POWDER & BUNNY_WHIRL & (CARROT_BOMB | (CARROT_SHOOTER & BOOST_MANY))", } //This edge does not provide a particularly useful path //{ -// -//"prereq": "( & ) & & & & ", +//"edge": "HALLOWEEN_FLOODED -> HALLOWEEN_CENTRAL", +//"prereq": "(CARROT_SHOOTER & BOOST) & SLIDE_ZIP & HAMMER_ROLL_ZIP & ADV_STUPID & AMULET_FOOD", //} { - -"prereq": "( & & ) | ( & & )", +"edge": "HALLOWEEN_FLOODED -> HALLOWEEN_PUMPKIN_HALL", +"prereq": "(EXPLOSIVES & SLIDING_POWDER & BUNNY_WHIRL) | (EXPLOSIVES & SLIDE_ZIP & ADV_STUPID)", } { - -"prereq": " & ", +"edge": "HALLOWEEN_FLOODED -> BEACH_MAIN", +"prereq": "WATER_ORB & HAMMER_ROLL_ZIP", } { - +"edge": "HALLOWEEN_CENTRAL -> HALLOWEEN_PUMPKIN_HALL", "prereq": " - ( & & ) - | ( & ) - | ( & ( | ( & & ))) + (SLIDING_POWDER & DOWNDRILL_SEMISOLID_CLIP & EXPLOSIVES) + | (HAMMER_ROLL_ZIP & EXPLOSIVES) + | (SLIDE_ZIP & (CARROT_BOMB | (CARROT_SHOOTER & BOOST & ADV_STUPID))) ", } { - -"prereq": " | ( & )", +"edge": "HALLOWEEN_PUMPKIN_HALL -> HALLOWEEN_CENTRAL", +"prereq": "CARROT_BOMB | (CARROT_SHOOTER & BOOST_MANY)", } { - +"edge": "HALLOWEEN_PUMPKIN_HALL -> HALLOWEEN_EXIT", "prereq": " - ( | ( & & )) & + (CARROT_BOMB | (CARROT_SHOOTER & BOOST_MANY & ADV)) & ( - - | - | ( & ( | )) - | ( & ) - ) & ( | ) + WHIRL_BONK + | SLIDE_JUMP_BUNSTRIKE + | (AIR_JUMP & (ADV_VHARD | RABI_SLIPPERS)) + | (RABI_SLIPPERS & AIR_DASH_LV3) + ) & (SLIDE_ZIP | BUNNY_WHIRL) ", } { - -"prereq": "", +"edge": "HALLOWEEN_EXIT -> GRAVEYARD_KOTRI", +"prereq": "NONE", } { - -"prereq": " & ", +"edge": "GRAVEYARD_KOTRI -> HALLOWEEN_EXIT", +"prereq": "HALLOWEEN & DOWNDRILL_SEMISOLID_CLIP", } { - +"edge": "HALLOWEEN_EXIT -> HALLOWEEN_PAST_PILLARS", "prereq": " // RIBBON & - - | - | - | - | - | ( & ) - | + AIR_JUMP + | AIR_DASH + | RABI_SLIPPERS + | SLIDE_JUMP_BUNSTRIKE + | BUNNY_WHIRL + | (ADV_VHARD & AMULET_FOOD) + | WALL_JUMP ", } { - -"prereq": "", +"edge": "HALLOWEEN_PAST_PILLARS -> HALLOWEEN_EXIT", +"prereq": "NONE", } // .---------------------' @@ -824,334 +957,334 @@ // Ravine { - -"prereq": "", +"edge": "RAVINE_BEACH_ENTRANCE -> RAVINE_LOWER", +"prereq": "NONE", } { - -"prereq": "", +"edge": "RAVINE_LOWER -> RAVINE_BEACH_ENTRANCE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "RAVINE_LOWER -> RAVINE_TOWN_ENTRANCE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "RAVINE_TOWN_ENTRANCE -> RAVINE_LOWER", +"prereq": "NONE", } { - -"prereq": "", +"edge": "RAVINE_LOWER -> RAVINE_MANA_SURGE", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": "", +"edge": "RAVINE_MANA_SURGE -> RAVINE_LOWER", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": " & ", +"edge": "RAVINE_UPPER_EAST -> RAVINE_MANA_SURGE", +"prereq": "SLIDING_POWDER & DOWNDRILL_SEMISOLID_CLIP", } { - -"prereq": "", +"edge": "RAVINE_MANA_SURGE -> RAVINE_UPPER_EAST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "RAVINE_LOWER -> RAVINE_UPPER_EAST", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": "", +"edge": "RAVINE_UPPER_EAST -> RAVINE_LOWER", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": "( | ) & ( +"edge": "RAVINE_LOWER -> RAVINE_UPPER_WEST", +"prereq": "(SLIDING_POWDER | PROLOGUE_TRIGGER) & ( // going up the long chasm - & ( | ( & )) + WALL_JUMP_LV2 & (AIR_JUMP | (ADV_VHARD & WHIRL_BONK_CANCEL)) )", } { - -"prereq": "", // semisolid +"edge": "RAVINE_UPPER_WEST -> RAVINE_LOWER", +"prereq": "NONE", // semisolid } { - -"prereq": "", +"edge": "RAVINE_UPPER_EAST -> RAVINE_UPPER_WEST", +"prereq": "PROLOGUE_TRIGGER", } { - -"prereq": "", +"edge": "RAVINE_UPPER_WEST -> RAVINE_UPPER_EAST", +"prereq": "PROLOGUE_TRIGGER", } { - +"edge": "RAVINE_UPPER_EAST -> RAVINE_NORTH_ATTACK_UP_ROOM", "prereq": " // Jumping up the chasm -( & & & ( | )) -| ( & & & ( | ( & ))) +(ADV_VHARD & WALL_JUMP_LV2 & AIR_JUMP & (SLIDING_POWDER | SPEED5)) +| (ADV_STUPID & SLIDE_JUMP_BUNSTRIKE_CANCEL & RABI_SLIPPERS & (WALL_JUMP_LV2 | (WALL_JUMP & AIR_JUMP))) ", } { - -"prereq": "", +"edge": "RAVINE_NORTH_ATTACK_UP_ROOM -> RAVINE_UPPER_EAST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "RAVINE_UPPER_WEST -> RAVINE_NORTH_ATTACK_UP_ROOM", +"prereq": "SLIDING_POWDER", } { - -"prereq": " & ", +"edge": "RAVINE_NORTH_ATTACK_UP_ROOM -> RAVINE_UPPER_WEST", +"prereq": "SLIDING_POWDER & 8TILE_WALLJUMP", } { - -"prereq": "", +"edge": "RAVINE_UPPER_WEST -> RAVINE_CHOCOLATE", +"prereq": "NONE", } { - +"edge": "RAVINE_CHOCOLATE -> RAVINE_UPPER_WEST", "prereq": " // From save room up to ledge below egg ( - ( & & (( & ) | )) - | ( & ( | )) - | ( & & ) + (ITM & RABI_SLIPPERS & ((AIR_DASH & ADV_VHARD) | AIR_DASH_LV3)) + | (AIR_JUMP & (ITM_HARD | RABI_SLIPPERS)) + | (ADV_VHARD & SLIDE_JUMP_BUNSTRIKE & RABI_SLIPPERS) ) // From ledge below egg to flower ledge -& ( | | | | ) +& (AIR_DASH | AIR_JUMP | RABI_SLIPPERS | SLIDE_JUMP_BUNSTRIKE | ADV_VHARD) // Jumping up hole above chocolate arena & ( - (( | ) & ( | )) - | ( & ) - | ( & & ) - | + ((AIR_JUMP | WALL_JUMP_LV2) & (RABI_SLIPPERS | SLIDE_JUMP_BUNSTRIKE)) + | (AIR_JUMP & WALL_JUMP_LV2) + | (AIR_JUMP & WALL_JUMP & AIR_DASH) + | TM_CHOCOLATE ) ", } { - -"prereq": "", +"edge": "RAVINE_CHOCOLATE -> RAVINE_LOWER", +"prereq": "NONE", } { - +"edge": "RAVINE_LOWER -> RAVINE_CHOCOLATE", "prereq": " - ( & (( & ) | | )) - | - | ( & & & & ) - | ( & & & & ( | )) + (AIR_JUMP & ((ITM & SPEED1) | AIR_DASH | ADV_VHARD)) + | WHIRL_BONK + | (ADV_STUPID & RABI_SLIPPERS & SLIDE_JUMP_BUNSTRIKE_CANCEL & AIR_DASH & BUNNY_AMULET_LV2) + | (ADV_HARD & RABI_SLIPPERS & WALL_JUMP & AIR_DASH & (SLIDING_POWDER | SPEED5)) ", } // Park and Sky Bridge { - -"prereq": "", +"edge": "PARK_MAIN -> PARK_KOTRI", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PARK_KOTRI -> PARK_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PARK_KOTRI -> PARK_TOWN_ENTRANCE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PARK_TOWN_ENTRANCE -> PARK_KOTRI", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PARK_MAIN -> UPRPRC_BASE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "UPRPRC_BASE -> PARK_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PARK_MAIN -> PARK_UPPER", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PARK_UPPER -> PARK_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PARK_UPPER -> SKY_BRIDGE_MAIN", +"prereq": "NONE", } { - +"edge": "PARK_MAIN -> SKY_BRIDGE_SLIDE_AREA", // consumables do not work due to screen transition -"prereq": " & & ", +"prereq": "ADV_STUPID & SLIDE_ZIP & BUNNY_AMULET", } { - -"prereq": "", +"edge": "SKY_BRIDGE_MAIN -> PARK_UPPER", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SKY_BRIDGE_MAIN -> SKY_BRIDGE_EAST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SKY_BRIDGE_EAST -> SKY_BRIDGE_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SKY_BRIDGE_EAST -> SKY_BRIDGE_EAST_LOWER", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SKY_BRIDGE_EAST_LOWER -> SKY_BRIDGE_EAST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SKY_BRIDGE_MAIN -> SKY_BRIDGE_DARK_AREA", +"prereq": "DARKNESS", } { - -"prereq": "", +"edge": "SKY_BRIDGE_DARK_AREA -> SKY_BRIDGE_MAIN", +"prereq": "DARKNESS", } { - +"edge": "SKY_BRIDGE_DARK_AREA -> SKY_BRIDGE_HEALTH_SURGE_ROOM", "prereq": " - & ( - - | ( & & ) - | ( & ( - ( & ) - | ( & ) +DARKNESS & ( + EXPLOSIVES + | (ADV_VHARD & AIR_JUMP & WALL_JUMP_LV2) + | (ADV_STUPID & ( + (WHIRL_BONK_CANCEL & WALL_JUMP) + | (AIR_JUMP & SLIDE_JUMP_BUNSTRIKE_CANCEL) )) ) ", } { - -"prereq": "", +"edge": "SKY_BRIDGE_HEALTH_SURGE_ROOM -> SKY_BRIDGE_DARK_AREA", +"prereq": "DARKNESS", } { - +"edge": "SKY_BRIDGE_MAIN -> SKY_BRIDGE_HEALTH_SURGE_ROOM", "prereq": "IMPOSSIBLE", } { - -"prereq": " | ", +"edge": "SKY_BRIDGE_HEALTH_SURGE_ROOM -> SKY_BRIDGE_MAIN", +"prereq": "SLIDING_POWDER | HAMMER_ROLL_ZIP", } { - -"prereq": " | ", +"edge": "SKY_BRIDGE_DARK_AREA -> SKY_BRIDGE_SLIDE_AREA", +"prereq": "SLIDE_ZIP | HAMMER_ROLL_ZIP", } { - -"prereq": "", +"edge": "SKY_BRIDGE_SLIDE_AREA -> SKY_BRIDGE_DARK_AREA", +"prereq": "SLIDING_POWDER", } { - +"edge": "SKY_BRIDGE_MAIN -> SKY_BRIDGE_REGEN_UP_LEDGE", "prereq": " - - | - | (( | ( & )) & ( - - | - | ( & ( & )) - | ( & & ) + AIR_DASH + | AIR_JUMP + | ((ADV_HARD | (ITM_HARD & BUNNY_AMULET)) & ( + SLIDING_POWDER + | HAMMER_ROLL_ZIP + | (ADV_VHARD & (RABI_SLIPPERS & AMULET_FOOD)) + | (ADV_STUPID & WALL_JUMP_LV2 & 2_AMULET_FOOD) )) ", } { - -"prereq": "", +"edge": "SKY_BRIDGE_REGEN_UP_LEDGE -> PARK_TOWN_ENTRANCE", +"prereq": "NONE", } { - +"edge": "SKY_BRIDGE_SLIDE_AREA -> SKY_BRIDGE_REGEN_UP_LEDGE", "prereq": " - & ( - (( | ) & ( - - | - | ( | ( & )) +DARKNESS & ( + ((SLIDING_POWDER | HAMMER_ROLL_ZIP) & ( + AIR_JUMP + | AIR_DASH + | (ADV_HARD | (ITM_HARD & BUNNY_AMULET)) )) - | ( & ) + | (SLIDING_POWDER & EXPLOSIVES) ) ", } { - -"prereq": " & ", +"edge": "SKY_BRIDGE_REGEN_UP_LEDGE -> SKY_BRIDGE_SLIDE_AREA", +"prereq": "CARROT_BOMB & SLIDING_POWDER", } { - -"prereq": " & ", +"edge": "SKY_BRIDGE_MAIN -> SKY_BRIDGE_SLIDE_AREA", +"prereq": "DARKNESS & SLIDE_ZIP", } { - +"edge": "SKY_BRIDGE_MAIN -> PARK_TOWN_ENTRANCE", "prereq": " - - | - | - | - | ( & ( & )) - | ( & & ) + AIR_DASH + | AIR_JUMP + | SLIDING_POWDER + | HAMMER_ROLL_ZIP + | (ADV_VHARD & (RABI_SLIPPERS & AMULET_FOOD)) + | (ADV_STUPID & WALL_JUMP_LV2 & 2_AMULET_FOOD) ", } { - +"edge": "SKY_BRIDGE_SLIDE_AREA -> PARK_TOWN_ENTRANCE", // technically goes through SKY_BRIDGE_MAIN, but not really important -"prereq": " | ", +"prereq": "SLIDING_POWDER | HAMMER_ROLL_ZIP", } { - -"prereq": "", +"edge": "PARK_UPPER -> SKY_BRIDGE_SLIDE_AREA", +"prereq": "SLIDE_ZIP", } // .---------------------' @@ -1160,518 +1293,866 @@ // Snowland, Palace and Icy Summit { - -"prereq": "", +"edge": "SNOWLAND_EAST -> SNOWLAND_MID", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_MID -> SNOWLAND_EAST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_EAST -> SNOWLAND_LAKE", +"prereq": "UNDERWATER", } { - -"prereq": "", +"edge": "SNOWLAND_LAKE -> SNOWLAND_EAST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_LAKE -> SNOWLAND_MID", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_MID -> SNOWLAND_LAKE", +"prereq": "UNDERWATER", } { - -"prereq": "", +"edge": "SNOWLAND_MID -> SNOWLAND_RITA", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_RITA -> SNOWLAND_MID", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_WEST -> SNOWLAND_RITA", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_RITA -> SNOWLAND_WEST", +"prereq": "SLIDING_POWDER", } { - -"prereq": " & ", +"edge": "SNOWLAND_RITA -> SNOWLAND_CHRISTMAS_TREE", +"prereq": "EXPLOSIVES & SLIDING_POWDER", } { - -"prereq": " & ( | )", +"edge": "SNOWLAND_CHRISTMAS_TREE -> SNOWLAND_RITA", +"prereq": "EXPLOSIVES & (SLIDING_POWDER | HAMMER_ROLL_ZIP)", } { - +"edge": "SNOWLAND_WEST -> SNOWLAND_CHRISTMAS_TREE", "prereq": " - ( & ) - | ( & ) - | ( & & & & ) - | ( & ( | )) + (AIR_JUMP & AIR_DASH) + | (AIR_JUMP & SLIDE_JUMP_BUNSTRIKE_CANCEL) + | (ADV_STUPID & SLIDE_JUMP_BUNSTRIKE_CANCEL & BUNNY_AMULET_LV2 & WALL_JUMP & AIR_DASH) + | (WHIRL_BONK & (ADV_VHARD | AIR_JUMP)) ", } { - -"prereq": "", +"edge": "SNOWLAND_CHRISTMAS_TREE -> SNOWLAND_WEST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_MID -> ICY_SUMMIT_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "ICY_SUMMIT_MAIN -> SNOWLAND_MID", +"prereq": "NONE", } { - -"prereq": "", +"edge": "ICY_SUMMIT_MAIN -> ICY_SUMMIT_UPPER", +"prereq": "NONE", } { - -"prereq": "", +"edge": "ICY_SUMMIT_UPPER -> ICY_SUMMIT_MAIN", +"prereq": "NONE", } { - +"edge": "ICY_SUMMIT_MAIN -> ICY_SUMMIT_NIXIE", "prereq": " - - | ( & ( - (( | ( & )) & ) - | () - | ( & ( | )) // damage + maybe slide bonk + WHIRL_BONK_CANCEL + | (AIR_JUMP & ( + ((RABI_SLIPPERS | (SLIDE_JUMP_BUNSTRIKE_CANCEL & ADV_VHARD)) & AIR_DASH) + | (WALL_JUMP_LV2) + | (ADV_STUPID & (RABI_SLIPPERS | SLIDING_POWDER)) // damage boost + maybe slide bonk ))" } { - -"prereq": "", +"edge": "ICY_SUMMIT_NIXIE -> ICY_SUMMIT_MAIN", +"prereq": "NONE", } { - -"prereq": "", +"edge": "ICY_SUMMIT_UPPER -> ICY_SUMMIT_NIXIE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "ICY_SUMMIT_NIXIE -> ICY_SUMMIT_UPPER", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_WEST -> PALACE_WARP_LEVEL_1_2", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PALACE_WARP_LEVEL_1_2 -> SNOWLAND_WEST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PALACE_WARP_LEVEL_1_2 -> PALACE_LEVEL_3", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PALACE_LEVEL_3 -> PALACE_WARP_LEVEL_1_2", +"prereq": "NONE", } { - +"edge": "PALACE_WARP_LEVEL_1_2 -> PALACE_ATTACK_UP_TUNNEL", "prereq": " - - | ( & ( | )) - | (( | ) & ) + AIR_JUMP + | (WALL_JUMP_LV2 & (ITM_HARD | RABI_SLIPPERS)) + | ((RABI_SLIPPERS | SLIDE_JUMP_BUNSTRIKE_CANCEL) & AIR_DASH) // can probably be done with lower level items, haven't done it successfully yet. - | ( & & ) - | ( & ) + | (SPEED3 & AIR_DASH_LV3 & ADV_STUPID) + | (ADV_HARD & WHIRL_BONK) ", } { - -"prereq": "", +"edge": "PALACE_ATTACK_UP_TUNNEL -> PALACE_WARP_LEVEL_1_2", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PALACE_LEVEL_3 -> PALACE_ATTACK_UP_TUNNEL", +"prereq": "NONE", } { - +"edge": "PALACE_ATTACK_UP_TUNNEL -> PALACE_LEVEL_3", "prereq": " - - | ( & ( | )) - | ( & & ) - | () + AIR_JUMP + | (WALL_JUMP_LV2 & (ITM_HARD | RABI_SLIPPERS)) + | (RABI_SLIPPERS & SLIDE_JUMP_BUNSTRIKE_CANCEL & BUNNY_AMULET_LV2) + | (WHIRL_BONK_CANCEL) ", } { - -"prereq": "", +"edge": "PALACE_LEVEL_3 -> PALACE_LEVEL_4", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PALACE_LEVEL_4 -> PALACE_LEVEL_3", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PALACE_LEVEL_4 -> PALACE_LEVEL_5", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PALACE_LEVEL_5 -> PALACE_LEVEL_4", +"prereq": "NONE", } { - -"prereq": "", +"edge": "PALACE_LEVEL_5 -> SNOWLAND_WEST", +"prereq": "NONE", } { - -"prereq": " | | ", +"edge": "PALACE_LEVEL_5 -> SNOWLAND_CHRISTMAS_TREE", +"prereq": "ITM | AIR_JUMP | AIR_DASH", } { - -"prereq": "", +"edge": "SNOWLAND_WEST -> SNOWLAND_EVERNIGHT_ENTRANCE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "SNOWLAND_EVERNIGHT_ENTRANCE -> SNOWLAND_WEST", +"prereq": "NONE", } // Aquarium { - -"prereq": "", +"edge": "SNOWLAND_WEST -> AQUARIUM_TOP_ENTRANCE", +"prereq": "UNDERWATER", } { - -"prereq": "", +"edge": "AQUARIUM_TOP_ENTRANCE -> SNOWLAND_WEST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "AQUARIUM_TOP_ENTRANCE -> AQUARIUM_MID", +"prereq": "NONE", } { - -"prereq": "", +"edge": "AQUARIUM_MID -> AQUARIUM_TOP_ENTRANCE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "AQUARIUM_TOP_ENTRANCE -> AQUARIUM_WEST", +"prereq": "DARKNESS", } { - -"prereq": "", +"edge": "AQUARIUM_WEST -> AQUARIUM_TOP_ENTRANCE", +"prereq": "NONE", } { - -"prereq": "", +"edge": "AQUARIUM_MID -> AQUARIUM_EAST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "AQUARIUM_EAST -> AQUARIUM_MID", +"prereq": "NONE", } { - -"prereq": "", +"edge": "AQUARIUM_WEST -> AQUARIUM_EAST", +"prereq": "NONE", } { - -"prereq": "", +"edge": "AQUARIUM_EAST -> AQUARIUM_WEST", +"prereq": "DARKNESS", } { - +"edge": "SNOWLAND_LAKE -> AQUARIUM_MID", "prereq": "FIRE_ORB", } { - +"edge": "AQUARIUM_MID -> SNOWLAND_LAKE", "prereq": "FIRE_ORB", } { - +"edge": "AQUARIUM_WEST -> AQUARIUM_WATER_TOWER", "prereq": " - & & + WATER_ORB & EXPLOSIVES & ( - ( & & ) // you need to disable speed - | ( & & ) - | ( & ) - | ( & ) - | ( & & & ) - | ( & ) + (WALL_JUMP_LV2 & RABI_SLIPPERS & ITM_HARD) // you need to disable speed boost + | (WALL_JUMP & RABI_SLIPPERS & AIR_JUMP) + | (WALL_JUMP_LV2 & AIR_JUMP) + | (WALL_JUMP_LV2 & WHIRL_BONK_CANCEL) + | (WHIRL_BONK_CANCEL & AIR_JUMP & RABI_SLIPPERS & ADV_HARD) + | (WHIRL_BONK_CANCEL & ADV_STUPID) ) ", } { - +"edge": "AQUARIUM_WATER_TOWER -> AQUARIUM_WEST", "prereq": " - & & ( - - | ( & & ) - | ( & ( - - | + DARKNESS & WATER_ORB & ( + WALL_JUMP_LV2 + | (RABI_SLIPPERS & AIR_DASH_LV3 & ITM_HARD) + | (AIR_JUMP & ( + WALL_JUMP + | RABI_SLIPPERS // airdash to opposite wall and wallkick off it - | ( & ) + | (AIR_DASH & ITM_HARD) // aj, rwj, qd, amulet, wk - | + | ADV_HARD // wimpy, bounce - | + | ADV_STUPID )) ) ", } { +"edge": "AQUARIUM_EAST -> AQUARIUM_BOMB_WALLED_AREA", +"prereq": "EXPLOSIVES | (WATER_ORB & HAMMER_ROLL_ZIP)", +} -"prereq": " | ( & )", +{ +"edge": "AQUARIUM_BOMB_WALLED_AREA -> AQUARIUM_EAST", +"prereq": "EXPLOSIVES_ENEMY", } { +"edge": "AQUARIUM_EAST -> AQUARIUM_ORB_SLIDE_MAZE", +"prereq": "EXPLOSIVES_ENEMY", +} -"prereq": "", +{ +"edge": "AQUARIUM_ORB_SLIDE_MAZE -> AQUARIUM_EAST", +"prereq": "EXPLOSIVES", } { +"edge": "AQUARIUM_ORB_SLIDE_MAZE -> AQUARIUM_BOMB_WALLED_AREA", +"prereq": "EXPLOSIVES", +} -"prereq": "", +{ +"edge": "AQUARIUM_BOMB_WALLED_AREA -> AQUARIUM_ORB_SLIDE_MAZE", +"prereq": "IMPOSSIBLE", } { +"edge": "AQUARIUM_BOMB_WALLED_AREA -> AQUARIUM_BEACH_ENTRANCE", +"prereq": "EXPLOSIVES", +} -"prereq": "", +{ +"edge": "AQUARIUM_BEACH_ENTRANCE -> AQUARIUM_BOMB_WALLED_AREA", +"prereq": "UNDERWATER & ((CARROT_SHOOTER & BOOST) | (CARROT_BOMB & SLIDING_POWDER))", } +// .---------------------' +// | Area 4 : Eastern Highlands +// '---------------------. + + +// Riverbank + { +"edge": "RIVERBANK_MAIN_LEVEL1 -> RIVERBANK_LOWER_LEFT", +"prereq": "NONE", +} -"prereq": "", +{ +"edge": "RIVERBANK_LOWER_LEFT -> RIVERBANK_MAIN_LEVEL1", +"prereq": "NONE", } { +"edge": "RIVERBANK_MAIN_LEVEL1 -> RIVERBANK_LOWER_MID", +"prereq": "NONE", +} -"prereq": "IMPOSSIBLE", +{ +"edge": "RIVERBANK_LOWER_MID -> RIVERBANK_MAIN_LEVEL1", +"prereq": "AIR_JUMP | WHIRL_BONK_CANCEL", } { +"edge": "RIVERBANK_LOWER_LEFT -> RIVERBANK_LOWER_MID", +"prereq": "DOWNDRILL_SEMISOLID_CLIP | (PIKO_HAMMER_LEVELED & RABI_SLIPPERS) | BUNNY_WHIRL | AIR_DASH | (EXPLOSIVES_ENEMY & BACKTRACK_3)", +} -"prereq": "", +{ +"edge": "RIVERBANK_LOWER_MID -> RIVERBANK_LOWER_LEFT", +"prereq": "NONE", } { +"edge": "RIVERBANK_LOWER_MID -> RIVERBANK_LOWER_RIGHT", +"prereq": "NONE", +} -"prereq": " & (( & ) | ( & ))", +{ +"edge": "RIVERBANK_LOWER_RIGHT -> RIVERBANK_LOWER_MID", +"prereq": "NONE", } -// .---------------------' -// | Area 4 : Eastern Highlands -// '---------------------. +{ +"edge": "RIVERBANK_MAIN_LEVEL1 -> RIVERBANK_LOWER_HEALTH_UP_ROOM", +"prereq": "DOWNDRILL_SEMISOLID_CLIP & (SLIDING_POWDER | HAMMER_ROLL_ZIP)", +} +{ +"edge": "RIVERBANK_LOWER_HEALTH_UP_ROOM -> RIVERBANK_MAIN_LEVEL1", +"prereq": "SLIDING_POWDER", +} -// Riverbank +{ +"edge": "RIVERBANK_LOWER_RIGHT -> RIVERBANK_LOWER_HEALTH_UP_ROOM", +"prereq": "NONE", +} { +"edge": "RIVERBANK_LOWER_HEALTH_UP_ROOM -> RIVERBANK_LOWER_RIGHT", +"prereq": "NONE", +} -"prereq": "", + +{ +"edge": "RIVERBANK_MAIN_LEVEL1 -> RIVERBANK_PACK_UP_ROOM", +"prereq": "SLIDING_POWDER & EXPLOSIVES", } { +"edge": "RIVERBANK_MAIN_LEVEL1 -> RIVERBANK_LOWER_FOREST_ENTRANCE", +"prereq": "SLIDING_POWDER | HAMMER_ROLL_ZIP | (ADV_STUPID & EXPLOSIVES & AIR_DASH_LV3)", +} -"prereq": "", +{ +"edge": "RIVERBANK_PACK_UP_ROOM -> RIVERBANK_LOWER_FOREST_ENTRANCE", +"prereq": "EXPLOSIVES", +} + +{ +"edge": "RIVERBANK_LOWER_FOREST_ENTRANCE -> RIVERBANK_PACK_UP_ROOM", +"prereq": "CARROT_SHOOTER & BOOST", } { +"edge": "RIVERBANK_LOWER_LEFT -> RIVERBANK_LOWER_FOREST_ENTRANCE", +"prereq": " + SLIDING_POWDER + | AIR_JUMP + | (AIR_DASH & (RABI_SLIPPERS | SLIDE_JUMP_BUNSTRIKE_CANCEL)) + | WHIRL_BONK + | (RABI_SLIPPERS & ADV_STUPID) // damage boost off spider bullets +", +} -"prereq": "", +{ +"edge": "RIVERBANK_LOWER_FOREST_ENTRANCE -> RIVERBANK_LOWER_LEFT", +"prereq": " + SLIDING_POWDER + | AIR_DASH + | AIR_JUMP + | WHIRL_BONK + | (ADV_VHARD & RABI_SLIPPERS & BUNNY_AMULET) +", } { +"edge": "RIVERBANK_LOWER_FOREST_ENTRANCE -> RIVERBANK_UNDERGROUND", +"prereq": "EXPLOSIVES", +} + +{ +"edge": "RIVERBANK_UNDERGROUND -> RIVERBANK_LOWER_LEFT", +"prereq": "EXPLOSIVES", +} + + +{ +"edge": "RIVERBANK_MAIN_LEVEL1 -> RIVERBANK_LEVEL2", +"prereq": "NONE", +} + +{ +"edge": "RIVERBANK_LEVEL2 -> RIVERBANK_MAIN_LEVEL1", +"prereq": "NONE", +} + +{ +"edge": "RIVERBANK_LEVEL2 -> RIVERBANK_LEVEL3", +"prereq": "NONE", +} + +{ +"edge": "RIVERBANK_LEVEL3 -> RIVERBANK_LEVEL2", +"prereq": "NONE", +} + +{ +"edge": "RIVERBANK_LEVEL3 -> RIVERBANK_LOWER_HEALTH_UP_ROOM", +"prereq": "EXPLOSIVES_ENEMY & HAMMER_ROLL_ZIP", +} + + +// Evernight + +{ +"edge": "RIVERBANK_LEVEL3 -> EVERNIGHT_WEST_ENTRANCE", +"prereq": "NONE", +} -"prereq": " | ", +{ +"edge": "EVERNIGHT_WEST_ENTRANCE -> RIVERBANK_LEVEL3", +"prereq": "NONE", } { +"edge": "EVERNIGHT_WEST_ENTRANCE -> EVERNIGHT_NORTHWEST", +"prereq": "NONE", +} -"prereq": " | ( & ) | | | ( & )", +{ +"edge": "EVERNIGHT_NORTHWEST -> EVERNIGHT_WEST_ENTRANCE", +"prereq": "NONE", } { +"edge": "RIVERBANK_LEVEL3 -> EVERNIGHT_WARP", +"prereq": "SLIDE_ZIP & ADV", +} -"prereq": "", +{ +"edge": "EVERNIGHT_NORTHWEST -> EVERNIGHT_SPIKE_BARRIER_ROOM", +"prereq": " + AIR_JUMP + | BUNNY_STRIKE + | AIR_DASH + | WHIRL_BONK + | (SLIDING_POWDER & (ITM_HARD | RABI_SLIPPERS)) + | (ADV_VHARD & AMULET_FOOD) + | (ADV_STUPID & RABI_SLIPPERS & SPEED5) +", } { +"edge": "EVERNIGHT_SPIKE_BARRIER_ROOM -> EVERNIGHT_NORTHWEST", +"prereq": "NONE", +} -"prereq": "", +{ +"edge": "EVERNIGHT_SPIKE_BARRIER_ROOM -> RIVERBANK_LEVEL3", +"prereq": "NONE", } { +"edge": "EVERNIGHT_NORTHWEST -> EVERNIGHT_SAYA", +"prereq": "NONE", +} -"prereq": "", +{ +"edge": "EVERNIGHT_SAYA -> EVERNIGHT_NORTHWEST", +"prereq": "NONE", } { +"edge": "EVERNIGHT_SAYA -> EVERNIGHT_CORRIDOR_BELOW_SAYA", +"prereq": "NONE", +} -"prereq": " & ( | )", +{ +"edge": "EVERNIGHT_CORRIDOR_BELOW_SAYA -> EVERNIGHT_SAYA", +"prereq": " + FIRE_ORB + | (WHIRL_BONK_CANCEL & (ADV_VHARD | WALL_JUMP_LV2)) + | (AIR_JUMP & (WALL_JUMP_LV2 | (HAMMER_ROLL & ITM_HARD))) + | (SLIDE_JUMP_BUNSTRIKE_CANCEL & RABI_SLIPPERS & WALL_JUMP_LV2) + | (SLIDE_JUMP_BUNSTRIKE_CANCEL & RABI_SLIPPERS & AIR_JUMP & (WALL_JUMP | SPEED1)) +", } { +"edge": "EVERNIGHT_CORRIDOR_BELOW_SAYA -> EVERNIGHT_EAST_OF_WARP", +"prereq": "NONE", +} -"prereq": "", +{ +"edge": "EVERNIGHT_EAST_OF_WARP -> EVERNIGHT_CORRIDOR_BELOW_SAYA", +"prereq": " + (FIRE_ORB & ( + RABI_SLIPPERS + | AIR_JUMP + | (ITM_HARD & (SLIDING_POWDER | AIR_DASH | SPEED1)) + | (V_HARD & WHIRL_BONK) + )) + | (AIR_JUMP & ( + RABI_SLIPPERS + | SLIDE_JUMP_BUNSTRIKE_CANCEL + | (ITM_HARD & HAMMER_ROLL) + | (ADV_STUPID & ( + SLIDING_POWDER // slide bonk off bunny + | WALL_JUMP_LV2 // buffered wimpy + )) + | (ADV_VHARD & AIR_DASH_LV3) // airdash from step + )) + | (ADV_STUPID & RABI_SLIPPERS & WALL_JUMP_LV2) // extremely tight + | WHIRL_BONK_CANCEL +", } { +"edge": "EVERNIGHT_EAST_OF_WARP -> EVERNIGHT_LOWER", +"prereq": "NONE", +} -"prereq": "", +{ +"edge": "EVERNIGHT_LOWER -> EVERNIGHT_EAST_OF_WARP", +"prereq": " + (AIR_JUMP & (ADV_VHARD | AIR_DASH | (ITM & SLIDING_POWDER))) + | (AIR_DASH_LV3 & AMULET_FOOD & ADV_HARD) +", } { +"edge": "EVERNIGHT_WEST_ENTRANCE -> EVERNIGHT_WARP", +"prereq": "SLIDING_POWDER | HAMMER_ROLL_ZIP | EXPLOSIVES", +} -"prereq": "", +{ +"edge": "EVERNIGHT_WARP -> EVERNIGHT_WEST_ENTRANCE", +"prereq": "SLIDING_POWDER", } +{ +"edge": "EVERNIGHT_WARP -> EVERNIGHT_EAST_OF_WARP", +"prereq": "FIRE_ORB | ( + (SLIDING_POWDER | HAMMER_ROLL_ZIP) & ( + // Methods to get up on the ledge + RABI_SLIPPERS | AIR_JUMP | AIR_DASH | SLIDE_JUMP_BUNSTRIKE + // sliding powder: slide bonk off bunny to get up on the ledge + // hammer roll zip: whirl bonk off falling bunny to get on the ledge + // both these tricks are ADV_VHARD, so they can be merged like this + | ADV_VHARD + // damage boost, not required. + // | ADV_STUPID + ) + )", +} { +"edge": "EVERNIGHT_EAST_OF_WARP -> EVERNIGHT_WARP", +"prereq": "SLIDING_POWDER | FIRE_ORB", +} -"prereq": " & ", +{ +"edge": "EVERNIGHT_WARP -> EVERNIGHT_LOWER", +"prereq": "SLIDING_POWDER | HAMMER_ROLL_ZIP | DOWNDRILL_SEMISOLID_CLIP", } { +"edge": "EVERNIGHT_LOWER -> EVERNIGHT_WARP", +"prereq": "NONE", +} -"prereq": " | | ( & & )", +{ +"edge": "EVERNIGHT_LOWER -> RIVERBANK_LOWER_RIGHT", +"prereq": "NONE", } + +// Lab + { +"edge": "RIVERBANK_LOWER_RIGHT -> LAB_ENTRANCE", +"prereq": "TM_CICINI & CHAPTER_2", +} -"prereq": "", +{ +"edge": "LAB_ENTRANCE -> RIVERBANK_LOWER_RIGHT", +"prereq": "NONE", } { +"edge": "LAB_ENTRANCE -> LAB_MID", +"prereq": "NONE", +} -"prereq": " & ", +{ +"edge": "LAB_MID -> LAB_ENTRANCE", +"prereq": "DOWNDRILL_SEMISOLID_CLIP", } { +"edge": "LAB_MID -> LAB_SLIDING_POWDER_ROOM", +"prereq": "ITM_HARD | EXPLOSIVES_ENEMY", +} +{ +"edge": "LAB_SLIDING_POWDER_ROOM -> LAB_MID", "prereq": " - - | - | ( & ( | )) - | - | ( & ) // damage off spider bullets + (WALL_JUMP_LV2 & ( + AIR_JUMP + | (ADV_VHARD & SLIDE_JUMP_BUNSTRIKE_CANCEL & (AIR_DASH | RABI_SLIPPERS | SPEED5 | (STUPID & SPEED3))) + | (ADV_HARD & SLIDE_JUMP_BUNSTRIKE_CANCEL & (AIR_DASH & RABI_SLIPPERS)) + )) + | (ITM_HARD & AIR_JUMP & ( + ((RABI_SLIPPERS | SLIDE_JUMP_BUNSTRIKE_CANCEL) & (SPEED3 | AIR_DASH)) + | (RABI_SLIPPERS & SLIDE_JUMP_BUNSTRIKE_CANCEL) + )) ", } { +"edge": "LAB_SLIDING_POWDER_ROOM -> LAB_WEST", +"prereq": "SLIDING_POWDER", +} -"prereq": " - - | - | - | - | ( & & ) -", +{ +"edge": "LAB_WEST -> LAB_SLIDING_POWDER_ROOM", +"prereq": "SLIDING_POWDER", +} + +{ +"edge": "LAB_SLIDING_POWDER_ROOM -> LAB_EAST", +// bomb attack up hole, go to sliding powder room and hammer roll zip out (backtrack) +"prereq": "EXPLOSIVES & HAMMER_ROLL_ZIP & ADVANCED & BACKTRACK_2", } { +"edge": "LAB_WEST -> LAB_MID", +"prereq": "SLIDING_POWDER", +} -"prereq": "", +{ +"edge": "LAB_MID -> LAB_WEST", +"prereq": "SLIDING_POWDER", } { +"edge": "LAB_MID -> LAB_EAST", +"prereq": "NONE", +} -"prereq": "", +{ +"edge": "LAB_EAST -> LAB_MID", +"prereq": "NONE", } +{ +"edge": "LAB_EAST -> LAB_COMPUTER_ROOM", +"prereq": "NONE", +} { +"edge": "LAB_ENTRANCE -> LAB_EAST", +"prereq": "SLIDING_POWDER", +} -"prereq": "", +{ +"edge": "LAB_COMPUTER_ROOM -> LAB_EAST", +"prereq": "NONE", } { +"edge": "LAB_EAST -> LAB_EAST_PACK_UP_ROOM", +"prereq": "EXPLOSIVES", +} -"prereq": "", +{ +"edge": "LAB_EAST_PACK_UP_ROOM -> LAB_EAST", +"prereq": "EXPLOSIVES", } { +"edge": "LAB_ENTRANCE -> LAB_EAST_PACK_UP_ROOM", +"prereq": "DOWNDRILL_SEMISOLID_CLIP", +} -"prereq": "", +{ +"edge": "LAB_EAST_PACK_UP_ROOM -> LAB_ENTRANCE", +"prereq": "NONE", } +// .---------------------' +// | Area 5 : Rabi Rabi Town +// '---------------------. + { +"edge": "TOWN_MAIN -> TOWN_SHOP", +"prereq": "NONE", +} -"prereq": "", +{ +"edge": "TOWN_SHOP -> TOWN_MAIN", +"prereq": "NONE", } +// .---------------------' +// | Area 6 : Plurkwood +// '---------------------. + +// .---------------------' +// | Area 7 : Subterranean Area +// '---------------------. + { +"edge": "VOLCANIC_MAIN -> VOLCANIC_BEACH_ENTRANCE", +"prereq": "ADV_VHARD | RABI_SLIPPERS | AIR_DASH | AIR_JUMP | SLIDE_JUMP_BUNSTRIKE", +} -"prereq": " & ", +{ +"edge": "VOLCANIC_BEACH_ENTRANCE -> VOLCANIC_MAIN", +"prereq": "NONE", } +// .---------------------' +// | Area 8 : Warp Destination +// '---------------------. -// Evernight +// .---------------------' +// | Area 9 : System Interior +// '---------------------. + + +// .---------------------' +// | Map Transition Constraints +// '---------------------. + +{ +"edge": "FOREST_NIGHT_NORTH_EAST -> PLURKWOOD_MAIN", +"prereq": "PLURKWOOD", +} { +"edge": "PLURKWOOD_MAIN -> FOREST_NIGHT_NORTH_EAST", +"prereq": "NONE", +} -"prereq": "", +{ +"edge": "LAB_COMPUTER_ROOM -> SYSTEM_INTERIOR_MAIN", +"prereq": "CHAPTER_3", } { +"edge": "SYSTEM_INTERIOR_MAIN -> LAB_COMPUTER_ROOM", +"prereq": "NONE", +} + +// .---------------------' +// | Event Warp Constraints +// '---------------------. -"prereq": "", +{ +"edge": "SPECTRAL_CICINI_ROOM -> RAVINE_TOWN_ENTRANCE", +"prereq": "EVENT_WARP & TM_CICINI", } { +"edge": "TOWN_MAIN -> RIVERBANK_MAIN_LEVEL1", +"prereq": "EVENT_WARP & TM_CICINI & CHAPTER_2", +} -"prereq": "", +{ +"edge": "FOREST_START -> BEACH_FOREST_ENTRANCE", +"prereq": "EVENT_WARP & BOSS_RIBBON", } -{ \ No newline at end of file +{ +"edge": "PLURKWOOD_MAIN -> TOWN_MAIN", +"prereq": "EVENT_WARP & BOSS_KEKE_BUNNY", +} \ No newline at end of file diff --git a/src/sig/MultiRando.java b/src/sig/MultiRando.java index acc7396..1c51657 100644 --- a/src/sig/MultiRando.java +++ b/src/sig/MultiRando.java @@ -5,73 +5,95 @@ import java.util.List; public class MultiRando { private static int bitwiseCounter=0; - final static long NULL = 0; - final static long INTERMEDIATE_HARD = DefineBitwiseConstant(); - final static long INTERMEDIATE = DefineBitwiseConstant(); - final static long SPEED1 = DefineBitwiseConstant(); - final static long AIR_DASH = DefineBitwiseConstant(); - final static long AIR_JUMP = DefineBitwiseConstant(); - final static long EXPLOSIVES_ENEMY = DefineBitwiseConstant(); - final static long SLIDING_POWDER = DefineBitwiseConstant(); - final static long PROLOGUE_TRIGGER = DefineBitwiseConstant(); - final static long EXPLOSIVES = DefineBitwiseConstant(); - final static long HAMMER_ROLL_ZIP = DefineBitwiseConstant(); - final static long ADVANCED_VHARD = DefineBitwiseConstant(); - final static long SLIDE_ZIP = DefineBitwiseConstant(); - final static long AMULET_FOOD = DefineBitwiseConstant(); - final static long WHIRL_BONK = DefineBitwiseConstant(); - final static long RABI_SLIPPERS = DefineBitwiseConstant(); - final static long BUNNY_STRIKE = DefineBitwiseConstant(); - final static long DARKNESS = DefineBitwiseConstant(); - final static long WALL_JUMP_LV2 = DefineBitwiseConstant(); - final static long WHIRL_BONK_CANCEL = DefineBitwiseConstant(); - final static long HAMMER_ROLL = DefineBitwiseConstant(); - final static long ADVANCED_STUPID = DefineBitwiseConstant(); - final static long DOWNDRILL_SEMISOLID_CLIP = DefineBitwiseConstant(); - final static long HARD = DefineBitwiseConstant(); - final static long SLIDE_JUMP_BUNSTRIKE_CANCEL = DefineBitwiseConstant(); - final static long BUNNY_AMULET = DefineBitwiseConstant(); - final static long IMPOSSIBLE = DefineBitwiseConstant(); - final static long CARROT_SHOOTER = DefineBitwiseConstant(); - final static long CARROT_BOMB = DefineBitwiseConstant(); - final static long BACKTRACK_1 = DefineBitwiseConstant(); - final static long ADVANCED_HARD = DefineBitwiseConstant(); - final static long SPEED5 = DefineBitwiseConstant(); - final static long KOTRI_1 = DefineBitwiseConstant(); - final static long COCOA_1 = DefineBitwiseConstant(); - final static long CHAPTER_1 = DefineBitwiseConstant(); - final static long WALL_JUMP = DefineBitwiseConstant(); - final static long AIR_DASH_LV3 = DefineBitwiseConstant(); - final static long SLIDE_JUMP_BUNSTRIKE = DefineBitwiseConstant(); - final static long INTERMEDIATE_VERYHARD = DefineBitwiseConstant(); - final static long TM_PANDORA = DefineBitwiseConstant(); - final static long HALLOWEEN = DefineBitwiseConstant(); - final static long BOOST = DefineBitwiseConstant(); - final static long BOOST_MANY = DefineBitwiseConstant(); - final static long EIGHT_TILE_WALLJUMP = DefineBitwiseConstant(); - final static long TM_CHOCOLATE = DefineBitwiseConstant(); - final static long WATER_ORB = DefineBitwiseConstant(); - final static long ADVANCED = DefineBitwiseConstant(); - final static long BUNNY_AMULET_LV2 = DefineBitwiseConstant(); - final static long TWO_AMULET_FOOD = DefineBitwiseConstant(); - final static long UNDERWATER = DefineBitwiseConstant(); - final static long SPEED3 = DefineBitwiseConstant(); - final static long PIKO_HAMMER_LEVELED = DefineBitwiseConstant(); - final static long BACKTRACK_3 = DefineBitwiseConstant(); + final static Long NULL = 0l; + final static Long INTERMEDIATE_HARD = DefineBitwiseConstant(); + final static Long INTERMEDIATE = DefineBitwiseConstant(); + final static Long SPEED1 = DefineBitwiseConstant(); + final static Long AIR_DASH = DefineBitwiseConstant(); + final static Long AIR_JUMP = DefineBitwiseConstant(); + final static Long EXPLOSIVES_ENEMY = DefineBitwiseConstant(); + final static Long SLIDING_POWDER = DefineBitwiseConstant(); + final static Long PROLOGUE_TRIGGER = DefineBitwiseConstant(); + final static Long EXPLOSIVES = DefineBitwiseConstant(); + final static Long HAMMER_ROLL_ZIP = DefineBitwiseConstant(); + final static Long ADVANCED_VERYHARD = DefineBitwiseConstant(); + final static Long SLIDE_ZIP = DefineBitwiseConstant(); + final static Long AMULET_FOOD = DefineBitwiseConstant(); + final static Long WHIRL_BONK = DefineBitwiseConstant(); + final static Long RABI_SLIPPERS = DefineBitwiseConstant(); + final static Long BUNNY_STRIKE = DefineBitwiseConstant(); + final static Long DARKNESS = DefineBitwiseConstant(); + final static Long WALL_JUMP_LV2 = DefineBitwiseConstant(); + final static Long WHIRL_BONK_CANCEL = DefineBitwiseConstant(); + final static Long HAMMER_ROLL = DefineBitwiseConstant(); + final static Long ADVANCED_STUPID = DefineBitwiseConstant(); + final static Long DOWNDRILL_SEMISOLID_CLIP = DefineBitwiseConstant(); + final static Long HARD = DefineBitwiseConstant(); + final static Long SLIDE_JUMP_BUNSTRIKE_CANCEL = DefineBitwiseConstant(); + final static Long BUNNY_AMULET = DefineBitwiseConstant(); + final static Long IMPOSSIBLE = DefineBitwiseConstant(); + final static Long CARROT_SHOOTER = DefineBitwiseConstant(); + final static Long CARROT_BOMB = DefineBitwiseConstant(); + final static Long BACKTRACK_1 = DefineBitwiseConstant(); + final static Long ADVANCED_HARD = DefineBitwiseConstant(); + final static Long SPEED5 = DefineBitwiseConstant(); + final static Long KOTRI_1 = DefineBitwiseConstant(); + final static Long COCOA_1 = DefineBitwiseConstant(); + final static Long CHAPTER_1 = DefineBitwiseConstant(); + final static Long WALL_JUMP = DefineBitwiseConstant(); + final static Long AIR_DASH_LV3 = DefineBitwiseConstant(); + final static Long SLIDE_JUMP_BUNSTRIKE = DefineBitwiseConstant(); + final static Long INTERMEDIATE_VERYHARD = DefineBitwiseConstant(); + final static Long TM_PANDORA = DefineBitwiseConstant(); + final static Long HALLOWEEN = DefineBitwiseConstant(); + final static Long BOOST = DefineBitwiseConstant(); + final static Long BOOST_MANY = DefineBitwiseConstant(); + final static Long EIGHT_TILE_WALLJUMP = DefineBitwiseConstant(); + final static Long TM_CHOCOLATE = DefineBitwiseConstant(); + final static Long WATER_ORB = DefineBitwiseConstant(); + final static Long ADVANCED = DefineBitwiseConstant(); + final static Long BUNNY_AMULET_LV2 = DefineBitwiseConstant(); + final static Long TWO_AMULET_FOOD = DefineBitwiseConstant(); + final static Long UNDERWATER = DefineBitwiseConstant(); + final static Long SPEED3 = DefineBitwiseConstant(); + final static Long PIKO_HAMMER_LEVELED = DefineBitwiseConstant(); + final static Long BACKTRACK_3 = DefineBitwiseConstant(); private static long DefineBitwiseConstant() {/*System.out.println("Restrictions reach a bit-wise value of "+Long.toBinaryString((long)Math.pow(2,i)));*/return (long)Math.pow(2,bitwiseCounter++);} - public static List STARTING_FOREST = new ArrayList(); - - private static void createStartingForest() { - Node nn = null; - Node EF = new Node(null,NULL,null,NULL,null,NULL,null,NULL); - List n = STARTING_FOREST = List.of( - nn,nn,nn,nn,nn,nn,nn,nn,nn,nn,nn,nn, - EF,nn,nn,nn,nn,nn,nn,nn,nn,nn,nn,nn - ); + private static void createNodes() { + Node[] SW = new Node[22]; + Node[] WC = new Node[23]; + Node[] IC = new Node[20]; + Node[] NT = new Node[23]; + Node[] EH = new Node[25]; + Node[] RRT = new Node[1]; + Node[] P = new Node[1]; + Node[] SA = new Node[2]; + Node[] SI = new Node[1]; + InitializeNodes(SW,WC,IC,NT,EH,RRT,P,SA,SI); + SW[0].add(SW[1],NULL); + SW[0].add(SW[7],NULL); + SW[1].add(SW[2], + new Long[]{INTERMEDIATE_HARD,SPEED1|INTERMEDIATE,AIR_DASH,AIR_JUMP}, + NULL); + SW[2].add(SW[5], + new Long[]{EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER}, + new Long[]{ + DARKNESS|EXPLOSIVES|SLIDING_POWDER|PROLOGUE_TRIGGER, + DARKNESS|EXPLOSIVES|HAMMER_ROLL_ZIP|PROLOGUE_TRIGGER, + DARKNESS|ADVANCED_VERYHARD|EXPLOSIVES_ENEMY|SLIDE_ZIP}); + } + private static void InitializeNodes(Node[]...sF) { + for (int i=0;i connections = new HashMap<>(); + public Node() {}; + public void add(Node n,Long...requirements) { + if (!connections.containsKey(n)) { + connections.put(n,requirements); + n.add(this,requirements); + } + } + /** + * @param n The node to add. + * @param inrequirements The requirements to get to the node. + * @param outrequirements The requirements to get from that node back to the current node. + */ + public void add(Node n,Long[]inrequirements,Long...outrequirements) { + if (!connections.containsKey(n)) { + connections.put(n,inrequirements); + n.add(this,outrequirements); + } + } } \ No newline at end of file diff --git a/src/sig/Restriction.java b/src/sig/Restriction.java deleted file mode 100644 index 6d3dc89..0000000 --- a/src/sig/Restriction.java +++ /dev/null @@ -1,60 +0,0 @@ -package sig; - -public class Restriction { - private static int i=0; - final static long NULL = 0; - final static long INTERMEDIATE_HARD = DefineBitwiseConstant(); - final static long INTERMEDIATE = DefineBitwiseConstant(); - final static long SPEED1 = DefineBitwiseConstant(); - final static long AIR_DASH = DefineBitwiseConstant(); - final static long AIR_JUMP = DefineBitwiseConstant(); - final static long EXPLOSIVES_ENEMY = DefineBitwiseConstant(); - final static long SLIDING_POWDER = DefineBitwiseConstant(); - final static long PROLOGUE_TRIGGER = DefineBitwiseConstant(); - final static long EXPLOSIVES = DefineBitwiseConstant(); - final static long HAMMER_ROLL_ZIP = DefineBitwiseConstant(); - final static long ADVANCED_VHARD = DefineBitwiseConstant(); - final static long SLIDE_ZIP = DefineBitwiseConstant(); - final static long AMULET_FOOD = DefineBitwiseConstant(); - final static long WHIRL_BONK = DefineBitwiseConstant(); - final static long RABI_SLIPPERS = DefineBitwiseConstant(); - final static long BUNNY_STRIKE = DefineBitwiseConstant(); - final static long DARKNESS = DefineBitwiseConstant(); - final static long WALL_JUMP_LV2 = DefineBitwiseConstant(); - final static long WHIRL_BONK_CANCEL = DefineBitwiseConstant(); - final static long HAMMER_ROLL = DefineBitwiseConstant(); - final static long ADVANCED_STUPID = DefineBitwiseConstant(); - final static long DOWNDRILL_SEMISOLID_CLIP = DefineBitwiseConstant(); - final static long HARD = DefineBitwiseConstant(); - final static long SLIDE_JUMP_BUNSTRIKE_CANCEL = DefineBitwiseConstant(); - final static long BUNNY_AMULET = DefineBitwiseConstant(); - final static long IMPOSSIBLE = DefineBitwiseConstant(); - final static long CARROT_SHOOTER = DefineBitwiseConstant(); - final static long CARROT_BOMB = DefineBitwiseConstant(); - final static long BACKTRACK_1 = DefineBitwiseConstant(); - final static long ADVANCED_HARD = DefineBitwiseConstant(); - final static long SPEED5 = DefineBitwiseConstant(); - final static long KOTRI_1 = DefineBitwiseConstant(); - final static long COCOA_1 = DefineBitwiseConstant(); - final static long CHAPTER_1 = DefineBitwiseConstant(); - final static long WALL_JUMP = DefineBitwiseConstant(); - final static long AIR_DASH_LV3 = DefineBitwiseConstant(); - final static long SLIDE_JUMP_BUNSTRIKE = DefineBitwiseConstant(); - final static long INTERMEDIATE_VERYHARD = DefineBitwiseConstant(); - final static long TM_PANDORA = DefineBitwiseConstant(); - final static long HALLOWEEN = DefineBitwiseConstant(); - final static long BOOST = DefineBitwiseConstant(); - final static long BOOST_MANY = DefineBitwiseConstant(); - final static long EIGHT_TILE_WALLJUMP = DefineBitwiseConstant(); - final static long TM_CHOCOLATE = DefineBitwiseConstant(); - final static long WATER_ORB = DefineBitwiseConstant(); - final static long ADVANCED = DefineBitwiseConstant(); - final static long BUNNY_AMULET_LV2 = DefineBitwiseConstant(); - final static long TWO_AMULET_FOOD = DefineBitwiseConstant(); - final static long UNDERWATER = DefineBitwiseConstant(); - final static long SPEED3 = DefineBitwiseConstant(); - final static long PIKO_HAMMER_LEVELED = DefineBitwiseConstant(); - final static long BACKTRACK_3 = DefineBitwiseConstant(); - - private static long DefineBitwiseConstant() {/*System.out.println("Restrictions reach a bit-wise value of "+Long.toBinaryString((long)Math.pow(2,i)));*/return (long)Math.pow(2,i++);} -}