From 875ac3b5cda1057c52576b70bdc5f0830028915b Mon Sep 17 00:00:00 2001 From: Sakimori Date: Sun, 12 Oct 2025 19:22:23 -0400 Subject: [PATCH] added world files --- World/Charms.py | 47 + World/ExtractedData.py | 18 + World/Extractor.py | 464 ++++++++ World/GeneratedRules.py | 1699 +++++++++++++++++++++++++++++ World/GodhomeData.py | 55 + World/Items.py | 68 ++ World/Options.py | 596 ++++++++++ World/Regions.py | 25 + World/Rules.py | 90 ++ World/__init__.py | 804 ++++++++++++++ World/docs/en_Hollow Knight.md | 24 + World/docs/es_Hollow Knight.md | 25 + World/docs/setup_en.md | 58 + World/docs/setup_es.md | 64 ++ World/docs/setup_pt_br.md | 52 + World/templates/RulesTemplate.pyt | 27 + World/test/__init__.py | 61 ++ World/test/test_grub_count.py | 166 +++ 18 files changed, 4343 insertions(+) create mode 100644 World/Charms.py create mode 100644 World/ExtractedData.py create mode 100644 World/Extractor.py create mode 100644 World/GeneratedRules.py create mode 100644 World/GodhomeData.py create mode 100644 World/Items.py create mode 100644 World/Options.py create mode 100644 World/Regions.py create mode 100644 World/Rules.py create mode 100644 World/__init__.py create mode 100644 World/docs/en_Hollow Knight.md create mode 100644 World/docs/es_Hollow Knight.md create mode 100644 World/docs/setup_en.md create mode 100644 World/docs/setup_es.md create mode 100644 World/docs/setup_pt_br.md create mode 100644 World/templates/RulesTemplate.pyt create mode 100644 World/test/__init__.py create mode 100644 World/test/test_grub_count.py diff --git a/World/Charms.py b/World/Charms.py new file mode 100644 index 0000000..45dba01 --- /dev/null +++ b/World/Charms.py @@ -0,0 +1,47 @@ +import typing + +vanilla_costs: typing.List[int] = [1, 1, 1, 2, 2, 2, 3, 2, 3, 1, 3, 1, 3, 1, 2, 2, 1, 2, 3, 2, + 4, 2, 2, 2, 3, 1, 4, 2, 4, 1, 2, 3, 2, 4, 3, 5, 1, 3, 2, 2] + +names: typing.List[str] = [ + "Gathering Swarm", + "Wayward Compass", + "Grubsong", + "Stalwart Shell", + "Baldur Shell", + "Fury of the Fallen", + "Quick Focus", + "Lifeblood Heart", + "Lifeblood Core", + "Defender's Crest", + "Flukenest", + "Thorns of Agony", + "Mark of Pride", + "Steady Body", + "Heavy Blow", + "Sharp Shadow", + "Spore Shroom", + "Longnail", + "Shaman Stone", + "Soul Catcher", + "Soul Eater", + "Glowing Womb", + "Fragile Heart", + "Fragile Greed", + "Fragile Strength", + "Nailmaster's Glory", + "Joni's Blessing", + "Shape of Unn", + "Hiveblood", + "Dream Wielder", + "Dashmaster", + "Quick Slash", + "Spell Twister", + "Deep Focus", + "Grubberfly's Elegy", + "Kingsoul", + "Sprintmaster", + "Dreamshield", + "Weaversong", + "Grimmchild" +] diff --git a/World/ExtractedData.py b/World/ExtractedData.py new file mode 100644 index 0000000..91e37ef --- /dev/null +++ b/World/ExtractedData.py @@ -0,0 +1,18 @@ +# This module is written by Extractor.py, do not edit manually!. + +connectors = {'Room_temple[left1]': 'Crossroads_02[door1]', 'Tutorial_01[right1]': 'Town[left1]', 'Tutorial_01[top1]': None, 'Tutorial_01[top2]': 'Cliffs_02[bot1]', 'Town[left1]': 'Tutorial_01[right1]', 'Town[bot1]': 'Crossroads_01[top1]', 'Town[right1]': 'Mines_10[left1]', 'Town[top1]': None, 'Town[door_station]': 'Room_Town_Stag_Station[left1]', 'Town[door_sly]': 'Room_shop[left1]', 'Town[door_mapper]': 'Room_mapper[left1]', 'Town[door_jiji]': 'Room_Ouiji[left1]', 'Town[door_bretta]': 'Room_Bretta[right1]', 'Town[room_divine]': 'Grimm_Divine[left1]', 'Town[room_grimm]': 'Grimm_Main_Tent[left1]', 'Room_shop[left1]': 'Town[door_sly]', 'Room_Town_Stag_Station[left1]': 'Town[door_station]', 'Room_mapper[left1]': 'Town[door_mapper]', 'Room_Bretta[right1]': 'Town[door_bretta]', 'Room_Ouiji[left1]': 'Town[door_jiji]', 'Grimm_Divine[left1]': 'Town[room_divine]', 'Grimm_Main_Tent[left1]': 'Town[room_grimm]', 'Crossroads_01[top1]': 'Town[bot1]', 'Crossroads_01[left1]': 'Crossroads_07[right1]', 'Crossroads_01[right1]': 'Crossroads_02[left1]', 'Crossroads_02[left1]': 'Crossroads_01[right1]', 'Crossroads_02[door1]': 'Room_temple[left1]', 'Crossroads_02[right1]': 'Crossroads_39[left1]', 'Crossroads_03[right1]': 'Crossroads_15[left1]', 'Crossroads_03[right2]': 'Mines_33[left1]', 'Crossroads_03[left1]': 'Crossroads_21[right1]', 'Crossroads_03[left2]': 'Crossroads_47[right1]', 'Crossroads_03[bot1]': 'Crossroads_19[top1]', 'Crossroads_03[top1]': 'Crossroads_16[bot1]', 'Crossroads_04[left1]': 'Crossroads_19[right1]', 'Crossroads_04[top1]': 'Crossroads_27[bot1]', 'Crossroads_04[door_Mender_House]': 'Room_Mender_House[left1]', 'Crossroads_04[door1]': 'Room_ruinhouse[left1]', 'Crossroads_04[door_charmshop]': 'Room_Charm_Shop[left1]', 'Crossroads_04[right1]': 'Crossroads_50[left1]', 'Crossroads_05[left1]': 'Crossroads_07[right2]', 'Crossroads_05[right1]': 'Crossroads_40[left1]', 'Crossroads_06[left1]': 'Crossroads_33[right1]', 'Crossroads_06[door1]': 'Crossroads_ShamanTemple[left1]', 'Crossroads_06[right1]': 'Crossroads_10[left1]', 'Crossroads_07[left1]': 'Crossroads_38[right1]', 'Crossroads_07[left2]': 'Crossroads_11_alt[right1]', 'Crossroads_07[left3]': 'Crossroads_25[right1]', 'Crossroads_07[right1]': 'Crossroads_01[left1]', 'Crossroads_07[right2]': 'Crossroads_05[left1]', 'Crossroads_07[bot1]': 'Crossroads_33[top1]', 'Crossroads_08[left1]': 'Crossroads_33[right2]', 'Crossroads_08[left2]': 'Crossroads_18[right1]', 'Crossroads_08[right1]': 'Crossroads_30[left1]', 'Crossroads_08[right2]': 'Crossroads_13[left1]', 'Crossroads_09[left1]': 'Crossroads_36[right2]', 'Crossroads_09[right1]': 'Crossroads_33[left1]', 'Crossroads_10[left1]': 'Crossroads_06[right1]', 'Crossroads_10[right1]': 'Crossroads_21[left1]', 'Crossroads_11_alt[left1]': 'Fungus1_01[right1]', 'Crossroads_11_alt[right1]': 'Crossroads_07[left2]', 'Crossroads_12[left1]': 'Crossroads_35[right1]', 'Crossroads_12[right1]': 'Crossroads_33[left2]', 'Crossroads_13[left1]': 'Crossroads_08[right2]', 'Crossroads_13[right1]': 'Crossroads_42[left1]', 'Crossroads_14[left1]': 'Crossroads_39[right1]', 'Crossroads_14[left2]': 'Crossroads_16[right1]', 'Crossroads_14[right1]': 'Crossroads_48[left1]', 'Crossroads_14[right2]': 'Crossroads_45[left1]', 'Crossroads_15[left1]': 'Crossroads_03[right1]', 'Crossroads_15[right1]': 'Crossroads_27[left1]', 'Crossroads_16[left1]': 'Crossroads_40[right1]', 'Crossroads_16[right1]': 'Crossroads_14[left2]', 'Crossroads_16[bot1]': 'Crossroads_03[top1]', 'Crossroads_18[right1]': 'Crossroads_08[left2]', 'Crossroads_18[right2]': 'Crossroads_52[left1]', 'Crossroads_18[bot1]': 'Fungus2_06[top1]', 'Crossroads_19[right1]': 'Crossroads_04[left1]', 'Crossroads_19[top1]': 'Crossroads_03[bot1]', 'Crossroads_19[left1]': 'Crossroads_42[right1]', 'Crossroads_19[left2]': 'Crossroads_43[right1]', 'Crossroads_21[left1]': 'Crossroads_10[right1]', 'Crossroads_21[right1]': 'Crossroads_03[left1]', 'Crossroads_21[top1]': 'Crossroads_22[bot1]', 'Crossroads_22[bot1]': 'Crossroads_21[top1]', 'Crossroads_25[right1]': 'Crossroads_07[left3]', 'Crossroads_25[left1]': 'Crossroads_36[right1]', 'Crossroads_27[right1]': 'Crossroads_46[left1]', 'Crossroads_27[bot1]': 'Crossroads_04[top1]', 'Crossroads_27[left1]': 'Crossroads_15[right1]', 'Crossroads_27[left2]': 'Crossroads_31[right1]', 'Crossroads_30[left1]': 'Crossroads_08[right1]', 'Crossroads_31[right1]': 'Crossroads_27[left2]', 'Crossroads_33[top1]': 'Crossroads_07[bot1]', 'Crossroads_33[left1]': 'Crossroads_09[right1]', 'Crossroads_33[left2]': 'Crossroads_12[right1]', 'Crossroads_33[right1]': 'Crossroads_06[left1]', 'Crossroads_33[right2]': 'Crossroads_08[left1]', 'Crossroads_35[bot1]': 'Fungus3_26[top1]', 'Crossroads_35[right1]': 'Crossroads_12[left1]', 'Crossroads_36[right1]': 'Crossroads_25[left1]', 'Crossroads_36[right2]': 'Crossroads_09[left1]', 'Crossroads_37[right1]': 'Crossroads_49[left1]', 'Crossroads_38[right1]': 'Crossroads_07[left1]', 'Crossroads_39[right1]': 'Crossroads_14[left1]', 'Crossroads_39[left1]': 'Crossroads_02[right1]', 'Crossroads_40[right1]': 'Crossroads_16[left1]', 'Crossroads_40[left1]': 'Crossroads_05[right1]', 'Crossroads_42[left1]': 'Crossroads_13[right1]', 'Crossroads_42[right1]': 'Crossroads_19[left1]', 'Crossroads_43[left1]': 'Crossroads_49[right1]', 'Crossroads_43[right1]': 'Crossroads_19[left2]', 'Crossroads_45[right1]': 'Mines_01[left1]', 'Crossroads_45[left1]': 'Crossroads_14[right2]', 'Crossroads_46[left1]': 'Crossroads_27[right1]', 'Crossroads_46b[right1]': 'RestingGrounds_02[left1]', 'Crossroads_ShamanTemple[left1]': 'Crossroads_06[door1]', 'Crossroads_47[right1]': 'Crossroads_03[left2]', 'Crossroads_48[left1]': 'Crossroads_14[right1]', 'Crossroads_49[right1]': 'Crossroads_43[left1]', 'Crossroads_49[left1]': 'Crossroads_37[right1]', 'Crossroads_49b[right1]': 'Ruins1_28[left1]', 'Crossroads_50[right1]': 'RestingGrounds_06[left1]', 'Crossroads_50[left1]': 'Crossroads_04[right1]', 'Crossroads_52[left1]': 'Crossroads_18[right2]', 'Room_ruinhouse[left1]': 'Crossroads_04[door1]', 'Room_Charm_Shop[left1]': 'Crossroads_04[door_charmshop]', 'Room_Mender_House[left1]': 'Crossroads_04[door_Mender_House]', 'Fungus1_01[left1]': 'Fungus1_01b[right1]', 'Fungus1_01[right1]': 'Crossroads_11_alt[left1]', 'Fungus1_01b[left1]': 'Fungus1_02[right1]', 'Fungus1_01b[right1]': 'Fungus1_01[left1]', 'Fungus1_02[left1]': 'Fungus1_17[right1]', 'Fungus1_02[right1]': 'Fungus1_01b[left1]', 'Fungus1_02[right2]': 'Fungus1_06[left1]', 'Fungus1_03[left1]': 'Fungus1_31[right1]', 'Fungus1_03[right1]': 'Fungus1_17[left1]', 'Fungus1_03[bot1]': 'Fungus1_05[top1]', 'Fungus1_04[left1]': 'Fungus1_25[right1]', 'Fungus1_04[right1]': 'Fungus1_21[left1]', 'Fungus1_05[right1]': 'Fungus1_14[left1]', 'Fungus1_05[bot1]': 'Fungus1_10[top1]', 'Fungus1_05[top1]': 'Fungus1_03[bot1]', 'Fungus1_06[left1]': 'Fungus1_02[right2]', 'Fungus1_06[bot1]': 'Fungus1_07[top1]', 'Fungus1_07[top1]': 'Fungus1_06[bot1]', 'Fungus1_07[left1]': 'Fungus1_19[right1]', 'Fungus1_07[right1]': 'Fungus1_08[left1]', 'Fungus1_08[left1]': 'Fungus1_07[right1]', 'Fungus1_09[left1]': 'Fungus1_15[right1]', 'Fungus1_09[right1]': 'Fungus1_30[left1]', 'Fungus1_10[left1]': 'Fungus1_30[right1]', 'Fungus1_10[right1]': 'Fungus1_19[left1]', 'Fungus1_10[top1]': 'Fungus1_05[bot1]', 'Fungus1_11[top1]': 'Fungus1_19[bot1]', 'Fungus1_11[right1]': 'Fungus1_34[left1]', 'Fungus1_11[right2]': 'Fungus1_37[left1]', 'Fungus1_11[left1]': 'Fungus1_29[right1]', 'Fungus1_11[bot1]': 'Fungus3_01[top1]', 'Fungus1_12[left1]': 'Fungus1_13[right1]', 'Fungus1_12[right1]': 'Fungus1_29[left1]', 'Fungus1_13[right1]': 'Fungus1_12[left1]', 'Fungus1_13[left1]': 'Fungus3_22[right1]', 'Fungus1_14[left1]': 'Fungus1_05[right1]', 'Fungus1_15[door1]': 'Room_nailmaster_02[left1]', 'Fungus1_15[right1]': 'Fungus1_09[left1]', 'Fungus1_16_alt[right1]': 'Fungus1_22[left1]', 'Fungus1_17[left1]': 'Fungus1_03[right1]', 'Fungus1_17[right1]': 'Fungus1_02[left1]', 'Fungus1_19[left1]': 'Fungus1_10[right1]', 'Fungus1_19[right1]': 'Fungus1_07[left1]', 'Fungus1_19[bot1]': 'Fungus1_11[top1]', 'Fungus1_20_v02[bot1]': 'Fungus1_21[top1]', 'Fungus1_20_v02[bot2]': 'Fungus1_32[top1]', 'Fungus1_20_v02[right1]': 'Fungus1_28[left2]', 'Fungus1_21[bot1]': 'Fungus1_22[top1]', 'Fungus1_21[top1]': 'Fungus1_20_v02[bot1]', 'Fungus1_21[left1]': 'Fungus1_04[right1]', 'Fungus1_21[right1]': 'Fungus1_32[left1]', 'Fungus1_22[bot1]': 'Fungus1_30[top1]', 'Fungus1_22[top1]': 'Fungus1_21[bot1]', 'Fungus1_22[left1]': 'Fungus1_16_alt[right1]', 'Fungus1_23[left1]': 'Fungus3_48[right2]', 'Fungus1_23[right1]': 'Fungus3_13[left1]', 'Fungus1_24[left1]': 'Fungus3_05[right1]', 'Fungus1_25[right1]': 'Fungus1_04[left1]', 'Fungus1_25[left1]': 'Fungus1_26[right1]', 'Fungus1_26[right1]': 'Fungus1_25[left1]', 'Fungus1_26[left1]': 'Fungus1_Slug[right1]', 'Fungus1_26[door_SlugShrine]': 'Room_Slug_Shrine[left1]', 'Fungus1_28[left1]': 'Cliffs_01[right3]', 'Fungus1_28[left2]': 'Fungus1_20_v02[right1]', 'Fungus1_29[left1]': 'Fungus1_12[right1]', 'Fungus1_29[right1]': 'Fungus1_11[left1]', 'Fungus1_30[top1]': 'Fungus1_22[bot1]', 'Fungus1_30[top3]': 'Fungus1_31[bot1]', 'Fungus1_30[left1]': 'Fungus1_09[right1]', 'Fungus1_30[right1]': 'Fungus1_10[left1]', 'Fungus1_31[top1]': 'Fungus1_32[bot1]', 'Fungus1_31[bot1]': 'Fungus1_30[top3]', 'Fungus1_31[right1]': 'Fungus1_03[left1]', 'Fungus1_32[bot1]': 'Fungus1_31[top1]', 'Fungus1_32[top1]': 'Fungus1_20_v02[bot2]', 'Fungus1_32[left1]': 'Fungus1_21[right1]', 'Fungus1_34[door1]': 'Fungus1_35[left1]', 'Fungus1_34[left1]': 'Fungus1_11[right1]', 'Fungus1_35[left1]': 'Fungus1_34[door1]', 'Fungus1_35[right1]': 'Fungus1_36[left1]', 'Fungus1_36[left1]': 'Fungus1_35[right1]', 'Fungus1_37[left1]': 'Fungus1_11[right2]', 'Fungus1_Slug[right1]': 'Fungus1_26[left1]', 'Room_Slug_Shrine[left1]': 'Fungus1_26[door_SlugShrine]', 'Room_nailmaster_02[left1]': 'Fungus1_15[door1]', 'Fungus3_01[top1]': 'Fungus1_11[bot1]', 'Fungus3_01[right1]': 'Fungus3_25[left1]', 'Fungus3_01[left1]': 'Fungus3_24[right1]', 'Fungus3_01[right2]': 'Fungus3_02[left1]', 'Fungus3_02[left1]': 'Fungus3_01[right2]', 'Fungus3_02[left2]': 'Fungus3_03[right1]', 'Fungus3_02[left3]': 'Fungus3_35[right1]', 'Fungus3_02[right1]': 'Fungus3_47[left1]', 'Fungus3_02[right2]': 'Fungus2_01[left1]', 'Fungus3_03[right1]': 'Fungus3_02[left2]', 'Fungus3_03[left1]': 'Fungus3_34[right1]', 'Fungus3_24[right1]': 'Fungus3_01[left1]', 'Fungus3_24[left1]': 'Fungus3_44[right1]', 'Fungus3_24[top1]': 'Fungus3_30[bot1]', 'Fungus3_25[right1]': 'Fungus3_25b[left1]', 'Fungus3_25[left1]': 'Fungus3_01[right1]', 'Fungus3_25b[right1]': 'Fungus3_26[left2]', 'Fungus3_25b[left1]': 'Fungus3_25[right1]', 'Fungus3_26[top1]': 'Crossroads_35[bot1]', 'Fungus3_26[left1]': 'Fungus3_28[right1]', 'Fungus3_26[left2]': 'Fungus3_25b[right1]', 'Fungus3_26[left3]': 'Fungus3_27[right1]', 'Fungus3_26[right1]': 'Fungus2_33[left1]', 'Fungus3_27[left1]': 'Fungus3_47[right1]', 'Fungus3_27[right1]': 'Fungus3_26[left3]', 'Fungus3_28[right1]': 'Fungus3_26[left1]', 'Fungus3_30[bot1]': 'Fungus3_24[top1]', 'Fungus3_35[right1]': 'Fungus3_02[left3]', 'Fungus3_44[bot1]': 'Fungus3_34[top1]', 'Fungus3_44[door1]': 'Room_Fungus_Shaman[left1]', 'Fungus3_44[right1]': 'Fungus3_24[left1]', 'Fungus3_47[left1]': 'Fungus3_02[right1]', 'Fungus3_47[right1]': 'Fungus3_27[left1]', 'Fungus3_47[door1]': 'Fungus3_archive[left1]', 'Room_Fungus_Shaman[left1]': 'Fungus3_44[door1]', 'Fungus3_archive[left1]': 'Fungus3_47[door1]', 'Fungus3_archive[bot1]': 'Fungus3_archive_02[top1]', 'Fungus3_archive_02[top1]': 'Fungus3_archive[bot1]', 'Fungus2_01[left1]': 'Fungus3_02[right2]', 'Fungus2_01[left2]': 'Fungus2_02[right1]', 'Fungus2_01[left3]': 'Fungus2_34[right1]', 'Fungus2_01[right1]': 'Fungus2_03[left1]', 'Fungus2_02[right1]': 'Fungus2_01[left2]', 'Fungus2_34[right1]': 'Fungus2_01[left3]', 'Fungus2_03[left1]': 'Fungus2_01[right1]', 'Fungus2_03[bot1]': 'Fungus2_18[top1]', 'Fungus2_03[right1]': 'Fungus2_04[left1]', 'Fungus2_04[top1]': 'Fungus2_05[bot1]', 'Fungus2_04[right1]': 'Fungus2_28[left1]', 'Fungus2_04[left1]': 'Fungus2_03[right1]', 'Fungus2_04[right2]': 'Fungus2_28[left2]', 'Fungus2_05[bot1]': 'Fungus2_04[top1]', 'Fungus2_05[right1]': 'Fungus2_06[left1]', 'Fungus2_06[top1]': 'Crossroads_18[bot1]', 'Fungus2_06[left1]': 'Fungus2_05[right1]', 'Fungus2_06[left2]': 'Fungus2_33[right1]', 'Fungus2_06[right1]': 'Fungus2_26[left1]', 'Fungus2_06[right2]': 'Fungus2_07[left1]', 'Fungus2_07[left1]': 'Fungus2_06[right2]', 'Fungus2_07[right1]': 'Fungus2_08[left1]', 'Fungus2_08[left1]': 'Fungus2_07[right1]', 'Fungus2_08[left2]': 'Fungus2_09[right1]', 'Fungus2_08[right1]': 'Fungus2_32[left1]', 'Fungus2_09[left1]': 'Fungus2_10[right1]', 'Fungus2_09[right1]': 'Fungus2_08[left2]', 'Fungus2_10[right1]': 'Fungus2_09[left1]', 'Fungus2_10[right2]': 'Fungus2_21[left1]', 'Fungus2_10[bot1]': 'Fungus2_11[top1]', 'Fungus2_11[top1]': 'Fungus2_10[bot1]', 'Fungus2_11[left1]': 'Fungus2_18[right1]', 'Fungus2_11[left2]': 'Fungus2_17[right1]', 'Fungus2_11[right1]': 'Fungus2_12[left1]', 'Fungus2_12[left1]': 'Fungus2_11[right1]', 'Fungus2_12[bot1]': 'Fungus2_13[top1]', 'Fungus2_13[top1]': 'Fungus2_12[bot1]', 'Fungus2_13[left2]': 'Fungus2_14[right1]', 'Fungus2_13[left3]': 'Fungus2_23[right1]', 'Fungus2_14[top1]': 'Fungus2_17[bot1]', 'Fungus2_14[right1]': 'Fungus2_13[left2]', 'Fungus2_14[bot3]': 'Fungus2_15[top3]', 'Fungus2_15[top3]': 'Fungus2_14[bot3]', 'Fungus2_15[right1]': 'Fungus2_31[left1]', 'Fungus2_15[left1]': 'Fungus2_25[right1]', 'Fungus2_17[left1]': 'Fungus2_29[right1]', 'Fungus2_17[right1]': 'Fungus2_11[left2]', 'Fungus2_17[bot1]': 'Fungus2_14[top1]', 'Fungus2_18[right1]': 'Fungus2_11[left1]', 'Fungus2_18[bot1]': 'Fungus2_19[top1]', 'Fungus2_18[top1]': 'Fungus2_03[bot1]', 'Fungus2_19[top1]': 'Fungus2_18[bot1]', 'Fungus2_19[left1]': 'Fungus2_20[right1]', 'Fungus2_20[right1]': 'Fungus2_19[left1]', 'Fungus2_20[left1]': 'Deepnest_01[right1]', 'Fungus2_21[right1]': 'Ruins1_01[left1]', 'Fungus2_21[left1]': 'Fungus2_10[right2]', 'Fungus2_23[right1]': 'Fungus2_13[left3]', 'Fungus2_23[right2]': 'Waterways_09[left1]', 'Fungus2_26[left1]': 'Fungus2_06[right1]', 'Fungus2_28[left1]': 'Fungus2_04[right1]', 'Fungus2_28[left2]': 'Fungus2_04[right2]', 'Fungus2_29[right1]': 'Fungus2_17[left1]', 'Fungus2_29[bot1]': 'Fungus2_30[top1]', 'Fungus2_30[bot1]': 'Fungus2_25[top2]', 'Fungus2_30[top1]': 'Fungus2_29[bot1]', 'Fungus2_31[left1]': 'Fungus2_15[right1]', 'Fungus2_32[left1]': 'Fungus2_08[right1]', 'Fungus2_33[right1]': 'Fungus2_06[left2]', 'Fungus2_33[left1]': 'Fungus3_26[right1]', 'Deepnest_01[right1]': 'Fungus2_20[left1]', 'Deepnest_01[bot1]': 'Deepnest_01b[top1]', 'Deepnest_01[bot2]': 'Deepnest_01b[top2]', 'Deepnest_01[left1]': 'Fungus3_39[right1]', 'Deepnest_01b[top1]': 'Deepnest_01[bot1]', 'Deepnest_01b[top2]': None, 'Deepnest_01b[right1]': 'Deepnest_02[left1]', 'Deepnest_01b[right2]': 'Deepnest_02[left2]', 'Deepnest_01b[bot1]': 'Deepnest_17[top1]', 'Deepnest_02[left1]': 'Deepnest_01b[right1]', 'Deepnest_02[left2]': 'Deepnest_01b[right2]', 'Deepnest_02[right1]': 'Deepnest_36[left1]', 'Deepnest_03[right1]': 'Deepnest_30[left1]', 'Deepnest_03[left1]': 'Deepnest_34[right1]', 'Deepnest_03[top1]': 'Deepnest_33[bot1]', 'Deepnest_03[left2]': 'Deepnest_31[right1]', 'Deepnest_09[left1]': 'Deepnest_10[right1]', 'Deepnest_10[right1]': 'Deepnest_09[left1]', 'Deepnest_10[right2]': 'Deepnest_41[left1]', 'Deepnest_10[right3]': 'Deepnest_41[left2]', 'Deepnest_10[door1]': 'Deepnest_Spider_Town[left1]', 'Deepnest_10[door2]': 'Room_spider_small[left1]', 'Room_spider_small[left1]': 'Deepnest_10[door2]', 'Deepnest_Spider_Town[left1]': 'Deepnest_10[door1]', 'Deepnest_14[right1]': 'Deepnest_17[left1]', 'Deepnest_14[left1]': 'Deepnest_26[right1]', 'Deepnest_14[bot1]': 'Deepnest_33[top1]', 'Deepnest_14[bot2]': 'Deepnest_33[top2]', 'Deepnest_16[left1]': 'Deepnest_17[right1]', 'Deepnest_16[bot1]': 'Fungus2_25[top1]', 'Deepnest_17[left1]': 'Deepnest_14[right1]', 'Deepnest_17[right1]': 'Deepnest_16[left1]', 'Deepnest_17[top1]': 'Deepnest_01b[bot1]', 'Deepnest_17[bot1]': 'Deepnest_30[top1]', 'Fungus2_25[top1]': 'Deepnest_16[bot1]', 'Fungus2_25[top2]': None, 'Fungus2_25[right1]': 'Fungus2_15[left1]', 'Deepnest_26[left1]': 'Deepnest_26b[right1]', 'Deepnest_26[left2]': 'Deepnest_26b[right2]', 'Deepnest_26[right1]': 'Deepnest_14[left1]', 'Deepnest_26[bot1]': 'Deepnest_35[top1]', 'Deepnest_26b[right2]': 'Deepnest_26[left2]', 'Deepnest_26b[right1]': 'Deepnest_26[left1]', 'Deepnest_30[left1]': 'Deepnest_03[right1]', 'Deepnest_30[top1]': 'Deepnest_17[bot1]', 'Deepnest_30[right1]': 'Deepnest_37[left1]', 'Deepnest_31[right1]': 'Deepnest_03[left2]', 'Deepnest_31[right2]': 'Deepnest_32[left1]', 'Deepnest_32[left1]': 'Deepnest_31[right2]', 'Deepnest_33[top1]': 'Deepnest_14[bot1]', 'Deepnest_33[top2]': 'Deepnest_14[bot2]', 'Deepnest_33[bot1]': 'Deepnest_03[top1]', 'Deepnest_34[left1]': 'Deepnest_39[right1]', 'Deepnest_34[right1]': 'Deepnest_03[left1]', 'Deepnest_34[top1]': 'Deepnest_35[bot1]', 'Deepnest_35[left1]': 'Deepnest_40[right1]', 'Deepnest_35[top1]': 'Deepnest_26[bot1]', 'Deepnest_35[bot1]': 'Deepnest_34[top1]', 'Deepnest_36[left1]': 'Deepnest_02[right1]', 'Deepnest_37[left1]': 'Deepnest_30[right1]', 'Deepnest_37[right1]': 'Abyss_03_b[left1]', 'Deepnest_37[top1]': 'Deepnest_38[bot1]', 'Deepnest_37[bot1]': 'Deepnest_44[top1]', 'Deepnest_38[bot1]': 'Deepnest_37[top1]', 'Deepnest_39[left1]': 'Deepnest_41[right1]', 'Deepnest_39[top1]': 'Deepnest_42[bot1]', 'Deepnest_39[door1]': 'Deepnest_45_v02[left1]', 'Deepnest_39[right1]': 'Deepnest_34[left1]', 'Deepnest_40[right1]': 'Deepnest_35[left1]', 'Deepnest_41[right1]': 'Deepnest_39[left1]', 'Deepnest_41[left1]': 'Deepnest_10[right2]', 'Deepnest_41[left2]': 'Deepnest_10[right3]', 'Deepnest_42[bot1]': 'Deepnest_39[top1]', 'Deepnest_42[left1]': 'Room_Mask_Maker[right1]', 'Deepnest_42[top1]': 'Deepnest_43[bot1]', 'Deepnest_43[bot1]': 'Deepnest_42[top1]', 'Deepnest_43[left1]': 'Fungus3_50[right1]', 'Deepnest_43[right1]': 'Fungus3_08[left1]', 'Deepnest_44[top1]': 'Deepnest_37[bot1]', 'Deepnest_45_v02[left1]': 'Deepnest_39[door1]', 'Room_Mask_Maker[right1]': 'Deepnest_42[left1]', 'Deepnest_East_01[bot1]': 'Abyss_03_c[top1]', 'Deepnest_East_01[right1]': 'Hive_03_c[left1]', 'Deepnest_East_01[top1]': 'Deepnest_East_02[bot1]', 'Deepnest_East_02[bot1]': 'Deepnest_East_01[top1]', 'Deepnest_East_02[bot2]': 'Hive_03[top1]', 'Deepnest_East_02[top1]': 'Waterways_14[bot2]', 'Deepnest_East_02[right1]': 'Deepnest_East_03[left2]', 'Deepnest_East_03[left1]': 'Ruins2_07[right1]', 'Deepnest_East_03[left2]': 'Deepnest_East_02[right1]', 'Deepnest_East_03[top1]': 'Deepnest_East_07[bot1]', 'Deepnest_East_03[top2]': None, 'Deepnest_East_03[right1]': 'Deepnest_East_04[left1]', 'Deepnest_East_03[right2]': 'Deepnest_East_06[left1]', 'Deepnest_East_04[left1]': 'Deepnest_East_03[right1]', 'Deepnest_East_04[left2]': 'Deepnest_East_07[right1]', 'Deepnest_East_04[right2]': 'Deepnest_East_15[left1]', 'Deepnest_East_04[right1]': 'Deepnest_East_11[left1]', 'Deepnest_East_06[top1]': 'Deepnest_East_18[bot1]', 'Deepnest_East_06[left1]': 'Deepnest_East_03[right2]', 'Deepnest_East_06[bot1]': 'Deepnest_East_14b[top1]', 'Deepnest_East_06[door1]': 'Room_nailmaster_03[left1]', 'Deepnest_East_06[right1]': 'Deepnest_East_16[left1]', 'Deepnest_East_07[bot1]': 'Deepnest_East_03[top1]', 'Deepnest_East_07[bot2]': 'Deepnest_East_03[top2]', 'Deepnest_East_07[left1]': 'Deepnest_East_08[right1]', 'Deepnest_East_07[left2]': 'Ruins2_11_b[right1]', 'Deepnest_East_07[right1]': 'Deepnest_East_04[left2]', 'Deepnest_East_08[right1]': 'Deepnest_East_07[left1]', 'Deepnest_East_08[top1]': 'Deepnest_East_09[bot1]', 'Deepnest_East_09[right1]': 'Room_Colosseum_01[left1]', 'Deepnest_East_09[left1]': 'Ruins2_10b[right1]', 'Deepnest_East_09[bot1]': 'Deepnest_East_08[top1]', 'Deepnest_East_10[left1]': 'Deepnest_East_18[right2]', 'Deepnest_East_11[right1]': 'Deepnest_East_12[left1]', 'Deepnest_East_11[left1]': 'Deepnest_East_04[right1]', 'Deepnest_East_11[top1]': 'Deepnest_East_13[bot1]', 'Deepnest_East_11[bot1]': 'Deepnest_East_18[top1]', 'Deepnest_East_12[right1]': 'Deepnest_East_Hornet[left1]', 'Deepnest_East_12[left1]': 'Deepnest_East_11[right1]', 'Deepnest_East_13[bot1]': 'Deepnest_East_11[top1]', 'Deepnest_East_14[top2]': 'Deepnest_East_16[bot1]', 'Deepnest_East_14[left1]': 'Deepnest_East_14b[right1]', 'Deepnest_East_14[door1]': 'Deepnest_East_17[left1]', 'Deepnest_East_14b[right1]': 'Deepnest_East_14[left1]', 'Deepnest_East_14b[top1]': 'Deepnest_East_06[bot1]', 'Deepnest_East_15[left1]': 'Deepnest_East_04[right2]', 'Deepnest_East_16[left1]': 'Deepnest_East_06[right1]', 'Deepnest_East_16[bot1]': 'Deepnest_East_14[top2]', 'Deepnest_East_17[left1]': 'Deepnest_East_14[door1]', 'Deepnest_East_18[top1]': 'Deepnest_East_11[bot1]', 'Deepnest_East_18[bot1]': 'Deepnest_East_06[top1]', 'Deepnest_East_18[right2]': 'Deepnest_East_10[left1]', 'Room_nailmaster_03[left1]': 'Deepnest_East_06[door1]', 'Deepnest_East_Hornet[left1]': 'Deepnest_East_12[right1]', 'Deepnest_East_Hornet[left2]': 'Room_Wyrm[right1]', 'Room_Wyrm[right1]': 'Deepnest_East_Hornet[left2]', 'GG_Lurker[left1]': 'Room_Colosseum_Spectate[right1]', 'Hive_01[left1]': 'Abyss_03_c[right1]', 'Hive_01[right1]': 'Hive_02[left2]', 'Hive_01[right2]': 'Hive_02[left3]', 'Hive_02[left1]': 'Hive_03_c[right3]', 'Hive_02[left2]': 'Hive_01[right1]', 'Hive_02[left3]': 'Hive_01[right2]', 'Hive_03_c[left1]': 'Deepnest_East_01[right1]', 'Hive_03_c[right2]': 'Hive_04[left2]', 'Hive_03_c[right3]': 'Hive_02[left1]', 'Hive_03_c[top1]': 'Hive_03[bot1]', 'Hive_03[bot1]': 'Hive_03_c[top1]', 'Hive_03[right1]': 'Hive_04[left1]', 'Hive_03[top1]': 'Deepnest_East_02[bot2]', 'Hive_04[left1]': 'Hive_03[right1]', 'Hive_04[left2]': 'Hive_03_c[right2]', 'Hive_04[right1]': 'Hive_05[left1]', 'Hive_05[left1]': 'Hive_04[right1]', 'Room_Colosseum_01[left1]': 'Deepnest_East_09[right1]', 'Room_Colosseum_01[bot1]': 'Room_Colosseum_02[top1]', 'Room_Colosseum_02[top1]': 'Room_Colosseum_01[bot1]', 'Room_Colosseum_02[top2]': 'Room_Colosseum_Spectate[bot1]', 'Room_Colosseum_Spectate[bot1]': 'Room_Colosseum_02[top2]', 'Room_Colosseum_Spectate[right1]': 'GG_Lurker[left1]', 'Abyss_01[left1]': 'Waterways_05[right1]', 'Abyss_01[left2]': 'Waterways_06[right1]', 'Abyss_01[left3]': 'Abyss_02[right1]', 'Abyss_01[right1]': 'Ruins2_04[left2]', 'Abyss_01[right2]': 'Waterways_07[left1]', 'Abyss_02[right1]': 'Abyss_01[left3]', 'Abyss_02[bot1]': 'Abyss_03[top1]', 'Abyss_03[bot1]': 'Abyss_17[top1]', 'Abyss_03[bot2]': 'Abyss_04[top1]', 'Abyss_03[top1]': 'Abyss_02[bot1]', 'Abyss_03_b[left1]': 'Deepnest_37[right1]', 'Abyss_03_c[right1]': 'Hive_01[left1]', 'Abyss_03_c[top1]': 'Deepnest_East_01[bot1]', 'Abyss_04[top1]': 'Abyss_03[bot2]', 'Abyss_04[left1]': 'Abyss_18[right1]', 'Abyss_04[bot1]': 'Abyss_06_Core[top1]', 'Abyss_04[right1]': 'Abyss_05[left1]', 'Abyss_05[left1]': 'Abyss_04[right1]', 'Abyss_05[right1]': 'Abyss_22[left1]', 'Abyss_06_Core[top1]': 'Abyss_04[bot1]', 'Abyss_06_Core[left1]': 'Abyss_08[right1]', 'Abyss_06_Core[left3]': 'Abyss_12[right1]', 'Abyss_06_Core[right2]': 'Abyss_16[left1]', 'Abyss_06_Core[bot1]': 'Abyss_15[top1]', 'Abyss_08[right1]': 'Abyss_06_Core[left1]', 'Abyss_09[right1]': 'Abyss_10[left1]', 'Abyss_09[right2]': 'Abyss_Lighthouse_room[left1]', 'Abyss_09[right3]': 'Abyss_10[left2]', 'Abyss_09[left1]': 'Abyss_16[right1]', 'Abyss_10[left1]': 'Abyss_09[right1]', 'Abyss_10[left2]': 'Abyss_09[right3]', 'Abyss_12[right1]': 'Abyss_06_Core[left3]', 'Abyss_15[top1]': 'Abyss_06_Core[bot1]', 'Abyss_16[left1]': 'Abyss_06_Core[right2]', 'Abyss_16[right1]': 'Abyss_09[left1]', 'Abyss_17[top1]': 'Abyss_03[bot1]', 'Abyss_18[left1]': 'Abyss_19[right1]', 'Abyss_18[right1]': 'Abyss_04[left1]', 'Abyss_19[left1]': 'Abyss_21[right1]', 'Abyss_19[right1]': 'Abyss_18[left1]', 'Abyss_19[bot1]': 'Abyss_20[top1]', 'Abyss_19[bot2]': 'Abyss_20[top2]', 'Abyss_20[top1]': 'Abyss_19[bot1]', 'Abyss_20[top2]': 'Abyss_19[bot2]', 'Abyss_21[right1]': 'Abyss_19[left1]', 'Abyss_22[left1]': 'Abyss_05[right1]', 'Abyss_Lighthouse_room[left1]': 'Abyss_09[right2]', 'Waterways_01[top1]': 'Ruins1_05b[bot1]', 'Waterways_01[left1]': 'Waterways_04[right1]', 'Waterways_01[right1]': 'Waterways_03[left1]', 'Waterways_01[bot1]': 'Waterways_02[top1]', 'Waterways_02[top1]': 'Waterways_01[bot1]', 'Waterways_02[top2]': 'Waterways_05[bot1]', 'Waterways_02[top3]': 'Waterways_04[bot1]', 'Waterways_02[bot1]': 'Waterways_08[top1]', 'Waterways_02[bot2]': 'Waterways_06[top1]', 'Waterways_03[left1]': 'Waterways_01[right1]', 'Waterways_04[bot1]': 'Waterways_02[top3]', 'Waterways_04[right1]': 'Waterways_01[left1]', 'Waterways_04[left1]': 'Waterways_04b[right1]', 'Waterways_04[left2]': 'Waterways_04b[right2]', 'Waterways_04b[right1]': 'Waterways_04[left1]', 'Waterways_04b[right2]': 'Waterways_04[left2]', 'Waterways_04b[left1]': 'Waterways_09[right1]', 'Waterways_05[right1]': 'Abyss_01[left1]', 'Waterways_05[bot1]': 'Waterways_02[top2]', 'Waterways_05[bot2]': 'Waterways_15[top1]', 'Waterways_06[right1]': 'Abyss_01[left2]', 'Waterways_06[top1]': 'Waterways_02[bot2]', 'Waterways_07[right1]': 'Waterways_13[left1]', 'Waterways_07[right2]': 'Waterways_13[left2]', 'Waterways_07[left1]': 'Abyss_01[right2]', 'Waterways_07[door1]': 'Ruins_House_03[left2]', 'Waterways_07[top1]': 'Waterways_14[bot1]', 'Waterways_08[top1]': 'Waterways_02[bot1]', 'Waterways_08[left1]': 'Waterways_12[right1]', 'Waterways_08[left2]': 'GG_Pipeway[right1]', 'Waterways_09[right1]': 'Waterways_04b[left1]', 'Waterways_09[left1]': 'Fungus2_23[right2]', 'Waterways_12[right1]': 'Waterways_08[left1]', 'Waterways_13[left1]': 'Waterways_07[right1]', 'Waterways_13[left2]': 'Waterways_07[right2]', 'Waterways_14[bot1]': 'Waterways_07[top1]', 'Waterways_14[bot2]': 'Deepnest_East_02[top1]', 'Waterways_15[top1]': 'Waterways_05[bot2]', 'GG_Pipeway[right1]': 'Waterways_08[left2]', 'GG_Pipeway[left1]': 'GG_Waterways[right1]', 'GG_Waterways[right1]': 'GG_Pipeway[left1]', 'GG_Waterways[door1]': 'Room_GG_Shortcut[left1]', 'Room_GG_Shortcut[left1]': 'GG_Waterways[door1]', 'Room_GG_Shortcut[top1]': 'Ruins1_04[bot1]', 'Ruins1_01[left1]': 'Fungus2_21[right1]', 'Ruins1_01[top1]': 'Ruins1_17[bot1]', 'Ruins1_01[bot1]': 'Ruins1_02[top1]', 'Ruins1_02[top1]': 'Ruins1_01[bot1]', 'Ruins1_02[bot1]': 'Ruins1_03[top1]', 'Ruins1_03[top1]': 'Ruins1_02[bot1]', 'Ruins1_03[left1]': 'Ruins1_04[right1]', 'Ruins1_03[right1]': 'Ruins1_05c[left2]', 'Ruins1_03[right2]': 'Ruins1_05b[left1]', 'Ruins1_04[right1]': 'Ruins1_03[left1]', 'Ruins1_04[door1]': 'Room_nailsmith[left1]', 'Ruins1_04[bot1]': 'Room_GG_Shortcut[top1]', 'Ruins1_05b[left1]': 'Ruins1_03[right2]', 'Ruins1_05b[top1]': 'Ruins1_05c[bot1]', 'Ruins1_05b[bot1]': 'Waterways_01[top1]', 'Ruins1_05b[right1]': 'Ruins1_27[left1]', 'Ruins1_05c[left2]': 'Ruins1_03[right1]', 'Ruins1_05c[bot1]': 'Ruins1_05b[top1]', 'Ruins1_05c[top1]': 'Ruins1_05[bot1]', 'Ruins1_05c[top2]': 'Ruins1_05[bot2]', 'Ruins1_05c[top3]': 'Ruins1_05[bot3]', 'Ruins1_05[bot1]': 'Ruins1_05c[top1]', 'Ruins1_05[bot2]': 'Ruins1_05c[top2]', 'Ruins1_05[bot3]': 'Ruins1_05c[top3]', 'Ruins1_05[right1]': 'Ruins1_09[left1]', 'Ruins1_05[right2]': 'Ruins1_18[left1]', 'Ruins1_05[top1]': 'Ruins1_31[bot1]', 'Ruins1_06[left1]': 'Ruins1_17[right1]', 'Ruins1_06[right1]': 'Ruins1_31[left1]', 'Ruins1_09[top1]': 'Ruins1_23[bot1]', 'Ruins1_09[left1]': 'Ruins1_05[right1]', 'Ruins1_17[top1]': 'Ruins1_28[bot1]', 'Ruins1_17[right1]': 'Ruins1_06[left1]', 'Ruins1_17[bot1]': 'Ruins1_01[top1]', 'Ruins1_18[left1]': 'Ruins1_05[right2]', 'Ruins1_18[right1]': 'Ruins2_03b[left1]', 'Ruins1_18[right2]': 'Ruins2_01[left2]', 'Ruins1_23[top1]': 'Ruins1_30[bot1]', 'Ruins1_23[right1]': 'Ruins1_25[left2]', 'Ruins1_23[right2]': 'Ruins1_25[left3]', 'Ruins1_23[bot1]': 'Ruins1_09[top1]', 'Ruins1_23[left1]': 'Ruins1_31[right1]', 'Ruins1_24[left1]': 'Ruins1_32[right1]', 'Ruins1_24[right1]': 'Ruins1_30[left1]', 'Ruins1_24[left2]': 'Ruins1_32[right2]', 'Ruins1_24[right2]': 'Ruins1_30[left2]', 'Ruins1_25[left1]': 'Ruins1_30[right1]', 'Ruins1_25[left2]': 'Ruins1_23[right1]', 'Ruins1_25[left3]': 'Ruins1_23[right2]', 'Ruins1_27[left1]': 'Ruins1_05b[right1]', 'Ruins1_27[right1]': 'Ruins2_01_b[left1]', 'Ruins1_28[left1]': 'Crossroads_49b[right1]', 'Ruins1_28[right1]': 'Ruins1_29[left1]', 'Ruins1_28[bot1]': 'Ruins1_17[top1]', 'Ruins1_29[left1]': 'Ruins1_28[right1]', 'Ruins1_30[left1]': 'Ruins1_24[right1]', 'Ruins1_30[left2]': 'Ruins1_24[right2]', 'Ruins1_30[bot1]': 'Ruins1_23[top1]', 'Ruins1_30[right1]': 'Ruins1_25[left1]', 'Ruins1_31[bot1]': 'Ruins1_05[top1]', 'Ruins1_31[left1]': 'Ruins1_06[right1]', 'Ruins1_31[left2]': 'Ruins1_31b[right1]', 'Ruins1_31[left3]': 'Ruins1_31b[right2]', 'Ruins1_31[right1]': 'Ruins1_23[left1]', 'Ruins1_31b[right1]': 'Ruins1_31[left2]', 'Ruins1_31b[right2]': 'Ruins1_31[left3]', 'Ruins1_32[right1]': 'Ruins1_24[left1]', 'Ruins1_32[right2]': 'Ruins1_24[left2]', 'Room_nailsmith[left1]': 'Ruins1_04[door1]', 'Ruins2_01[top1]': 'Ruins2_03b[bot1]', 'Ruins2_01[bot1]': 'Ruins2_01_b[top1]', 'Ruins2_01[left2]': 'Ruins1_18[right2]', 'Ruins2_01_b[top1]': 'Ruins2_01[bot1]', 'Ruins2_01_b[left1]': 'Ruins1_27[right1]', 'Ruins2_01_b[right1]': 'Ruins2_04[left1]', 'Ruins2_03b[top1]': 'Ruins2_03[bot1]', 'Ruins2_03b[top2]': 'Ruins2_03[bot2]', 'Ruins2_03b[left1]': 'Ruins1_18[right1]', 'Ruins2_03b[bot1]': 'Ruins2_01[top1]', 'Ruins2_03[top1]': 'Ruins2_Watcher_Room[bot1]', 'Ruins2_03[bot1]': 'Ruins2_03b[top1]', 'Ruins2_03[bot2]': 'Ruins2_03b[top2]', 'Ruins2_04[left1]': 'Ruins2_01_b[right1]', 'Ruins2_04[left2]': 'Abyss_01[right1]', 'Ruins2_04[right1]': 'Ruins2_06[left1]', 'Ruins2_04[right2]': 'Ruins2_06[left2]', 'Ruins2_04[door_Ruin_House_01]': 'Ruins_House_01[left1]', 'Ruins2_04[door_Ruin_House_02]': 'Ruins_House_02[left1]', 'Ruins2_04[door_Ruin_House_03]': 'Ruins_House_03[left1]', 'Ruins2_04[door_Ruin_Elevator]': 'Ruins_Elevator[left1]', 'Ruins2_05[left1]': 'Ruins2_10b[right2]', 'Ruins2_05[top1]': 'Ruins2_09[bot1]', 'Ruins2_05[bot1]': 'Ruins2_06[top1]', 'Ruins2_06[left1]': 'Ruins2_04[right1]', 'Ruins2_06[left2]': 'Ruins2_04[right2]', 'Ruins2_06[right1]': 'Ruins2_08[left1]', 'Ruins2_06[right2]': 'Ruins2_07[left1]', 'Ruins2_06[top1]': 'Ruins2_05[bot1]', 'Ruins2_07[right1]': 'Deepnest_East_03[left1]', 'Ruins2_07[left1]': 'Ruins2_06[right2]', 'Ruins2_07[top1]': 'Ruins2_11_b[bot1]', 'Ruins2_08[left1]': 'Ruins2_06[right1]', 'Ruins2_09[bot1]': 'Ruins2_05[top1]', 'Ruins2_10[right1]': 'RestingGrounds_10[left1]', 'Ruins2_10[left1]': 'RestingGrounds_06[right1]', 'Ruins2_10b[right1]': 'Deepnest_East_09[left1]', 'Ruins2_10b[right2]': 'Ruins2_05[left1]', 'Ruins2_10b[left1]': 'Ruins_Bathhouse[right1]', 'Ruins2_11_b[right1]': 'Deepnest_East_07[left2]', 'Ruins2_11_b[left1]': 'Ruins2_11[right1]', 'Ruins2_11_b[bot1]': 'Ruins2_07[top1]', 'Ruins2_11[right1]': 'Ruins2_11_b[left1]', 'Ruins2_Watcher_Room[bot1]': 'Ruins2_03[top1]', 'Ruins_House_01[left1]': 'Ruins2_04[door_Ruin_House_01]', 'Ruins_House_02[left1]': 'Ruins2_04[door_Ruin_House_02]', 'Ruins_House_03[left1]': 'Ruins2_04[door_Ruin_House_03]', 'Ruins_House_03[left2]': 'Waterways_07[door1]', 'Ruins_Elevator[left1]': 'Ruins2_04[door_Ruin_Elevator]', 'Ruins_Elevator[left2]': 'Ruins_Bathhouse[door1]', 'Ruins_Bathhouse[door1]': 'Ruins_Elevator[left2]', 'Ruins_Bathhouse[right1]': 'Ruins2_10b[left1]', 'RestingGrounds_02[right1]': 'RestingGrounds_04[left1]', 'RestingGrounds_02[left1]': 'Crossroads_46b[right1]', 'RestingGrounds_02[bot1]': 'RestingGrounds_06[top1]', 'RestingGrounds_02[top1]': None, 'RestingGrounds_04[left1]': 'RestingGrounds_02[right1]', 'RestingGrounds_04[right1]': 'RestingGrounds_05[left1]', 'RestingGrounds_05[left1]': 'RestingGrounds_04[right1]', 'RestingGrounds_05[left2]': 'RestingGrounds_07[right1]', 'RestingGrounds_05[left3]': 'RestingGrounds_17[right1]', 'RestingGrounds_05[right1]': 'RestingGrounds_08[left1]', 'RestingGrounds_05[right2]': 'RestingGrounds_09[left1]', 'RestingGrounds_05[bot1]': 'RestingGrounds_10[top1]', 'RestingGrounds_06[left1]': 'Crossroads_50[right1]', 'RestingGrounds_06[right1]': 'Ruins2_10[left1]', 'RestingGrounds_06[top1]': 'RestingGrounds_02[bot1]', 'RestingGrounds_07[right1]': 'RestingGrounds_05[left2]', 'RestingGrounds_08[left1]': 'RestingGrounds_05[right1]', 'RestingGrounds_09[left1]': 'RestingGrounds_05[right2]', 'RestingGrounds_10[left1]': 'Ruins2_10[right1]', 'RestingGrounds_10[top1]': 'RestingGrounds_05[bot1]', 'RestingGrounds_10[top2]': 'RestingGrounds_12[bot1]', 'RestingGrounds_12[bot1]': 'RestingGrounds_10[top2]', 'RestingGrounds_12[door_Mansion]': 'Room_Mansion[left1]', 'RestingGrounds_17[right1]': 'RestingGrounds_05[left3]', 'Room_Mansion[left1]': 'RestingGrounds_12[door_Mansion]', 'Mines_01[bot1]': 'Mines_02[top1]', 'Mines_01[left1]': 'Crossroads_45[right1]', 'Mines_02[top1]': 'Mines_01[bot1]', 'Mines_02[top2]': 'Mines_03[bot1]', 'Mines_02[left1]': 'Mines_33[right1]', 'Mines_02[right1]': 'Mines_29[left1]', 'Mines_03[right1]': 'Mines_17[left1]', 'Mines_03[bot1]': 'Mines_02[top2]', 'Mines_03[top1]': 'Mines_05[bot1]', 'Mines_04[right1]': 'Mines_07[left1]', 'Mines_04[top1]': 'Mines_37[bot1]', 'Mines_04[left1]': 'Mines_17[right1]', 'Mines_04[left2]': 'Mines_29[right1]', 'Mines_04[left3]': 'Mines_29[right2]', 'Mines_05[right1]': 'Mines_19[left1]', 'Mines_05[top1]': 'Mines_11[bot1]', 'Mines_05[bot1]': 'Mines_03[top1]', 'Mines_05[left1]': 'Mines_30[right1]', 'Mines_05[left2]': 'Mines_06[right1]', 'Mines_06[right1]': 'Mines_05[left2]', 'Mines_06[left1]': 'Mines_36[right1]', 'Mines_07[right1]': 'Mines_28[left1]', 'Mines_07[left1]': 'Mines_04[right1]', 'Mines_10[right1]': 'Mines_30[left1]', 'Mines_10[left1]': 'Town[right1]', 'Mines_10[bot1]': 'Mines_16[top1]', 'Mines_11[right1]': 'Mines_18[left1]', 'Mines_11[top1]': 'Mines_13[bot1]', 'Mines_11[bot1]': 'Mines_05[top1]', 'Mines_13[right1]': 'Mines_20[left1]', 'Mines_13[top1]': None, 'Mines_13[bot1]': 'Mines_11[top1]', 'Mines_16[top1]': 'Mines_10[bot1]', 'Mines_17[right1]': 'Mines_04[left1]', 'Mines_17[left1]': 'Mines_03[right1]', 'Mines_18[top1]': 'Mines_32[bot1]', 'Mines_18[left1]': 'Mines_11[right1]', 'Mines_18[right1]': 'Mines_20[left2]', 'Mines_19[left1]': 'Mines_05[right1]', 'Mines_19[right1]': 'Mines_20[left3]', 'Mines_20[left1]': 'Mines_13[right1]', 'Mines_20[left2]': 'Mines_18[right1]', 'Mines_20[left3]': 'Mines_19[right1]', 'Mines_20[bot1]': 'Mines_37[top1]', 'Mines_20[right1]': 'Mines_23[left1]', 'Mines_20[right2]': 'Mines_31[left1]', 'Mines_23[left1]': 'Mines_20[right1]', 'Mines_23[right1]': 'Mines_25[left1]', 'Mines_23[right2]': 'Mines_24[left1]', 'Mines_23[top1]': None, 'Mines_24[left1]': 'Mines_23[right2]', 'Mines_25[left1]': 'Mines_23[right1]', 'Mines_25[top1]': 'Mines_34[bot1]', 'Mines_28[left1]': 'Mines_07[right1]', 'Mines_28[bot1]': 'RestingGrounds_02[top1]', 'Mines_28[door1]': 'Mines_35[left1]', 'Mines_29[left1]': 'Mines_02[right1]', 'Mines_29[right1]': 'Mines_04[left2]', 'Mines_29[right2]': 'Mines_04[left3]', 'Mines_30[left1]': 'Mines_10[right1]', 'Mines_30[right1]': 'Mines_05[left1]', 'Mines_31[left1]': 'Mines_20[right2]', 'Mines_32[bot1]': 'Mines_18[top1]', 'Mines_33[right1]': 'Mines_02[left1]', 'Mines_33[left1]': 'Crossroads_03[right2]', 'Mines_34[bot1]': 'Mines_25[top1]', 'Mines_34[bot2]': 'Mines_23[top1]', 'Mines_34[left1]': 'Mines_13[top1]', 'Mines_35[left1]': 'Mines_28[door1]', 'Mines_36[right1]': 'Mines_06[left1]', 'Mines_37[bot1]': 'Mines_04[top1]', 'Mines_37[top1]': 'Mines_20[bot1]', 'Fungus3_04[left1]': 'Fungus3_21[right1]', 'Fungus3_04[left2]': 'Fungus3_13[right1]', 'Fungus3_04[right1]': 'Fungus3_34[left1]', 'Fungus3_04[right2]': 'Fungus3_05[left1]', 'Fungus3_05[left1]': 'Fungus3_04[right2]', 'Fungus3_05[right1]': 'Fungus1_24[left1]', 'Fungus3_05[right2]': 'Fungus3_11[left1]', 'Fungus3_08[left1]': 'Deepnest_43[right1]', 'Fungus3_08[right1]': 'Fungus3_11[left2]', 'Fungus3_08[top1]': 'Fungus3_10[bot1]', 'Fungus3_10[top1]': 'Fungus3_13[bot1]', 'Fungus3_10[bot1]': 'Fungus3_08[top1]', 'Fungus3_11[left1]': 'Fungus3_05[right2]', 'Fungus3_11[left2]': 'Fungus3_08[right1]', 'Fungus3_11[right1]': 'Fungus3_39[left1]', 'Fungus3_13[left1]': 'Fungus1_23[right1]', 'Fungus3_13[left2]': 'Fungus3_40[right1]', 'Fungus3_13[left3]': 'Fungus3_49[right1]', 'Fungus3_13[bot1]': 'Fungus3_10[top1]', 'Fungus3_13[right1]': 'Fungus3_04[left2]', 'Fungus3_21[right1]': 'Fungus3_04[left1]', 'Fungus3_21[top1]': 'Fungus3_22[bot1]', 'Fungus3_22[right1]': 'Fungus1_13[left1]', 'Fungus3_22[left1]': 'Fungus3_23[right1]', 'Fungus3_22[bot1]': 'Fungus3_21[top1]', 'Fungus3_23[right1]': 'Fungus3_22[left1]', 'Fungus3_23[left1]': 'Fungus3_48[right1]', 'Fungus3_34[right1]': 'Fungus3_03[left1]', 'Fungus3_34[left1]': 'Fungus3_04[right1]', 'Fungus3_34[top1]': 'Fungus3_44[bot1]', 'Fungus3_39[right1]': 'Deepnest_01[left1]', 'Fungus3_39[left1]': 'Fungus3_11[right1]', 'Fungus3_40[right1]': 'Fungus3_13[left2]', 'Fungus3_40[top1]': 'Fungus3_48[bot1]', 'Fungus3_48[right1]': 'Fungus3_23[left1]', 'Fungus3_48[right2]': 'Fungus1_23[left1]', 'Fungus3_48[door1]': 'Room_Queen[left1]', 'Fungus3_48[bot1]': 'Fungus3_40[top1]', 'Fungus3_49[right1]': 'Fungus3_13[left3]', 'Fungus3_50[right1]': 'Deepnest_43[left1]', 'Room_Queen[left1]': 'Fungus3_48[door1]', 'Cliffs_01[right1]': 'Cliffs_02[left1]', 'Cliffs_01[right2]': 'Cliffs_04[left1]', 'Cliffs_01[right3]': 'Fungus1_28[left1]', 'Cliffs_01[right4]': 'Cliffs_06[left1]', 'Cliffs_02[right1]': 'Town[top1]', 'Cliffs_02[bot1]': 'Tutorial_01[top2]', 'Cliffs_02[bot2]': 'Tutorial_01[top1]', 'Cliffs_02[door1]': 'Room_nailmaster[left1]', 'Cliffs_02[left1]': 'Cliffs_01[right1]', 'Cliffs_02[left2]': 'Cliffs_03[right1]', 'Cliffs_03[right1]': 'Cliffs_02[left2]', 'Cliffs_04[right1]': 'Cliffs_05[left1]', 'Cliffs_04[left1]': 'Cliffs_01[right2]', 'Cliffs_05[left1]': 'Cliffs_04[right1]', 'Cliffs_06[left1]': 'Cliffs_01[right4]', 'Room_nailmaster[left1]': 'Cliffs_02[door1]', 'White_Palace_01[left1]': 'White_Palace_11[door2]', 'White_Palace_01[right1]': 'White_Palace_02[left1]', 'White_Palace_01[top1]': 'White_Palace_03_hub[bot1]', 'White_Palace_02[left1]': 'White_Palace_01[right1]', 'White_Palace_03_hub[left1]': 'White_Palace_14[right1]', 'White_Palace_03_hub[left2]': 'White_Palace_04[right2]', 'White_Palace_03_hub[right1]': 'White_Palace_15[left1]', 'White_Palace_03_hub[top1]': 'White_Palace_06[bot1]', 'White_Palace_03_hub[bot1]': 'White_Palace_01[top1]', 'White_Palace_04[top1]': 'White_Palace_14[bot1]', 'White_Palace_04[right2]': 'White_Palace_03_hub[left2]', 'White_Palace_05[left1]': 'White_Palace_15[right1]', 'White_Palace_05[left2]': 'White_Palace_15[right2]', 'White_Palace_05[right1]': 'White_Palace_16[left1]', 'White_Palace_05[right2]': 'White_Palace_16[left2]', 'White_Palace_06[left1]': 'White_Palace_18[right1]', 'White_Palace_06[top1]': 'White_Palace_07[bot1]', 'White_Palace_06[bot1]': 'White_Palace_03_hub[top1]', 'White_Palace_07[top1]': 'White_Palace_12[bot1]', 'White_Palace_07[bot1]': 'White_Palace_06[top1]', 'White_Palace_08[left1]': 'White_Palace_13[right1]', 'White_Palace_08[right1]': 'White_Palace_13[left3]', 'White_Palace_09[right1]': 'White_Palace_13[left1]', 'White_Palace_11[door2]': 'White_Palace_01[left1]', 'White_Palace_12[right1]': 'White_Palace_13[left2]', 'White_Palace_12[bot1]': 'White_Palace_07[top1]', 'White_Palace_13[right1]': 'White_Palace_08[left1]', 'White_Palace_13[left1]': 'White_Palace_09[right1]', 'White_Palace_13[left2]': 'White_Palace_12[right1]', 'White_Palace_13[left3]': 'White_Palace_08[right1]', 'White_Palace_14[bot1]': 'White_Palace_04[top1]', 'White_Palace_14[right1]': 'White_Palace_03_hub[left1]', 'White_Palace_15[left1]': 'White_Palace_03_hub[right1]', 'White_Palace_15[right1]': 'White_Palace_05[left1]', 'White_Palace_15[right2]': 'White_Palace_05[left2]', 'White_Palace_16[left1]': 'White_Palace_05[right1]', 'White_Palace_16[left2]': 'White_Palace_05[right2]', 'White_Palace_17[right1]': 'White_Palace_19[left1]', 'White_Palace_17[bot1]': 'White_Palace_18[top1]', 'White_Palace_18[top1]': 'White_Palace_17[bot1]', 'White_Palace_18[right1]': 'White_Palace_06[left1]', 'White_Palace_19[top1]': 'White_Palace_20[bot1]', 'White_Palace_19[left1]': 'White_Palace_17[right1]', 'White_Palace_20[bot1]': 'White_Palace_19[top1]'} +event_names = {'Abyss_01', 'Abyss_03', 'Abyss_03_b', 'Abyss_03_c', 'Abyss_04', 'Abyss_05', 'Abyss_06_Core', 'Abyss_09', 'Abyss_19', 'Broke_Sanctum_Glass_Floor', 'Can_Bench', 'Can_Repair_Fragile_Charms', 'Can_Replenish_Geo', 'Can_Replenish_Geo-Crossroads', 'Can_Stag', 'Cliffs_01', 'Cliffs_02', 'Completed_Path_of_Pain', 'Crossroads_03', 'Crossroads_07', 'Crossroads_08', 'Crossroads_14', 'Crossroads_18', 'Crossroads_19', 'Crossroads_21', 'Crossroads_27', 'Crossroads_33', 'Deepnest_01', 'Deepnest_01b', 'Deepnest_02', 'Deepnest_03', 'Deepnest_10', 'Deepnest_14', 'Deepnest_17', 'Deepnest_26', 'Deepnest_34', 'Deepnest_35', 'Deepnest_37', 'Deepnest_39', 'Deepnest_41', 'Deepnest_42', 'Deepnest_East_02', 'Deepnest_East_03', 'Deepnest_East_04', 'Deepnest_East_07', 'Deepnest_East_11', 'Deepnest_East_18', 'Defeated_Broken_Vessel', 'Defeated_Brooding_Mawlek', 'Defeated_Collector', 'Defeated_Colosseum_1', 'Defeated_Colosseum_2', 'Defeated_Colosseum_Zote', 'Defeated_Crystal_Guardian', 'Defeated_Dung_Defender', 'Defeated_Elder_Hu', 'Defeated_Elegant_Warrior', 'Defeated_Enraged_Guardian', 'Defeated_Failed_Champion', 'Defeated_False_Knight', 'Defeated_Flukemarm', 'Defeated_Galien', 'Defeated_Gorb', 'Defeated_Grey_Prince_Zote', 'Defeated_Grimm', 'Defeated_Gruz_Mother', 'Defeated_Hive_Knight', 'Defeated_Hornet_1', 'Defeated_Hornet_2', "Defeated_King's_Station_Arena", 'Defeated_Lost_Kin', 'Defeated_Mantis_Lords', 'Defeated_Markoth', 'Defeated_Marmu', 'Defeated_No_Eyes', 'Defeated_Nosk', 'Defeated_Pale_Lurker', 'Defeated_Path_of_Pain_Arena', 'Defeated_Sanctum_Warrior', 'Defeated_Shrumal_Ogre_Arena', 'Defeated_Soul_Master', 'Defeated_Soul_Tyrant', 'Defeated_Traitor_Lord', 'Defeated_Uumuu', 'Defeated_Watcher_Knights', "Defeated_West_Queen's_Gardens_Arena", 'Defeated_White_Defender', 'Defeated_Xero', 'First_Grimmchild_Upgrade', 'Fungus1_11', 'Fungus1_21', 'Fungus1_30', 'Fungus2_01', 'Fungus2_03', 'Fungus2_04', 'Fungus2_06', 'Fungus2_11', 'Fungus2_13', 'Fungus2_14', 'Fungus2_17', 'Fungus2_20', 'Fungus2_23', 'Fungus3_01', 'Fungus3_02', 'Fungus3_04', 'Fungus3_11', 'Fungus3_13', 'Fungus3_22', 'Fungus3_26', 'Fungus3_34', 'Fungus3_40', 'Fungus3_44', 'Fungus3_47', 'Hive_03_c', 'Left_Elevator', 'Lever-Dung_Defender', 'Lever-Shade_Soul', 'Lit_Abyss_Lighthouse', 'Lower_Tram', 'Mines_02', 'Mines_03', 'Mines_04', 'Mines_05', 'Mines_10', 'Mines_11', 'Mines_18', 'Mines_20', 'Mines_23', 'Nightmare_Lantern_Lit', 'Opened_Archives_Exit_Wall', 'Opened_Black_Egg_Temple', 'Opened_Dung_Defender_Wall', 'Opened_Emilitia_Door', 'Opened_Gardens_Stag_Exit', 'Opened_Glade_Door', "Opened_Lower_Kingdom's_Edge_Wall", 'Opened_Mawlek_Wall', 'Opened_Pleasure_House_Wall', 'Opened_Resting_Grounds_Catacombs_Wall', 'Opened_Resting_Grounds_Floor', 'Opened_Shaman_Pillar', 'Opened_Tramway_Exit_Gate', 'Opened_Waterways_Exit', 'Opened_Waterways_Manhole', 'Palace_Atrium_Gates_Opened', 'Palace_Entrance_Lantern_Lit', 'Palace_Left_Lantern_Lit', 'Palace_Right_Lantern_Lit', 'Rescued_Bretta', 'Rescued_Deepnest_Zote', 'Rescued_Sly', 'RestingGrounds_02', 'RestingGrounds_05', 'RestingGrounds_10', 'Right_Elevator', 'Ruins1_03', 'Ruins1_05', 'Ruins1_05b', 'Ruins1_05c', 'Ruins1_23', 'Ruins1_28', 'Ruins1_30', 'Ruins1_31', 'Ruins2_01', 'Ruins2_01_b', 'Ruins2_03b', 'Ruins2_04', 'Ruins2_10', 'Second_Grimmchild_Upgrade', 'Town', 'Tutorial_01', 'Upper_Tram', 'Warp-Lifeblood_Core_to_Abyss', 'Warp-Palace_Grounds_to_White_Palace', 'Warp-Path_of_Pain_Complete', 'Warp-White_Palace_Atrium_to_Palace_Grounds', 'Warp-White_Palace_Entrance_to_Palace_Grounds', 'Waterways_01', 'Waterways_02', 'Waterways_04', 'Waterways_04b', 'Waterways_07', 'White_Palace_01', 'White_Palace_03_hub', 'White_Palace_13'} +exits = {'Room_temple': ['Room_temple[left1]'], 'Tutorial_01': ['Tutorial_01[right1]', 'Tutorial_01[top1]', 'Tutorial_01[top2]'], 'Town': ['Town[left1]', 'Town[bot1]', 'Town[right1]', 'Town[top1]', 'Town[door_station]', 'Town[door_sly]', 'Town[door_mapper]', 'Town[door_jiji]', 'Town[door_bretta]', 'Town[room_divine]', 'Town[room_grimm]'], 'Room_shop': ['Room_shop[left1]'], 'Room_Town_Stag_Station': ['Room_Town_Stag_Station[left1]'], 'Room_mapper': ['Room_mapper[left1]'], 'Room_Bretta': ['Room_Bretta[right1]'], 'Room_Ouiji': ['Room_Ouiji[left1]'], 'Grimm_Divine': ['Grimm_Divine[left1]'], 'Grimm_Main_Tent': ['Grimm_Main_Tent[left1]'], 'Crossroads_01': ['Crossroads_01[top1]', 'Crossroads_01[left1]', 'Crossroads_01[right1]'], 'Crossroads_02': ['Crossroads_02[left1]', 'Crossroads_02[door1]', 'Crossroads_02[right1]'], 'Crossroads_03': ['Crossroads_03[right1]', 'Crossroads_03[right2]', 'Crossroads_03[left1]', 'Crossroads_03[left2]', 'Crossroads_03[bot1]', 'Crossroads_03[top1]'], 'Crossroads_04': ['Crossroads_04[left1]', 'Crossroads_04[top1]', 'Crossroads_04[door_Mender_House]', 'Crossroads_04[door1]', 'Crossroads_04[door_charmshop]', 'Crossroads_04[right1]'], 'Crossroads_05': ['Crossroads_05[left1]', 'Crossroads_05[right1]'], 'Crossroads_06': ['Crossroads_06[left1]', 'Crossroads_06[door1]', 'Crossroads_06[right1]'], 'Crossroads_07': ['Crossroads_07[left1]', 'Crossroads_07[left2]', 'Crossroads_07[left3]', 'Crossroads_07[right1]', 'Crossroads_07[right2]', 'Crossroads_07[bot1]'], 'Crossroads_08': ['Crossroads_08[left1]', 'Crossroads_08[left2]', 'Crossroads_08[right1]', 'Crossroads_08[right2]'], 'Crossroads_09': ['Crossroads_09[left1]', 'Crossroads_09[right1]'], 'Crossroads_10': ['Crossroads_10[left1]', 'Crossroads_10[right1]'], 'Crossroads_11_alt': ['Crossroads_11_alt[left1]', 'Crossroads_11_alt[right1]'], 'Crossroads_12': ['Crossroads_12[left1]', 'Crossroads_12[right1]'], 'Crossroads_13': ['Crossroads_13[left1]', 'Crossroads_13[right1]'], 'Crossroads_14': ['Crossroads_14[left1]', 'Crossroads_14[left2]', 'Crossroads_14[right1]', 'Crossroads_14[right2]'], 'Crossroads_15': ['Crossroads_15[left1]', 'Crossroads_15[right1]'], 'Crossroads_16': ['Crossroads_16[left1]', 'Crossroads_16[right1]', 'Crossroads_16[bot1]'], 'Crossroads_18': ['Crossroads_18[right1]', 'Crossroads_18[right2]', 'Crossroads_18[bot1]'], 'Crossroads_19': ['Crossroads_19[right1]', 'Crossroads_19[top1]', 'Crossroads_19[left1]', 'Crossroads_19[left2]'], 'Crossroads_21': ['Crossroads_21[left1]', 'Crossroads_21[right1]', 'Crossroads_21[top1]'], 'Crossroads_22': ['Crossroads_22[bot1]'], 'Crossroads_25': ['Crossroads_25[right1]', 'Crossroads_25[left1]'], 'Crossroads_27': ['Crossroads_27[right1]', 'Crossroads_27[bot1]', 'Crossroads_27[left1]', 'Crossroads_27[left2]'], 'Crossroads_30': ['Crossroads_30[left1]'], 'Crossroads_31': ['Crossroads_31[right1]'], 'Crossroads_33': ['Crossroads_33[top1]', 'Crossroads_33[left1]', 'Crossroads_33[left2]', 'Crossroads_33[right1]', 'Crossroads_33[right2]'], 'Crossroads_35': ['Crossroads_35[bot1]', 'Crossroads_35[right1]'], 'Crossroads_36': ['Crossroads_36[right1]', 'Crossroads_36[right2]'], 'Crossroads_37': ['Crossroads_37[right1]'], 'Crossroads_38': ['Crossroads_38[right1]'], 'Crossroads_39': ['Crossroads_39[right1]', 'Crossroads_39[left1]'], 'Crossroads_40': ['Crossroads_40[right1]', 'Crossroads_40[left1]'], 'Crossroads_42': ['Crossroads_42[left1]', 'Crossroads_42[right1]'], 'Crossroads_43': ['Crossroads_43[left1]', 'Crossroads_43[right1]'], 'Crossroads_45': ['Crossroads_45[right1]', 'Crossroads_45[left1]'], 'Crossroads_46': ['Crossroads_46[left1]'], 'Crossroads_46b': ['Crossroads_46b[right1]'], 'Crossroads_ShamanTemple': ['Crossroads_ShamanTemple[left1]'], 'Crossroads_47': ['Crossroads_47[right1]'], 'Crossroads_48': ['Crossroads_48[left1]'], 'Crossroads_49': ['Crossroads_49[right1]', 'Crossroads_49[left1]'], 'Crossroads_49b': ['Crossroads_49b[right1]'], 'Crossroads_50': ['Crossroads_50[right1]', 'Crossroads_50[left1]'], 'Crossroads_52': ['Crossroads_52[left1]'], 'Room_ruinhouse': ['Room_ruinhouse[left1]'], 'Room_Charm_Shop': ['Room_Charm_Shop[left1]'], 'Room_Mender_House': ['Room_Mender_House[left1]'], 'Fungus1_01': ['Fungus1_01[left1]', 'Fungus1_01[right1]'], 'Fungus1_01b': ['Fungus1_01b[left1]', 'Fungus1_01b[right1]'], 'Fungus1_02': ['Fungus1_02[left1]', 'Fungus1_02[right1]', 'Fungus1_02[right2]'], 'Fungus1_03': ['Fungus1_03[left1]', 'Fungus1_03[right1]', 'Fungus1_03[bot1]'], 'Fungus1_04': ['Fungus1_04[left1]', 'Fungus1_04[right1]'], 'Fungus1_05': ['Fungus1_05[right1]', 'Fungus1_05[bot1]', 'Fungus1_05[top1]'], 'Fungus1_06': ['Fungus1_06[left1]', 'Fungus1_06[bot1]'], 'Fungus1_07': ['Fungus1_07[top1]', 'Fungus1_07[left1]', 'Fungus1_07[right1]'], 'Fungus1_08': ['Fungus1_08[left1]'], 'Fungus1_09': ['Fungus1_09[left1]', 'Fungus1_09[right1]'], 'Fungus1_10': ['Fungus1_10[left1]', 'Fungus1_10[right1]', 'Fungus1_10[top1]'], 'Fungus1_11': ['Fungus1_11[top1]', 'Fungus1_11[right1]', 'Fungus1_11[right2]', 'Fungus1_11[left1]', 'Fungus1_11[bot1]'], 'Fungus1_12': ['Fungus1_12[left1]', 'Fungus1_12[right1]'], 'Fungus1_13': ['Fungus1_13[right1]', 'Fungus1_13[left1]'], 'Fungus1_14': ['Fungus1_14[left1]'], 'Fungus1_15': ['Fungus1_15[door1]', 'Fungus1_15[right1]'], 'Fungus1_16_alt': ['Fungus1_16_alt[right1]'], 'Fungus1_17': ['Fungus1_17[left1]', 'Fungus1_17[right1]'], 'Fungus1_19': ['Fungus1_19[left1]', 'Fungus1_19[right1]', 'Fungus1_19[bot1]'], 'Fungus1_20_v02': ['Fungus1_20_v02[bot1]', 'Fungus1_20_v02[bot2]', 'Fungus1_20_v02[right1]'], 'Fungus1_21': ['Fungus1_21[bot1]', 'Fungus1_21[top1]', 'Fungus1_21[left1]', 'Fungus1_21[right1]'], 'Fungus1_22': ['Fungus1_22[bot1]', 'Fungus1_22[top1]', 'Fungus1_22[left1]'], 'Fungus1_23': ['Fungus1_23[left1]', 'Fungus1_23[right1]'], 'Fungus1_24': ['Fungus1_24[left1]'], 'Fungus1_25': ['Fungus1_25[right1]', 'Fungus1_25[left1]'], 'Fungus1_26': ['Fungus1_26[right1]', 'Fungus1_26[left1]', 'Fungus1_26[door_SlugShrine]'], 'Fungus1_28': ['Fungus1_28[left1]', 'Fungus1_28[left2]'], 'Fungus1_29': ['Fungus1_29[left1]', 'Fungus1_29[right1]'], 'Fungus1_30': ['Fungus1_30[top1]', 'Fungus1_30[top3]', 'Fungus1_30[left1]', 'Fungus1_30[right1]'], 'Fungus1_31': ['Fungus1_31[top1]', 'Fungus1_31[bot1]', 'Fungus1_31[right1]'], 'Fungus1_32': ['Fungus1_32[bot1]', 'Fungus1_32[top1]', 'Fungus1_32[left1]'], 'Fungus1_34': ['Fungus1_34[door1]', 'Fungus1_34[left1]'], 'Fungus1_35': ['Fungus1_35[left1]', 'Fungus1_35[right1]'], 'Fungus1_36': ['Fungus1_36[left1]'], 'Fungus1_37': ['Fungus1_37[left1]'], 'Fungus1_Slug': ['Fungus1_Slug[right1]'], 'Room_Slug_Shrine': ['Room_Slug_Shrine[left1]'], 'Room_nailmaster_02': ['Room_nailmaster_02[left1]'], 'Fungus3_01': ['Fungus3_01[top1]', 'Fungus3_01[right1]', 'Fungus3_01[left1]', 'Fungus3_01[right2]'], 'Fungus3_02': ['Fungus3_02[left1]', 'Fungus3_02[left2]', 'Fungus3_02[left3]', 'Fungus3_02[right1]', 'Fungus3_02[right2]'], 'Fungus3_03': ['Fungus3_03[right1]', 'Fungus3_03[left1]'], 'Fungus3_24': ['Fungus3_24[right1]', 'Fungus3_24[left1]', 'Fungus3_24[top1]'], 'Fungus3_25': ['Fungus3_25[right1]', 'Fungus3_25[left1]'], 'Fungus3_25b': ['Fungus3_25b[right1]', 'Fungus3_25b[left1]'], 'Fungus3_26': ['Fungus3_26[top1]', 'Fungus3_26[left1]', 'Fungus3_26[left2]', 'Fungus3_26[left3]', 'Fungus3_26[right1]'], 'Fungus3_27': ['Fungus3_27[left1]', 'Fungus3_27[right1]'], 'Fungus3_28': ['Fungus3_28[right1]'], 'Fungus3_30': ['Fungus3_30[bot1]'], 'Fungus3_35': ['Fungus3_35[right1]'], 'Fungus3_44': ['Fungus3_44[bot1]', 'Fungus3_44[door1]', 'Fungus3_44[right1]'], 'Fungus3_47': ['Fungus3_47[left1]', 'Fungus3_47[right1]', 'Fungus3_47[door1]'], 'Room_Fungus_Shaman': ['Room_Fungus_Shaman[left1]'], 'Fungus3_archive': ['Fungus3_archive[left1]', 'Fungus3_archive[bot1]'], 'Fungus3_archive_02': ['Fungus3_archive_02[top1]'], 'Fungus2_01': ['Fungus2_01[left1]', 'Fungus2_01[left2]', 'Fungus2_01[left3]', 'Fungus2_01[right1]'], 'Fungus2_02': ['Fungus2_02[right1]'], 'Fungus2_34': ['Fungus2_34[right1]'], 'Fungus2_03': ['Fungus2_03[left1]', 'Fungus2_03[bot1]', 'Fungus2_03[right1]'], 'Fungus2_04': ['Fungus2_04[top1]', 'Fungus2_04[right1]', 'Fungus2_04[left1]', 'Fungus2_04[right2]'], 'Fungus2_05': ['Fungus2_05[bot1]', 'Fungus2_05[right1]'], 'Fungus2_06': ['Fungus2_06[top1]', 'Fungus2_06[left1]', 'Fungus2_06[left2]', 'Fungus2_06[right1]', 'Fungus2_06[right2]'], 'Fungus2_07': ['Fungus2_07[left1]', 'Fungus2_07[right1]'], 'Fungus2_08': ['Fungus2_08[left1]', 'Fungus2_08[left2]', 'Fungus2_08[right1]'], 'Fungus2_09': ['Fungus2_09[left1]', 'Fungus2_09[right1]'], 'Fungus2_10': ['Fungus2_10[right1]', 'Fungus2_10[right2]', 'Fungus2_10[bot1]'], 'Fungus2_11': ['Fungus2_11[top1]', 'Fungus2_11[left1]', 'Fungus2_11[left2]', 'Fungus2_11[right1]'], 'Fungus2_12': ['Fungus2_12[left1]', 'Fungus2_12[bot1]'], 'Fungus2_13': ['Fungus2_13[top1]', 'Fungus2_13[left2]', 'Fungus2_13[left3]'], 'Fungus2_14': ['Fungus2_14[top1]', 'Fungus2_14[right1]', 'Fungus2_14[bot3]'], 'Fungus2_15': ['Fungus2_15[top3]', 'Fungus2_15[right1]', 'Fungus2_15[left1]'], 'Fungus2_17': ['Fungus2_17[left1]', 'Fungus2_17[right1]', 'Fungus2_17[bot1]'], 'Fungus2_18': ['Fungus2_18[right1]', 'Fungus2_18[bot1]', 'Fungus2_18[top1]'], 'Fungus2_19': ['Fungus2_19[top1]', 'Fungus2_19[left1]'], 'Fungus2_20': ['Fungus2_20[right1]', 'Fungus2_20[left1]'], 'Fungus2_21': ['Fungus2_21[right1]', 'Fungus2_21[left1]'], 'Fungus2_23': ['Fungus2_23[right1]', 'Fungus2_23[right2]'], 'Fungus2_26': ['Fungus2_26[left1]'], 'Fungus2_28': ['Fungus2_28[left1]', 'Fungus2_28[left2]'], 'Fungus2_29': ['Fungus2_29[right1]', 'Fungus2_29[bot1]'], 'Fungus2_30': ['Fungus2_30[bot1]', 'Fungus2_30[top1]'], 'Fungus2_31': ['Fungus2_31[left1]'], 'Fungus2_32': ['Fungus2_32[left1]'], 'Fungus2_33': ['Fungus2_33[right1]', 'Fungus2_33[left1]'], 'Deepnest_01': ['Deepnest_01[right1]', 'Deepnest_01[bot1]', 'Deepnest_01[bot2]', 'Deepnest_01[left1]'], 'Deepnest_01b': ['Deepnest_01b[top1]', 'Deepnest_01b[top2]', 'Deepnest_01b[right1]', 'Deepnest_01b[right2]', 'Deepnest_01b[bot1]'], 'Deepnest_02': ['Deepnest_02[left1]', 'Deepnest_02[left2]', 'Deepnest_02[right1]'], 'Deepnest_03': ['Deepnest_03[right1]', 'Deepnest_03[left1]', 'Deepnest_03[top1]', 'Deepnest_03[left2]'], 'Deepnest_09': ['Deepnest_09[left1]'], 'Deepnest_10': ['Deepnest_10[right1]', 'Deepnest_10[right2]', 'Deepnest_10[right3]', 'Deepnest_10[door1]', 'Deepnest_10[door2]'], 'Room_spider_small': ['Room_spider_small[left1]'], 'Deepnest_Spider_Town': ['Deepnest_Spider_Town[left1]'], 'Deepnest_14': ['Deepnest_14[right1]', 'Deepnest_14[left1]', 'Deepnest_14[bot1]', 'Deepnest_14[bot2]'], 'Deepnest_16': ['Deepnest_16[left1]', 'Deepnest_16[bot1]'], 'Deepnest_17': ['Deepnest_17[left1]', 'Deepnest_17[right1]', 'Deepnest_17[top1]', 'Deepnest_17[bot1]'], 'Fungus2_25': ['Fungus2_25[top1]', 'Fungus2_25[top2]', 'Fungus2_25[right1]'], 'Deepnest_26': ['Deepnest_26[left1]', 'Deepnest_26[left2]', 'Deepnest_26[right1]', 'Deepnest_26[bot1]'], 'Deepnest_26b': ['Deepnest_26b[right2]', 'Deepnest_26b[right1]'], 'Deepnest_30': ['Deepnest_30[left1]', 'Deepnest_30[top1]', 'Deepnest_30[right1]'], 'Deepnest_31': ['Deepnest_31[right1]', 'Deepnest_31[right2]'], 'Deepnest_32': ['Deepnest_32[left1]'], 'Deepnest_33': ['Deepnest_33[top1]', 'Deepnest_33[top2]', 'Deepnest_33[bot1]'], 'Deepnest_34': ['Deepnest_34[left1]', 'Deepnest_34[right1]', 'Deepnest_34[top1]'], 'Deepnest_35': ['Deepnest_35[left1]', 'Deepnest_35[top1]', 'Deepnest_35[bot1]'], 'Deepnest_36': ['Deepnest_36[left1]'], 'Deepnest_37': ['Deepnest_37[left1]', 'Deepnest_37[right1]', 'Deepnest_37[top1]', 'Deepnest_37[bot1]'], 'Deepnest_38': ['Deepnest_38[bot1]'], 'Deepnest_39': ['Deepnest_39[left1]', 'Deepnest_39[top1]', 'Deepnest_39[door1]', 'Deepnest_39[right1]'], 'Deepnest_40': ['Deepnest_40[right1]'], 'Deepnest_41': ['Deepnest_41[right1]', 'Deepnest_41[left1]', 'Deepnest_41[left2]'], 'Deepnest_42': ['Deepnest_42[bot1]', 'Deepnest_42[left1]', 'Deepnest_42[top1]'], 'Deepnest_43': ['Deepnest_43[bot1]', 'Deepnest_43[left1]', 'Deepnest_43[right1]'], 'Deepnest_44': ['Deepnest_44[top1]'], 'Deepnest_45_v02': ['Deepnest_45_v02[left1]'], 'Room_Mask_Maker': ['Room_Mask_Maker[right1]'], 'Deepnest_East_01': ['Deepnest_East_01[bot1]', 'Deepnest_East_01[right1]', 'Deepnest_East_01[top1]'], 'Deepnest_East_02': ['Deepnest_East_02[bot1]', 'Deepnest_East_02[bot2]', 'Deepnest_East_02[top1]', 'Deepnest_East_02[right1]'], 'Deepnest_East_03': ['Deepnest_East_03[left1]', 'Deepnest_East_03[left2]', 'Deepnest_East_03[top1]', 'Deepnest_East_03[top2]', 'Deepnest_East_03[right1]', 'Deepnest_East_03[right2]'], 'Deepnest_East_04': ['Deepnest_East_04[left1]', 'Deepnest_East_04[left2]', 'Deepnest_East_04[right2]', 'Deepnest_East_04[right1]'], 'Deepnest_East_06': ['Deepnest_East_06[top1]', 'Deepnest_East_06[left1]', 'Deepnest_East_06[bot1]', 'Deepnest_East_06[door1]', 'Deepnest_East_06[right1]'], 'Deepnest_East_07': ['Deepnest_East_07[bot1]', 'Deepnest_East_07[bot2]', 'Deepnest_East_07[left1]', 'Deepnest_East_07[left2]', 'Deepnest_East_07[right1]'], 'Deepnest_East_08': ['Deepnest_East_08[right1]', 'Deepnest_East_08[top1]'], 'Deepnest_East_09': ['Deepnest_East_09[right1]', 'Deepnest_East_09[left1]', 'Deepnest_East_09[bot1]'], 'Deepnest_East_10': ['Deepnest_East_10[left1]'], 'Deepnest_East_11': ['Deepnest_East_11[right1]', 'Deepnest_East_11[left1]', 'Deepnest_East_11[top1]', 'Deepnest_East_11[bot1]'], 'Deepnest_East_12': ['Deepnest_East_12[right1]', 'Deepnest_East_12[left1]'], 'Deepnest_East_13': ['Deepnest_East_13[bot1]'], 'Deepnest_East_14': ['Deepnest_East_14[top2]', 'Deepnest_East_14[left1]', 'Deepnest_East_14[door1]'], 'Deepnest_East_14b': ['Deepnest_East_14b[right1]', 'Deepnest_East_14b[top1]'], 'Deepnest_East_15': ['Deepnest_East_15[left1]'], 'Deepnest_East_16': ['Deepnest_East_16[left1]', 'Deepnest_East_16[bot1]'], 'Deepnest_East_17': ['Deepnest_East_17[left1]'], 'Deepnest_East_18': ['Deepnest_East_18[top1]', 'Deepnest_East_18[bot1]', 'Deepnest_East_18[right2]'], 'Room_nailmaster_03': ['Room_nailmaster_03[left1]'], 'Deepnest_East_Hornet': ['Deepnest_East_Hornet[left1]', 'Deepnest_East_Hornet[left2]'], 'Room_Wyrm': ['Room_Wyrm[right1]'], 'GG_Lurker': ['GG_Lurker[left1]'], 'Hive_01': ['Hive_01[left1]', 'Hive_01[right1]', 'Hive_01[right2]'], 'Hive_02': ['Hive_02[left1]', 'Hive_02[left2]', 'Hive_02[left3]'], 'Hive_03_c': ['Hive_03_c[left1]', 'Hive_03_c[right2]', 'Hive_03_c[right3]', 'Hive_03_c[top1]'], 'Hive_03': ['Hive_03[bot1]', 'Hive_03[right1]', 'Hive_03[top1]'], 'Hive_04': ['Hive_04[left1]', 'Hive_04[left2]', 'Hive_04[right1]'], 'Hive_05': ['Hive_05[left1]'], 'Room_Colosseum_01': ['Room_Colosseum_01[left1]', 'Room_Colosseum_01[bot1]'], 'Room_Colosseum_02': ['Room_Colosseum_02[top1]', 'Room_Colosseum_02[top2]'], 'Room_Colosseum_Spectate': ['Room_Colosseum_Spectate[bot1]', 'Room_Colosseum_Spectate[right1]'], 'Abyss_01': ['Abyss_01[left1]', 'Abyss_01[left2]', 'Abyss_01[left3]', 'Abyss_01[right1]', 'Abyss_01[right2]'], 'Abyss_02': ['Abyss_02[right1]', 'Abyss_02[bot1]'], 'Abyss_03': ['Abyss_03[bot1]', 'Abyss_03[bot2]', 'Abyss_03[top1]'], 'Abyss_03_b': ['Abyss_03_b[left1]'], 'Abyss_03_c': ['Abyss_03_c[right1]', 'Abyss_03_c[top1]'], 'Abyss_04': ['Abyss_04[top1]', 'Abyss_04[left1]', 'Abyss_04[bot1]', 'Abyss_04[right1]'], 'Abyss_05': ['Abyss_05[left1]', 'Abyss_05[right1]'], 'Abyss_06_Core': ['Abyss_06_Core[top1]', 'Abyss_06_Core[left1]', 'Abyss_06_Core[left3]', 'Abyss_06_Core[right2]', 'Abyss_06_Core[bot1]'], 'Abyss_08': ['Abyss_08[right1]'], 'Abyss_09': ['Abyss_09[right1]', 'Abyss_09[right2]', 'Abyss_09[right3]', 'Abyss_09[left1]'], 'Abyss_10': ['Abyss_10[left1]', 'Abyss_10[left2]'], 'Abyss_12': ['Abyss_12[right1]'], 'Abyss_15': ['Abyss_15[top1]'], 'Abyss_16': ['Abyss_16[left1]', 'Abyss_16[right1]'], 'Abyss_17': ['Abyss_17[top1]'], 'Abyss_18': ['Abyss_18[left1]', 'Abyss_18[right1]'], 'Abyss_19': ['Abyss_19[left1]', 'Abyss_19[right1]', 'Abyss_19[bot1]', 'Abyss_19[bot2]'], 'Abyss_20': ['Abyss_20[top1]', 'Abyss_20[top2]'], 'Abyss_21': ['Abyss_21[right1]'], 'Abyss_22': ['Abyss_22[left1]'], 'Abyss_Lighthouse_room': ['Abyss_Lighthouse_room[left1]'], 'Waterways_01': ['Waterways_01[top1]', 'Waterways_01[left1]', 'Waterways_01[right1]', 'Waterways_01[bot1]'], 'Waterways_02': ['Waterways_02[top1]', 'Waterways_02[top2]', 'Waterways_02[top3]', 'Waterways_02[bot1]', 'Waterways_02[bot2]'], 'Waterways_03': ['Waterways_03[left1]'], 'Waterways_04': ['Waterways_04[bot1]', 'Waterways_04[right1]', 'Waterways_04[left1]', 'Waterways_04[left2]'], 'Waterways_04b': ['Waterways_04b[right1]', 'Waterways_04b[right2]', 'Waterways_04b[left1]'], 'Waterways_05': ['Waterways_05[right1]', 'Waterways_05[bot1]', 'Waterways_05[bot2]'], 'Waterways_06': ['Waterways_06[right1]', 'Waterways_06[top1]'], 'Waterways_07': ['Waterways_07[right1]', 'Waterways_07[right2]', 'Waterways_07[left1]', 'Waterways_07[door1]', 'Waterways_07[top1]'], 'Waterways_08': ['Waterways_08[top1]', 'Waterways_08[left1]', 'Waterways_08[left2]'], 'Waterways_09': ['Waterways_09[right1]', 'Waterways_09[left1]'], 'Waterways_12': ['Waterways_12[right1]'], 'Waterways_13': ['Waterways_13[left1]', 'Waterways_13[left2]'], 'Waterways_14': ['Waterways_14[bot1]', 'Waterways_14[bot2]'], 'Waterways_15': ['Waterways_15[top1]'], 'GG_Pipeway': ['GG_Pipeway[right1]', 'GG_Pipeway[left1]'], 'GG_Waterways': ['GG_Waterways[right1]', 'GG_Waterways[door1]'], 'Room_GG_Shortcut': ['Room_GG_Shortcut[left1]', 'Room_GG_Shortcut[top1]'], 'Ruins1_01': ['Ruins1_01[left1]', 'Ruins1_01[top1]', 'Ruins1_01[bot1]'], 'Ruins1_02': ['Ruins1_02[top1]', 'Ruins1_02[bot1]'], 'Ruins1_03': ['Ruins1_03[top1]', 'Ruins1_03[left1]', 'Ruins1_03[right1]', 'Ruins1_03[right2]'], 'Ruins1_04': ['Ruins1_04[right1]', 'Ruins1_04[door1]', 'Ruins1_04[bot1]'], 'Ruins1_05b': ['Ruins1_05b[left1]', 'Ruins1_05b[top1]', 'Ruins1_05b[bot1]', 'Ruins1_05b[right1]'], 'Ruins1_05c': ['Ruins1_05c[left2]', 'Ruins1_05c[bot1]', 'Ruins1_05c[top1]', 'Ruins1_05c[top2]', 'Ruins1_05c[top3]'], 'Ruins1_05': ['Ruins1_05[bot1]', 'Ruins1_05[bot2]', 'Ruins1_05[bot3]', 'Ruins1_05[right1]', 'Ruins1_05[right2]', 'Ruins1_05[top1]'], 'Ruins1_06': ['Ruins1_06[left1]', 'Ruins1_06[right1]'], 'Ruins1_09': ['Ruins1_09[top1]', 'Ruins1_09[left1]'], 'Ruins1_17': ['Ruins1_17[top1]', 'Ruins1_17[right1]', 'Ruins1_17[bot1]'], 'Ruins1_18': ['Ruins1_18[left1]', 'Ruins1_18[right1]', 'Ruins1_18[right2]'], 'Ruins1_23': ['Ruins1_23[top1]', 'Ruins1_23[right1]', 'Ruins1_23[right2]', 'Ruins1_23[bot1]', 'Ruins1_23[left1]'], 'Ruins1_24': ['Ruins1_24[left1]', 'Ruins1_24[right1]', 'Ruins1_24[left2]', 'Ruins1_24[right2]'], 'Ruins1_25': ['Ruins1_25[left1]', 'Ruins1_25[left2]', 'Ruins1_25[left3]'], 'Ruins1_27': ['Ruins1_27[left1]', 'Ruins1_27[right1]'], 'Ruins1_28': ['Ruins1_28[left1]', 'Ruins1_28[right1]', 'Ruins1_28[bot1]'], 'Ruins1_29': ['Ruins1_29[left1]'], 'Ruins1_30': ['Ruins1_30[left1]', 'Ruins1_30[left2]', 'Ruins1_30[bot1]', 'Ruins1_30[right1]'], 'Ruins1_31': ['Ruins1_31[bot1]', 'Ruins1_31[left1]', 'Ruins1_31[left2]', 'Ruins1_31[left3]', 'Ruins1_31[right1]'], 'Ruins1_31b': ['Ruins1_31b[right1]', 'Ruins1_31b[right2]'], 'Ruins1_32': ['Ruins1_32[right1]', 'Ruins1_32[right2]'], 'Room_nailsmith': ['Room_nailsmith[left1]'], 'Ruins2_01': ['Ruins2_01[top1]', 'Ruins2_01[bot1]', 'Ruins2_01[left2]'], 'Ruins2_01_b': ['Ruins2_01_b[top1]', 'Ruins2_01_b[left1]', 'Ruins2_01_b[right1]'], 'Ruins2_03b': ['Ruins2_03b[top1]', 'Ruins2_03b[top2]', 'Ruins2_03b[left1]', 'Ruins2_03b[bot1]'], 'Ruins2_03': ['Ruins2_03[top1]', 'Ruins2_03[bot1]', 'Ruins2_03[bot2]'], 'Ruins2_04': ['Ruins2_04[left1]', 'Ruins2_04[left2]', 'Ruins2_04[right1]', 'Ruins2_04[right2]', 'Ruins2_04[door_Ruin_House_01]', 'Ruins2_04[door_Ruin_House_02]', 'Ruins2_04[door_Ruin_House_03]', 'Ruins2_04[door_Ruin_Elevator]'], 'Ruins2_05': ['Ruins2_05[left1]', 'Ruins2_05[top1]', 'Ruins2_05[bot1]'], 'Ruins2_06': ['Ruins2_06[left1]', 'Ruins2_06[left2]', 'Ruins2_06[right1]', 'Ruins2_06[right2]', 'Ruins2_06[top1]'], 'Ruins2_07': ['Ruins2_07[right1]', 'Ruins2_07[left1]', 'Ruins2_07[top1]'], 'Ruins2_08': ['Ruins2_08[left1]'], 'Ruins2_09': ['Ruins2_09[bot1]'], 'Ruins2_10': ['Ruins2_10[right1]', 'Ruins2_10[left1]'], 'Ruins2_10b': ['Ruins2_10b[right1]', 'Ruins2_10b[right2]', 'Ruins2_10b[left1]'], 'Ruins2_11_b': ['Ruins2_11_b[right1]', 'Ruins2_11_b[left1]', 'Ruins2_11_b[bot1]'], 'Ruins2_11': ['Ruins2_11[right1]'], 'Ruins2_Watcher_Room': ['Ruins2_Watcher_Room[bot1]'], 'Ruins_House_01': ['Ruins_House_01[left1]'], 'Ruins_House_02': ['Ruins_House_02[left1]'], 'Ruins_House_03': ['Ruins_House_03[left1]', 'Ruins_House_03[left2]'], 'Ruins_Elevator': ['Ruins_Elevator[left1]', 'Ruins_Elevator[left2]'], 'Ruins_Bathhouse': ['Ruins_Bathhouse[door1]', 'Ruins_Bathhouse[right1]'], 'RestingGrounds_02': ['RestingGrounds_02[right1]', 'RestingGrounds_02[left1]', 'RestingGrounds_02[bot1]', 'RestingGrounds_02[top1]'], 'RestingGrounds_04': ['RestingGrounds_04[left1]', 'RestingGrounds_04[right1]'], 'RestingGrounds_05': ['RestingGrounds_05[left1]', 'RestingGrounds_05[left2]', 'RestingGrounds_05[left3]', 'RestingGrounds_05[right1]', 'RestingGrounds_05[right2]', 'RestingGrounds_05[bot1]'], 'RestingGrounds_06': ['RestingGrounds_06[left1]', 'RestingGrounds_06[right1]', 'RestingGrounds_06[top1]'], 'RestingGrounds_07': ['RestingGrounds_07[right1]'], 'RestingGrounds_08': ['RestingGrounds_08[left1]'], 'RestingGrounds_09': ['RestingGrounds_09[left1]'], 'RestingGrounds_10': ['RestingGrounds_10[left1]', 'RestingGrounds_10[top1]', 'RestingGrounds_10[top2]'], 'RestingGrounds_12': ['RestingGrounds_12[bot1]', 'RestingGrounds_12[door_Mansion]'], 'RestingGrounds_17': ['RestingGrounds_17[right1]'], 'Room_Mansion': ['Room_Mansion[left1]'], 'Mines_01': ['Mines_01[bot1]', 'Mines_01[left1]'], 'Mines_02': ['Mines_02[top1]', 'Mines_02[top2]', 'Mines_02[left1]', 'Mines_02[right1]'], 'Mines_03': ['Mines_03[right1]', 'Mines_03[bot1]', 'Mines_03[top1]'], 'Mines_04': ['Mines_04[right1]', 'Mines_04[top1]', 'Mines_04[left1]', 'Mines_04[left2]', 'Mines_04[left3]'], 'Mines_05': ['Mines_05[right1]', 'Mines_05[top1]', 'Mines_05[bot1]', 'Mines_05[left1]', 'Mines_05[left2]'], 'Mines_06': ['Mines_06[right1]', 'Mines_06[left1]'], 'Mines_07': ['Mines_07[right1]', 'Mines_07[left1]'], 'Mines_10': ['Mines_10[right1]', 'Mines_10[left1]', 'Mines_10[bot1]'], 'Mines_11': ['Mines_11[right1]', 'Mines_11[top1]', 'Mines_11[bot1]'], 'Mines_13': ['Mines_13[right1]', 'Mines_13[top1]', 'Mines_13[bot1]'], 'Mines_16': ['Mines_16[top1]'], 'Mines_17': ['Mines_17[right1]', 'Mines_17[left1]'], 'Mines_18': ['Mines_18[top1]', 'Mines_18[left1]', 'Mines_18[right1]'], 'Mines_19': ['Mines_19[left1]', 'Mines_19[right1]'], 'Mines_20': ['Mines_20[left1]', 'Mines_20[left2]', 'Mines_20[left3]', 'Mines_20[bot1]', 'Mines_20[right1]', 'Mines_20[right2]'], 'Mines_23': ['Mines_23[left1]', 'Mines_23[right1]', 'Mines_23[right2]', 'Mines_23[top1]'], 'Mines_24': ['Mines_24[left1]'], 'Mines_25': ['Mines_25[left1]', 'Mines_25[top1]'], 'Mines_28': ['Mines_28[left1]', 'Mines_28[bot1]', 'Mines_28[door1]'], 'Mines_29': ['Mines_29[left1]', 'Mines_29[right1]', 'Mines_29[right2]'], 'Mines_30': ['Mines_30[left1]', 'Mines_30[right1]'], 'Mines_31': ['Mines_31[left1]'], 'Mines_32': ['Mines_32[bot1]'], 'Mines_33': ['Mines_33[right1]', 'Mines_33[left1]'], 'Mines_34': ['Mines_34[bot1]', 'Mines_34[bot2]', 'Mines_34[left1]'], 'Mines_35': ['Mines_35[left1]'], 'Mines_36': ['Mines_36[right1]'], 'Mines_37': ['Mines_37[bot1]', 'Mines_37[top1]'], 'Fungus3_04': ['Fungus3_04[left1]', 'Fungus3_04[left2]', 'Fungus3_04[right1]', 'Fungus3_04[right2]'], 'Fungus3_05': ['Fungus3_05[left1]', 'Fungus3_05[right1]', 'Fungus3_05[right2]'], 'Fungus3_08': ['Fungus3_08[left1]', 'Fungus3_08[right1]', 'Fungus3_08[top1]'], 'Fungus3_10': ['Fungus3_10[top1]', 'Fungus3_10[bot1]'], 'Fungus3_11': ['Fungus3_11[left1]', 'Fungus3_11[left2]', 'Fungus3_11[right1]'], 'Fungus3_13': ['Fungus3_13[left1]', 'Fungus3_13[left2]', 'Fungus3_13[left3]', 'Fungus3_13[bot1]', 'Fungus3_13[right1]'], 'Fungus3_21': ['Fungus3_21[right1]', 'Fungus3_21[top1]'], 'Fungus3_22': ['Fungus3_22[right1]', 'Fungus3_22[left1]', 'Fungus3_22[bot1]'], 'Fungus3_23': ['Fungus3_23[right1]', 'Fungus3_23[left1]'], 'Fungus3_34': ['Fungus3_34[right1]', 'Fungus3_34[left1]', 'Fungus3_34[top1]'], 'Fungus3_39': ['Fungus3_39[right1]', 'Fungus3_39[left1]'], 'Fungus3_40': ['Fungus3_40[right1]', 'Fungus3_40[top1]'], 'Fungus3_48': ['Fungus3_48[right1]', 'Fungus3_48[right2]', 'Fungus3_48[door1]', 'Fungus3_48[bot1]'], 'Fungus3_49': ['Fungus3_49[right1]'], 'Fungus3_50': ['Fungus3_50[right1]'], 'Room_Queen': ['Room_Queen[left1]'], 'Cliffs_01': ['Cliffs_01[right1]', 'Cliffs_01[right2]', 'Cliffs_01[right3]', 'Cliffs_01[right4]'], 'Cliffs_02': ['Cliffs_02[right1]', 'Cliffs_02[bot1]', 'Cliffs_02[bot2]', 'Cliffs_02[door1]', 'Cliffs_02[left1]', 'Cliffs_02[left2]'], 'Cliffs_03': ['Cliffs_03[right1]'], 'Cliffs_04': ['Cliffs_04[right1]', 'Cliffs_04[left1]'], 'Cliffs_05': ['Cliffs_05[left1]'], 'Cliffs_06': ['Cliffs_06[left1]'], 'Room_nailmaster': ['Room_nailmaster[left1]'], 'White_Palace_01': ['White_Palace_01[left1]', 'White_Palace_01[right1]', 'White_Palace_01[top1]'], 'White_Palace_02': ['White_Palace_02[left1]'], 'White_Palace_03_hub': ['White_Palace_03_hub[left1]', 'White_Palace_03_hub[left2]', 'White_Palace_03_hub[right1]', 'White_Palace_03_hub[top1]', 'White_Palace_03_hub[bot1]'], 'White_Palace_04': ['White_Palace_04[top1]', 'White_Palace_04[right2]'], 'White_Palace_05': ['White_Palace_05[left1]', 'White_Palace_05[left2]', 'White_Palace_05[right1]', 'White_Palace_05[right2]'], 'White_Palace_06': ['White_Palace_06[left1]', 'White_Palace_06[top1]', 'White_Palace_06[bot1]'], 'White_Palace_07': ['White_Palace_07[top1]', 'White_Palace_07[bot1]'], 'White_Palace_08': ['White_Palace_08[left1]', 'White_Palace_08[right1]'], 'White_Palace_09': ['White_Palace_09[right1]'], 'White_Palace_11': ['White_Palace_11[door2]'], 'White_Palace_12': ['White_Palace_12[right1]', 'White_Palace_12[bot1]'], 'White_Palace_13': ['White_Palace_13[right1]', 'White_Palace_13[left1]', 'White_Palace_13[left2]', 'White_Palace_13[left3]'], 'White_Palace_14': ['White_Palace_14[bot1]', 'White_Palace_14[right1]'], 'White_Palace_15': ['White_Palace_15[left1]', 'White_Palace_15[right1]', 'White_Palace_15[right2]'], 'White_Palace_16': ['White_Palace_16[left1]', 'White_Palace_16[left2]'], 'White_Palace_17': ['White_Palace_17[right1]', 'White_Palace_17[bot1]'], 'White_Palace_18': ['White_Palace_18[top1]', 'White_Palace_18[right1]'], 'White_Palace_19': ['White_Palace_19[top1]', 'White_Palace_19[left1]'], 'White_Palace_20': ['White_Palace_20[bot1]']} +item_effects = {'Lurien': {'DREAMER': 1}, 'Monomon': {'DREAMER': 1}, 'Herrah': {'DREAMER': 1}, 'Dreamer': {'DREAMER': 1}, 'Mothwing_Cloak': {'LEFTDASH': 1, 'RIGHTDASH': 1}, 'Mantis_Claw': {'LEFTCLAW': 1, 'RIGHTCLAW': 1}, 'Crystal_Heart': {'LEFTSUPERDASH': 1, 'RIGHTSUPERDASH': 1}, 'Monarch_Wings': {'WINGS': 1}, 'Shade_Cloak': {'LEFTDASH': 1, 'RIGHTDASH': 1}, "Isma's_Tear": {'ACID': 1}, 'Dream_Nail': {'DREAMNAIL': 1}, 'Dream_Gate': {'DREAMNAIL': 1}, 'Awoken_Dream_Nail': {'DREAMNAIL': 1}, 'Vengeful_Spirit': {'FIREBALL': 1, 'SPELLS': 1}, 'Shade_Soul': {'FIREBALL': 1, 'SPELLS': 1}, 'Desolate_Dive': {'QUAKE': 1, 'SPELLS': 1}, 'Descending_Dark': {'QUAKE': 1, 'SPELLS': 1}, 'Howling_Wraiths': {'SCREAM': 1, 'SPELLS': 1}, 'Abyss_Shriek': {'SCREAM': 1, 'SPELLS': 1}, 'Cyclone_Slash': {'CYCLONE': 1}, 'Focus': {'FOCUS': 1}, 'Swim': {'SWIM': 1}, 'Gathering_Swarm': {'CHARMS': 1}, 'Wayward_Compass': {'CHARMS': 1}, 'Grubsong': {'CHARMS': 1}, 'Stalwart_Shell': {'CHARMS': 1}, 'Baldur_Shell': {'CHARMS': 1}, 'Fury_of_the_Fallen': {'CHARMS': 1}, 'Quick_Focus': {'CHARMS': 1}, 'Lifeblood_Heart': {'CHARMS': 1}, 'Lifeblood_Core': {'CHARMS': 1}, "Defender's_Crest": {'CHARMS': 1}, 'Flukenest': {'CHARMS': 1}, 'Thorns_of_Agony': {'CHARMS': 1}, 'Mark_of_Pride': {'CHARMS': 1}, 'Steady_Body': {'CHARMS': 1}, 'Heavy_Blow': {'CHARMS': 1}, 'Sharp_Shadow': {'CHARMS': 1}, 'Spore_Shroom': {'CHARMS': 1}, 'Longnail': {'CHARMS': 1}, 'Shaman_Stone': {'CHARMS': 1}, 'Soul_Catcher': {'CHARMS': 1}, 'Soul_Eater': {'CHARMS': 1}, 'Glowing_Womb': {'CHARMS': 1}, 'Fragile_Heart': {'CHARMS': 1}, 'Fragile_Greed': {'CHARMS': 1}, 'Fragile_Strength': {'CHARMS': 1}, "Nailmaster's_Glory": {'CHARMS': 1}, "Joni's_Blessing": {'CHARMS': 1}, 'Shape_of_Unn': {'CHARMS': 1}, 'Hiveblood': {'CHARMS': 1}, 'Dream_Wielder': {'CHARMS': 1}, 'Dashmaster': {'CHARMS': 1}, 'Quick_Slash': {'CHARMS': 1}, 'Spell_Twister': {'CHARMS': 1}, 'Deep_Focus': {'CHARMS': 1}, "Grubberfly's_Elegy": {'CHARMS': 1}, 'Queen_Fragment': {'CHARMS': 0.5, 'WHITEFRAGMENT': 1}, 'King_Fragment': {'CHARMS': 0.5, 'WHITEFRAGMENT': 1}, 'Void_Heart': {'CHARMS': 0.5, 'WHITEFRAGMENT': 1}, 'Sprintmaster': {'CHARMS': 1}, 'Dreamshield': {'CHARMS': 1}, 'Weaversong': {'CHARMS': 1}, 'Grimmchild1': {'GRIMMCHILD': 1, 'CHARMS': 1}, 'Grimmchild2': {'GRIMMCHILD': 1, 'CHARMS': 1, 'FLAMES': 6, 'First_Grimmchild_Upgrade': 1}, 'City_Crest': {'CREST': 1}, 'Lumafly_Lantern': {'LANTERN': 1}, 'Tram_Pass': {'TRAM': 1}, 'Simple_Key': {'SIMPLE': 1}, "Shopkeeper's_Key": {'SHOPKEY': 1}, 'Elegant_Key': {'ELEGANT': 1}, 'Love_Key': {'LOVE': 1}, "King's_Brand": {'BRAND': 1}, 'Mask_Shard': {'MASKSHARDS': 1}, 'Double_Mask_Shard': {'MASKSHARDS': 2}, 'Full_Mask': {'MASKSHARDS': 4}, 'Vessel_Fragment': {'VESSELFRAGMENTS': 1}, 'Double_Vessel_Fragment': {'VESSELFRAGMENTS': 2}, 'Full_Soul_Vessel': {'VESSELFRAGMENTS': 3}, 'Charm_Notch': {'NOTCHES': 1}, 'Pale_Ore': {'PALEORE': 1}, 'Rancid_Egg': {'RANCIDEGGS': 1}, 'Whispering_Root-Crossroads': {'ESSENCE': 29}, 'Whispering_Root-Greenpath': {'ESSENCE': 44}, 'Whispering_Root-Leg_Eater': {'ESSENCE': 20}, 'Whispering_Root-Mantis_Village': {'ESSENCE': 18}, 'Whispering_Root-Deepnest': {'ESSENCE': 45}, 'Whispering_Root-Queens_Gardens': {'ESSENCE': 29}, 'Whispering_Root-Kingdoms_Edge': {'ESSENCE': 51}, 'Whispering_Root-Waterways': {'ESSENCE': 35}, 'Whispering_Root-City': {'ESSENCE': 28}, 'Whispering_Root-Resting_Grounds': {'ESSENCE': 20}, 'Whispering_Root-Spirits_Glade': {'ESSENCE': 34}, 'Whispering_Root-Crystal_Peak': {'ESSENCE': 21}, 'Whispering_Root-Howling_Cliffs': {'ESSENCE': 46}, 'Whispering_Root-Ancestral_Mound': {'ESSENCE': 42}, 'Whispering_Root-Hive': {'ESSENCE': 20}, 'Boss_Essence-Elder_Hu': {'ESSENCE': 100}, 'Boss_Essence-Xero': {'ESSENCE': 100}, 'Boss_Essence-Gorb': {'ESSENCE': 100}, 'Boss_Essence-Marmu': {'ESSENCE': 150}, 'Boss_Essence-No_Eyes': {'ESSENCE': 200}, 'Boss_Essence-Galien': {'ESSENCE': 200}, 'Boss_Essence-Markoth': {'ESSENCE': 250}, 'Boss_Essence-Failed_Champion': {'ESSENCE': 300}, 'Boss_Essence-Soul_Tyrant': {'ESSENCE': 300}, 'Boss_Essence-Lost_Kin': {'ESSENCE': 400}, 'Boss_Essence-White_Defender': {'ESSENCE': 300}, 'Boss_Essence-Grey_Prince_Zote': {'ESSENCE': 300}, 'Grub': {'GRUBS': 1}, 'Quill': {'QUILL': 1}, 'Crossroads_Stag': {'STAGS': 1}, 'Greenpath_Stag': {'STAGS': 1}, "Queen's_Station_Stag": {'STAGS': 1}, "Queen's_Gardens_Stag": {'STAGS': 1}, 'City_Storerooms_Stag': {'STAGS': 1}, "King's_Station_Stag": {'STAGS': 1}, 'Resting_Grounds_Stag': {'STAGS': 1}, 'Distant_Village_Stag': {'STAGS': 1}, 'Hidden_Station_Stag': {'STAGS': 1}, 'Stag_Nest_Stag': {'STAGS': 1}, 'Grimmkin_Flame': {'FLAMES': 1}, "Hunter's_Journal": {'JOURNAL': 1}, 'Right_Mantis_Claw': {'RIGHTCLAW': 1}, 'Left_Mantis_Claw': {'LEFTCLAW': 1}, 'Leftslash': {'LEFTSLASH': 1}, 'Rightslash': {'RIGHTSLASH': 1}, 'Upslash': {'UPSLASH': 1}, 'Downslash': {'DOWNSLASH': 1}, 'Left_Crystal_Heart': {'LEFTSUPERDASH': 1}, 'Right_Crystal_Heart': {'RIGHTSUPERDASH': 1}, 'Left_Mothwing_Cloak': {'LEFTDASH': 1}, 'Right_Mothwing_Cloak': {'RIGHTDASH': 1}} +items = {'Lurien': 'Dreamer', 'Monomon': 'Dreamer', 'Herrah': 'Dreamer', 'World_Sense': 'Dreamer', 'Dreamer': 'Fake', 'Mothwing_Cloak': 'Skill', 'Mantis_Claw': 'Skill', 'Crystal_Heart': 'Skill', 'Monarch_Wings': 'Skill', 'Shade_Cloak': 'Skill', "Isma's_Tear": 'Skill', 'Dream_Nail': 'Skill', 'Dream_Gate': 'Skill', 'Awoken_Dream_Nail': 'Skill', 'Vengeful_Spirit': 'Skill', 'Shade_Soul': 'Skill', 'Desolate_Dive': 'Skill', 'Descending_Dark': 'Skill', 'Howling_Wraiths': 'Skill', 'Abyss_Shriek': 'Skill', 'Cyclone_Slash': 'Skill', 'Dash_Slash': 'Skill', 'Great_Slash': 'Skill', 'Focus': 'Focus', 'Swim': 'Swim', 'Gathering_Swarm': 'Charm', 'Wayward_Compass': 'Charm', 'Grubsong': 'Charm', 'Stalwart_Shell': 'Charm', 'Baldur_Shell': 'Charm', 'Fury_of_the_Fallen': 'Charm', 'Quick_Focus': 'Charm', 'Lifeblood_Heart': 'Charm', 'Lifeblood_Core': 'Charm', "Defender's_Crest": 'Charm', 'Flukenest': 'Charm', 'Thorns_of_Agony': 'Charm', 'Mark_of_Pride': 'Charm', 'Steady_Body': 'Charm', 'Heavy_Blow': 'Charm', 'Sharp_Shadow': 'Charm', 'Spore_Shroom': 'Charm', 'Longnail': 'Charm', 'Shaman_Stone': 'Charm', 'Soul_Catcher': 'Charm', 'Soul_Eater': 'Charm', 'Glowing_Womb': 'Charm', 'Fragile_Heart': 'Charm', 'Unbreakable_Heart': 'Charm', 'Fragile_Greed': 'Charm', 'Unbreakable_Greed': 'Charm', 'Fragile_Strength': 'Charm', 'Unbreakable_Strength': 'Charm', "Nailmaster's_Glory": 'Charm', "Joni's_Blessing": 'Charm', 'Shape_of_Unn': 'Charm', 'Hiveblood': 'Charm', 'Dream_Wielder': 'Charm', 'Dashmaster': 'Charm', 'Quick_Slash': 'Charm', 'Spell_Twister': 'Charm', 'Deep_Focus': 'Charm', "Grubberfly's_Elegy": 'Charm', 'Queen_Fragment': 'Charm', 'King_Fragment': 'Charm', 'Void_Heart': 'Charm', 'Sprintmaster': 'Charm', 'Dreamshield': 'Charm', 'Weaversong': 'Charm', 'Grimmchild1': 'Charm', 'Grimmchild2': 'Charm', 'City_Crest': 'Key', 'Lumafly_Lantern': 'Key', 'Tram_Pass': 'Key', 'Simple_Key': 'Key', "Shopkeeper's_Key": 'Key', 'Elegant_Key': 'Key', 'Love_Key': 'Key', "King's_Brand": 'Key', 'Godtuner': 'Key', "Collector's_Map": 'Key', 'Mask_Shard': 'Mask', 'Double_Mask_Shard': 'Mask', 'Full_Mask': 'Mask', 'Vessel_Fragment': 'Vessel', 'Double_Vessel_Fragment': 'Vessel', 'Full_Soul_Vessel': 'Vessel', 'Charm_Notch': 'Notch', "Salubra's_Blessing": 'Notch', 'Pale_Ore': 'Ore', 'Geo_Chest-False_Knight': 'Geo', 'Geo_Chest-Soul_Master': 'Geo', 'Geo_Chest-Watcher_Knights': 'Geo', 'Geo_Chest-Greenpath': 'Geo', 'Geo_Chest-Mantis_Lords': 'Geo', 'Geo_Chest-Resting_Grounds': 'Geo', 'Geo_Chest-Crystal_Peak': 'Geo', 'Geo_Chest-Weavers_Den': 'Geo', 'Geo_Chest-Junk_Pit_1': 'JunkPitChest', 'Geo_Chest-Junk_Pit_2': 'JunkPitChest', 'Geo_Chest-Junk_Pit_3': 'JunkPitChest', 'Geo_Chest-Junk_Pit_5': 'JunkPitChest', 'Lumafly_Escape': 'JunkPitChest', 'One_Geo': 'Fake', 'Rancid_Egg': 'Egg', "Wanderer's_Journal": 'Relic', 'Hallownest_Seal': 'Relic', "King's_Idol": 'Relic', 'Arcane_Egg': 'Relic', 'Whispering_Root-Crossroads': 'Root', 'Whispering_Root-Greenpath': 'Root', 'Whispering_Root-Leg_Eater': 'Root', 'Whispering_Root-Mantis_Village': 'Root', 'Whispering_Root-Deepnest': 'Root', 'Whispering_Root-Queens_Gardens': 'Root', 'Whispering_Root-Kingdoms_Edge': 'Root', 'Whispering_Root-Waterways': 'Root', 'Whispering_Root-City': 'Root', 'Whispering_Root-Resting_Grounds': 'Root', 'Whispering_Root-Spirits_Glade': 'Root', 'Whispering_Root-Crystal_Peak': 'Root', 'Whispering_Root-Howling_Cliffs': 'Root', 'Whispering_Root-Ancestral_Mound': 'Root', 'Whispering_Root-Hive': 'Root', 'Boss_Essence-Elder_Hu': 'DreamWarrior', 'Boss_Essence-Xero': 'DreamWarrior', 'Boss_Essence-Gorb': 'DreamWarrior', 'Boss_Essence-Marmu': 'DreamWarrior', 'Boss_Essence-No_Eyes': 'DreamWarrior', 'Boss_Essence-Galien': 'DreamWarrior', 'Boss_Essence-Markoth': 'DreamWarrior', 'Boss_Essence-Failed_Champion': 'DreamBoss', 'Boss_Essence-Soul_Tyrant': 'DreamBoss', 'Boss_Essence-Lost_Kin': 'DreamBoss', 'Boss_Essence-White_Defender': 'DreamBoss', 'Boss_Essence-Grey_Prince_Zote': 'DreamBoss', 'Grub': 'Grub', 'Mimic_Grub': 'Mimic', 'Quill': 'Map', 'Crossroads_Map': 'Map', 'Greenpath_Map': 'Map', 'Fog_Canyon_Map': 'Map', 'Fungal_Wastes_Map': 'Map', 'Deepnest_Map': 'Map', 'Ancient_Basin_Map': 'Map', "Kingdom's_Edge_Map": 'Map', 'City_of_Tears_Map': 'Map', 'Royal_Waterways_Map': 'Map', 'Howling_Cliffs_Map': 'Map', 'Crystal_Peak_Map': 'Map', "Queen's_Gardens_Map": 'Map', 'Resting_Grounds_Map': 'Map', 'Dirtmouth_Stag': 'Stag', 'Crossroads_Stag': 'Stag', 'Greenpath_Stag': 'Stag', "Queen's_Station_Stag": 'Stag', "Queen's_Gardens_Stag": 'Stag', 'City_Storerooms_Stag': 'Stag', "King's_Station_Stag": 'Stag', 'Resting_Grounds_Stag': 'Stag', 'Distant_Village_Stag': 'Stag', 'Hidden_Station_Stag': 'Stag', 'Stag_Nest_Stag': 'Stag', 'Lifeblood_Cocoon_Small': 'Cocoon', 'Lifeblood_Cocoon_Large': 'Cocoon', 'Grimmkin_Flame': 'Flame', "Hunter's_Journal": 'Journal', 'Journal_Entry-Void_Tendrils': 'Journal', 'Journal_Entry-Charged_Lumafly': 'Journal', 'Journal_Entry-Goam': 'Journal', 'Journal_Entry-Garpede': 'Journal', 'Journal_Entry-Seal_of_Binding': 'Journal', 'Elevator_Pass': 'ElevatorPass', 'Left_Mothwing_Cloak': 'SplitCloak', 'Right_Mothwing_Cloak': 'SplitCloak', 'Split_Shade_Cloak': 'SplitCloak', 'Left_Mantis_Claw': 'SplitClaw', 'Right_Mantis_Claw': 'SplitClaw', 'Leftslash': 'CursedNail', 'Rightslash': 'CursedNail', 'Upslash': 'CursedNail', 'Downslash': 'CursedNail', 'Left_Crystal_Heart': 'SplitSuperdash', 'Right_Crystal_Heart': 'SplitSuperdash', 'Geo_Rock-Default': 'Rock', 'Geo_Rock-Deepnest': 'Rock', 'Geo_Rock-Abyss': 'Rock', 'Geo_Rock-GreenPath01': 'Rock', 'Geo_Rock-Outskirts': 'Rock', 'Geo_Rock-Outskirts420': 'Rock', 'Geo_Rock-GreenPath02': 'Rock', 'Geo_Rock-Fung01': 'Rock', 'Geo_Rock-Fung02': 'Rock', 'Geo_Rock-City': 'Rock', 'Geo_Rock-Hive': 'Rock', 'Geo_Rock-Mine': 'Rock', 'Geo_Rock-Grave02': 'Rock', 'Geo_Rock-Grave01': 'Rock', 'Boss_Geo-Massive_Moss_Charger': 'Boss_Geo', 'Boss_Geo-Gorgeous_Husk': 'Boss_Geo', 'Boss_Geo-Sanctum_Soul_Warrior': 'Boss_Geo', 'Boss_Geo-Elegant_Soul_Warrior': 'Boss_Geo', 'Boss_Geo-Crystal_Guardian': 'Boss_Geo', 'Boss_Geo-Enraged_Guardian': 'Boss_Geo', 'Boss_Geo-Gruz_Mother': 'Boss_Geo', 'Boss_Geo-Vengefly_King': 'Boss_Geo', 'Soul_Refill': 'Soul', 'Soul_Totem-A': 'Soul', 'Soul_Totem-B': 'Soul', 'Soul_Totem-C': 'Soul', 'Soul_Totem-D': 'Soul', 'Soul_Totem-E': 'Soul', 'Soul_Totem-F': 'Soul', 'Soul_Totem-G': 'Soul', 'Soul_Totem-Palace': 'Soul', 'Soul_Totem-Path_of_Pain': 'Soul', 'Lore_Tablet-City_Entrance': 'Lore', 'Lore_Tablet-Pleasure_House': 'Lore', 'Lore_Tablet-Sanctum_Entrance': 'Lore', 'Lore_Tablet-Sanctum_Past_Soul_Master': 'Lore', "Lore_Tablet-Watcher's_Spire": 'Lore', 'Lore_Tablet-Archives_Upper': 'Lore', 'Lore_Tablet-Archives_Left': 'Lore', 'Lore_Tablet-Archives_Right': 'Lore', "Lore_Tablet-Pilgrim's_Way_1": 'Lore', "Lore_Tablet-Pilgrim's_Way_2": 'Lore', 'Lore_Tablet-Mantis_Outskirts': 'Lore', 'Lore_Tablet-Mantis_Village': 'Lore', 'Lore_Tablet-Greenpath_Upper_Hidden': 'Lore', 'Lore_Tablet-Greenpath_Below_Toll': 'Lore', 'Lore_Tablet-Greenpath_Lifeblood': 'Lore', 'Lore_Tablet-Greenpath_Stag': 'Lore', 'Lore_Tablet-Greenpath_QG': 'Lore', 'Lore_Tablet-Greenpath_Lower_Hidden': 'Lore', 'Lore_Tablet-Dung_Defender': 'Lore', 'Lore_Tablet-Spore_Shroom': 'Lore', 'Lore_Tablet-Fungal_Wastes_Hidden': 'Lore', 'Lore_Tablet-Fungal_Wastes_Below_Shrumal_Ogres': 'Lore', 'Lore_Tablet-Fungal_Core': 'Lore', 'Lore_Tablet-Ancient_Basin': 'Lore', "Lore_Tablet-King's_Pass_Focus": 'Lore', "Lore_Tablet-King's_Pass_Fury": 'Lore', "Lore_Tablet-King's_Pass_Exit": 'Lore', 'Lore_Tablet-World_Sense': 'Lore', 'Lore_Tablet-Howling_Cliffs': 'Lore', "Lore_Tablet-Kingdom's_Edge": 'Lore', 'Lore_Tablet-Palace_Workshop': 'PalaceLore', 'Lore_Tablet-Palace_Throne': 'PalaceLore', 'Lore_Tablet-Path_of_Pain_Entrance': 'PalaceLore'} +location_to_region_lookup = {'Sly_1': 'Room_shop', 'Sly_2': 'Room_shop', 'Sly_3': 'Room_shop', 'Sly_4': 'Room_shop', 'Sly_5': 'Room_shop', 'Sly_6': 'Room_shop', 'Sly_7': 'Room_shop', 'Sly_8': 'Room_shop', 'Sly_9': 'Room_shop', 'Sly_10': 'Room_shop', 'Sly_11': 'Room_shop', 'Sly_12': 'Room_shop', 'Sly_13': 'Room_shop', 'Sly_14': 'Room_shop', 'Sly_15': 'Room_shop', 'Sly_16': 'Room_shop', 'Sly_(Key)_1': 'Room_shop', 'Sly_(Key)_2': 'Room_shop', 'Sly_(Key)_3': 'Room_shop', 'Sly_(Key)_4': 'Room_shop', 'Sly_(Key)_5': 'Room_shop', 'Sly_(Key)_6': 'Room_shop', 'Sly_(Key)_7': 'Room_shop', 'Sly_(Key)_8': 'Room_shop', 'Sly_(Key)_9': 'Room_shop', 'Sly_(Key)_10': 'Room_shop', 'Sly_(Key)_11': 'Room_shop', 'Sly_(Key)_12': 'Room_shop', 'Sly_(Key)_13': 'Room_shop', 'Sly_(Key)_14': 'Room_shop', 'Sly_(Key)_15': 'Room_shop', 'Sly_(Key)_16': 'Room_shop', 'Iselda_1': 'Room_mapper', 'Iselda_2': 'Room_mapper', 'Iselda_3': 'Room_mapper', 'Iselda_4': 'Room_mapper', 'Iselda_5': 'Room_mapper', 'Iselda_6': 'Room_mapper', 'Iselda_7': 'Room_mapper', 'Iselda_8': 'Room_mapper', 'Iselda_9': 'Room_mapper', 'Iselda_10': 'Room_mapper', 'Iselda_11': 'Room_mapper', 'Iselda_12': 'Room_mapper', 'Iselda_13': 'Room_mapper', 'Iselda_14': 'Room_mapper', 'Iselda_15': 'Room_mapper', 'Iselda_16': 'Room_mapper', 'Salubra_1': 'Room_Charm_Shop', 'Salubra_2': 'Room_Charm_Shop', 'Salubra_3': 'Room_Charm_Shop', 'Salubra_4': 'Room_Charm_Shop', 'Salubra_5': 'Room_Charm_Shop', 'Salubra_6': 'Room_Charm_Shop', 'Salubra_7': 'Room_Charm_Shop', 'Salubra_8': 'Room_Charm_Shop', 'Salubra_9': 'Room_Charm_Shop', 'Salubra_10': 'Room_Charm_Shop', 'Salubra_11': 'Room_Charm_Shop', 'Salubra_12': 'Room_Charm_Shop', 'Salubra_13': 'Room_Charm_Shop', 'Salubra_14': 'Room_Charm_Shop', 'Salubra_15': 'Room_Charm_Shop', 'Salubra_16': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_1': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_2': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_3': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_4': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_5': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_6': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_7': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_8': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_9': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_10': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_11': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_12': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_13': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_14': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_15': 'Room_Charm_Shop', 'Salubra_(Requires_Charms)_16': 'Room_Charm_Shop', 'Leg_Eater_1': 'Fungus2_26', 'Leg_Eater_2': 'Fungus2_26', 'Leg_Eater_3': 'Fungus2_26', 'Leg_Eater_4': 'Fungus2_26', 'Leg_Eater_5': 'Fungus2_26', 'Leg_Eater_6': 'Fungus2_26', 'Leg_Eater_7': 'Fungus2_26', 'Leg_Eater_8': 'Fungus2_26', 'Leg_Eater_9': 'Fungus2_26', 'Leg_Eater_10': 'Fungus2_26', 'Leg_Eater_11': 'Fungus2_26', 'Leg_Eater_12': 'Fungus2_26', 'Leg_Eater_13': 'Fungus2_26', 'Leg_Eater_14': 'Fungus2_26', 'Leg_Eater_15': 'Fungus2_26', 'Leg_Eater_16': 'Fungus2_26', 'Grubfather_1': 'Crossroads_38', 'Grubfather_2': 'Crossroads_38', 'Grubfather_3': 'Crossroads_38', 'Grubfather_4': 'Crossroads_38', 'Grubfather_5': 'Crossroads_38', 'Grubfather_6': 'Crossroads_38', 'Grubfather_7': 'Crossroads_38', 'Grubfather_8': 'Crossroads_38', 'Grubfather_9': 'Crossroads_38', 'Grubfather_10': 'Crossroads_38', 'Grubfather_11': 'Crossroads_38', 'Grubfather_12': 'Crossroads_38', 'Grubfather_13': 'Crossroads_38', 'Grubfather_14': 'Crossroads_38', 'Grubfather_15': 'Crossroads_38', 'Grubfather_16': 'Crossroads_38', 'Seer_1': 'RestingGrounds_07', 'Seer_2': 'RestingGrounds_07', 'Seer_3': 'RestingGrounds_07', 'Seer_4': 'RestingGrounds_07', 'Seer_5': 'RestingGrounds_07', 'Seer_6': 'RestingGrounds_07', 'Seer_7': 'RestingGrounds_07', 'Seer_8': 'RestingGrounds_07', 'Seer_9': 'RestingGrounds_07', 'Seer_10': 'RestingGrounds_07', 'Seer_11': 'RestingGrounds_07', 'Seer_12': 'RestingGrounds_07', 'Seer_13': 'RestingGrounds_07', 'Seer_14': 'RestingGrounds_07', 'Seer_15': 'RestingGrounds_07', 'Seer_16': 'RestingGrounds_07', 'Egg_Shop_1': 'Room_Ouiji', 'Egg_Shop_2': 'Room_Ouiji', 'Egg_Shop_3': 'Room_Ouiji', 'Egg_Shop_4': 'Room_Ouiji', 'Egg_Shop_5': 'Room_Ouiji', 'Egg_Shop_6': 'Room_Ouiji', 'Egg_Shop_7': 'Room_Ouiji', 'Egg_Shop_8': 'Room_Ouiji', 'Egg_Shop_9': 'Room_Ouiji', 'Egg_Shop_10': 'Room_Ouiji', 'Egg_Shop_11': 'Room_Ouiji', 'Egg_Shop_12': 'Room_Ouiji', 'Egg_Shop_13': 'Room_Ouiji', 'Egg_Shop_14': 'Room_Ouiji', 'Egg_Shop_15': 'Room_Ouiji', 'Egg_Shop_16': 'Room_Ouiji', 'Lurien': 'Ruins2_Watcher_Room', 'Monomon': 'Fungus3_archive_02', 'Herrah': 'Deepnest_Spider_Town', 'World_Sense': 'Room_temple', 'Mothwing_Cloak': 'Fungus1_04', 'Mantis_Claw': 'Fungus2_14', 'Crystal_Heart': 'Mines_31', 'Monarch_Wings': 'Abyss_21', 'Shade_Cloak': 'Abyss_10', "Isma's_Tear": 'Waterways_13', 'Dream_Nail': 'RestingGrounds_04', 'Vengeful_Spirit': 'Crossroads_ShamanTemple', 'Shade_Soul': 'Ruins1_31b', 'Desolate_Dive': 'Ruins1_24', 'Descending_Dark': 'Mines_35', 'Howling_Wraiths': 'Room_Fungus_Shaman', 'Abyss_Shriek': 'Abyss_12', 'Cyclone_Slash': 'Room_nailmaster', 'Dash_Slash': 'Room_nailmaster_03', 'Great_Slash': 'Room_nailmaster_02', 'Focus': 'Tutorial_01', 'Baldur_Shell': 'Fungus1_28', 'Fury_of_the_Fallen': 'Tutorial_01', 'Lifeblood_Core': 'Abyss_08', "Defender's_Crest": 'Waterways_05', 'Flukenest': 'Waterways_12', 'Thorns_of_Agony': 'Fungus1_14', 'Mark_of_Pride': 'Fungus2_31', 'Sharp_Shadow': 'Deepnest_44', 'Spore_Shroom': 'Fungus2_20', 'Soul_Catcher': 'Crossroads_ShamanTemple', 'Soul_Eater': 'RestingGrounds_10', 'Glowing_Womb': 'Crossroads_22', "Nailmaster's_Glory": 'Room_shop', "Joni's_Blessing": 'Cliffs_05', 'Shape_of_Unn': 'Fungus1_Slug', 'Hiveblood': 'Hive_05', 'Dashmaster': 'Fungus2_23', 'Quick_Slash': 'Deepnest_East_14b', 'Spell_Twister': 'Ruins1_30', 'Deep_Focus': 'Mines_36', 'Queen_Fragment': 'Room_Queen', 'King_Fragment': 'White_Palace_09', 'Void_Heart': 'Abyss_15', 'Dreamshield': 'RestingGrounds_17', 'Weaversong': 'Deepnest_45_v02', 'Grimmchild': 'Grimm_Main_Tent', 'Unbreakable_Heart': 'Grimm_Divine', 'Unbreakable_Greed': 'Grimm_Divine', 'Unbreakable_Strength': 'Grimm_Divine', 'City_Crest': 'Crossroads_10', 'Tram_Pass': 'Deepnest_26b', 'Simple_Key-Basin': 'Abyss_20', 'Simple_Key-City': 'Ruins1_17', 'Simple_Key-Lurker': 'GG_Lurker', "Shopkeeper's_Key": 'Mines_11', 'Love_Key': 'Fungus3_39', "King's_Brand": 'Room_Wyrm', 'Godtuner': 'GG_Waterways', "Collector's_Map": 'Ruins2_11', 'Mask_Shard-Brooding_Mawlek': 'Crossroads_09', 'Mask_Shard-Crossroads_Goam': 'Crossroads_13', 'Mask_Shard-Stone_Sanctuary': 'Fungus1_36', "Mask_Shard-Queen's_Station": 'Fungus2_01', 'Mask_Shard-Deepnest': 'Fungus2_25', 'Mask_Shard-Waterways': 'Waterways_04b', 'Mask_Shard-Enraged_Guardian': 'Mines_32', 'Mask_Shard-Hive': 'Hive_04', 'Mask_Shard-Grey_Mourner': 'Room_Mansion', 'Mask_Shard-Bretta': 'Room_Bretta', 'Vessel_Fragment-Greenpath': 'Fungus1_13', 'Vessel_Fragment-City': 'Ruins2_09', 'Vessel_Fragment-Crossroads': 'Crossroads_37', 'Vessel_Fragment-Basin': 'Abyss_04', 'Vessel_Fragment-Deepnest': 'Deepnest_38', 'Vessel_Fragment-Stag_Nest': 'Cliffs_03', 'Charm_Notch-Shrumal_Ogres': 'Fungus2_05', 'Charm_Notch-Fog_Canyon': 'Fungus3_28', 'Charm_Notch-Colosseum': 'Room_Colosseum_01', 'Charm_Notch-Grimm': 'Grimm_Main_Tent', 'Pale_Ore-Basin': 'Abyss_17', 'Pale_Ore-Crystal_Peak': 'Mines_34', 'Pale_Ore-Nosk': 'Deepnest_32', 'Pale_Ore-Colosseum': 'Room_Colosseum_01', 'Geo_Chest-False_Knight': 'Crossroads_10', 'Geo_Chest-Soul_Master': 'Ruins1_32', 'Geo_Chest-Watcher_Knights': 'Ruins2_03', 'Geo_Chest-Greenpath': 'Fungus1_13', 'Geo_Chest-Mantis_Lords': 'Fungus2_31', 'Geo_Chest-Resting_Grounds': 'RestingGrounds_10', 'Geo_Chest-Crystal_Peak': 'Mines_37', 'Geo_Chest-Weavers_Den': 'Deepnest_45_v02', 'Geo_Chest-Junk_Pit_1': 'GG_Waterways', 'Geo_Chest-Junk_Pit_2': 'GG_Waterways', 'Geo_Chest-Junk_Pit_3': 'GG_Waterways', 'Geo_Chest-Junk_Pit_5': 'GG_Waterways', 'Lumafly_Escape-Junk_Pit_Chest_4': 'GG_Waterways', 'Rancid_Egg-Sheo': 'Fungus1_15', 'Rancid_Egg-Fungal_Core': 'Fungus2_29', "Rancid_Egg-Queen's_Gardens": 'Fungus3_34', 'Rancid_Egg-Blue_Lake': 'Crossroads_50', 'Rancid_Egg-Crystal_Peak_Dive_Entrance': 'Mines_01', 'Rancid_Egg-Crystal_Peak_Dark_Room': 'Mines_29', 'Rancid_Egg-Crystal_Peak_Tall_Room': 'Mines_20', 'Rancid_Egg-City_of_Tears_Left': 'Ruins1_05c', 'Rancid_Egg-City_of_Tears_Pleasure_House': 'Ruins_Elevator', "Rancid_Egg-Beast's_Den": 'Deepnest_Spider_Town', 'Rancid_Egg-Dark_Deepnest': 'Deepnest_39', "Rancid_Egg-Weaver's_Den": 'Deepnest_45_v02', 'Rancid_Egg-Near_Quick_Slash': 'Deepnest_East_14', "Rancid_Egg-Upper_Kingdom's_Edge": 'Deepnest_East_07', 'Rancid_Egg-Waterways_East': 'Waterways_07', 'Rancid_Egg-Waterways_Main': 'Waterways_02', 'Rancid_Egg-Waterways_West_Bluggsac': 'Waterways_04', 'Rancid_Egg-Waterways_West_Pickup': 'Waterways_04b', "Rancid_Egg-Tuk_Defender's_Crest": 'Waterways_03', "Wanderer's_Journal-Cliffs": 'Cliffs_01', "Wanderer's_Journal-Greenpath_Stag": 'Fungus1_22', "Wanderer's_Journal-Greenpath_Lower": 'Fungus1_11', "Wanderer's_Journal-Fungal_Wastes_Thorns_Gauntlet": 'Fungus2_04', "Wanderer's_Journal-Above_Mantis_Village": 'Fungus2_17', "Wanderer's_Journal-Crystal_Peak_Crawlers": 'Mines_20', "Wanderer's_Journal-Resting_Grounds_Catacombs": 'RestingGrounds_10', "Wanderer's_Journal-King's_Station": 'Ruins2_05', "Wanderer's_Journal-Pleasure_House": 'Ruins_Elevator', "Wanderer's_Journal-City_Storerooms": 'Ruins1_28', "Wanderer's_Journal-Ancient_Basin": 'Abyss_02', "Wanderer's_Journal-Kingdom's_Edge_Entrance": 'Deepnest_East_07', "Wanderer's_Journal-Kingdom's_Edge_Camp": 'Deepnest_East_13', "Wanderer's_Journal-Kingdom's_Edge_Requires_Dive": 'Deepnest_East_18', 'Hallownest_Seal-Crossroads_Well': 'Crossroads_01', 'Hallownest_Seal-Greenpath': 'Fungus1_10', 'Hallownest_Seal-Fog_Canyon_West': 'Fungus3_30', 'Hallownest_Seal-Fog_Canyon_East': 'Fungus3_26', "Hallownest_Seal-Queen's_Station": 'Fungus2_34', 'Hallownest_Seal-Fungal_Wastes_Sporgs': 'Fungus2_03', 'Hallownest_Seal-Mantis_Lords': 'Fungus2_31', 'Hallownest_Seal-Resting_Grounds_Catacombs': 'RestingGrounds_10', "Hallownest_Seal-King's_Station": 'Ruins2_08', 'Hallownest_Seal-City_Rafters': 'Ruins1_03', 'Hallownest_Seal-Soul_Sanctum': 'Ruins1_32', 'Hallownest_Seal-Watcher_Knight': 'Ruins2_03', 'Hallownest_Seal-Deepnest_By_Mantis_Lords': 'Deepnest_16', "Hallownest_Seal-Beast's_Den": 'Deepnest_Spider_Town', "Hallownest_Seal-Queen's_Gardens": 'Fungus3_48', "King's_Idol-Cliffs": 'Cliffs_01', "King's_Idol-Crystal_Peak": 'Mines_30', "King's_Idol-Glade_of_Hope": 'RestingGrounds_08', "King's_Idol-Dung_Defender": 'Waterways_15', "King's_Idol-Great_Hopper": 'Deepnest_East_08', "King's_Idol-Pale_Lurker": 'GG_Lurker', "King's_Idol-Deepnest": 'Deepnest_33', 'Arcane_Egg-Lifeblood_Core': 'Abyss_08', 'Arcane_Egg-Shade_Cloak': 'Abyss_10', 'Arcane_Egg-Birthplace': 'Abyss_15', 'Whispering_Root-Crossroads': 'Crossroads_07', 'Whispering_Root-Greenpath': 'Fungus1_13', 'Whispering_Root-Leg_Eater': 'Fungus2_33', 'Whispering_Root-Mantis_Village': 'Fungus2_17', 'Whispering_Root-Deepnest': 'Deepnest_39', 'Whispering_Root-Queens_Gardens': 'Fungus3_11', 'Whispering_Root-Kingdoms_Edge': 'Deepnest_East_07', 'Whispering_Root-Waterways': 'Abyss_01', 'Whispering_Root-City': 'Ruins1_17', 'Whispering_Root-Resting_Grounds': 'RestingGrounds_05', 'Whispering_Root-Spirits_Glade': 'RestingGrounds_08', 'Whispering_Root-Crystal_Peak': 'Mines_23', 'Whispering_Root-Howling_Cliffs': 'Cliffs_01', 'Whispering_Root-Ancestral_Mound': 'Crossroads_ShamanTemple', 'Whispering_Root-Hive': 'Hive_02', 'Boss_Essence-Elder_Hu': 'Fungus2_32', 'Boss_Essence-Xero': 'RestingGrounds_02', 'Boss_Essence-Gorb': 'Cliffs_02', 'Boss_Essence-Marmu': 'Fungus3_40', 'Boss_Essence-No_Eyes': 'Fungus1_35', 'Boss_Essence-Galien': 'Deepnest_40', 'Boss_Essence-Markoth': 'Deepnest_East_10', 'Boss_Essence-Failed_Champion': 'Crossroads_10', 'Boss_Essence-Soul_Tyrant': 'Ruins1_24', 'Boss_Essence-Lost_Kin': 'Abyss_19', 'Boss_Essence-White_Defender': 'Waterways_15', 'Boss_Essence-Grey_Prince_Zote': 'Room_Bretta', 'Grub-Crossroads_Acid': 'Crossroads_35', 'Grub-Crossroads_Center': 'Crossroads_05', 'Grub-Crossroads_Stag': 'Crossroads_03', 'Grub-Crossroads_Spike': 'Crossroads_31', 'Grub-Crossroads_Guarded': 'Crossroads_48', 'Grub-Greenpath_Cornifer': 'Fungus1_06', 'Grub-Greenpath_Journal': 'Fungus1_07', 'Grub-Greenpath_MMC': 'Fungus1_13', 'Grub-Greenpath_Stag': 'Fungus1_21', 'Grub-Fog_Canyon': 'Fungus3_47', 'Grub-Fungal_Bouncy': 'Fungus2_18', 'Grub-Fungal_Spore_Shroom': 'Fungus2_20', 'Grub-Deepnest_Mimic': 'Deepnest_36', 'Grub-Deepnest_Nosk': 'Deepnest_31', 'Grub-Deepnest_Spike': 'Deepnest_03', 'Grub-Dark_Deepnest': 'Deepnest_39', "Grub-Beast's_Den": 'Deepnest_Spider_Town', "Grub-Kingdom's_Edge_Oro": 'Deepnest_East_14', "Grub-Kingdom's_Edge_Camp": 'Deepnest_East_11', 'Grub-Hive_External': 'Hive_03', 'Grub-Hive_Internal': 'Hive_04', 'Grub-Basin_Requires_Wings': 'Abyss_19', 'Grub-Basin_Requires_Dive': 'Abyss_17', 'Grub-Waterways_Main': 'Waterways_04', "Grub-Isma's_Grove": 'Waterways_13', 'Grub-Waterways_Requires_Tram': 'Waterways_14', 'Grub-City_of_Tears_Left': 'Ruins1_05', 'Grub-Soul_Sanctum': 'Ruins1_32', "Grub-Watcher's_Spire": 'Ruins2_03', 'Grub-City_of_Tears_Guarded': 'Ruins_House_01', "Grub-King's_Station": 'Ruins2_07', 'Grub-Resting_Grounds': 'RestingGrounds_10', 'Grub-Crystal_Peak_Below_Chest': 'Mines_04', 'Grub-Crystallized_Mound': 'Mines_35', 'Grub-Crystal_Peak_Spike': 'Mines_03', 'Grub-Crystal_Peak_Mimic': 'Mines_16', 'Grub-Crystal_Peak_Crushers': 'Mines_19', 'Grub-Crystal_Heart': 'Mines_31', 'Grub-Hallownest_Crown': 'Mines_24', 'Grub-Howling_Cliffs': 'Fungus1_28', "Grub-Queen's_Gardens_Stag": 'Fungus3_10', "Grub-Queen's_Gardens_Marmu": 'Fungus3_48', "Grub-Queen's_Gardens_Top": 'Fungus3_22', 'Grub-Collector_1': 'Ruins2_11', 'Grub-Collector_2': 'Ruins2_11', 'Grub-Collector_3': 'Ruins2_11', 'Mimic_Grub-Deepnest_1': 'Deepnest_36', 'Mimic_Grub-Deepnest_2': 'Deepnest_36', 'Mimic_Grub-Deepnest_3': 'Deepnest_36', 'Mimic_Grub-Crystal_Peak': 'Mines_16', 'Crossroads_Map': 'Crossroads_33', 'Greenpath_Map': 'Fungus1_06', 'Fog_Canyon_Map': 'Fungus3_25', 'Fungal_Wastes_Map': 'Fungus2_18', 'Deepnest_Map-Upper': 'Deepnest_01b', 'Deepnest_Map-Right': 'Fungus2_25', 'Ancient_Basin_Map': 'Abyss_04', "Kingdom's_Edge_Map": 'Deepnest_East_03', 'City_of_Tears_Map': 'Ruins1_31', 'Royal_Waterways_Map': 'Waterways_09', 'Howling_Cliffs_Map': 'Cliffs_01', 'Crystal_Peak_Map': 'Mines_30', "Queen's_Gardens_Map": 'Fungus1_24', 'Resting_Grounds_Map': 'RestingGrounds_09', 'Dirtmouth_Stag': 'Room_Town_Stag_Station', 'Crossroads_Stag': 'Crossroads_47', 'Greenpath_Stag': 'Fungus1_16_alt', "Queen's_Station_Stag": 'Fungus2_02', "Queen's_Gardens_Stag": 'Fungus3_40', 'City_Storerooms_Stag': 'Ruins1_29', "King's_Station_Stag": 'Ruins2_08', 'Resting_Grounds_Stag': 'RestingGrounds_09', 'Distant_Village_Stag': 'Deepnest_09', 'Hidden_Station_Stag': 'Abyss_22', 'Stag_Nest_Stag': 'Cliffs_03', "Lifeblood_Cocoon-King's_Pass": 'Tutorial_01', 'Lifeblood_Cocoon-Ancestral_Mound': 'Crossroads_ShamanTemple', 'Lifeblood_Cocoon-Greenpath': 'Fungus1_32', 'Lifeblood_Cocoon-Fog_Canyon_West': 'Fungus3_30', 'Lifeblood_Cocoon-Mantis_Village': 'Fungus2_15', 'Lifeblood_Cocoon-Failed_Tramway': 'Deepnest_26', 'Lifeblood_Cocoon-Galien': 'Deepnest_40', "Lifeblood_Cocoon-Kingdom's_Edge": 'Deepnest_East_15', 'Grimmkin_Flame-City_Storerooms': 'Ruins1_28', 'Grimmkin_Flame-Greenpath': 'Fungus1_10', 'Grimmkin_Flame-Crystal_Peak': 'Mines_10', "Grimmkin_Flame-King's_Pass": 'Tutorial_01', 'Grimmkin_Flame-Resting_Grounds': 'RestingGrounds_06', "Grimmkin_Flame-Kingdom's_Edge": 'Deepnest_East_03', 'Grimmkin_Flame-Fungal_Core': 'Fungus2_30', 'Grimmkin_Flame-Ancient_Basin': 'Abyss_02', 'Grimmkin_Flame-Hive': 'Hive_03', 'Grimmkin_Flame-Brumm': 'Room_spider_small', "Hunter's_Journal": 'Fungus1_08', 'Journal_Entry-Void_Tendrils': 'Abyss_09', 'Journal_Entry-Charged_Lumafly': 'Fungus3_archive_02', 'Journal_Entry-Goam': 'Crossroads_52', 'Journal_Entry-Garpede': 'Deepnest_44', 'Journal_Entry-Seal_of_Binding': 'White_Palace_20', 'Elevator_Pass': 'Crossroads_49b', 'Split_Mothwing_Cloak': 'Fungus1_04', 'Left_Mantis_Claw': 'Fungus2_14', 'Right_Mantis_Claw': 'Fungus2_14', 'Leftslash': 'Tutorial_01', 'Rightslash': 'Tutorial_01', 'Upslash': 'Tutorial_01', 'Split_Crystal_Heart': 'Mines_31', 'Geo_Rock-Broken_Elevator_1': 'Abyss_01', 'Geo_Rock-Broken_Elevator_2': 'Abyss_01', 'Geo_Rock-Broken_Elevator_3': 'Abyss_01', 'Geo_Rock-Broken_Bridge_Upper': 'Abyss_02', 'Geo_Rock-Broken_Bridge_Lower': 'Abyss_02', 'Geo_Rock-Broken_Bridge_Lower_Dupe': 'Abyss_02', 'Geo_Rock-Abyss_1': 'Abyss_06_Core', 'Geo_Rock-Abyss_2': 'Abyss_06_Core', 'Geo_Rock-Abyss_3': 'Abyss_06_Core', 'Geo_Rock-Basin_Tunnel': 'Abyss_18', 'Geo_Rock-Basin_Grub': 'Abyss_19', 'Geo_Rock-Basin_Before_Broken_Vessel': 'Abyss_19', 'Geo_Rock-Cliffs_Main_1': 'Cliffs_01', 'Geo_Rock-Cliffs_Main_2': 'Cliffs_01', 'Geo_Rock-Cliffs_Main_3': 'Cliffs_01', 'Geo_Rock-Cliffs_Main_4': 'Cliffs_01', 'Geo_Rock-Below_Gorb_Dupe': 'Cliffs_02', 'Geo_Rock-Below_Gorb': 'Cliffs_02', 'Geo_Rock-Crossroads_Well': 'Crossroads_01', 'Geo_Rock-Crossroads_Center_Grub': 'Crossroads_05', 'Geo_Rock-Crossroads_Root': 'Crossroads_07', 'Geo_Rock-Crossroads_Root_Dupe_1': 'Crossroads_07', 'Geo_Rock-Crossroads_Root_Dupe_2': 'Crossroads_07', 'Geo_Rock-Crossroads_Aspid_Arena': 'Crossroads_08', 'Geo_Rock-Crossroads_Aspid_Arena_Dupe_1': 'Crossroads_08', 'Geo_Rock-Crossroads_Aspid_Arena_Dupe_2': 'Crossroads_08', 'Geo_Rock-Crossroads_Aspid_Arena_Hidden': 'Crossroads_08', 'Geo_Rock-Crossroads_Above_False_Knight': 'Crossroads_10', 'Geo_Rock-Crossroads_Before_Acid_Grub': 'Crossroads_12', 'Geo_Rock-Crossroads_Below_Goam_Mask_Shard': 'Crossroads_13', 'Geo_Rock-Crossroads_After_Goam_Mask_Shard': 'Crossroads_13', 'Geo_Rock-Crossroads_Above_Lever': 'Crossroads_16', 'Geo_Rock-Crossroads_Before_Fungal': 'Crossroads_18', 'Geo_Rock-Crossroads_Before_Fungal_Dupe_1': 'Crossroads_18', 'Geo_Rock-Crossroads_Before_Fungal_Dupe_2': 'Crossroads_18', 'Geo_Rock-Crossroads_Before_Shops': 'Crossroads_19', 'Geo_Rock-Crossroads_Before_Glowing_Womb': 'Crossroads_21', 'Geo_Rock-Crossroads_Above_Tram': 'Crossroads_27', 'Geo_Rock-Crossroads_Above_Mawlek': 'Crossroads_36', 'Geo_Rock-Crossroads_Vessel_Fragment': 'Crossroads_37', 'Geo_Rock-Crossroads_Goam_Alcove': 'Crossroads_42', 'Geo_Rock-Crossroads_Goam_Damage_Boost': 'Crossroads_42', 'Geo_Rock-Crossroads_Tram': 'Crossroads_46', 'Geo_Rock-Crossroads_Goam_Journal': 'Crossroads_52', 'Geo_Rock-Crossroads_Goam_Journal_Dupe': 'Crossroads_52', 'Geo_Rock-Ancestral_Mound': 'Crossroads_ShamanTemple', 'Geo_Rock-Ancestral_Mound_Dupe': 'Crossroads_ShamanTemple', 'Geo_Rock-Ancestral_Mound_Tree': 'Crossroads_ShamanTemple', 'Geo_Rock-Ancestral_Mound_Tree_Dupe': 'Crossroads_ShamanTemple', 'Geo_Rock-Moss_Prophet': 'Deepnest_01', 'Geo_Rock-Moss_Prophet_Dupe': 'Deepnest_01', 'Geo_Rock-Deepnest_Below_Mimics': 'Deepnest_02', 'Geo_Rock-Deepnest_Below_Mimics_Dupe': 'Deepnest_02', 'Geo_Rock-Deepnest_Below_Spike_Grub': 'Deepnest_03', 'Geo_Rock-Deepnest_Below_Spike_Grub_Dupe': 'Deepnest_03', 'Geo_Rock-Deepnest_Spike_Grub_Right': 'Deepnest_03', 'Geo_Rock-Deepnest_By_Mantis_Lords_Garpede_Pogo': 'Deepnest_16', 'Geo_Rock-Deepnest_By_Mantis_Lords_Garpede_Pogo_Dupe': 'Deepnest_16', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_1': 'Deepnest_16', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_2': 'Deepnest_16', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_3': 'Deepnest_16', 'Geo_Rock-Deepnest_Nosk_1': 'Deepnest_31', 'Geo_Rock-Deepnest_Nosk_2': 'Deepnest_31', 'Geo_Rock-Deepnest_Nosk_3': 'Deepnest_31', 'Geo_Rock-Deepnest_Above_Galien': 'Deepnest_35', 'Geo_Rock-Deepnest_Galien_Spike': 'Deepnest_35', 'Geo_Rock-Deepnest_Garpede_1': 'Deepnest_37', 'Geo_Rock-Deepnest_Garpede_2': 'Deepnest_37', 'Geo_Rock-Dark_Deepnest_Above_Grub_1': 'Deepnest_39', 'Geo_Rock-Dark_Deepnest_Above_Grub_2': 'Deepnest_39', 'Geo_Rock-Dark_Deepnest_Bottom_Left': 'Deepnest_39', 'Geo_Rock-Above_Mask_Maker_1': 'Deepnest_43', 'Geo_Rock-Above_Mask_Maker_2': 'Deepnest_43', "Geo_Rock-Lower_Kingdom's_Edge_1": 'Deepnest_East_01', "Geo_Rock-Lower_Kingdom's_Edge_2": 'Deepnest_East_01', "Geo_Rock-Lower_Kingdom's_Edge_3": 'Deepnest_East_02', "Geo_Rock-Lower_Kingdom's_Edge_Dive": 'Deepnest_East_02', "Geo_Rock-Kingdom's_Edge_Below_Bardoon": 'Deepnest_East_04', "Geo_Rock-Kingdom's_Edge_Oro_Far_Left": 'Deepnest_East_06', "Geo_Rock-Kingdom's_Edge_Oro_Middle_Left": 'Deepnest_East_06', "Geo_Rock-Kingdom's_Edge_Above_Root": 'Deepnest_East_07', "Geo_Rock-Kingdom's_Edge_Above_Tower": 'Deepnest_East_07', "Geo_Rock-Kingdom's_Edge_Below_Colosseum": 'Deepnest_East_08', "Geo_Rock-Kingdom's_Edge_Above_420_Geo_Rock": 'Deepnest_East_17', "Geo_Rock-Kingdom's_Edge_420_Geo_Rock": 'Deepnest_East_17', "Geo_Rock-Beast's_Den_Above_Trilobite": 'Deepnest_Spider_Town', "Geo_Rock-Beast's_Den_Above_Trilobite_Dupe": 'Deepnest_Spider_Town', "Geo_Rock-Beast's_Den_Below_Herrah": 'Deepnest_Spider_Town', "Geo_Rock-Beast's_Den_Below_Egg": 'Deepnest_Spider_Town', "Geo_Rock-Beast's_Den_Below_Egg_Dupe": 'Deepnest_Spider_Town', "Geo_Rock-Beast's_Den_Bottom": 'Deepnest_Spider_Town', "Geo_Rock-Beast's_Den_Bottom_Dupe": 'Deepnest_Spider_Town', "Geo_Rock-Beast's_Den_After_Herrah": 'Deepnest_Spider_Town', 'Geo_Rock-Greenpath_Entrance': 'Fungus1_01', 'Geo_Rock-Greenpath_Waterfall': 'Fungus1_01b', 'Geo_Rock-Greenpath_Below_Skip_Squit': 'Fungus1_02', 'Geo_Rock-Greenpath_Skip_Squit': 'Fungus1_02', 'Geo_Rock-Greenpath_Second_Skip_Fool_Eater': 'Fungus1_03', 'Geo_Rock-Greenpath_Second_Skip_Fool_Eater_Dupe': 'Fungus1_03', 'Geo_Rock-Greenpath_Second_Skip_Lower': 'Fungus1_03', 'Geo_Rock-Greenpath_Below_Hornet': 'Fungus1_04', 'Geo_Rock-Greenpath_Above_Thorns': 'Fungus1_05', "Geo_Rock-Greenpath_Hunter's_Journal": 'Fungus1_07', 'Geo_Rock-Greenpath_Acid_Bridge': 'Fungus1_10', 'Geo_Rock-Greenpath_After_MMC_Hidden': 'Fungus1_12', 'Geo_Rock-Greenpath_After_MMC': 'Fungus1_12', 'Geo_Rock-Greenpath_After_MMC_Dupe': 'Fungus1_12', 'Geo_Rock-Greenpath_Obbles_Fool_Eater': 'Fungus1_19', 'Geo_Rock-Greenpath_Moss_Knights': 'Fungus1_21', 'Geo_Rock-Greenpath_Moss_Knights_Dupe_1': 'Fungus1_21', 'Geo_Rock-Greenpath_Moss_Knights_Dupe_2': 'Fungus1_21', 'Geo_Rock-Greenpath_Below_Stag': 'Fungus1_22', 'Geo_Rock-Greenpath_Below_Stag_Fool_Eater': 'Fungus1_22', 'Geo_Rock-Baldur_Shell_Top_Left': 'Fungus1_28', 'Geo_Rock-Baldur_Shell_Alcove': 'Fungus1_28', 'Geo_Rock-Greenpath_MMC': 'Fungus1_29', 'Geo_Rock-Greenpath_Below_Toll': 'Fungus1_31', 'Geo_Rock-Greenpath_Toll_Hidden': 'Fungus1_31', 'Geo_Rock-Greenpath_Toll_Hidden_Dupe': 'Fungus1_31', 'Geo_Rock-Fungal_Below_Shrumal_Ogres': 'Fungus2_04', 'Geo_Rock-Fungal_Above_Cloth': 'Fungus2_08', 'Geo_Rock-Fungal_After_Cloth': 'Fungus2_10', "Geo_Rock-Fungal_Below_Pilgrim's_Way": 'Fungus2_11', "Geo_Rock-Fungal_Below_Pilgrim's_Way_Dupe": 'Fungus2_11', 'Geo_Rock-Mantis_Outskirts_Guarded': 'Fungus2_13', 'Geo_Rock-Mantis_Outskirts_Guarded_Dupe': 'Fungus2_13', 'Geo_Rock-Mantis_Outskirts_Alcove': 'Fungus2_13', 'Geo_Rock-Mantis_Village_After_Lever': 'Fungus2_14', 'Geo_Rock-Mantis_Village_Above_Claw': 'Fungus2_14', 'Geo_Rock-Mantis_Village_Above_Claw_Dupe': 'Fungus2_14', 'Geo_Rock-Mantis_Village_Below_Lore': 'Fungus2_14', 'Geo_Rock-Mantis_Village_Above_Lever': 'Fungus2_14', 'Geo_Rock-Above_Mantis_Lords_1': 'Fungus2_15', 'Geo_Rock-Above_Mantis_Lords_2': 'Fungus2_15', 'Geo_Rock-Fungal_After_Bouncy_Grub': 'Fungus2_18', 'Geo_Rock-Fungal_After_Bouncy_Grub_Dupe': 'Fungus2_18', 'Geo_Rock-Fungal_Bouncy_Grub_Lever': 'Fungus2_18', 'Geo_Rock-Fungal_After_Cornifer': 'Fungus2_18', 'Geo_Rock-Fungal_Above_City_Entrance': 'Fungus2_21', 'Geo_Rock-Deepnest_By_Mantis_Lords_1': 'Fungus2_25', 'Geo_Rock-Deepnest_By_Mantis_Lords_2': 'Fungus2_25', 'Geo_Rock-Deepnest_Lower_Cornifer': 'Fungus2_25', 'Geo_Rock-Fungal_Core_Entrance': 'Fungus2_29', 'Geo_Rock-Fungal_Core_Hidden': 'Fungus2_30', 'Geo_Rock-Fungal_Core_Above_Elder': 'Fungus2_30', "Geo_Rock-Queen's_Gardens_Acid_Entrance": 'Fungus3_03', "Geo_Rock-Queen's_Gardens_Below_Stag": 'Fungus3_10', 'Geo_Rock-Fog_Canyon_East': 'Fungus3_26', 'Geo_Rock-Love_Key': 'Fungus3_39', 'Geo_Rock-Love_Key_Dupe': 'Fungus3_39', "Geo_Rock-Queen's_Gardens_Above_Marmu": 'Fungus3_48', 'Geo_Rock-Pale_Lurker': 'GG_Lurker', 'Geo_Rock-Godhome_Pipeway': 'GG_Pipeway', 'Geo_Rock-Hive_Entrance': 'Hive_01', 'Geo_Rock-Hive_Outside_Bench': 'Hive_02', 'Geo_Rock-Hive_Below_Root': 'Hive_02', 'Geo_Rock-Hive_After_Root': 'Hive_02', 'Geo_Rock-Hive_Below_Stash': 'Hive_03', 'Geo_Rock-Hive_Stash': 'Hive_03', 'Geo_Rock-Hive_Stash_Dupe': 'Hive_03', 'Geo_Rock-Hive_Below_Grub': 'Hive_04', 'Geo_Rock-Hive_Above_Mask': 'Hive_04', 'Geo_Rock-Crystal_Peak_Lower_Middle': 'Mines_02', 'Geo_Rock-Crystal_Peak_Lower_Conveyer_1': 'Mines_02', 'Geo_Rock-Crystal_Peak_Lower_Conveyer_2': 'Mines_02', 'Geo_Rock-Crystal_Peak_Before_Dark_Room': 'Mines_04', 'Geo_Rock-Crystal_Peak_Before_Dark_Room_Dupe': 'Mines_04', 'Geo_Rock-Crystal_Peak_Above_Spike_Grub': 'Mines_05', 'Geo_Rock-Crystal_Peak_Mimic_Grub': 'Mines_16', 'Geo_Rock-Crystal_Peak_Dive_Egg': 'Mines_20', 'Geo_Rock-Crystal_Peak_Dive_Egg_Dupe': 'Mines_20', 'Geo_Rock-Crystal_Peak_Conga_Line': 'Mines_20', 'Geo_Rock-Hallownest_Crown_Dive': 'Mines_25', 'Geo_Rock-Hallownest_Crown_Dive_Dupe': 'Mines_25', 'Geo_Rock-Hallownest_Crown_Hidden': 'Mines_25', 'Geo_Rock-Hallownest_Crown_Hidden_Dupe_1': 'Mines_25', 'Geo_Rock-Hallownest_Crown_Hidden_Dupe_2': 'Mines_25', 'Geo_Rock-Crystal_Peak_Before_Crystal_Heart': 'Mines_31', 'Geo_Rock-Crystal_Peak_Entrance': 'Mines_33', 'Geo_Rock-Crystal_Peak_Entrance_Dupe_1': 'Mines_33', 'Geo_Rock-Crystal_Peak_Entrance_Dupe_2': 'Mines_33', 'Geo_Rock-Crystal_Peak_Above_Crushers_Lower': 'Mines_37', 'Geo_Rock-Crystal_Peak_Above_Crushers_Higher': 'Mines_37', 'Geo_Rock-Resting_Grounds_Catacombs_Grub': 'RestingGrounds_10', 'Geo_Rock-Resting_Grounds_Catacombs_Left_Dupe': 'RestingGrounds_10', 'Geo_Rock-Resting_Grounds_Catacombs_Left': 'RestingGrounds_10', 'Geo_Rock-Overgrown_Mound': 'Room_Fungus_Shaman', 'Geo_Rock-Fluke_Hermit_Dupe': 'Room_GG_Shortcut', 'Geo_Rock-Fluke_Hermit': 'Room_GG_Shortcut', 'Geo_Rock-Pleasure_House': 'Ruins_Elevator', 'Geo_Rock-City_of_Tears_Quirrel': 'Ruins1_03', 'Geo_Rock-City_of_Tears_Lemm': 'Ruins1_05b', 'Geo_Rock-City_of_Tears_Above_Lemm': 'Ruins1_05c', 'Geo_Rock-Soul_Sanctum': 'Ruins1_32', "Geo_Rock-Watcher's_Spire": 'Ruins2_01', "Geo_Rock-Above_King's_Station": 'Ruins2_05', "Geo_Rock-King's_Station": 'Ruins2_06', "Geo_Rock-King's_Pass_Left": 'Tutorial_01', "Geo_Rock-King's_Pass_Below_Fury": 'Tutorial_01', "Geo_Rock-King's_Pass_Hidden": 'Tutorial_01', "Geo_Rock-King's_Pass_Collapse": 'Tutorial_01', "Geo_Rock-King's_Pass_Above_Fury": 'Tutorial_01', 'Geo_Rock-Waterways_Tuk': 'Waterways_01', 'Geo_Rock-Waterways_Tuk_Alcove': 'Waterways_01', 'Geo_Rock-Waterways_Left': 'Waterways_04b', 'Geo_Rock-Waterways_East': 'Waterways_07', 'Geo_Rock-Waterways_Flukemarm': 'Waterways_08', 'Boss_Geo-Massive_Moss_Charger': 'Fungus1_29', 'Boss_Geo-Gorgeous_Husk': 'Ruins_House_02', 'Boss_Geo-Sanctum_Soul_Warrior': 'Ruins1_23', 'Boss_Geo-Elegant_Soul_Warrior': 'Ruins1_31b', 'Boss_Geo-Crystal_Guardian': 'Mines_18', 'Boss_Geo-Enraged_Guardian': 'Mines_32', 'Boss_Geo-Gruz_Mother': 'Crossroads_04', 'Boss_Geo-Vengefly_King': 'Fungus1_20_v02', 'Soul_Totem-Basin': 'Abyss_04', 'Soul_Totem-Cliffs_Main': 'Cliffs_01', 'Soul_Totem-Cliffs_Gorb': 'Cliffs_02', "Soul_Totem-Cliffs_Joni's": 'Cliffs_04', 'Soul_Totem-Crossroads_Goam_Journal': 'Crossroads_18', 'Soul_Totem-Crossroads_Shops': 'Crossroads_19', 'Soul_Totem-Crossroads_Mawlek_Upper': 'Crossroads_25', 'Soul_Totem-Crossroads_Acid': 'Crossroads_35', 'Soul_Totem-Crossroads_Mawlek_Lower': 'Crossroads_36', 'Soul_Totem-Crossroads_Myla': 'Crossroads_45', 'Soul_Totem-Ancestral_Mound': 'Crossroads_ShamanTemple', 'Soul_Totem-Distant_Village': 'Deepnest_10', 'Soul_Totem-Deepnest_Vessel': 'Deepnest_38', 'Soul_Totem-Mask_Maker': 'Deepnest_42', "Soul_Totem-Lower_Kingdom's_Edge_1": 'Deepnest_East_01', "Soul_Totem-Lower_Kingdom's_Edge_2": 'Deepnest_East_02', "Soul_Totem-Upper_Kingdom's_Edge": 'Deepnest_East_07', "Soul_Totem-Kingdom's_Edge_Camp": 'Deepnest_East_11', 'Soul_Totem-Oro_Dive_2': 'Deepnest_East_14', 'Soul_Totem-Oro_Dive_1': 'Deepnest_East_14', 'Soul_Totem-Oro': 'Deepnest_East_16', 'Soul_Totem-420_Geo_Rock': 'Deepnest_East_17', "Soul_Totem-Beast's_Den": 'Deepnest_Spider_Town', "Soul_Totem-Greenpath_Hunter's_Journal": 'Fungus1_07', 'Soul_Totem-Greenpath_MMC': 'Fungus1_29', 'Soul_Totem-Greenpath_Below_Toll': 'Fungus1_30', "Soul_Totem-Before_Pilgrim's_Way": 'Fungus2_10', "Soul_Totem-Pilgrim's_Way": 'Fungus2_21', 'Soul_Totem-Fungal_Core': 'Fungus2_29', "Soul_Totem-Top_Left_Queen's_Gardens": 'Fungus3_21', 'Soul_Totem-Below_Marmu': 'Fungus3_40', 'Soul_Totem-Upper_Crystal_Peak': 'Mines_20', 'Soul_Totem-Hallownest_Crown': 'Mines_25', 'Soul_Totem-Outside_Crystallized_Mound': 'Mines_28', 'Soul_Totem-Crystal_Heart_1': 'Mines_31', 'Soul_Totem-Crystal_Heart_2': 'Mines_31', 'Soul_Totem-Crystallized_Mound': 'Mines_35', 'Soul_Totem-Resting_Grounds': 'RestingGrounds_05', 'Soul_Totem-Below_Xero': 'RestingGrounds_06', 'Soul_Totem-Sanctum_Below_Soul_Master': 'Ruins1_24', 'Soul_Totem-Sanctum_Below_Chest': 'Ruins1_32', 'Soul_Totem-Sanctum_Above_Grub': 'Ruins1_32', 'Soul_Totem-Waterways_Entrance': 'Waterways_01', 'Soul_Totem-Top_Left_Waterways': 'Waterways_04b', 'Soul_Totem-Waterways_East': 'Waterways_07', 'Soul_Totem-Waterways_Flukemarm': 'Waterways_08', 'Soul_Totem-White_Palace_Entrance': 'White_Palace_02', 'Soul_Totem-White_Palace_Hub': 'White_Palace_03_hub', 'Soul_Totem-White_Palace_Left': 'White_Palace_04', 'Soul_Totem-White_Palace_Final': 'White_Palace_09', 'Soul_Totem-White_Palace_Right': 'White_Palace_15', 'Soul_Totem-Path_of_Pain_Below_Lever': 'White_Palace_17', 'Soul_Totem-Path_of_Pain_Left_of_Lever': 'White_Palace_17', 'Soul_Totem-Path_of_Pain_Entrance': 'White_Palace_18', 'Soul_Totem-Path_of_Pain_Second': 'White_Palace_18', 'Soul_Totem-Path_of_Pain_Hidden': 'White_Palace_19', 'Soul_Totem-Path_of_Pain_Below_Thornskip': 'White_Palace_19', 'Soul_Totem-Path_of_Pain_Final': 'White_Palace_20', 'Soul_Totem-Pale_Lurker': 'GG_Lurker', 'Lore_Tablet-City_Entrance': 'Ruins1_02', 'Lore_Tablet-Pleasure_House': 'Ruins_Elevator', 'Lore_Tablet-Sanctum_Entrance': 'Ruins1_23', 'Lore_Tablet-Sanctum_Past_Soul_Master': 'Ruins1_32', "Lore_Tablet-Watcher's_Spire": 'Ruins2_Watcher_Room', 'Lore_Tablet-Archives_Upper': 'Fungus3_archive_02', 'Lore_Tablet-Archives_Left': 'Fungus3_archive_02', 'Lore_Tablet-Archives_Right': 'Fungus3_archive_02', "Lore_Tablet-Pilgrim's_Way_1": 'Crossroads_11_alt', "Lore_Tablet-Pilgrim's_Way_2": 'Fungus2_21', 'Lore_Tablet-Mantis_Outskirts': 'Fungus2_12', 'Lore_Tablet-Mantis_Village': 'Fungus2_14', 'Lore_Tablet-Greenpath_Upper_Hidden': 'Fungus1_17', 'Lore_Tablet-Greenpath_Below_Toll': 'Fungus1_30', 'Lore_Tablet-Greenpath_Lifeblood': 'Fungus1_32', 'Lore_Tablet-Greenpath_Stag': 'Fungus1_21', 'Lore_Tablet-Greenpath_QG': 'Fungus1_13', 'Lore_Tablet-Greenpath_Lower_Hidden': 'Fungus1_19', 'Lore_Tablet-Dung_Defender': 'Waterways_07', 'Lore_Tablet-Spore_Shroom': 'Fungus2_20', 'Lore_Tablet-Fungal_Wastes_Hidden': 'Fungus2_07', 'Lore_Tablet-Fungal_Wastes_Below_Shrumal_Ogres': 'Fungus2_04', 'Lore_Tablet-Fungal_Core': 'Fungus2_30', 'Lore_Tablet-Ancient_Basin': 'Abyss_06_Core', "Lore_Tablet-King's_Pass_Focus": 'Tutorial_01', "Lore_Tablet-King's_Pass_Fury": 'Tutorial_01', "Lore_Tablet-King's_Pass_Exit": 'Tutorial_01', 'Lore_Tablet-World_Sense': 'Room_temple', 'Lore_Tablet-Howling_Cliffs': 'Cliffs_01', "Lore_Tablet-Kingdom's_Edge": 'Deepnest_East_17', 'Lore_Tablet-Palace_Workshop': 'White_Palace_08', 'Lore_Tablet-Palace_Throne': 'White_Palace_09', 'Lore_Tablet-Path_of_Pain_Entrance': 'White_Palace_18'} +locations = ['Sly_1', 'Sly_2', 'Sly_3', 'Sly_4', 'Sly_5', 'Sly_6', 'Sly_7', 'Sly_8', 'Sly_9', 'Sly_10', 'Sly_11', 'Sly_12', 'Sly_13', 'Sly_14', 'Sly_15', 'Sly_16', 'Sly_(Key)_1', 'Sly_(Key)_2', 'Sly_(Key)_3', 'Sly_(Key)_4', 'Sly_(Key)_5', 'Sly_(Key)_6', 'Sly_(Key)_7', 'Sly_(Key)_8', 'Sly_(Key)_9', 'Sly_(Key)_10', 'Sly_(Key)_11', 'Sly_(Key)_12', 'Sly_(Key)_13', 'Sly_(Key)_14', 'Sly_(Key)_15', 'Sly_(Key)_16', 'Iselda_1', 'Iselda_2', 'Iselda_3', 'Iselda_4', 'Iselda_5', 'Iselda_6', 'Iselda_7', 'Iselda_8', 'Iselda_9', 'Iselda_10', 'Iselda_11', 'Iselda_12', 'Iselda_13', 'Iselda_14', 'Iselda_15', 'Iselda_16', 'Salubra_1', 'Salubra_2', 'Salubra_3', 'Salubra_4', 'Salubra_5', 'Salubra_6', 'Salubra_7', 'Salubra_8', 'Salubra_9', 'Salubra_10', 'Salubra_11', 'Salubra_12', 'Salubra_13', 'Salubra_14', 'Salubra_15', 'Salubra_16', 'Salubra_(Requires_Charms)_1', 'Salubra_(Requires_Charms)_2', 'Salubra_(Requires_Charms)_3', 'Salubra_(Requires_Charms)_4', 'Salubra_(Requires_Charms)_5', 'Salubra_(Requires_Charms)_6', 'Salubra_(Requires_Charms)_7', 'Salubra_(Requires_Charms)_8', 'Salubra_(Requires_Charms)_9', 'Salubra_(Requires_Charms)_10', 'Salubra_(Requires_Charms)_11', 'Salubra_(Requires_Charms)_12', 'Salubra_(Requires_Charms)_13', 'Salubra_(Requires_Charms)_14', 'Salubra_(Requires_Charms)_15', 'Salubra_(Requires_Charms)_16', 'Leg_Eater_1', 'Leg_Eater_2', 'Leg_Eater_3', 'Leg_Eater_4', 'Leg_Eater_5', 'Leg_Eater_6', 'Leg_Eater_7', 'Leg_Eater_8', 'Leg_Eater_9', 'Leg_Eater_10', 'Leg_Eater_11', 'Leg_Eater_12', 'Leg_Eater_13', 'Leg_Eater_14', 'Leg_Eater_15', 'Leg_Eater_16', 'Grubfather_1', 'Grubfather_2', 'Grubfather_3', 'Grubfather_4', 'Grubfather_5', 'Grubfather_6', 'Grubfather_7', 'Grubfather_8', 'Grubfather_9', 'Grubfather_10', 'Grubfather_11', 'Grubfather_12', 'Grubfather_13', 'Grubfather_14', 'Grubfather_15', 'Grubfather_16', 'Seer_1', 'Seer_2', 'Seer_3', 'Seer_4', 'Seer_5', 'Seer_6', 'Seer_7', 'Seer_8', 'Seer_9', 'Seer_10', 'Seer_11', 'Seer_12', 'Seer_13', 'Seer_14', 'Seer_15', 'Seer_16', 'Egg_Shop_1', 'Egg_Shop_2', 'Egg_Shop_3', 'Egg_Shop_4', 'Egg_Shop_5', 'Egg_Shop_6', 'Egg_Shop_7', 'Egg_Shop_8', 'Egg_Shop_9', 'Egg_Shop_10', 'Egg_Shop_11', 'Egg_Shop_12', 'Egg_Shop_13', 'Egg_Shop_14', 'Egg_Shop_15', 'Egg_Shop_16', 'Lurien', 'Monomon', 'Herrah', 'World_Sense', 'Mothwing_Cloak', 'Mantis_Claw', 'Crystal_Heart', 'Monarch_Wings', 'Shade_Cloak', "Isma's_Tear", 'Dream_Nail', 'Vengeful_Spirit', 'Shade_Soul', 'Desolate_Dive', 'Descending_Dark', 'Howling_Wraiths', 'Abyss_Shriek', 'Cyclone_Slash', 'Dash_Slash', 'Great_Slash', 'Focus', 'Baldur_Shell', 'Fury_of_the_Fallen', 'Lifeblood_Core', "Defender's_Crest", 'Flukenest', 'Thorns_of_Agony', 'Mark_of_Pride', 'Sharp_Shadow', 'Spore_Shroom', 'Soul_Catcher', 'Soul_Eater', 'Glowing_Womb', "Nailmaster's_Glory", "Joni's_Blessing", 'Shape_of_Unn', 'Hiveblood', 'Dashmaster', 'Quick_Slash', 'Spell_Twister', 'Deep_Focus', 'Queen_Fragment', 'King_Fragment', 'Void_Heart', 'Dreamshield', 'Weaversong', 'Grimmchild', 'Unbreakable_Heart', 'Unbreakable_Greed', 'Unbreakable_Strength', 'City_Crest', 'Tram_Pass', 'Simple_Key-Basin', 'Simple_Key-City', 'Simple_Key-Lurker', "Shopkeeper's_Key", 'Love_Key', "King's_Brand", 'Godtuner', "Collector's_Map", 'Mask_Shard-Brooding_Mawlek', 'Mask_Shard-Crossroads_Goam', 'Mask_Shard-Stone_Sanctuary', "Mask_Shard-Queen's_Station", 'Mask_Shard-Deepnest', 'Mask_Shard-Waterways', 'Mask_Shard-Enraged_Guardian', 'Mask_Shard-Hive', 'Mask_Shard-Grey_Mourner', 'Mask_Shard-Bretta', 'Vessel_Fragment-Greenpath', 'Vessel_Fragment-City', 'Vessel_Fragment-Crossroads', 'Vessel_Fragment-Basin', 'Vessel_Fragment-Deepnest', 'Vessel_Fragment-Stag_Nest', 'Charm_Notch-Shrumal_Ogres', 'Charm_Notch-Fog_Canyon', 'Charm_Notch-Colosseum', 'Charm_Notch-Grimm', 'Pale_Ore-Basin', 'Pale_Ore-Crystal_Peak', 'Pale_Ore-Nosk', 'Pale_Ore-Colosseum', 'Geo_Chest-False_Knight', 'Geo_Chest-Soul_Master', 'Geo_Chest-Watcher_Knights', 'Geo_Chest-Greenpath', 'Geo_Chest-Mantis_Lords', 'Geo_Chest-Resting_Grounds', 'Geo_Chest-Crystal_Peak', 'Geo_Chest-Weavers_Den', 'Geo_Chest-Junk_Pit_1', 'Geo_Chest-Junk_Pit_2', 'Geo_Chest-Junk_Pit_3', 'Geo_Chest-Junk_Pit_5', 'Lumafly_Escape-Junk_Pit_Chest_4', 'Rancid_Egg-Sheo', 'Rancid_Egg-Fungal_Core', "Rancid_Egg-Queen's_Gardens", 'Rancid_Egg-Blue_Lake', 'Rancid_Egg-Crystal_Peak_Dive_Entrance', 'Rancid_Egg-Crystal_Peak_Dark_Room', 'Rancid_Egg-Crystal_Peak_Tall_Room', 'Rancid_Egg-City_of_Tears_Left', 'Rancid_Egg-City_of_Tears_Pleasure_House', "Rancid_Egg-Beast's_Den", 'Rancid_Egg-Dark_Deepnest', "Rancid_Egg-Weaver's_Den", 'Rancid_Egg-Near_Quick_Slash', "Rancid_Egg-Upper_Kingdom's_Edge", 'Rancid_Egg-Waterways_East', 'Rancid_Egg-Waterways_Main', 'Rancid_Egg-Waterways_West_Bluggsac', 'Rancid_Egg-Waterways_West_Pickup', "Rancid_Egg-Tuk_Defender's_Crest", "Wanderer's_Journal-Cliffs", "Wanderer's_Journal-Greenpath_Stag", "Wanderer's_Journal-Greenpath_Lower", "Wanderer's_Journal-Fungal_Wastes_Thorns_Gauntlet", "Wanderer's_Journal-Above_Mantis_Village", "Wanderer's_Journal-Crystal_Peak_Crawlers", "Wanderer's_Journal-Resting_Grounds_Catacombs", "Wanderer's_Journal-King's_Station", "Wanderer's_Journal-Pleasure_House", "Wanderer's_Journal-City_Storerooms", "Wanderer's_Journal-Ancient_Basin", "Wanderer's_Journal-Kingdom's_Edge_Entrance", "Wanderer's_Journal-Kingdom's_Edge_Camp", "Wanderer's_Journal-Kingdom's_Edge_Requires_Dive", 'Hallownest_Seal-Crossroads_Well', 'Hallownest_Seal-Greenpath', 'Hallownest_Seal-Fog_Canyon_West', 'Hallownest_Seal-Fog_Canyon_East', "Hallownest_Seal-Queen's_Station", 'Hallownest_Seal-Fungal_Wastes_Sporgs', 'Hallownest_Seal-Mantis_Lords', 'Hallownest_Seal-Resting_Grounds_Catacombs', "Hallownest_Seal-King's_Station", 'Hallownest_Seal-City_Rafters', 'Hallownest_Seal-Soul_Sanctum', 'Hallownest_Seal-Watcher_Knight', 'Hallownest_Seal-Deepnest_By_Mantis_Lords', "Hallownest_Seal-Beast's_Den", "Hallownest_Seal-Queen's_Gardens", "King's_Idol-Cliffs", "King's_Idol-Crystal_Peak", "King's_Idol-Glade_of_Hope", "King's_Idol-Dung_Defender", "King's_Idol-Great_Hopper", "King's_Idol-Pale_Lurker", "King's_Idol-Deepnest", 'Arcane_Egg-Lifeblood_Core', 'Arcane_Egg-Shade_Cloak', 'Arcane_Egg-Birthplace', 'Whispering_Root-Crossroads', 'Whispering_Root-Greenpath', 'Whispering_Root-Leg_Eater', 'Whispering_Root-Mantis_Village', 'Whispering_Root-Deepnest', 'Whispering_Root-Queens_Gardens', 'Whispering_Root-Kingdoms_Edge', 'Whispering_Root-Waterways', 'Whispering_Root-City', 'Whispering_Root-Resting_Grounds', 'Whispering_Root-Spirits_Glade', 'Whispering_Root-Crystal_Peak', 'Whispering_Root-Howling_Cliffs', 'Whispering_Root-Ancestral_Mound', 'Whispering_Root-Hive', 'Boss_Essence-Elder_Hu', 'Boss_Essence-Xero', 'Boss_Essence-Gorb', 'Boss_Essence-Marmu', 'Boss_Essence-No_Eyes', 'Boss_Essence-Galien', 'Boss_Essence-Markoth', 'Boss_Essence-Failed_Champion', 'Boss_Essence-Soul_Tyrant', 'Boss_Essence-Lost_Kin', 'Boss_Essence-White_Defender', 'Boss_Essence-Grey_Prince_Zote', 'Grub-Crossroads_Acid', 'Grub-Crossroads_Center', 'Grub-Crossroads_Stag', 'Grub-Crossroads_Spike', 'Grub-Crossroads_Guarded', 'Grub-Greenpath_Cornifer', 'Grub-Greenpath_Journal', 'Grub-Greenpath_MMC', 'Grub-Greenpath_Stag', 'Grub-Fog_Canyon', 'Grub-Fungal_Bouncy', 'Grub-Fungal_Spore_Shroom', 'Grub-Deepnest_Mimic', 'Grub-Deepnest_Nosk', 'Grub-Deepnest_Spike', 'Grub-Dark_Deepnest', "Grub-Beast's_Den", "Grub-Kingdom's_Edge_Oro", "Grub-Kingdom's_Edge_Camp", 'Grub-Hive_External', 'Grub-Hive_Internal', 'Grub-Basin_Requires_Wings', 'Grub-Basin_Requires_Dive', 'Grub-Waterways_Main', "Grub-Isma's_Grove", 'Grub-Waterways_Requires_Tram', 'Grub-City_of_Tears_Left', 'Grub-Soul_Sanctum', "Grub-Watcher's_Spire", 'Grub-City_of_Tears_Guarded', "Grub-King's_Station", 'Grub-Resting_Grounds', 'Grub-Crystal_Peak_Below_Chest', 'Grub-Crystallized_Mound', 'Grub-Crystal_Peak_Spike', 'Grub-Crystal_Peak_Mimic', 'Grub-Crystal_Peak_Crushers', 'Grub-Crystal_Heart', 'Grub-Hallownest_Crown', 'Grub-Howling_Cliffs', "Grub-Queen's_Gardens_Stag", "Grub-Queen's_Gardens_Marmu", "Grub-Queen's_Gardens_Top", 'Grub-Collector_1', 'Grub-Collector_2', 'Grub-Collector_3', 'Mimic_Grub-Deepnest_1', 'Mimic_Grub-Deepnest_2', 'Mimic_Grub-Deepnest_3', 'Mimic_Grub-Crystal_Peak', 'Crossroads_Map', 'Greenpath_Map', 'Fog_Canyon_Map', 'Fungal_Wastes_Map', 'Deepnest_Map-Upper', 'Deepnest_Map-Right', 'Ancient_Basin_Map', "Kingdom's_Edge_Map", 'City_of_Tears_Map', 'Royal_Waterways_Map', 'Howling_Cliffs_Map', 'Crystal_Peak_Map', "Queen's_Gardens_Map", 'Resting_Grounds_Map', 'Dirtmouth_Stag', 'Crossroads_Stag', 'Greenpath_Stag', "Queen's_Station_Stag", "Queen's_Gardens_Stag", 'City_Storerooms_Stag', "King's_Station_Stag", 'Resting_Grounds_Stag', 'Distant_Village_Stag', 'Hidden_Station_Stag', 'Stag_Nest_Stag', "Lifeblood_Cocoon-King's_Pass", 'Lifeblood_Cocoon-Ancestral_Mound', 'Lifeblood_Cocoon-Greenpath', 'Lifeblood_Cocoon-Fog_Canyon_West', 'Lifeblood_Cocoon-Mantis_Village', 'Lifeblood_Cocoon-Failed_Tramway', 'Lifeblood_Cocoon-Galien', "Lifeblood_Cocoon-Kingdom's_Edge", 'Grimmkin_Flame-City_Storerooms', 'Grimmkin_Flame-Greenpath', 'Grimmkin_Flame-Crystal_Peak', "Grimmkin_Flame-King's_Pass", 'Grimmkin_Flame-Resting_Grounds', "Grimmkin_Flame-Kingdom's_Edge", 'Grimmkin_Flame-Fungal_Core', 'Grimmkin_Flame-Ancient_Basin', 'Grimmkin_Flame-Hive', 'Grimmkin_Flame-Brumm', "Hunter's_Journal", 'Journal_Entry-Void_Tendrils', 'Journal_Entry-Charged_Lumafly', 'Journal_Entry-Goam', 'Journal_Entry-Garpede', 'Journal_Entry-Seal_of_Binding', 'Elevator_Pass', 'Split_Mothwing_Cloak', 'Left_Mantis_Claw', 'Right_Mantis_Claw', 'Leftslash', 'Rightslash', 'Upslash', 'Split_Crystal_Heart', 'Geo_Rock-Broken_Elevator_1', 'Geo_Rock-Broken_Elevator_2', 'Geo_Rock-Broken_Elevator_3', 'Geo_Rock-Broken_Bridge_Upper', 'Geo_Rock-Broken_Bridge_Lower', 'Geo_Rock-Broken_Bridge_Lower_Dupe', 'Geo_Rock-Abyss_1', 'Geo_Rock-Abyss_2', 'Geo_Rock-Abyss_3', 'Geo_Rock-Basin_Tunnel', 'Geo_Rock-Basin_Grub', 'Geo_Rock-Basin_Before_Broken_Vessel', 'Geo_Rock-Cliffs_Main_1', 'Geo_Rock-Cliffs_Main_2', 'Geo_Rock-Cliffs_Main_3', 'Geo_Rock-Cliffs_Main_4', 'Geo_Rock-Below_Gorb_Dupe', 'Geo_Rock-Below_Gorb', 'Geo_Rock-Crossroads_Well', 'Geo_Rock-Crossroads_Center_Grub', 'Geo_Rock-Crossroads_Root', 'Geo_Rock-Crossroads_Root_Dupe_1', 'Geo_Rock-Crossroads_Root_Dupe_2', 'Geo_Rock-Crossroads_Aspid_Arena', 'Geo_Rock-Crossroads_Aspid_Arena_Dupe_1', 'Geo_Rock-Crossroads_Aspid_Arena_Dupe_2', 'Geo_Rock-Crossroads_Aspid_Arena_Hidden', 'Geo_Rock-Crossroads_Above_False_Knight', 'Geo_Rock-Crossroads_Before_Acid_Grub', 'Geo_Rock-Crossroads_Below_Goam_Mask_Shard', 'Geo_Rock-Crossroads_After_Goam_Mask_Shard', 'Geo_Rock-Crossroads_Above_Lever', 'Geo_Rock-Crossroads_Before_Fungal', 'Geo_Rock-Crossroads_Before_Fungal_Dupe_1', 'Geo_Rock-Crossroads_Before_Fungal_Dupe_2', 'Geo_Rock-Crossroads_Before_Shops', 'Geo_Rock-Crossroads_Before_Glowing_Womb', 'Geo_Rock-Crossroads_Above_Tram', 'Geo_Rock-Crossroads_Above_Mawlek', 'Geo_Rock-Crossroads_Vessel_Fragment', 'Geo_Rock-Crossroads_Goam_Alcove', 'Geo_Rock-Crossroads_Goam_Damage_Boost', 'Geo_Rock-Crossroads_Tram', 'Geo_Rock-Crossroads_Goam_Journal', 'Geo_Rock-Crossroads_Goam_Journal_Dupe', 'Geo_Rock-Ancestral_Mound', 'Geo_Rock-Ancestral_Mound_Dupe', 'Geo_Rock-Ancestral_Mound_Tree', 'Geo_Rock-Ancestral_Mound_Tree_Dupe', 'Geo_Rock-Moss_Prophet', 'Geo_Rock-Moss_Prophet_Dupe', 'Geo_Rock-Deepnest_Below_Mimics', 'Geo_Rock-Deepnest_Below_Mimics_Dupe', 'Geo_Rock-Deepnest_Below_Spike_Grub', 'Geo_Rock-Deepnest_Below_Spike_Grub_Dupe', 'Geo_Rock-Deepnest_Spike_Grub_Right', 'Geo_Rock-Deepnest_By_Mantis_Lords_Garpede_Pogo', 'Geo_Rock-Deepnest_By_Mantis_Lords_Garpede_Pogo_Dupe', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_1', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_2', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_3', 'Geo_Rock-Deepnest_Nosk_1', 'Geo_Rock-Deepnest_Nosk_2', 'Geo_Rock-Deepnest_Nosk_3', 'Geo_Rock-Deepnest_Above_Galien', 'Geo_Rock-Deepnest_Galien_Spike', 'Geo_Rock-Deepnest_Garpede_1', 'Geo_Rock-Deepnest_Garpede_2', 'Geo_Rock-Dark_Deepnest_Above_Grub_1', 'Geo_Rock-Dark_Deepnest_Above_Grub_2', 'Geo_Rock-Dark_Deepnest_Bottom_Left', 'Geo_Rock-Above_Mask_Maker_1', 'Geo_Rock-Above_Mask_Maker_2', "Geo_Rock-Lower_Kingdom's_Edge_1", "Geo_Rock-Lower_Kingdom's_Edge_2", "Geo_Rock-Lower_Kingdom's_Edge_3", "Geo_Rock-Lower_Kingdom's_Edge_Dive", "Geo_Rock-Kingdom's_Edge_Below_Bardoon", "Geo_Rock-Kingdom's_Edge_Oro_Far_Left", "Geo_Rock-Kingdom's_Edge_Oro_Middle_Left", "Geo_Rock-Kingdom's_Edge_Above_Root", "Geo_Rock-Kingdom's_Edge_Above_Tower", "Geo_Rock-Kingdom's_Edge_Below_Colosseum", "Geo_Rock-Kingdom's_Edge_Above_420_Geo_Rock", "Geo_Rock-Kingdom's_Edge_420_Geo_Rock", "Geo_Rock-Beast's_Den_Above_Trilobite", "Geo_Rock-Beast's_Den_Above_Trilobite_Dupe", "Geo_Rock-Beast's_Den_Below_Herrah", "Geo_Rock-Beast's_Den_Below_Egg", "Geo_Rock-Beast's_Den_Below_Egg_Dupe", "Geo_Rock-Beast's_Den_Bottom", "Geo_Rock-Beast's_Den_Bottom_Dupe", "Geo_Rock-Beast's_Den_After_Herrah", 'Geo_Rock-Greenpath_Entrance', 'Geo_Rock-Greenpath_Waterfall', 'Geo_Rock-Greenpath_Below_Skip_Squit', 'Geo_Rock-Greenpath_Skip_Squit', 'Geo_Rock-Greenpath_Second_Skip_Fool_Eater', 'Geo_Rock-Greenpath_Second_Skip_Fool_Eater_Dupe', 'Geo_Rock-Greenpath_Second_Skip_Lower', 'Geo_Rock-Greenpath_Below_Hornet', 'Geo_Rock-Greenpath_Above_Thorns', "Geo_Rock-Greenpath_Hunter's_Journal", 'Geo_Rock-Greenpath_Acid_Bridge', 'Geo_Rock-Greenpath_After_MMC_Hidden', 'Geo_Rock-Greenpath_After_MMC', 'Geo_Rock-Greenpath_After_MMC_Dupe', 'Geo_Rock-Greenpath_Obbles_Fool_Eater', 'Geo_Rock-Greenpath_Moss_Knights', 'Geo_Rock-Greenpath_Moss_Knights_Dupe_1', 'Geo_Rock-Greenpath_Moss_Knights_Dupe_2', 'Geo_Rock-Greenpath_Below_Stag', 'Geo_Rock-Greenpath_Below_Stag_Fool_Eater', 'Geo_Rock-Baldur_Shell_Top_Left', 'Geo_Rock-Baldur_Shell_Alcove', 'Geo_Rock-Greenpath_MMC', 'Geo_Rock-Greenpath_Below_Toll', 'Geo_Rock-Greenpath_Toll_Hidden', 'Geo_Rock-Greenpath_Toll_Hidden_Dupe', 'Geo_Rock-Fungal_Below_Shrumal_Ogres', 'Geo_Rock-Fungal_Above_Cloth', 'Geo_Rock-Fungal_After_Cloth', "Geo_Rock-Fungal_Below_Pilgrim's_Way", "Geo_Rock-Fungal_Below_Pilgrim's_Way_Dupe", 'Geo_Rock-Mantis_Outskirts_Guarded', 'Geo_Rock-Mantis_Outskirts_Guarded_Dupe', 'Geo_Rock-Mantis_Outskirts_Alcove', 'Geo_Rock-Mantis_Village_After_Lever', 'Geo_Rock-Mantis_Village_Above_Claw', 'Geo_Rock-Mantis_Village_Above_Claw_Dupe', 'Geo_Rock-Mantis_Village_Below_Lore', 'Geo_Rock-Mantis_Village_Above_Lever', 'Geo_Rock-Above_Mantis_Lords_1', 'Geo_Rock-Above_Mantis_Lords_2', 'Geo_Rock-Fungal_After_Bouncy_Grub', 'Geo_Rock-Fungal_After_Bouncy_Grub_Dupe', 'Geo_Rock-Fungal_Bouncy_Grub_Lever', 'Geo_Rock-Fungal_After_Cornifer', 'Geo_Rock-Fungal_Above_City_Entrance', 'Geo_Rock-Deepnest_By_Mantis_Lords_1', 'Geo_Rock-Deepnest_By_Mantis_Lords_2', 'Geo_Rock-Deepnest_Lower_Cornifer', 'Geo_Rock-Fungal_Core_Entrance', 'Geo_Rock-Fungal_Core_Hidden', 'Geo_Rock-Fungal_Core_Above_Elder', "Geo_Rock-Queen's_Gardens_Acid_Entrance", "Geo_Rock-Queen's_Gardens_Below_Stag", 'Geo_Rock-Fog_Canyon_East', 'Geo_Rock-Love_Key', 'Geo_Rock-Love_Key_Dupe', "Geo_Rock-Queen's_Gardens_Above_Marmu", 'Geo_Rock-Pale_Lurker', 'Geo_Rock-Godhome_Pipeway', 'Geo_Rock-Hive_Entrance', 'Geo_Rock-Hive_Outside_Bench', 'Geo_Rock-Hive_Below_Root', 'Geo_Rock-Hive_After_Root', 'Geo_Rock-Hive_Below_Stash', 'Geo_Rock-Hive_Stash', 'Geo_Rock-Hive_Stash_Dupe', 'Geo_Rock-Hive_Below_Grub', 'Geo_Rock-Hive_Above_Mask', 'Geo_Rock-Crystal_Peak_Lower_Middle', 'Geo_Rock-Crystal_Peak_Lower_Conveyer_1', 'Geo_Rock-Crystal_Peak_Lower_Conveyer_2', 'Geo_Rock-Crystal_Peak_Before_Dark_Room', 'Geo_Rock-Crystal_Peak_Before_Dark_Room_Dupe', 'Geo_Rock-Crystal_Peak_Above_Spike_Grub', 'Geo_Rock-Crystal_Peak_Mimic_Grub', 'Geo_Rock-Crystal_Peak_Dive_Egg', 'Geo_Rock-Crystal_Peak_Dive_Egg_Dupe', 'Geo_Rock-Crystal_Peak_Conga_Line', 'Geo_Rock-Hallownest_Crown_Dive', 'Geo_Rock-Hallownest_Crown_Dive_Dupe', 'Geo_Rock-Hallownest_Crown_Hidden', 'Geo_Rock-Hallownest_Crown_Hidden_Dupe_1', 'Geo_Rock-Hallownest_Crown_Hidden_Dupe_2', 'Geo_Rock-Crystal_Peak_Before_Crystal_Heart', 'Geo_Rock-Crystal_Peak_Entrance', 'Geo_Rock-Crystal_Peak_Entrance_Dupe_1', 'Geo_Rock-Crystal_Peak_Entrance_Dupe_2', 'Geo_Rock-Crystal_Peak_Above_Crushers_Lower', 'Geo_Rock-Crystal_Peak_Above_Crushers_Higher', 'Geo_Rock-Resting_Grounds_Catacombs_Grub', 'Geo_Rock-Resting_Grounds_Catacombs_Left_Dupe', 'Geo_Rock-Resting_Grounds_Catacombs_Left', 'Geo_Rock-Overgrown_Mound', 'Geo_Rock-Fluke_Hermit_Dupe', 'Geo_Rock-Fluke_Hermit', 'Geo_Rock-Pleasure_House', 'Geo_Rock-City_of_Tears_Quirrel', 'Geo_Rock-City_of_Tears_Lemm', 'Geo_Rock-City_of_Tears_Above_Lemm', 'Geo_Rock-Soul_Sanctum', "Geo_Rock-Watcher's_Spire", "Geo_Rock-Above_King's_Station", "Geo_Rock-King's_Station", "Geo_Rock-King's_Pass_Left", "Geo_Rock-King's_Pass_Below_Fury", "Geo_Rock-King's_Pass_Hidden", "Geo_Rock-King's_Pass_Collapse", "Geo_Rock-King's_Pass_Above_Fury", 'Geo_Rock-Waterways_Tuk', 'Geo_Rock-Waterways_Tuk_Alcove', 'Geo_Rock-Waterways_Left', 'Geo_Rock-Waterways_East', 'Geo_Rock-Waterways_Flukemarm', 'Boss_Geo-Massive_Moss_Charger', 'Boss_Geo-Gorgeous_Husk', 'Boss_Geo-Sanctum_Soul_Warrior', 'Boss_Geo-Elegant_Soul_Warrior', 'Boss_Geo-Crystal_Guardian', 'Boss_Geo-Enraged_Guardian', 'Boss_Geo-Gruz_Mother', 'Boss_Geo-Vengefly_King', 'Soul_Totem-Basin', 'Soul_Totem-Cliffs_Main', 'Soul_Totem-Cliffs_Gorb', "Soul_Totem-Cliffs_Joni's", 'Soul_Totem-Crossroads_Goam_Journal', 'Soul_Totem-Crossroads_Shops', 'Soul_Totem-Crossroads_Mawlek_Upper', 'Soul_Totem-Crossroads_Acid', 'Soul_Totem-Crossroads_Mawlek_Lower', 'Soul_Totem-Crossroads_Myla', 'Soul_Totem-Ancestral_Mound', 'Soul_Totem-Distant_Village', 'Soul_Totem-Deepnest_Vessel', 'Soul_Totem-Mask_Maker', "Soul_Totem-Lower_Kingdom's_Edge_1", "Soul_Totem-Lower_Kingdom's_Edge_2", "Soul_Totem-Upper_Kingdom's_Edge", "Soul_Totem-Kingdom's_Edge_Camp", 'Soul_Totem-Oro_Dive_2', 'Soul_Totem-Oro_Dive_1', 'Soul_Totem-Oro', 'Soul_Totem-420_Geo_Rock', "Soul_Totem-Beast's_Den", "Soul_Totem-Greenpath_Hunter's_Journal", 'Soul_Totem-Greenpath_MMC', 'Soul_Totem-Greenpath_Below_Toll', "Soul_Totem-Before_Pilgrim's_Way", "Soul_Totem-Pilgrim's_Way", 'Soul_Totem-Fungal_Core', "Soul_Totem-Top_Left_Queen's_Gardens", 'Soul_Totem-Below_Marmu', 'Soul_Totem-Upper_Crystal_Peak', 'Soul_Totem-Hallownest_Crown', 'Soul_Totem-Outside_Crystallized_Mound', 'Soul_Totem-Crystal_Heart_1', 'Soul_Totem-Crystal_Heart_2', 'Soul_Totem-Crystallized_Mound', 'Soul_Totem-Resting_Grounds', 'Soul_Totem-Below_Xero', 'Soul_Totem-Sanctum_Below_Soul_Master', 'Soul_Totem-Sanctum_Below_Chest', 'Soul_Totem-Sanctum_Above_Grub', 'Soul_Totem-Waterways_Entrance', 'Soul_Totem-Top_Left_Waterways', 'Soul_Totem-Waterways_East', 'Soul_Totem-Waterways_Flukemarm', 'Soul_Totem-White_Palace_Entrance', 'Soul_Totem-White_Palace_Hub', 'Soul_Totem-White_Palace_Left', 'Soul_Totem-White_Palace_Final', 'Soul_Totem-White_Palace_Right', 'Soul_Totem-Path_of_Pain_Below_Lever', 'Soul_Totem-Path_of_Pain_Left_of_Lever', 'Soul_Totem-Path_of_Pain_Entrance', 'Soul_Totem-Path_of_Pain_Second', 'Soul_Totem-Path_of_Pain_Hidden', 'Soul_Totem-Path_of_Pain_Below_Thornskip', 'Soul_Totem-Path_of_Pain_Final', 'Soul_Totem-Pale_Lurker', 'Lore_Tablet-City_Entrance', 'Lore_Tablet-Pleasure_House', 'Lore_Tablet-Sanctum_Entrance', 'Lore_Tablet-Sanctum_Past_Soul_Master', "Lore_Tablet-Watcher's_Spire", 'Lore_Tablet-Archives_Upper', 'Lore_Tablet-Archives_Left', 'Lore_Tablet-Archives_Right', "Lore_Tablet-Pilgrim's_Way_1", "Lore_Tablet-Pilgrim's_Way_2", 'Lore_Tablet-Mantis_Outskirts', 'Lore_Tablet-Mantis_Village', 'Lore_Tablet-Greenpath_Upper_Hidden', 'Lore_Tablet-Greenpath_Below_Toll', 'Lore_Tablet-Greenpath_Lifeblood', 'Lore_Tablet-Greenpath_Stag', 'Lore_Tablet-Greenpath_QG', 'Lore_Tablet-Greenpath_Lower_Hidden', 'Lore_Tablet-Dung_Defender', 'Lore_Tablet-Spore_Shroom', 'Lore_Tablet-Fungal_Wastes_Hidden', 'Lore_Tablet-Fungal_Wastes_Below_Shrumal_Ogres', 'Lore_Tablet-Fungal_Core', 'Lore_Tablet-Ancient_Basin', "Lore_Tablet-King's_Pass_Focus", "Lore_Tablet-King's_Pass_Fury", "Lore_Tablet-King's_Pass_Exit", 'Lore_Tablet-World_Sense', 'Lore_Tablet-Howling_Cliffs', "Lore_Tablet-Kingdom's_Edge", 'Lore_Tablet-Palace_Workshop', 'Lore_Tablet-Palace_Throne', 'Lore_Tablet-Path_of_Pain_Entrance'] +logic_items = {'ACID', 'Abyss_01', 'Abyss_01[left1]', 'Abyss_01[left2]', 'Abyss_01[left3]', 'Abyss_01[right1]', 'Abyss_01[right2]', 'Abyss_02[bot1]', 'Abyss_02[right1]', 'Abyss_03', 'Abyss_03[bot1]', 'Abyss_03[bot2]', 'Abyss_03[top1]', 'Abyss_03_b', 'Abyss_03_b[left1]', 'Abyss_03_c', 'Abyss_03_c[right1]', 'Abyss_03_c[top1]', 'Abyss_04', 'Abyss_04[bot1]', 'Abyss_04[left1]', 'Abyss_04[right1]', 'Abyss_04[top1]', 'Abyss_05', 'Abyss_05[left1]', 'Abyss_05[right1]', 'Abyss_06_Core', 'Abyss_06_Core[bot1]', 'Abyss_06_Core[left1]', 'Abyss_06_Core[left3]', 'Abyss_06_Core[right2]', 'Abyss_06_Core[top1]', 'Abyss_08[right1]', 'Abyss_09', 'Abyss_09[left1]', 'Abyss_09[right1]', 'Abyss_09[right2]', 'Abyss_09[right3]', 'Abyss_10[left1]', 'Abyss_10[left2]', 'Abyss_12[right1]', 'Abyss_15[top1]', 'Abyss_16[left1]', 'Abyss_16[right1]', 'Abyss_17[top1]', 'Abyss_18[left1]', 'Abyss_18[right1]', 'Abyss_19', 'Abyss_19[bot1]', 'Abyss_19[bot2]', 'Abyss_19[left1]', 'Abyss_19[right1]', 'Abyss_20[top1]', 'Abyss_20[top2]', 'Abyss_21[right1]', 'Abyss_22[left1]', 'Abyss_Lighthouse_room[left1]', 'BRAND', 'Broke_Sanctum_Glass_Floor', 'CREST', 'CYCLONE', 'Can_Bench', 'Can_Repair_Fragile_Charms', 'Can_Replenish_Geo', 'Can_Replenish_Geo-Crossroads', 'Can_Stag', 'City_Storerooms_Stag', 'Cliffs_01', 'Cliffs_01[right1]', 'Cliffs_01[right2]', 'Cliffs_01[right3]', 'Cliffs_01[right4]', 'Cliffs_02', 'Cliffs_02[bot1]', 'Cliffs_02[bot2]', 'Cliffs_02[door1]', 'Cliffs_02[left1]', 'Cliffs_02[left2]', 'Cliffs_02[right1]', 'Cliffs_03[right1]', 'Cliffs_04[left1]', 'Cliffs_04[right1]', 'Cliffs_05[left1]', 'Cliffs_06[left1]', 'Completed_Path_of_Pain', 'Crossroads_01[left1]', 'Crossroads_01[right1]', 'Crossroads_01[top1]', 'Crossroads_02[door1]', 'Crossroads_02[left1]', 'Crossroads_02[right1]', 'Crossroads_03', 'Crossroads_03[bot1]', 'Crossroads_03[left1]', 'Crossroads_03[left2]', 'Crossroads_03[right1]', 'Crossroads_03[right2]', 'Crossroads_03[top1]', 'Crossroads_04[door1]', 'Crossroads_04[door_Mender_House]', 'Crossroads_04[door_charmshop]', 'Crossroads_04[left1]', 'Crossroads_04[right1]', 'Crossroads_04[top1]', 'Crossroads_05[left1]', 'Crossroads_05[right1]', 'Crossroads_06[door1]', 'Crossroads_06[left1]', 'Crossroads_06[right1]', 'Crossroads_07', 'Crossroads_07[bot1]', 'Crossroads_07[left1]', 'Crossroads_07[left2]', 'Crossroads_07[left3]', 'Crossroads_07[right1]', 'Crossroads_07[right2]', 'Crossroads_08', 'Crossroads_08[left1]', 'Crossroads_08[left2]', 'Crossroads_08[right1]', 'Crossroads_08[right2]', 'Crossroads_09[left1]', 'Crossroads_09[right1]', 'Crossroads_10[left1]', 'Crossroads_10[right1]', 'Crossroads_11_alt[left1]', 'Crossroads_11_alt[right1]', 'Crossroads_12[left1]', 'Crossroads_12[right1]', 'Crossroads_13[left1]', 'Crossroads_13[right1]', 'Crossroads_14', 'Crossroads_14[left1]', 'Crossroads_14[left2]', 'Crossroads_14[right1]', 'Crossroads_14[right2]', 'Crossroads_15[left1]', 'Crossroads_15[right1]', 'Crossroads_16[bot1]', 'Crossroads_16[left1]', 'Crossroads_16[right1]', 'Crossroads_18', 'Crossroads_18[bot1]', 'Crossroads_18[right1]', 'Crossroads_18[right2]', 'Crossroads_19', 'Crossroads_19[left1]', 'Crossroads_19[left2]', 'Crossroads_19[right1]', 'Crossroads_19[top1]', 'Crossroads_21', 'Crossroads_21[left1]', 'Crossroads_21[right1]', 'Crossroads_21[top1]', 'Crossroads_22[bot1]', 'Crossroads_25[left1]', 'Crossroads_25[right1]', 'Crossroads_27', 'Crossroads_27[bot1]', 'Crossroads_27[left1]', 'Crossroads_27[left2]', 'Crossroads_27[right1]', 'Crossroads_30[left1]', 'Crossroads_31[right1]', 'Crossroads_33', 'Crossroads_33[left1]', 'Crossroads_33[left2]', 'Crossroads_33[right1]', 'Crossroads_33[right2]', 'Crossroads_33[top1]', 'Crossroads_35[bot1]', 'Crossroads_35[right1]', 'Crossroads_36[right1]', 'Crossroads_36[right2]', 'Crossroads_37[right1]', 'Crossroads_38[right1]', 'Crossroads_39[left1]', 'Crossroads_39[right1]', 'Crossroads_40[left1]', 'Crossroads_40[right1]', 'Crossroads_42[left1]', 'Crossroads_42[right1]', 'Crossroads_43[left1]', 'Crossroads_43[right1]', 'Crossroads_45[left1]', 'Crossroads_45[right1]', 'Crossroads_46[left1]', 'Crossroads_46b[right1]', 'Crossroads_47[right1]', 'Crossroads_48[left1]', 'Crossroads_49[left1]', 'Crossroads_49[right1]', 'Crossroads_49b[right1]', 'Crossroads_50[left1]', 'Crossroads_50[right1]', 'Crossroads_52[left1]', 'Crossroads_ShamanTemple[left1]', 'Crossroads_Stag', 'Cyclone_Slash', 'DREAMER', 'DREAMNAIL', 'Dash_Slash', 'Dashmaster', 'Deepnest_01', 'Deepnest_01[bot1]', 'Deepnest_01[bot2]', 'Deepnest_01[left1]', 'Deepnest_01[right1]', 'Deepnest_01b', 'Deepnest_01b[bot1]', 'Deepnest_01b[right1]', 'Deepnest_01b[right2]', 'Deepnest_01b[top1]', 'Deepnest_01b[top2]', 'Deepnest_02', 'Deepnest_02[left1]', 'Deepnest_02[left2]', 'Deepnest_02[right1]', 'Deepnest_03', 'Deepnest_03[left1]', 'Deepnest_03[left2]', 'Deepnest_03[right1]', 'Deepnest_03[top1]', 'Deepnest_09[left1]', 'Deepnest_10', 'Deepnest_10[door1]', 'Deepnest_10[door2]', 'Deepnest_10[right1]', 'Deepnest_10[right2]', 'Deepnest_10[right3]', 'Deepnest_14', 'Deepnest_14[bot1]', 'Deepnest_14[bot2]', 'Deepnest_14[left1]', 'Deepnest_14[right1]', 'Deepnest_16[bot1]', 'Deepnest_16[left1]', 'Deepnest_17', 'Deepnest_17[bot1]', 'Deepnest_17[left1]', 'Deepnest_17[right1]', 'Deepnest_17[top1]', 'Deepnest_26', 'Deepnest_26[bot1]', 'Deepnest_26[left1]', 'Deepnest_26[left2]', 'Deepnest_26[right1]', 'Deepnest_26b[right1]', 'Deepnest_26b[right2]', 'Deepnest_30[left1]', 'Deepnest_30[right1]', 'Deepnest_30[top1]', 'Deepnest_31[right1]', 'Deepnest_31[right2]', 'Deepnest_32[left1]', 'Deepnest_33[bot1]', 'Deepnest_33[top1]', 'Deepnest_33[top2]', 'Deepnest_34', 'Deepnest_34[left1]', 'Deepnest_34[right1]', 'Deepnest_34[top1]', 'Deepnest_35', 'Deepnest_35[bot1]', 'Deepnest_35[left1]', 'Deepnest_35[top1]', 'Deepnest_36[left1]', 'Deepnest_37', 'Deepnest_37[bot1]', 'Deepnest_37[left1]', 'Deepnest_37[right1]', 'Deepnest_37[top1]', 'Deepnest_38[bot1]', 'Deepnest_39', 'Deepnest_39[door1]', 'Deepnest_39[left1]', 'Deepnest_39[right1]', 'Deepnest_39[top1]', 'Deepnest_40[right1]', 'Deepnest_41[left1]', 'Deepnest_41[left2]', 'Deepnest_41[right1]', 'Deepnest_42', 'Deepnest_42[bot1]', 'Deepnest_42[left1]', 'Deepnest_42[top1]', 'Deepnest_43[bot1]', 'Deepnest_43[left1]', 'Deepnest_43[right1]', 'Deepnest_44[top1]', 'Deepnest_45_v02[left1]', 'Deepnest_East_01[bot1]', 'Deepnest_East_01[right1]', 'Deepnest_East_01[top1]', 'Deepnest_East_02', 'Deepnest_East_02[bot1]', 'Deepnest_East_02[bot2]', 'Deepnest_East_02[right1]', 'Deepnest_East_02[top1]', 'Deepnest_East_03', 'Deepnest_East_03[left1]', 'Deepnest_East_03[left2]', 'Deepnest_East_03[right1]', 'Deepnest_East_03[right2]', 'Deepnest_East_03[top1]', 'Deepnest_East_03[top2]', 'Deepnest_East_04', 'Deepnest_East_04[left1]', 'Deepnest_East_04[left2]', 'Deepnest_East_04[right1]', 'Deepnest_East_04[right2]', 'Deepnest_East_06[bot1]', 'Deepnest_East_06[door1]', 'Deepnest_East_06[left1]', 'Deepnest_East_06[right1]', 'Deepnest_East_06[top1]', 'Deepnest_East_07', 'Deepnest_East_07[bot1]', 'Deepnest_East_07[bot2]', 'Deepnest_East_07[left1]', 'Deepnest_East_07[left2]', 'Deepnest_East_07[right1]', 'Deepnest_East_08[right1]', 'Deepnest_East_08[top1]', 'Deepnest_East_09[bot1]', 'Deepnest_East_09[left1]', 'Deepnest_East_09[right1]', 'Deepnest_East_10[left1]', 'Deepnest_East_11', 'Deepnest_East_11[bot1]', 'Deepnest_East_11[left1]', 'Deepnest_East_11[right1]', 'Deepnest_East_11[top1]', 'Deepnest_East_12[left1]', 'Deepnest_East_12[right1]', 'Deepnest_East_13[bot1]', 'Deepnest_East_14[door1]', 'Deepnest_East_14[left1]', 'Deepnest_East_14[top2]', 'Deepnest_East_14b[right1]', 'Deepnest_East_14b[top1]', 'Deepnest_East_15[left1]', 'Deepnest_East_16[bot1]', 'Deepnest_East_16[left1]', 'Deepnest_East_17[left1]', 'Deepnest_East_18', 'Deepnest_East_18[bot1]', 'Deepnest_East_18[right2]', 'Deepnest_East_18[top1]', 'Deepnest_East_Hornet[left1]', 'Deepnest_East_Hornet[left2]', 'Deepnest_Spider_Town[left1]', 'Defeated_Broken_Vessel', 'Defeated_Brooding_Mawlek', 'Defeated_Collector', 'Defeated_Colosseum_1', 'Defeated_Colosseum_2', 'Defeated_Colosseum_Zote', 'Defeated_Crystal_Guardian', 'Defeated_Dung_Defender', 'Defeated_Elder_Hu', 'Defeated_Elegant_Warrior', 'Defeated_Enraged_Guardian', 'Defeated_Failed_Champion', 'Defeated_False_Knight', 'Defeated_Flukemarm', 'Defeated_Galien', 'Defeated_Gorb', 'Defeated_Grey_Prince_Zote', 'Defeated_Grimm', 'Defeated_Gruz_Mother', 'Defeated_Hive_Knight', 'Defeated_Hornet_1', 'Defeated_Hornet_2', "Defeated_King's_Station_Arena", 'Defeated_Lost_Kin', 'Defeated_Mantis_Lords', 'Defeated_Markoth', 'Defeated_Marmu', 'Defeated_No_Eyes', 'Defeated_Nosk', 'Defeated_Pale_Lurker', 'Defeated_Path_of_Pain_Arena', 'Defeated_Sanctum_Warrior', 'Defeated_Shrumal_Ogre_Arena', 'Defeated_Soul_Master', 'Defeated_Soul_Tyrant', 'Defeated_Traitor_Lord', 'Defeated_Uumuu', 'Defeated_Watcher_Knights', "Defeated_West_Queen's_Gardens_Arena", 'Defeated_White_Defender', 'Defeated_Xero', "Defender's_Crest", 'Dirtmouth_Stag', 'Distant_Village_Stag', 'ELEGANT', 'ESSENCE', 'Elevator_Pass', 'FIREBALL', 'FLAMES', 'FOCUS', 'First_Grimmchild_Upgrade', 'Fragile_Greed', 'Fragile_Heart', 'Fragile_Strength', 'Fungus1_01[left1]', 'Fungus1_01[right1]', 'Fungus1_01b[left1]', 'Fungus1_01b[right1]', 'Fungus1_02[left1]', 'Fungus1_02[right1]', 'Fungus1_02[right2]', 'Fungus1_03[bot1]', 'Fungus1_03[left1]', 'Fungus1_03[right1]', 'Fungus1_04[left1]', 'Fungus1_04[right1]', 'Fungus1_05[bot1]', 'Fungus1_05[right1]', 'Fungus1_05[top1]', 'Fungus1_06[bot1]', 'Fungus1_06[left1]', 'Fungus1_07[left1]', 'Fungus1_07[right1]', 'Fungus1_07[top1]', 'Fungus1_08[left1]', 'Fungus1_09[left1]', 'Fungus1_09[right1]', 'Fungus1_10[left1]', 'Fungus1_10[right1]', 'Fungus1_10[top1]', 'Fungus1_11', 'Fungus1_11[bot1]', 'Fungus1_11[left1]', 'Fungus1_11[right1]', 'Fungus1_11[right2]', 'Fungus1_11[top1]', 'Fungus1_12[left1]', 'Fungus1_12[right1]', 'Fungus1_13[left1]', 'Fungus1_13[right1]', 'Fungus1_14[left1]', 'Fungus1_15[door1]', 'Fungus1_15[right1]', 'Fungus1_16_alt[right1]', 'Fungus1_17[left1]', 'Fungus1_17[right1]', 'Fungus1_19[bot1]', 'Fungus1_19[left1]', 'Fungus1_19[right1]', 'Fungus1_20_v02[bot1]', 'Fungus1_20_v02[bot2]', 'Fungus1_20_v02[right1]', 'Fungus1_21', 'Fungus1_21[bot1]', 'Fungus1_21[left1]', 'Fungus1_21[right1]', 'Fungus1_21[top1]', 'Fungus1_22[bot1]', 'Fungus1_22[left1]', 'Fungus1_22[top1]', 'Fungus1_23[left1]', 'Fungus1_23[right1]', 'Fungus1_24[left1]', 'Fungus1_25[left1]', 'Fungus1_25[right1]', 'Fungus1_26[door_SlugShrine]', 'Fungus1_26[left1]', 'Fungus1_26[right1]', 'Fungus1_28[left1]', 'Fungus1_28[left2]', 'Fungus1_29[left1]', 'Fungus1_29[right1]', 'Fungus1_30', 'Fungus1_30[left1]', 'Fungus1_30[right1]', 'Fungus1_30[top1]', 'Fungus1_30[top3]', 'Fungus1_31[bot1]', 'Fungus1_31[right1]', 'Fungus1_31[top1]', 'Fungus1_32[bot1]', 'Fungus1_32[left1]', 'Fungus1_32[top1]', 'Fungus1_34[door1]', 'Fungus1_34[left1]', 'Fungus1_35[left1]', 'Fungus1_35[right1]', 'Fungus1_36[left1]', 'Fungus1_37[left1]', 'Fungus1_Slug[right1]', 'Fungus2_01', 'Fungus2_01[left1]', 'Fungus2_01[left2]', 'Fungus2_01[left3]', 'Fungus2_01[right1]', 'Fungus2_02[right1]', 'Fungus2_03', 'Fungus2_03[bot1]', 'Fungus2_03[left1]', 'Fungus2_03[right1]', 'Fungus2_04', 'Fungus2_04[left1]', 'Fungus2_04[right1]', 'Fungus2_04[right2]', 'Fungus2_04[top1]', 'Fungus2_05[bot1]', 'Fungus2_05[right1]', 'Fungus2_06', 'Fungus2_06[left1]', 'Fungus2_06[left2]', 'Fungus2_06[right1]', 'Fungus2_06[right2]', 'Fungus2_06[top1]', 'Fungus2_07[left1]', 'Fungus2_07[right1]', 'Fungus2_08[left1]', 'Fungus2_08[left2]', 'Fungus2_08[right1]', 'Fungus2_09[left1]', 'Fungus2_09[right1]', 'Fungus2_10[bot1]', 'Fungus2_10[right1]', 'Fungus2_10[right2]', 'Fungus2_11', 'Fungus2_11[left1]', 'Fungus2_11[left2]', 'Fungus2_11[right1]', 'Fungus2_11[top1]', 'Fungus2_12[bot1]', 'Fungus2_12[left1]', 'Fungus2_13', 'Fungus2_13[left2]', 'Fungus2_13[left3]', 'Fungus2_13[top1]', 'Fungus2_14', 'Fungus2_14[bot3]', 'Fungus2_14[right1]', 'Fungus2_14[top1]', 'Fungus2_15[left1]', 'Fungus2_15[right1]', 'Fungus2_15[top3]', 'Fungus2_17', 'Fungus2_17[bot1]', 'Fungus2_17[left1]', 'Fungus2_17[right1]', 'Fungus2_18[bot1]', 'Fungus2_18[right1]', 'Fungus2_18[top1]', 'Fungus2_19[left1]', 'Fungus2_19[top1]', 'Fungus2_20', 'Fungus2_20[left1]', 'Fungus2_20[right1]', 'Fungus2_21[left1]', 'Fungus2_21[right1]', 'Fungus2_23', 'Fungus2_23[right1]', 'Fungus2_23[right2]', 'Fungus2_25[right1]', 'Fungus2_25[top1]', 'Fungus2_25[top2]', 'Fungus2_26[left1]', 'Fungus2_28[left1]', 'Fungus2_28[left2]', 'Fungus2_29[bot1]', 'Fungus2_29[right1]', 'Fungus2_30[bot1]', 'Fungus2_30[top1]', 'Fungus2_31[left1]', 'Fungus2_32[left1]', 'Fungus2_33[left1]', 'Fungus2_33[right1]', 'Fungus2_34[right1]', 'Fungus3_01', 'Fungus3_01[left1]', 'Fungus3_01[right1]', 'Fungus3_01[right2]', 'Fungus3_01[top1]', 'Fungus3_02', 'Fungus3_02[left1]', 'Fungus3_02[left2]', 'Fungus3_02[left3]', 'Fungus3_02[right1]', 'Fungus3_02[right2]', 'Fungus3_03[left1]', 'Fungus3_03[right1]', 'Fungus3_04', 'Fungus3_04[left1]', 'Fungus3_04[left2]', 'Fungus3_04[right1]', 'Fungus3_04[right2]', 'Fungus3_05[left1]', 'Fungus3_05[right1]', 'Fungus3_05[right2]', 'Fungus3_08[left1]', 'Fungus3_08[right1]', 'Fungus3_08[top1]', 'Fungus3_10[bot1]', 'Fungus3_10[top1]', 'Fungus3_11', 'Fungus3_11[left1]', 'Fungus3_11[left2]', 'Fungus3_11[right1]', 'Fungus3_13', 'Fungus3_13[bot1]', 'Fungus3_13[left1]', 'Fungus3_13[left2]', 'Fungus3_13[left3]', 'Fungus3_13[right1]', 'Fungus3_21[right1]', 'Fungus3_21[top1]', 'Fungus3_22', 'Fungus3_22[bot1]', 'Fungus3_22[left1]', 'Fungus3_22[right1]', 'Fungus3_23[left1]', 'Fungus3_23[right1]', 'Fungus3_24[left1]', 'Fungus3_24[right1]', 'Fungus3_24[top1]', 'Fungus3_25[left1]', 'Fungus3_25[right1]', 'Fungus3_25b[left1]', 'Fungus3_25b[right1]', 'Fungus3_26', 'Fungus3_26[left1]', 'Fungus3_26[left2]', 'Fungus3_26[left3]', 'Fungus3_26[right1]', 'Fungus3_26[top1]', 'Fungus3_27[left1]', 'Fungus3_27[right1]', 'Fungus3_28[right1]', 'Fungus3_30[bot1]', 'Fungus3_34', 'Fungus3_34[left1]', 'Fungus3_34[right1]', 'Fungus3_34[top1]', 'Fungus3_35[right1]', 'Fungus3_39[left1]', 'Fungus3_39[right1]', 'Fungus3_40[right1]', 'Fungus3_40[top1]', 'Fungus3_44', 'Fungus3_44[bot1]', 'Fungus3_44[door1]', 'Fungus3_44[right1]', 'Fungus3_47', 'Fungus3_47[door1]', 'Fungus3_47[left1]', 'Fungus3_47[right1]', 'Fungus3_48[bot1]', 'Fungus3_48[door1]', 'Fungus3_48[right1]', 'Fungus3_48[right2]', 'Fungus3_49[right1]', 'Fungus3_50[right1]', 'Fungus3_archive[bot1]', 'Fungus3_archive[left1]', 'Fungus3_archive_02[top1]', 'GG_Lurker[left1]', 'GG_Pipeway[left1]', 'GG_Pipeway[right1]', 'GG_Waterways[door1]', 'GG_Waterways[right1]', 'GRIMMCHILD', 'Glowing_Womb', 'Great_Slash', 'Greenpath_Stag', 'Grimm_Divine[left1]', 'Grimm_Main_Tent[left1]', "Grubberfly's_Elegy", 'Herrah', 'Hidden_Station_Stag', 'Hive_01[left1]', 'Hive_01[right1]', 'Hive_01[right2]', 'Hive_02[left1]', 'Hive_02[left2]', 'Hive_02[left3]', 'Hive_03[bot1]', 'Hive_03[right1]', 'Hive_03[top1]', 'Hive_03_c', 'Hive_03_c[left1]', 'Hive_03_c[right2]', 'Hive_03_c[right3]', 'Hive_03_c[top1]', 'Hive_04[left1]', 'Hive_04[left2]', 'Hive_04[right1]', 'Hive_05[left1]', "Joni's_Blessing", "King's_Station_Stag", 'LANTERN', 'LEFTCLAW', 'LEFTDASH', 'LEFTSLASH', 'LEFTSUPERDASH', 'LOVE', 'Left_Elevator', 'Lever-Dung_Defender', 'Lever-Shade_Soul', 'Lifeblood_Core', 'Lifeblood_Heart', 'Lit_Abyss_Lighthouse', 'Longnail', 'Lower_Tram', 'MASKSHARDS', 'Mark_of_Pride', 'Mines_01[bot1]', 'Mines_01[left1]', 'Mines_02', 'Mines_02[left1]', 'Mines_02[right1]', 'Mines_02[top1]', 'Mines_02[top2]', 'Mines_03', 'Mines_03[bot1]', 'Mines_03[right1]', 'Mines_03[top1]', 'Mines_04', 'Mines_04[left1]', 'Mines_04[left2]', 'Mines_04[left3]', 'Mines_04[right1]', 'Mines_04[top1]', 'Mines_05', 'Mines_05[bot1]', 'Mines_05[left1]', 'Mines_05[left2]', 'Mines_05[right1]', 'Mines_05[top1]', 'Mines_06[left1]', 'Mines_06[right1]', 'Mines_07[left1]', 'Mines_07[right1]', 'Mines_10', 'Mines_10[bot1]', 'Mines_10[left1]', 'Mines_10[right1]', 'Mines_11', 'Mines_11[bot1]', 'Mines_11[right1]', 'Mines_11[top1]', 'Mines_13[bot1]', 'Mines_13[right1]', 'Mines_13[top1]', 'Mines_16[top1]', 'Mines_17[left1]', 'Mines_17[right1]', 'Mines_18', 'Mines_18[left1]', 'Mines_18[right1]', 'Mines_18[top1]', 'Mines_19[left1]', 'Mines_19[right1]', 'Mines_20', 'Mines_20[bot1]', 'Mines_20[left1]', 'Mines_20[left2]', 'Mines_20[left3]', 'Mines_20[right1]', 'Mines_20[right2]', 'Mines_23[left1]', 'Mines_23[right1]', 'Mines_23[right2]', 'Mines_23[top1]', 'Mines_24[left1]', 'Mines_25[left1]', 'Mines_25[top1]', 'Mines_28[bot1]', 'Mines_28[door1]', 'Mines_28[left1]', 'Mines_29[left1]', 'Mines_29[right1]', 'Mines_29[right2]', 'Mines_30[left1]', 'Mines_30[right1]', 'Mines_31[left1]', 'Mines_32[bot1]', 'Mines_33[left1]', 'Mines_33[right1]', 'Mines_34[bot1]', 'Mines_34[bot2]', 'Mines_34[left1]', 'Mines_35[left1]', 'Mines_36[right1]', 'Mines_37[bot1]', 'Mines_37[top1]', 'NOTCHES', 'Nightmare_Lantern_Lit', 'Opened_Archives_Exit_Wall', 'Opened_Black_Egg_Temple', 'Opened_Dung_Defender_Wall', 'Opened_Emilitia_Door', 'Opened_Gardens_Stag_Exit', 'Opened_Glade_Door', "Opened_Lower_Kingdom's_Edge_Wall", 'Opened_Mawlek_Wall', 'Opened_Pleasure_House_Wall', 'Opened_Resting_Grounds_Catacombs_Wall', 'Opened_Resting_Grounds_Floor', 'Opened_Shaman_Pillar', 'Opened_Tramway_Exit_Gate', 'Opened_Waterways_Exit', 'Opened_Waterways_Manhole', 'Palace_Atrium_Gates_Opened', 'Palace_Entrance_Lantern_Lit', 'Palace_Left_Lantern_Lit', 'Palace_Right_Lantern_Lit', 'QUAKE', "Queen's_Gardens_Stag", "Queen's_Station_Stag", 'RIGHTCLAW', 'RIGHTDASH', 'RIGHTSLASH', 'RIGHTSUPERDASH', 'Rescued_Bretta', 'Rescued_Deepnest_Zote', 'Rescued_Sly', 'RestingGrounds_02', 'RestingGrounds_02[bot1]', 'RestingGrounds_02[left1]', 'RestingGrounds_02[right1]', 'RestingGrounds_02[top1]', 'RestingGrounds_04[left1]', 'RestingGrounds_04[right1]', 'RestingGrounds_05', 'RestingGrounds_05[bot1]', 'RestingGrounds_05[left1]', 'RestingGrounds_05[left2]', 'RestingGrounds_05[left3]', 'RestingGrounds_05[right1]', 'RestingGrounds_05[right2]', 'RestingGrounds_06[left1]', 'RestingGrounds_06[right1]', 'RestingGrounds_06[top1]', 'RestingGrounds_07[right1]', 'RestingGrounds_08[left1]', 'RestingGrounds_09[left1]', 'RestingGrounds_10', 'RestingGrounds_10[left1]', 'RestingGrounds_10[top1]', 'RestingGrounds_10[top2]', 'RestingGrounds_12[bot1]', 'RestingGrounds_12[door_Mansion]', 'RestingGrounds_17[right1]', 'Resting_Grounds_Stag', 'Right_Elevator', 'Room_Bretta[right1]', 'Room_Charm_Shop[left1]', 'Room_Colosseum_01[bot1]', 'Room_Colosseum_01[left1]', 'Room_Colosseum_02[top1]', 'Room_Colosseum_02[top2]', 'Room_Colosseum_Spectate[bot1]', 'Room_Colosseum_Spectate[right1]', 'Room_Fungus_Shaman[left1]', 'Room_GG_Shortcut[left1]', 'Room_GG_Shortcut[top1]', 'Room_Mansion[left1]', 'Room_Mask_Maker[right1]', 'Room_Mender_House[left1]', 'Room_Ouiji[left1]', 'Room_Queen[left1]', 'Room_Slug_Shrine[left1]', 'Room_Town_Stag_Station[left1]', 'Room_Wyrm[right1]', 'Room_mapper[left1]', 'Room_nailmaster[left1]', 'Room_nailmaster_02[left1]', 'Room_nailmaster_03[left1]', 'Room_nailsmith[left1]', 'Room_ruinhouse[left1]', 'Room_shop[left1]', 'Room_spider_small[left1]', 'Room_temple[left1]', 'Ruins1_01[bot1]', 'Ruins1_01[left1]', 'Ruins1_01[top1]', 'Ruins1_02[bot1]', 'Ruins1_02[top1]', 'Ruins1_03', 'Ruins1_03[left1]', 'Ruins1_03[right1]', 'Ruins1_03[right2]', 'Ruins1_03[top1]', 'Ruins1_04[bot1]', 'Ruins1_04[door1]', 'Ruins1_04[right1]', 'Ruins1_05', 'Ruins1_05[bot1]', 'Ruins1_05[bot2]', 'Ruins1_05[bot3]', 'Ruins1_05[right1]', 'Ruins1_05[right2]', 'Ruins1_05[top1]', 'Ruins1_05b', 'Ruins1_05b[bot1]', 'Ruins1_05b[left1]', 'Ruins1_05b[right1]', 'Ruins1_05b[top1]', 'Ruins1_05c', 'Ruins1_05c[bot1]', 'Ruins1_05c[left2]', 'Ruins1_05c[top1]', 'Ruins1_05c[top2]', 'Ruins1_05c[top3]', 'Ruins1_06[left1]', 'Ruins1_06[right1]', 'Ruins1_09[left1]', 'Ruins1_09[top1]', 'Ruins1_17[bot1]', 'Ruins1_17[right1]', 'Ruins1_17[top1]', 'Ruins1_18[left1]', 'Ruins1_18[right1]', 'Ruins1_18[right2]', 'Ruins1_23', 'Ruins1_23[bot1]', 'Ruins1_23[left1]', 'Ruins1_23[right1]', 'Ruins1_23[right2]', 'Ruins1_23[top1]', 'Ruins1_24[left1]', 'Ruins1_24[left2]', 'Ruins1_24[right1]', 'Ruins1_24[right2]', 'Ruins1_25[left1]', 'Ruins1_25[left2]', 'Ruins1_25[left3]', 'Ruins1_27[left1]', 'Ruins1_27[right1]', 'Ruins1_28', 'Ruins1_28[bot1]', 'Ruins1_28[left1]', 'Ruins1_28[right1]', 'Ruins1_29[left1]', 'Ruins1_30', 'Ruins1_30[bot1]', 'Ruins1_30[left1]', 'Ruins1_30[left2]', 'Ruins1_30[right1]', 'Ruins1_31', 'Ruins1_31[bot1]', 'Ruins1_31[left1]', 'Ruins1_31[left2]', 'Ruins1_31[left3]', 'Ruins1_31[right1]', 'Ruins1_31b[right1]', 'Ruins1_31b[right2]', 'Ruins1_32[right1]', 'Ruins1_32[right2]', 'Ruins2_01', 'Ruins2_01[bot1]', 'Ruins2_01[left2]', 'Ruins2_01[top1]', 'Ruins2_01_b', 'Ruins2_01_b[left1]', 'Ruins2_01_b[right1]', 'Ruins2_01_b[top1]', 'Ruins2_03[bot1]', 'Ruins2_03[bot2]', 'Ruins2_03[top1]', 'Ruins2_03b', 'Ruins2_03b[bot1]', 'Ruins2_03b[left1]', 'Ruins2_03b[top1]', 'Ruins2_03b[top2]', 'Ruins2_04', 'Ruins2_04[door_Ruin_Elevator]', 'Ruins2_04[door_Ruin_House_01]', 'Ruins2_04[door_Ruin_House_02]', 'Ruins2_04[door_Ruin_House_03]', 'Ruins2_04[left1]', 'Ruins2_04[left2]', 'Ruins2_04[right1]', 'Ruins2_04[right2]', 'Ruins2_05[bot1]', 'Ruins2_05[left1]', 'Ruins2_05[top1]', 'Ruins2_06[left1]', 'Ruins2_06[left2]', 'Ruins2_06[right1]', 'Ruins2_06[right2]', 'Ruins2_06[top1]', 'Ruins2_07[left1]', 'Ruins2_07[right1]', 'Ruins2_07[top1]', 'Ruins2_08[left1]', 'Ruins2_09[bot1]', 'Ruins2_10[left1]', 'Ruins2_10[right1]', 'Ruins2_10b[left1]', 'Ruins2_10b[right1]', 'Ruins2_10b[right2]', 'Ruins2_11[right1]', 'Ruins2_11_b[bot1]', 'Ruins2_11_b[left1]', 'Ruins2_11_b[right1]', 'Ruins2_Watcher_Room[bot1]', 'Ruins_Bathhouse[door1]', 'Ruins_Bathhouse[right1]', 'Ruins_Elevator[left1]', 'Ruins_Elevator[left2]', 'Ruins_House_01[left1]', 'Ruins_House_02[left1]', 'Ruins_House_03[left1]', 'Ruins_House_03[left2]', 'SCREAM', 'SHOPKEY', 'SIMPLE', 'SPELLS', 'STAGS', 'SWIM', 'Second_Grimmchild_Upgrade', 'Sharp_Shadow', 'Spore_Shroom', 'Sprintmaster', 'Stag_Nest_Stag', 'TRAM', 'Town', 'Town[bot1]', 'Town[door_bretta]', 'Town[door_jiji]', 'Town[door_mapper]', 'Town[door_sly]', 'Town[door_station]', 'Town[left1]', 'Town[right1]', 'Town[room_divine]', 'Town[room_grimm]', 'Town[top1]', 'Tutorial_01', 'Tutorial_01[right1]', 'Tutorial_01[top1]', 'Tutorial_01[top2]', 'UPSLASH', 'Upper_Tram', 'WHITEFRAGMENT', 'WINGS', 'Warp-Lifeblood_Core_to_Abyss', 'Warp-Palace_Grounds_to_White_Palace', 'Warp-Path_of_Pain_Complete', 'Warp-White_Palace_Atrium_to_Palace_Grounds', 'Warp-White_Palace_Entrance_to_Palace_Grounds', 'Waterways_01', 'Waterways_01[bot1]', 'Waterways_01[left1]', 'Waterways_01[right1]', 'Waterways_01[top1]', 'Waterways_02', 'Waterways_02[bot1]', 'Waterways_02[bot2]', 'Waterways_02[top1]', 'Waterways_02[top2]', 'Waterways_02[top3]', 'Waterways_03[left1]', 'Waterways_04[bot1]', 'Waterways_04[left1]', 'Waterways_04[left2]', 'Waterways_04[right1]', 'Waterways_04b[left1]', 'Waterways_04b[right1]', 'Waterways_04b[right2]', 'Waterways_05[bot1]', 'Waterways_05[bot2]', 'Waterways_05[right1]', 'Waterways_06[right1]', 'Waterways_06[top1]', 'Waterways_07', 'Waterways_07[door1]', 'Waterways_07[left1]', 'Waterways_07[right1]', 'Waterways_07[right2]', 'Waterways_07[top1]', 'Waterways_08[left1]', 'Waterways_08[left2]', 'Waterways_08[top1]', 'Waterways_09[left1]', 'Waterways_09[right1]', 'Waterways_12[right1]', 'Waterways_13[left1]', 'Waterways_13[left2]', 'Waterways_14[bot1]', 'Waterways_14[bot2]', 'Waterways_15[top1]', 'Weaversong', 'White_Palace_01', 'White_Palace_01[left1]', 'White_Palace_01[right1]', 'White_Palace_01[top1]', 'White_Palace_02[left1]', 'White_Palace_03_hub', 'White_Palace_03_hub[bot1]', 'White_Palace_03_hub[left1]', 'White_Palace_03_hub[left2]', 'White_Palace_03_hub[right1]', 'White_Palace_03_hub[top1]', 'White_Palace_04[right2]', 'White_Palace_04[top1]', 'White_Palace_05[left1]', 'White_Palace_05[left2]', 'White_Palace_05[right1]', 'White_Palace_05[right2]', 'White_Palace_06[bot1]', 'White_Palace_06[left1]', 'White_Palace_06[top1]', 'White_Palace_07[bot1]', 'White_Palace_07[top1]', 'White_Palace_08[left1]', 'White_Palace_08[right1]', 'White_Palace_09[right1]', 'White_Palace_11[door2]', 'White_Palace_12[bot1]', 'White_Palace_12[right1]', 'White_Palace_13', 'White_Palace_13[left1]', 'White_Palace_13[left2]', 'White_Palace_13[left3]', 'White_Palace_13[right1]', 'White_Palace_14[bot1]', 'White_Palace_14[right1]', 'White_Palace_15[left1]', 'White_Palace_15[right1]', 'White_Palace_15[right2]', 'White_Palace_16[left1]', 'White_Palace_16[left2]', 'White_Palace_17[bot1]', 'White_Palace_17[right1]', 'White_Palace_18[right1]', 'White_Palace_18[top1]', 'White_Palace_19[left1]', 'White_Palace_19[top1]', 'White_Palace_20[bot1]'} +logic_options = {'PRECISEMOVEMENT': 'PreciseMovement', 'PROFICIENTCOMBAT': 'ProficientCombat', 'BACKGROUNDPOGOS': 'BackgroundObjectPogos', 'ENEMYPOGOS': 'EnemyPogos', 'OBSCURESKIPS': 'ObscureSkips', 'SHADESKIPS': 'ShadeSkips', 'INFECTIONSKIPS': 'InfectionSkips', 'FIREBALLSKIPS': 'FireballSkips', 'SPIKETUNNELS': 'SpikeTunnels', 'ACIDSKIPS': 'AcidSkips', 'DAMAGEBOOSTS': 'DamageBoosts', 'DANGEROUSSKIPS': 'DangerousSkips', 'DARKROOMS': 'DarkRooms', 'COMPLEXSKIPS': 'ComplexSkips', 'DIFFICULTSKIPS': 'DifficultSkips', 'RANDOMNAIL': 'RandomizeNail', 'CURSED': 'RemoveSpellUpgrades', 'RANDOMFOCUS': 'RandomizeFocus', 'RANDOMELEVATORS': 'RandomizeElevatorPass', 'ALTBLACKEGG': "AltBlackEgg", 'ALTRADIANCE': "AltRadiance"} +multi_locations = {'Sly': ['Sly_1', 'Sly_2', 'Sly_3', 'Sly_4', 'Sly_5', 'Sly_6', 'Sly_7', 'Sly_8', 'Sly_9', 'Sly_10', 'Sly_11', 'Sly_12', 'Sly_13', 'Sly_14', 'Sly_15', 'Sly_16'], 'Sly_(Key)': ['Sly_(Key)_1', 'Sly_(Key)_2', 'Sly_(Key)_3', 'Sly_(Key)_4', 'Sly_(Key)_5', 'Sly_(Key)_6', 'Sly_(Key)_7', 'Sly_(Key)_8', 'Sly_(Key)_9', 'Sly_(Key)_10', 'Sly_(Key)_11', 'Sly_(Key)_12', 'Sly_(Key)_13', 'Sly_(Key)_14', 'Sly_(Key)_15', 'Sly_(Key)_16'], 'Iselda': ['Iselda_1', 'Iselda_2', 'Iselda_3', 'Iselda_4', 'Iselda_5', 'Iselda_6', 'Iselda_7', 'Iselda_8', 'Iselda_9', 'Iselda_10', 'Iselda_11', 'Iselda_12', 'Iselda_13', 'Iselda_14', 'Iselda_15', 'Iselda_16'], 'Salubra': ['Salubra_1', 'Salubra_2', 'Salubra_3', 'Salubra_4', 'Salubra_5', 'Salubra_6', 'Salubra_7', 'Salubra_8', 'Salubra_9', 'Salubra_10', 'Salubra_11', 'Salubra_12', 'Salubra_13', 'Salubra_14', 'Salubra_15', 'Salubra_16'], 'Salubra_(Requires_Charms)': ['Salubra_(Requires_Charms)_1', 'Salubra_(Requires_Charms)_2', 'Salubra_(Requires_Charms)_3', 'Salubra_(Requires_Charms)_4', 'Salubra_(Requires_Charms)_5', 'Salubra_(Requires_Charms)_6', 'Salubra_(Requires_Charms)_7', 'Salubra_(Requires_Charms)_8', 'Salubra_(Requires_Charms)_9', 'Salubra_(Requires_Charms)_10', 'Salubra_(Requires_Charms)_11', 'Salubra_(Requires_Charms)_12', 'Salubra_(Requires_Charms)_13', 'Salubra_(Requires_Charms)_14', 'Salubra_(Requires_Charms)_15', 'Salubra_(Requires_Charms)_16'], 'Leg_Eater': ['Leg_Eater_1', 'Leg_Eater_2', 'Leg_Eater_3', 'Leg_Eater_4', 'Leg_Eater_5', 'Leg_Eater_6', 'Leg_Eater_7', 'Leg_Eater_8', 'Leg_Eater_9', 'Leg_Eater_10', 'Leg_Eater_11', 'Leg_Eater_12', 'Leg_Eater_13', 'Leg_Eater_14', 'Leg_Eater_15', 'Leg_Eater_16'], 'Grubfather': ['Grubfather_1', 'Grubfather_2', 'Grubfather_3', 'Grubfather_4', 'Grubfather_5', 'Grubfather_6', 'Grubfather_7', 'Grubfather_8', 'Grubfather_9', 'Grubfather_10', 'Grubfather_11', 'Grubfather_12', 'Grubfather_13', 'Grubfather_14', 'Grubfather_15', 'Grubfather_16'], 'Seer': ['Seer_1', 'Seer_2', 'Seer_3', 'Seer_4', 'Seer_5', 'Seer_6', 'Seer_7', 'Seer_8', 'Seer_9', 'Seer_10', 'Seer_11', 'Seer_12', 'Seer_13', 'Seer_14', 'Seer_15', 'Seer_16'], 'Egg_Shop': ['Egg_Shop_1', 'Egg_Shop_2', 'Egg_Shop_3', 'Egg_Shop_4', 'Egg_Shop_5', 'Egg_Shop_6', 'Egg_Shop_7', 'Egg_Shop_8', 'Egg_Shop_9', 'Egg_Shop_10', 'Egg_Shop_11', 'Egg_Shop_12', 'Egg_Shop_13', 'Egg_Shop_14', 'Egg_Shop_15', 'Egg_Shop_16']} +one_ways = {'Cliffs_02[bot2]', 'Cliffs_02[right1]', 'Deepnest_01[bot2]', 'Deepnest_01b[top2]', 'Deepnest_East_03[top2]', 'Deepnest_East_07[bot2]', 'Fungus2_25[top2]', 'Fungus2_30[bot1]', 'Mines_13[top1]', 'Mines_23[top1]', 'Mines_28[bot1]', 'Mines_34[bot2]', 'Mines_34[left1]', 'RestingGrounds_02[top1]', 'Town[top1]', 'Tutorial_01[top1]'} +pool_options = {'AltBlackEgg': (['World_Sense'], ['Lurien', 'Monomon', 'Herrah', 'World_Sense']),'AltRadiance': ([], ['Queen_Fragment', 'King_Fragment', 'Void_Heart']),'RandomizeDreamers': (['Lurien', 'Monomon', 'Herrah', 'World_Sense'], ['Lurien', 'Monomon', 'Herrah', 'World_Sense']), 'RandomizeSkills': (['Mothwing_Cloak', 'Mantis_Claw', 'Crystal_Heart', 'Monarch_Wings', 'Shade_Cloak', "Isma's_Tear", 'Dream_Nail', 'Dream_Gate', 'Awoken_Dream_Nail', 'Vengeful_Spirit', 'Shade_Soul', 'Desolate_Dive', 'Descending_Dark', 'Howling_Wraiths', 'Abyss_Shriek', 'Cyclone_Slash', 'Dash_Slash', 'Great_Slash'], ['Mothwing_Cloak', 'Mantis_Claw', 'Crystal_Heart', 'Monarch_Wings', 'Shade_Cloak', "Isma's_Tear", 'Dream_Nail', 'Seer', 'Seer', 'Vengeful_Spirit', 'Shade_Soul', 'Desolate_Dive', 'Descending_Dark', 'Howling_Wraiths', 'Abyss_Shriek', 'Cyclone_Slash', 'Dash_Slash', 'Great_Slash']), 'RandomizeFocus': (['Focus'], ['Start']), 'RandomizeSwim': (['Swim'], ['Start']), 'RandomizeCharms': (['Grubsong', 'Baldur_Shell', 'Fury_of_the_Fallen', 'Lifeblood_Core', "Defender's_Crest", 'Flukenest', 'Thorns_of_Agony', 'Mark_of_Pride', 'Sharp_Shadow', 'Spore_Shroom', 'Soul_Catcher', 'Soul_Eater', 'Glowing_Womb', "Nailmaster's_Glory", "Joni's_Blessing", 'Shape_of_Unn', 'Hiveblood', 'Dream_Wielder', 'Dashmaster', 'Quick_Slash', 'Spell_Twister', 'Deep_Focus', "Grubberfly's_Elegy", 'Queen_Fragment', 'King_Fragment', 'Void_Heart', 'Dreamshield', 'Weaversong', 'Grimmchild2', 'Gathering_Swarm', 'Stalwart_Shell', 'Heavy_Blow', 'Sprintmaster', 'Wayward_Compass', 'Lifeblood_Heart', 'Longnail', 'Steady_Body', 'Shaman_Stone', 'Quick_Focus', 'Fragile_Heart', 'Fragile_Greed', 'Fragile_Strength', 'Unbreakable_Heart', 'Unbreakable_Greed', 'Unbreakable_Strength'], ['Grubfather', 'Baldur_Shell', 'Fury_of_the_Fallen', 'Lifeblood_Core', "Defender's_Crest", 'Flukenest', 'Thorns_of_Agony', 'Mark_of_Pride', 'Sharp_Shadow', 'Spore_Shroom', 'Soul_Catcher', 'Soul_Eater', 'Glowing_Womb', "Nailmaster's_Glory", "Joni's_Blessing", 'Shape_of_Unn', 'Hiveblood', 'Seer', 'Dashmaster', 'Quick_Slash', 'Spell_Twister', 'Deep_Focus', 'Grubfather', 'Queen_Fragment', 'King_Fragment', 'Void_Heart', 'Dreamshield', 'Weaversong', 'Grimmchild', 'Sly', 'Sly', 'Sly_(Key)', 'Sly_(Key)', 'Iselda', 'Salubra', 'Salubra', 'Salubra', 'Salubra', 'Salubra', 'Leg_Eater', 'Leg_Eater', 'Leg_Eater', 'Unbreakable_Heart', 'Unbreakable_Greed', 'Unbreakable_Strength']), 'RandomizeKeys': (['City_Crest', 'Tram_Pass', 'Simple_Key', 'Simple_Key', 'Simple_Key', "Shopkeeper's_Key", 'Love_Key', "King's_Brand", 'Godtuner', "Collector's_Map", 'Lumafly_Lantern', 'Simple_Key', 'Elegant_Key'], ['City_Crest', 'Tram_Pass', 'Simple_Key-Basin', 'Simple_Key-City', 'Simple_Key-Lurker', "Shopkeeper's_Key", 'Love_Key', "King's_Brand", 'Godtuner', "Collector's_Map", 'Sly', 'Sly', 'Sly_(Key)']), 'RandomizeMaskShards': (['Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard', 'Mask_Shard'], ['Seer', 'Grubfather', 'Mask_Shard-Brooding_Mawlek', 'Mask_Shard-Crossroads_Goam', 'Mask_Shard-Stone_Sanctuary', "Mask_Shard-Queen's_Station", 'Mask_Shard-Deepnest', 'Mask_Shard-Waterways', 'Mask_Shard-Enraged_Guardian', 'Mask_Shard-Hive', 'Mask_Shard-Grey_Mourner', 'Mask_Shard-Bretta', 'Sly', 'Sly', 'Sly_(Key)', 'Sly_(Key)']), 'RandomizeVesselFragments': (['Vessel_Fragment', 'Vessel_Fragment', 'Vessel_Fragment', 'Vessel_Fragment', 'Vessel_Fragment', 'Vessel_Fragment', 'Vessel_Fragment', 'Vessel_Fragment', 'Vessel_Fragment'], ['Seer', 'Vessel_Fragment-Greenpath', 'Vessel_Fragment-City', 'Vessel_Fragment-Crossroads', 'Vessel_Fragment-Basin', 'Vessel_Fragment-Deepnest', 'Vessel_Fragment-Stag_Nest', 'Sly', 'Sly_(Key)']), 'RandomizeCharmNotches': (['Charm_Notch', 'Charm_Notch', 'Charm_Notch', 'Charm_Notch', 'Charm_Notch', 'Charm_Notch', 'Charm_Notch', 'Charm_Notch', "Salubra's_Blessing"], ['Charm_Notch-Shrumal_Ogres', 'Charm_Notch-Fog_Canyon', 'Charm_Notch-Colosseum', 'Charm_Notch-Grimm', 'Salubra_(Requires_Charms)', 'Salubra_(Requires_Charms)', 'Salubra_(Requires_Charms)', 'Salubra_(Requires_Charms)', 'Salubra_(Requires_Charms)']), 'RandomizePaleOre': (['Pale_Ore', 'Pale_Ore', 'Pale_Ore', 'Pale_Ore', 'Pale_Ore', 'Pale_Ore'], ['Pale_Ore-Basin', 'Pale_Ore-Crystal_Peak', 'Pale_Ore-Nosk', 'Seer', 'Grubfather', 'Pale_Ore-Colosseum']), 'RandomizeGeoChests': (['Geo_Chest-False_Knight', 'Geo_Chest-Soul_Master', 'Geo_Chest-Watcher_Knights', 'Geo_Chest-Greenpath', 'Geo_Chest-Mantis_Lords', 'Geo_Chest-Resting_Grounds', 'Geo_Chest-Crystal_Peak', 'Geo_Chest-Weavers_Den'], ['Geo_Chest-False_Knight', 'Geo_Chest-Soul_Master', 'Geo_Chest-Watcher_Knights', 'Geo_Chest-Greenpath', 'Geo_Chest-Mantis_Lords', 'Geo_Chest-Resting_Grounds', 'Geo_Chest-Crystal_Peak', 'Geo_Chest-Weavers_Den']), 'RandomizeJunkPitChests': (['Geo_Chest-Junk_Pit_1', 'Geo_Chest-Junk_Pit_2', 'Geo_Chest-Junk_Pit_3', 'Geo_Chest-Junk_Pit_5', 'Lumafly_Escape'], ['Geo_Chest-Junk_Pit_1', 'Geo_Chest-Junk_Pit_2', 'Geo_Chest-Junk_Pit_3', 'Geo_Chest-Junk_Pit_5', 'Lumafly_Escape-Junk_Pit_Chest_4']), 'RandomizeRancidEggs': (['Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg', 'Rancid_Egg'], ['Grubfather', 'Rancid_Egg-Sheo', 'Rancid_Egg-Fungal_Core', "Rancid_Egg-Queen's_Gardens", 'Rancid_Egg-Blue_Lake', 'Rancid_Egg-Crystal_Peak_Dive_Entrance', 'Rancid_Egg-Crystal_Peak_Dark_Room', 'Rancid_Egg-Crystal_Peak_Tall_Room', 'Rancid_Egg-City_of_Tears_Left', 'Rancid_Egg-City_of_Tears_Pleasure_House', "Rancid_Egg-Beast's_Den", 'Rancid_Egg-Dark_Deepnest', "Rancid_Egg-Weaver's_Den", 'Rancid_Egg-Near_Quick_Slash', "Rancid_Egg-Upper_Kingdom's_Edge", 'Rancid_Egg-Waterways_East', 'Rancid_Egg-Waterways_Main', 'Rancid_Egg-Waterways_West_Bluggsac', 'Rancid_Egg-Waterways_West_Pickup', 'Sly']), 'RandomizeRelics': (["Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", "Wanderer's_Journal", 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', 'Hallownest_Seal', "King's_Idol", "King's_Idol", "King's_Idol", "King's_Idol", "King's_Idol", "King's_Idol", "King's_Idol", "King's_Idol", 'Arcane_Egg', 'Arcane_Egg', 'Arcane_Egg', 'Arcane_Egg'], ["Wanderer's_Journal-Cliffs", "Wanderer's_Journal-Greenpath_Stag", "Wanderer's_Journal-Greenpath_Lower", "Wanderer's_Journal-Fungal_Wastes_Thorns_Gauntlet", "Wanderer's_Journal-Above_Mantis_Village", "Wanderer's_Journal-Crystal_Peak_Crawlers", "Wanderer's_Journal-Resting_Grounds_Catacombs", "Wanderer's_Journal-King's_Station", "Wanderer's_Journal-Pleasure_House", "Wanderer's_Journal-City_Storerooms", "Wanderer's_Journal-Ancient_Basin", "Wanderer's_Journal-Kingdom's_Edge_Entrance", "Wanderer's_Journal-Kingdom's_Edge_Camp", "Wanderer's_Journal-Kingdom's_Edge_Requires_Dive", 'Hallownest_Seal-Crossroads_Well', 'Grubfather', 'Hallownest_Seal-Greenpath', 'Hallownest_Seal-Fog_Canyon_West', 'Hallownest_Seal-Fog_Canyon_East', "Hallownest_Seal-Queen's_Station", 'Hallownest_Seal-Fungal_Wastes_Sporgs', 'Hallownest_Seal-Mantis_Lords', 'Seer', 'Hallownest_Seal-Resting_Grounds_Catacombs', "Hallownest_Seal-King's_Station", 'Hallownest_Seal-City_Rafters', 'Hallownest_Seal-Soul_Sanctum', 'Hallownest_Seal-Watcher_Knight', 'Hallownest_Seal-Deepnest_By_Mantis_Lords', "Hallownest_Seal-Beast's_Den", "Hallownest_Seal-Queen's_Gardens", 'Grubfather', "King's_Idol-Cliffs", "King's_Idol-Crystal_Peak", "King's_Idol-Glade_of_Hope", "King's_Idol-Dung_Defender", "King's_Idol-Great_Hopper", "King's_Idol-Pale_Lurker", "King's_Idol-Deepnest", 'Seer', 'Arcane_Egg-Lifeblood_Core', 'Arcane_Egg-Shade_Cloak', 'Arcane_Egg-Birthplace']), 'RandomizeWhisperingRoots': (['Whispering_Root-Crossroads', 'Whispering_Root-Greenpath', 'Whispering_Root-Leg_Eater', 'Whispering_Root-Mantis_Village', 'Whispering_Root-Deepnest', 'Whispering_Root-Queens_Gardens', 'Whispering_Root-Kingdoms_Edge', 'Whispering_Root-Waterways', 'Whispering_Root-City', 'Whispering_Root-Resting_Grounds', 'Whispering_Root-Spirits_Glade', 'Whispering_Root-Crystal_Peak', 'Whispering_Root-Howling_Cliffs', 'Whispering_Root-Ancestral_Mound', 'Whispering_Root-Hive'], ['Whispering_Root-Crossroads', 'Whispering_Root-Greenpath', 'Whispering_Root-Leg_Eater', 'Whispering_Root-Mantis_Village', 'Whispering_Root-Deepnest', 'Whispering_Root-Queens_Gardens', 'Whispering_Root-Kingdoms_Edge', 'Whispering_Root-Waterways', 'Whispering_Root-City', 'Whispering_Root-Resting_Grounds', 'Whispering_Root-Spirits_Glade', 'Whispering_Root-Crystal_Peak', 'Whispering_Root-Howling_Cliffs', 'Whispering_Root-Ancestral_Mound', 'Whispering_Root-Hive']), 'RandomizeBossEssence': (['Boss_Essence-Elder_Hu', 'Boss_Essence-Xero', 'Boss_Essence-Gorb', 'Boss_Essence-Marmu', 'Boss_Essence-No_Eyes', 'Boss_Essence-Galien', 'Boss_Essence-Markoth', 'Boss_Essence-Failed_Champion', 'Boss_Essence-Soul_Tyrant', 'Boss_Essence-Lost_Kin', 'Boss_Essence-White_Defender', 'Boss_Essence-Grey_Prince_Zote'], ['Boss_Essence-Elder_Hu', 'Boss_Essence-Xero', 'Boss_Essence-Gorb', 'Boss_Essence-Marmu', 'Boss_Essence-No_Eyes', 'Boss_Essence-Galien', 'Boss_Essence-Markoth', 'Boss_Essence-Failed_Champion', 'Boss_Essence-Soul_Tyrant', 'Boss_Essence-Lost_Kin', 'Boss_Essence-White_Defender', 'Boss_Essence-Grey_Prince_Zote']), 'RandomizeGrubs': (['Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub', 'Grub'], ['Grub-Crossroads_Acid', 'Grub-Crossroads_Center', 'Grub-Crossroads_Stag', 'Grub-Crossroads_Spike', 'Grub-Crossroads_Guarded', 'Grub-Greenpath_Cornifer', 'Grub-Greenpath_Journal', 'Grub-Greenpath_MMC', 'Grub-Greenpath_Stag', 'Grub-Fog_Canyon', 'Grub-Fungal_Bouncy', 'Grub-Fungal_Spore_Shroom', 'Grub-Deepnest_Mimic', 'Grub-Deepnest_Nosk', 'Grub-Deepnest_Spike', 'Grub-Dark_Deepnest', "Grub-Beast's_Den", "Grub-Kingdom's_Edge_Oro", "Grub-Kingdom's_Edge_Camp", 'Grub-Hive_External', 'Grub-Hive_Internal', 'Grub-Basin_Requires_Wings', 'Grub-Basin_Requires_Dive', 'Grub-Waterways_Main', "Grub-Isma's_Grove", 'Grub-Waterways_Requires_Tram', 'Grub-City_of_Tears_Left', 'Grub-Soul_Sanctum', "Grub-Watcher's_Spire", 'Grub-City_of_Tears_Guarded', "Grub-King's_Station", 'Grub-Resting_Grounds', 'Grub-Crystal_Peak_Below_Chest', 'Grub-Crystallized_Mound', 'Grub-Crystal_Peak_Spike', 'Grub-Crystal_Peak_Mimic', 'Grub-Crystal_Peak_Crushers', 'Grub-Crystal_Heart', 'Grub-Hallownest_Crown', 'Grub-Howling_Cliffs', "Grub-Queen's_Gardens_Stag", "Grub-Queen's_Gardens_Marmu", "Grub-Queen's_Gardens_Top", 'Grub-Collector_1', 'Grub-Collector_2', 'Grub-Collector_3']), 'RandomizeMimics': (['Mimic_Grub', 'Mimic_Grub', 'Mimic_Grub', 'Mimic_Grub'], ['Mimic_Grub-Deepnest_1', 'Mimic_Grub-Deepnest_2', 'Mimic_Grub-Deepnest_3', 'Mimic_Grub-Crystal_Peak']), 'RandomizeMaps': (['Crossroads_Map', 'Greenpath_Map', 'Fog_Canyon_Map', 'Fungal_Wastes_Map', 'Deepnest_Map', 'Deepnest_Map', 'Ancient_Basin_Map', "Kingdom's_Edge_Map", 'City_of_Tears_Map', 'Royal_Waterways_Map', 'Howling_Cliffs_Map', 'Crystal_Peak_Map', "Queen's_Gardens_Map", 'Resting_Grounds_Map', 'Quill'], ['Crossroads_Map', 'Greenpath_Map', 'Fog_Canyon_Map', 'Fungal_Wastes_Map', 'Deepnest_Map-Upper', 'Deepnest_Map-Right', 'Ancient_Basin_Map', "Kingdom's_Edge_Map", 'City_of_Tears_Map', 'Royal_Waterways_Map', 'Howling_Cliffs_Map', 'Crystal_Peak_Map', "Queen's_Gardens_Map", 'Resting_Grounds_Map', 'Iselda']), 'RandomizeStags': (['Dirtmouth_Stag', 'Crossroads_Stag', 'Greenpath_Stag', "Queen's_Station_Stag", "Queen's_Gardens_Stag", 'City_Storerooms_Stag', "King's_Station_Stag", 'Resting_Grounds_Stag', 'Distant_Village_Stag', 'Hidden_Station_Stag', 'Stag_Nest_Stag'], ['Dirtmouth_Stag', 'Crossroads_Stag', 'Greenpath_Stag', "Queen's_Station_Stag", "Queen's_Gardens_Stag", 'City_Storerooms_Stag', "King's_Station_Stag", 'Resting_Grounds_Stag', 'Distant_Village_Stag', 'Hidden_Station_Stag', 'Stag_Nest_Stag']), 'RandomizeLifebloodCocoons': (['Lifeblood_Cocoon_Small', 'Lifeblood_Cocoon_Small', 'Lifeblood_Cocoon_Small', 'Lifeblood_Cocoon_Large', 'Lifeblood_Cocoon_Small', 'Lifeblood_Cocoon_Small', 'Lifeblood_Cocoon_Large', 'Lifeblood_Cocoon_Large'], ["Lifeblood_Cocoon-King's_Pass", 'Lifeblood_Cocoon-Ancestral_Mound', 'Lifeblood_Cocoon-Greenpath', 'Lifeblood_Cocoon-Fog_Canyon_West', 'Lifeblood_Cocoon-Mantis_Village', 'Lifeblood_Cocoon-Failed_Tramway', 'Lifeblood_Cocoon-Galien', "Lifeblood_Cocoon-Kingdom's_Edge"]), 'RandomizeGrimmkinFlames': (['Grimmkin_Flame', 'Grimmkin_Flame', 'Grimmkin_Flame', 'Grimmkin_Flame', 'Grimmkin_Flame', 'Grimmkin_Flame', 'Grimmkin_Flame', 'Grimmkin_Flame', 'Grimmkin_Flame', 'Grimmkin_Flame'], ['Grimmkin_Flame-City_Storerooms', 'Grimmkin_Flame-Greenpath', 'Grimmkin_Flame-Crystal_Peak', "Grimmkin_Flame-King's_Pass", 'Grimmkin_Flame-Resting_Grounds', "Grimmkin_Flame-Kingdom's_Edge", 'Grimmkin_Flame-Fungal_Core', 'Grimmkin_Flame-Ancient_Basin', 'Grimmkin_Flame-Hive', 'Grimmkin_Flame-Brumm']), 'RandomizeJournalEntries': (["Hunter's_Journal", 'Journal_Entry-Void_Tendrils', 'Journal_Entry-Charged_Lumafly', 'Journal_Entry-Goam', 'Journal_Entry-Garpede', 'Journal_Entry-Seal_of_Binding'], ["Hunter's_Journal", 'Journal_Entry-Void_Tendrils', 'Journal_Entry-Charged_Lumafly', 'Journal_Entry-Goam', 'Journal_Entry-Garpede', 'Journal_Entry-Seal_of_Binding']), 'RandomizeNail': (['Leftslash', 'Rightslash', 'Upslash', 'Downslash'], ['Start', 'Start', 'Start', 'Start']), 'RandomizeGeoRocks': (['Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Abyss', 'Geo_Rock-Abyss', 'Geo_Rock-Abyss', 'Geo_Rock-Abyss', 'Geo_Rock-Abyss', 'Geo_Rock-Abyss', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Outskirts', 'Geo_Rock-Outskirts', 'Geo_Rock-Outskirts', 'Geo_Rock-Outskirts', 'Geo_Rock-Outskirts', 'Geo_Rock-Outskirts', 'Geo_Rock-Outskirts', 'Geo_Rock-Outskirts420', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-Default', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath02', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath02', 'Geo_Rock-GreenPath02', 'Geo_Rock-GreenPath02', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Fung01', 'Geo_Rock-Fung01', 'Geo_Rock-Fung01', 'Geo_Rock-Fung01', 'Geo_Rock-Fung02', 'Geo_Rock-Fung01', 'Geo_Rock-Fung02', 'Geo_Rock-Fung01', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Fung01', 'Geo_Rock-Fung02', 'Geo_Rock-Fung02', 'Geo_Rock-Fung01', 'Geo_Rock-Default', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Deepnest', 'Geo_Rock-Fung01', 'Geo_Rock-Fung01', 'Geo_Rock-Fung01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath01', 'Geo_Rock-GreenPath02', 'Geo_Rock-Outskirts', 'Geo_Rock-City', 'Geo_Rock-Hive', 'Geo_Rock-Hive', 'Geo_Rock-Hive', 'Geo_Rock-Hive', 'Geo_Rock-Hive', 'Geo_Rock-Hive', 'Geo_Rock-Hive', 'Geo_Rock-Hive', 'Geo_Rock-Hive', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Default', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Mine', 'Geo_Rock-Mine', 'Geo_Rock-Grave02', 'Geo_Rock-Grave02', 'Geo_Rock-Grave01', 'Geo_Rock-GreenPath02', 'Geo_Rock-Fung02', 'Geo_Rock-Fung01', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-Default', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City', 'Geo_Rock-City'], ['Geo_Rock-Broken_Elevator_1', 'Geo_Rock-Broken_Elevator_2', 'Geo_Rock-Broken_Elevator_3', 'Geo_Rock-Broken_Bridge_Upper', 'Geo_Rock-Broken_Bridge_Lower', 'Geo_Rock-Broken_Bridge_Lower_Dupe', 'Geo_Rock-Abyss_1', 'Geo_Rock-Abyss_2', 'Geo_Rock-Abyss_3', 'Geo_Rock-Basin_Tunnel', 'Geo_Rock-Basin_Grub', 'Geo_Rock-Basin_Before_Broken_Vessel', 'Geo_Rock-Cliffs_Main_1', 'Geo_Rock-Cliffs_Main_2', 'Geo_Rock-Cliffs_Main_3', 'Geo_Rock-Cliffs_Main_4', 'Geo_Rock-Below_Gorb_Dupe', 'Geo_Rock-Below_Gorb', 'Geo_Rock-Crossroads_Well', 'Geo_Rock-Crossroads_Center_Grub', 'Geo_Rock-Crossroads_Root', 'Geo_Rock-Crossroads_Root_Dupe_1', 'Geo_Rock-Crossroads_Root_Dupe_2', 'Geo_Rock-Crossroads_Aspid_Arena', 'Geo_Rock-Crossroads_Aspid_Arena_Dupe_1', 'Geo_Rock-Crossroads_Aspid_Arena_Dupe_2', 'Geo_Rock-Crossroads_Aspid_Arena_Hidden', 'Geo_Rock-Crossroads_Above_False_Knight', 'Geo_Rock-Crossroads_Before_Acid_Grub', 'Geo_Rock-Crossroads_Below_Goam_Mask_Shard', 'Geo_Rock-Crossroads_After_Goam_Mask_Shard', 'Geo_Rock-Crossroads_Above_Lever', 'Geo_Rock-Crossroads_Before_Fungal', 'Geo_Rock-Crossroads_Before_Fungal_Dupe_1', 'Geo_Rock-Crossroads_Before_Fungal_Dupe_2', 'Geo_Rock-Crossroads_Before_Shops', 'Geo_Rock-Crossroads_Before_Glowing_Womb', 'Geo_Rock-Crossroads_Above_Tram', 'Geo_Rock-Crossroads_Above_Mawlek', 'Geo_Rock-Crossroads_Vessel_Fragment', 'Geo_Rock-Crossroads_Goam_Alcove', 'Geo_Rock-Crossroads_Goam_Damage_Boost', 'Geo_Rock-Crossroads_Tram', 'Geo_Rock-Crossroads_Goam_Journal', 'Geo_Rock-Crossroads_Goam_Journal_Dupe', 'Geo_Rock-Ancestral_Mound', 'Geo_Rock-Ancestral_Mound_Dupe', 'Geo_Rock-Ancestral_Mound_Tree', 'Geo_Rock-Ancestral_Mound_Tree_Dupe', 'Geo_Rock-Moss_Prophet', 'Geo_Rock-Moss_Prophet_Dupe', 'Geo_Rock-Deepnest_Below_Mimics', 'Geo_Rock-Deepnest_Below_Mimics_Dupe', 'Geo_Rock-Deepnest_Below_Spike_Grub', 'Geo_Rock-Deepnest_Below_Spike_Grub_Dupe', 'Geo_Rock-Deepnest_Spike_Grub_Right', 'Geo_Rock-Deepnest_By_Mantis_Lords_Garpede_Pogo', 'Geo_Rock-Deepnest_By_Mantis_Lords_Garpede_Pogo_Dupe', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_1', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_2', 'Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_3', 'Geo_Rock-Deepnest_Nosk_1', 'Geo_Rock-Deepnest_Nosk_2', 'Geo_Rock-Deepnest_Nosk_3', 'Geo_Rock-Deepnest_Above_Galien', 'Geo_Rock-Deepnest_Galien_Spike', 'Geo_Rock-Deepnest_Garpede_1', 'Geo_Rock-Deepnest_Garpede_2', 'Geo_Rock-Dark_Deepnest_Above_Grub_1', 'Geo_Rock-Dark_Deepnest_Above_Grub_2', 'Geo_Rock-Dark_Deepnest_Bottom_Left', 'Geo_Rock-Above_Mask_Maker_1', 'Geo_Rock-Above_Mask_Maker_2', "Geo_Rock-Lower_Kingdom's_Edge_1", "Geo_Rock-Lower_Kingdom's_Edge_2", "Geo_Rock-Lower_Kingdom's_Edge_3", "Geo_Rock-Lower_Kingdom's_Edge_Dive", "Geo_Rock-Kingdom's_Edge_Below_Bardoon", "Geo_Rock-Kingdom's_Edge_Oro_Far_Left", "Geo_Rock-Kingdom's_Edge_Oro_Middle_Left", "Geo_Rock-Kingdom's_Edge_Above_Root", "Geo_Rock-Kingdom's_Edge_Above_Tower", "Geo_Rock-Kingdom's_Edge_Below_Colosseum", "Geo_Rock-Kingdom's_Edge_Above_420_Geo_Rock", "Geo_Rock-Kingdom's_Edge_420_Geo_Rock", "Geo_Rock-Beast's_Den_Above_Trilobite", "Geo_Rock-Beast's_Den_Above_Trilobite_Dupe", "Geo_Rock-Beast's_Den_Below_Herrah", "Geo_Rock-Beast's_Den_Below_Egg", "Geo_Rock-Beast's_Den_Below_Egg_Dupe", "Geo_Rock-Beast's_Den_Bottom", "Geo_Rock-Beast's_Den_Bottom_Dupe", "Geo_Rock-Beast's_Den_After_Herrah", 'Geo_Rock-Greenpath_Entrance', 'Geo_Rock-Greenpath_Waterfall', 'Geo_Rock-Greenpath_Below_Skip_Squit', 'Geo_Rock-Greenpath_Skip_Squit', 'Geo_Rock-Greenpath_Second_Skip_Fool_Eater', 'Geo_Rock-Greenpath_Second_Skip_Fool_Eater_Dupe', 'Geo_Rock-Greenpath_Second_Skip_Lower', 'Geo_Rock-Greenpath_Below_Hornet', 'Geo_Rock-Greenpath_Above_Thorns', "Geo_Rock-Greenpath_Hunter's_Journal", 'Geo_Rock-Greenpath_Acid_Bridge', 'Geo_Rock-Greenpath_After_MMC_Hidden', 'Geo_Rock-Greenpath_After_MMC', 'Geo_Rock-Greenpath_After_MMC_Dupe', 'Geo_Rock-Greenpath_Obbles_Fool_Eater', 'Geo_Rock-Greenpath_Moss_Knights', 'Geo_Rock-Greenpath_Moss_Knights_Dupe_1', 'Geo_Rock-Greenpath_Moss_Knights_Dupe_2', 'Geo_Rock-Greenpath_Below_Stag', 'Geo_Rock-Greenpath_Below_Stag_Fool_Eater', 'Geo_Rock-Baldur_Shell_Top_Left', 'Geo_Rock-Baldur_Shell_Alcove', 'Geo_Rock-Greenpath_MMC', 'Geo_Rock-Greenpath_Below_Toll', 'Geo_Rock-Greenpath_Toll_Hidden', 'Geo_Rock-Greenpath_Toll_Hidden_Dupe', 'Geo_Rock-Fungal_Below_Shrumal_Ogres', 'Geo_Rock-Fungal_Above_Cloth', 'Geo_Rock-Fungal_After_Cloth', "Geo_Rock-Fungal_Below_Pilgrim's_Way", "Geo_Rock-Fungal_Below_Pilgrim's_Way_Dupe", 'Geo_Rock-Mantis_Outskirts_Guarded', 'Geo_Rock-Mantis_Outskirts_Guarded_Dupe', 'Geo_Rock-Mantis_Outskirts_Alcove', 'Geo_Rock-Mantis_Village_After_Lever', 'Geo_Rock-Mantis_Village_Above_Claw', 'Geo_Rock-Mantis_Village_Above_Claw_Dupe', 'Geo_Rock-Mantis_Village_Below_Lore', 'Geo_Rock-Mantis_Village_Above_Lever', 'Geo_Rock-Above_Mantis_Lords_1', 'Geo_Rock-Above_Mantis_Lords_2', 'Geo_Rock-Fungal_After_Bouncy_Grub', 'Geo_Rock-Fungal_After_Bouncy_Grub_Dupe', 'Geo_Rock-Fungal_Bouncy_Grub_Lever', 'Geo_Rock-Fungal_After_Cornifer', 'Geo_Rock-Fungal_Above_City_Entrance', 'Geo_Rock-Deepnest_By_Mantis_Lords_1', 'Geo_Rock-Deepnest_By_Mantis_Lords_2', 'Geo_Rock-Deepnest_Lower_Cornifer', 'Geo_Rock-Fungal_Core_Entrance', 'Geo_Rock-Fungal_Core_Hidden', 'Geo_Rock-Fungal_Core_Above_Elder', "Geo_Rock-Queen's_Gardens_Acid_Entrance", "Geo_Rock-Queen's_Gardens_Below_Stag", 'Geo_Rock-Fog_Canyon_East', 'Geo_Rock-Love_Key', 'Geo_Rock-Love_Key_Dupe', "Geo_Rock-Queen's_Gardens_Above_Marmu", 'Geo_Rock-Pale_Lurker', 'Geo_Rock-Godhome_Pipeway', 'Geo_Rock-Hive_Entrance', 'Geo_Rock-Hive_Outside_Bench', 'Geo_Rock-Hive_Below_Root', 'Geo_Rock-Hive_After_Root', 'Geo_Rock-Hive_Below_Stash', 'Geo_Rock-Hive_Stash', 'Geo_Rock-Hive_Stash_Dupe', 'Geo_Rock-Hive_Below_Grub', 'Geo_Rock-Hive_Above_Mask', 'Geo_Rock-Crystal_Peak_Lower_Middle', 'Geo_Rock-Crystal_Peak_Lower_Conveyer_1', 'Geo_Rock-Crystal_Peak_Lower_Conveyer_2', 'Geo_Rock-Crystal_Peak_Before_Dark_Room', 'Geo_Rock-Crystal_Peak_Before_Dark_Room_Dupe', 'Geo_Rock-Crystal_Peak_Above_Spike_Grub', 'Geo_Rock-Crystal_Peak_Mimic_Grub', 'Geo_Rock-Crystal_Peak_Dive_Egg', 'Geo_Rock-Crystal_Peak_Dive_Egg_Dupe', 'Geo_Rock-Crystal_Peak_Conga_Line', 'Geo_Rock-Hallownest_Crown_Dive', 'Geo_Rock-Hallownest_Crown_Dive_Dupe', 'Geo_Rock-Hallownest_Crown_Hidden', 'Geo_Rock-Hallownest_Crown_Hidden_Dupe_1', 'Geo_Rock-Hallownest_Crown_Hidden_Dupe_2', 'Geo_Rock-Crystal_Peak_Before_Crystal_Heart', 'Geo_Rock-Crystal_Peak_Entrance', 'Geo_Rock-Crystal_Peak_Entrance_Dupe_1', 'Geo_Rock-Crystal_Peak_Entrance_Dupe_2', 'Geo_Rock-Crystal_Peak_Above_Crushers_Lower', 'Geo_Rock-Crystal_Peak_Above_Crushers_Higher', 'Geo_Rock-Resting_Grounds_Catacombs_Grub', 'Geo_Rock-Resting_Grounds_Catacombs_Left_Dupe', 'Geo_Rock-Resting_Grounds_Catacombs_Left', 'Geo_Rock-Overgrown_Mound', 'Geo_Rock-Fluke_Hermit_Dupe', 'Geo_Rock-Fluke_Hermit', 'Geo_Rock-Pleasure_House', 'Geo_Rock-City_of_Tears_Quirrel', 'Geo_Rock-City_of_Tears_Lemm', 'Geo_Rock-City_of_Tears_Above_Lemm', 'Geo_Rock-Soul_Sanctum', "Geo_Rock-Watcher's_Spire", "Geo_Rock-Above_King's_Station", "Geo_Rock-King's_Station", "Geo_Rock-King's_Pass_Left", "Geo_Rock-King's_Pass_Below_Fury", "Geo_Rock-King's_Pass_Hidden", "Geo_Rock-King's_Pass_Collapse", "Geo_Rock-King's_Pass_Above_Fury", 'Geo_Rock-Waterways_Tuk', 'Geo_Rock-Waterways_Tuk_Alcove', 'Geo_Rock-Waterways_Left', 'Geo_Rock-Waterways_East', 'Geo_Rock-Waterways_Flukemarm']), 'RandomizeBossGeo': (['Boss_Geo-Massive_Moss_Charger', 'Boss_Geo-Gorgeous_Husk', 'Boss_Geo-Sanctum_Soul_Warrior', 'Boss_Geo-Elegant_Soul_Warrior', 'Boss_Geo-Crystal_Guardian', 'Boss_Geo-Enraged_Guardian', 'Boss_Geo-Gruz_Mother', 'Boss_Geo-Vengefly_King'], ['Boss_Geo-Massive_Moss_Charger', 'Boss_Geo-Gorgeous_Husk', 'Boss_Geo-Sanctum_Soul_Warrior', 'Boss_Geo-Elegant_Soul_Warrior', 'Boss_Geo-Crystal_Guardian', 'Boss_Geo-Enraged_Guardian', 'Boss_Geo-Gruz_Mother', 'Boss_Geo-Vengefly_King']), 'RandomizeSoulTotems': (['Soul_Totem-C', 'Soul_Totem-B', 'Soul_Totem-A', 'Soul_Totem-C', 'Soul_Totem-C', 'Soul_Totem-B', 'Soul_Totem-B', 'Soul_Totem-C', 'Soul_Totem-E', 'Soul_Totem-A', 'Soul_Totem-F', 'Soul_Totem-D', 'Soul_Totem-E', 'Soul_Totem-B', 'Soul_Totem-B', 'Soul_Totem-C', 'Soul_Totem-B', 'Soul_Totem-A', 'Soul_Totem-C', 'Soul_Totem-B', 'Soul_Totem-A', 'Soul_Totem-B', 'Soul_Totem-A', 'Soul_Totem-C', 'Soul_Totem-C', 'Soul_Totem-C', 'Soul_Totem-C', 'Soul_Totem-A', 'Soul_Totem-C', 'Soul_Totem-C', 'Soul_Totem-B', 'Soul_Totem-A', 'Soul_Totem-B', 'Soul_Totem-A', 'Soul_Totem-B', 'Soul_Totem-C', 'Soul_Totem-C', 'Soul_Totem-E', 'Soul_Totem-B', 'Soul_Totem-D', 'Soul_Totem-A', 'Soul_Totem-G', 'Soul_Totem-C', 'Soul_Totem-B', 'Soul_Totem-C', 'Soul_Totem-B', 'Soul_Totem-Palace', 'Soul_Totem-Palace', 'Soul_Totem-Palace', 'Soul_Totem-Palace', 'Soul_Totem-Palace', 'Soul_Totem-Path_of_Pain', 'Soul_Totem-Path_of_Pain', 'Soul_Totem-Path_of_Pain', 'Soul_Totem-Path_of_Pain', 'Soul_Totem-Path_of_Pain', 'Soul_Totem-Path_of_Pain', 'Soul_Totem-Path_of_Pain', 'Soul_Totem-G'], ['Soul_Totem-Basin', 'Soul_Totem-Cliffs_Main', 'Soul_Totem-Cliffs_Gorb', "Soul_Totem-Cliffs_Joni's", 'Soul_Totem-Crossroads_Goam_Journal', 'Soul_Totem-Crossroads_Shops', 'Soul_Totem-Crossroads_Mawlek_Upper', 'Soul_Totem-Crossroads_Acid', 'Soul_Totem-Crossroads_Mawlek_Lower', 'Soul_Totem-Crossroads_Myla', 'Soul_Totem-Ancestral_Mound', 'Soul_Totem-Distant_Village', 'Soul_Totem-Deepnest_Vessel', 'Soul_Totem-Mask_Maker', "Soul_Totem-Lower_Kingdom's_Edge_1", "Soul_Totem-Lower_Kingdom's_Edge_2", "Soul_Totem-Upper_Kingdom's_Edge", "Soul_Totem-Kingdom's_Edge_Camp", 'Soul_Totem-Oro_Dive_2', 'Soul_Totem-Oro_Dive_1', 'Soul_Totem-Oro', 'Soul_Totem-420_Geo_Rock', "Soul_Totem-Beast's_Den", "Soul_Totem-Greenpath_Hunter's_Journal", 'Soul_Totem-Greenpath_MMC', 'Soul_Totem-Greenpath_Below_Toll', "Soul_Totem-Before_Pilgrim's_Way", "Soul_Totem-Pilgrim's_Way", 'Soul_Totem-Fungal_Core', "Soul_Totem-Top_Left_Queen's_Gardens", 'Soul_Totem-Below_Marmu', 'Soul_Totem-Upper_Crystal_Peak', 'Soul_Totem-Hallownest_Crown', 'Soul_Totem-Outside_Crystallized_Mound', 'Soul_Totem-Crystal_Heart_1', 'Soul_Totem-Crystal_Heart_2', 'Soul_Totem-Crystallized_Mound', 'Soul_Totem-Resting_Grounds', 'Soul_Totem-Below_Xero', 'Soul_Totem-Sanctum_Below_Soul_Master', 'Soul_Totem-Sanctum_Below_Chest', 'Soul_Totem-Sanctum_Above_Grub', 'Soul_Totem-Waterways_Entrance', 'Soul_Totem-Top_Left_Waterways', 'Soul_Totem-Waterways_East', 'Soul_Totem-Waterways_Flukemarm', 'Soul_Totem-White_Palace_Entrance', 'Soul_Totem-White_Palace_Hub', 'Soul_Totem-White_Palace_Left', 'Soul_Totem-White_Palace_Final', 'Soul_Totem-White_Palace_Right', 'Soul_Totem-Path_of_Pain_Below_Lever', 'Soul_Totem-Path_of_Pain_Left_of_Lever', 'Soul_Totem-Path_of_Pain_Entrance', 'Soul_Totem-Path_of_Pain_Second', 'Soul_Totem-Path_of_Pain_Hidden', 'Soul_Totem-Path_of_Pain_Below_Thornskip', 'Soul_Totem-Path_of_Pain_Final', 'Soul_Totem-Pale_Lurker']), 'RandomizeLoreTablets': (['Lore_Tablet-City_Entrance', 'Lore_Tablet-Pleasure_House', 'Lore_Tablet-Sanctum_Entrance', 'Lore_Tablet-Sanctum_Past_Soul_Master', "Lore_Tablet-Watcher's_Spire", 'Lore_Tablet-Archives_Upper', 'Lore_Tablet-Archives_Left', 'Lore_Tablet-Archives_Right', "Lore_Tablet-Pilgrim's_Way_1", "Lore_Tablet-Pilgrim's_Way_2", 'Lore_Tablet-Mantis_Outskirts', 'Lore_Tablet-Mantis_Village', 'Lore_Tablet-Greenpath_Upper_Hidden', 'Lore_Tablet-Greenpath_Below_Toll', 'Lore_Tablet-Greenpath_Lifeblood', 'Lore_Tablet-Greenpath_Stag', 'Lore_Tablet-Greenpath_QG', 'Lore_Tablet-Greenpath_Lower_Hidden', 'Lore_Tablet-Dung_Defender', 'Lore_Tablet-Spore_Shroom', 'Lore_Tablet-Fungal_Wastes_Hidden', 'Lore_Tablet-Fungal_Wastes_Below_Shrumal_Ogres', 'Lore_Tablet-Fungal_Core', 'Lore_Tablet-Ancient_Basin', "Lore_Tablet-King's_Pass_Focus", "Lore_Tablet-King's_Pass_Fury", "Lore_Tablet-King's_Pass_Exit", 'Lore_Tablet-World_Sense', 'Lore_Tablet-Howling_Cliffs', "Lore_Tablet-Kingdom's_Edge", 'Lore_Tablet-Palace_Workshop', 'Lore_Tablet-Palace_Throne', 'Lore_Tablet-Path_of_Pain_Entrance'], ['Lore_Tablet-City_Entrance', 'Lore_Tablet-Pleasure_House', 'Lore_Tablet-Sanctum_Entrance', 'Lore_Tablet-Sanctum_Past_Soul_Master', "Lore_Tablet-Watcher's_Spire", 'Lore_Tablet-Archives_Upper', 'Lore_Tablet-Archives_Left', 'Lore_Tablet-Archives_Right', "Lore_Tablet-Pilgrim's_Way_1", "Lore_Tablet-Pilgrim's_Way_2", 'Lore_Tablet-Mantis_Outskirts', 'Lore_Tablet-Mantis_Village', 'Lore_Tablet-Greenpath_Upper_Hidden', 'Lore_Tablet-Greenpath_Below_Toll', 'Lore_Tablet-Greenpath_Lifeblood', 'Lore_Tablet-Greenpath_Stag', 'Lore_Tablet-Greenpath_QG', 'Lore_Tablet-Greenpath_Lower_Hidden', 'Lore_Tablet-Dung_Defender', 'Lore_Tablet-Spore_Shroom', 'Lore_Tablet-Fungal_Wastes_Hidden', 'Lore_Tablet-Fungal_Wastes_Below_Shrumal_Ogres', 'Lore_Tablet-Fungal_Core', 'Lore_Tablet-Ancient_Basin', "Lore_Tablet-King's_Pass_Focus", "Lore_Tablet-King's_Pass_Fury", "Lore_Tablet-King's_Pass_Exit", 'Lore_Tablet-World_Sense', 'Lore_Tablet-Howling_Cliffs', "Lore_Tablet-Kingdom's_Edge", 'Lore_Tablet-Palace_Workshop', 'Lore_Tablet-Palace_Throne', 'Lore_Tablet-Path_of_Pain_Entrance'])} +region_names = {'Abyss_01', 'Abyss_02', 'Abyss_03', 'Abyss_03_b', 'Abyss_03_c', 'Abyss_04', 'Abyss_05', 'Abyss_06_Core', 'Abyss_08', 'Abyss_09', 'Abyss_10', 'Abyss_12', 'Abyss_15', 'Abyss_16', 'Abyss_17', 'Abyss_18', 'Abyss_19', 'Abyss_20', 'Abyss_21', 'Abyss_22', 'Abyss_Lighthouse_room', 'Cliffs_01', 'Cliffs_02', 'Cliffs_03', 'Cliffs_04', 'Cliffs_05', 'Cliffs_06', 'Crossroads_01', 'Crossroads_02', 'Crossroads_03', 'Crossroads_04', 'Crossroads_05', 'Crossroads_06', 'Crossroads_07', 'Crossroads_08', 'Crossroads_09', 'Crossroads_10', 'Crossroads_11_alt', 'Crossroads_12', 'Crossroads_13', 'Crossroads_14', 'Crossroads_15', 'Crossroads_16', 'Crossroads_18', 'Crossroads_19', 'Crossroads_21', 'Crossroads_22', 'Crossroads_25', 'Crossroads_27', 'Crossroads_30', 'Crossroads_31', 'Crossroads_33', 'Crossroads_35', 'Crossroads_36', 'Crossroads_37', 'Crossroads_38', 'Crossroads_39', 'Crossroads_40', 'Crossroads_42', 'Crossroads_43', 'Crossroads_45', 'Crossroads_46', 'Crossroads_46b', 'Crossroads_47', 'Crossroads_48', 'Crossroads_49', 'Crossroads_49b', 'Crossroads_50', 'Crossroads_52', 'Crossroads_ShamanTemple', 'Deepnest_01', 'Deepnest_01b', 'Deepnest_02', 'Deepnest_03', 'Deepnest_09', 'Deepnest_10', 'Deepnest_14', 'Deepnest_16', 'Deepnest_17', 'Deepnest_26', 'Deepnest_26b', 'Deepnest_30', 'Deepnest_31', 'Deepnest_32', 'Deepnest_33', 'Deepnest_34', 'Deepnest_35', 'Deepnest_36', 'Deepnest_37', 'Deepnest_38', 'Deepnest_39', 'Deepnest_40', 'Deepnest_41', 'Deepnest_42', 'Deepnest_43', 'Deepnest_44', 'Deepnest_45_v02', 'Deepnest_East_01', 'Deepnest_East_02', 'Deepnest_East_03', 'Deepnest_East_04', 'Deepnest_East_06', 'Deepnest_East_07', 'Deepnest_East_08', 'Deepnest_East_09', 'Deepnest_East_10', 'Deepnest_East_11', 'Deepnest_East_12', 'Deepnest_East_13', 'Deepnest_East_14', 'Deepnest_East_14b', 'Deepnest_East_15', 'Deepnest_East_16', 'Deepnest_East_17', 'Deepnest_East_18', 'Deepnest_East_Hornet', 'Deepnest_Spider_Town', 'Fungus1_01', 'Fungus1_01b', 'Fungus1_02', 'Fungus1_03', 'Fungus1_04', 'Fungus1_05', 'Fungus1_06', 'Fungus1_07', 'Fungus1_08', 'Fungus1_09', 'Fungus1_10', 'Fungus1_11', 'Fungus1_12', 'Fungus1_13', 'Fungus1_14', 'Fungus1_15', 'Fungus1_16_alt', 'Fungus1_17', 'Fungus1_19', 'Fungus1_20_v02', 'Fungus1_21', 'Fungus1_22', 'Fungus1_23', 'Fungus1_24', 'Fungus1_25', 'Fungus1_26', 'Fungus1_28', 'Fungus1_29', 'Fungus1_30', 'Fungus1_31', 'Fungus1_32', 'Fungus1_34', 'Fungus1_35', 'Fungus1_36', 'Fungus1_37', 'Fungus1_Slug', 'Fungus2_01', 'Fungus2_02', 'Fungus2_03', 'Fungus2_04', 'Fungus2_05', 'Fungus2_06', 'Fungus2_07', 'Fungus2_08', 'Fungus2_09', 'Fungus2_10', 'Fungus2_11', 'Fungus2_12', 'Fungus2_13', 'Fungus2_14', 'Fungus2_15', 'Fungus2_17', 'Fungus2_18', 'Fungus2_19', 'Fungus2_20', 'Fungus2_21', 'Fungus2_23', 'Fungus2_25', 'Fungus2_26', 'Fungus2_28', 'Fungus2_29', 'Fungus2_30', 'Fungus2_31', 'Fungus2_32', 'Fungus2_33', 'Fungus2_34', 'Fungus3_01', 'Fungus3_02', 'Fungus3_03', 'Fungus3_04', 'Fungus3_05', 'Fungus3_08', 'Fungus3_10', 'Fungus3_11', 'Fungus3_13', 'Fungus3_21', 'Fungus3_22', 'Fungus3_23', 'Fungus3_24', 'Fungus3_25', 'Fungus3_25b', 'Fungus3_26', 'Fungus3_27', 'Fungus3_28', 'Fungus3_30', 'Fungus3_34', 'Fungus3_35', 'Fungus3_39', 'Fungus3_40', 'Fungus3_44', 'Fungus3_47', 'Fungus3_48', 'Fungus3_49', 'Fungus3_50', 'Fungus3_archive', 'Fungus3_archive_02', 'GG_Lurker', 'GG_Pipeway', 'GG_Waterways', 'Grimm_Divine', 'Grimm_Main_Tent', 'Hive_01', 'Hive_02', 'Hive_03', 'Hive_03_c', 'Hive_04', 'Hive_05', 'Mines_01', 'Mines_02', 'Mines_03', 'Mines_04', 'Mines_05', 'Mines_06', 'Mines_07', 'Mines_10', 'Mines_11', 'Mines_13', 'Mines_16', 'Mines_17', 'Mines_18', 'Mines_19', 'Mines_20', 'Mines_23', 'Mines_24', 'Mines_25', 'Mines_28', 'Mines_29', 'Mines_30', 'Mines_31', 'Mines_32', 'Mines_33', 'Mines_34', 'Mines_35', 'Mines_36', 'Mines_37', 'RestingGrounds_02', 'RestingGrounds_04', 'RestingGrounds_05', 'RestingGrounds_06', 'RestingGrounds_07', 'RestingGrounds_08', 'RestingGrounds_09', 'RestingGrounds_10', 'RestingGrounds_12', 'RestingGrounds_17', 'Room_Bretta', 'Room_Charm_Shop', 'Room_Colosseum_01', 'Room_Colosseum_02', 'Room_Colosseum_Spectate', 'Room_Fungus_Shaman', 'Room_GG_Shortcut', 'Room_Mansion', 'Room_Mask_Maker', 'Room_Mender_House', 'Room_Ouiji', 'Room_Queen', 'Room_Slug_Shrine', 'Room_Town_Stag_Station', 'Room_Wyrm', 'Room_mapper', 'Room_nailmaster', 'Room_nailmaster_02', 'Room_nailmaster_03', 'Room_nailsmith', 'Room_ruinhouse', 'Room_shop', 'Room_spider_small', 'Room_temple', 'Ruins1_01', 'Ruins1_02', 'Ruins1_03', 'Ruins1_04', 'Ruins1_05', 'Ruins1_05b', 'Ruins1_05c', 'Ruins1_06', 'Ruins1_09', 'Ruins1_17', 'Ruins1_18', 'Ruins1_23', 'Ruins1_24', 'Ruins1_25', 'Ruins1_27', 'Ruins1_28', 'Ruins1_29', 'Ruins1_30', 'Ruins1_31', 'Ruins1_31b', 'Ruins1_32', 'Ruins2_01', 'Ruins2_01_b', 'Ruins2_03', 'Ruins2_03b', 'Ruins2_04', 'Ruins2_05', 'Ruins2_06', 'Ruins2_07', 'Ruins2_08', 'Ruins2_09', 'Ruins2_10', 'Ruins2_10b', 'Ruins2_11', 'Ruins2_11_b', 'Ruins2_Watcher_Room', 'Ruins_Bathhouse', 'Ruins_Elevator', 'Ruins_House_01', 'Ruins_House_02', 'Ruins_House_03', 'Start', 'Town', 'Tutorial_01', 'Unknown', 'Waterways_01', 'Waterways_02', 'Waterways_03', 'Waterways_04', 'Waterways_04b', 'Waterways_05', 'Waterways_06', 'Waterways_07', 'Waterways_08', 'Waterways_09', 'Waterways_12', 'Waterways_13', 'Waterways_14', 'Waterways_15', 'White_Palace_01', 'White_Palace_02', 'White_Palace_03_hub', 'White_Palace_04', 'White_Palace_05', 'White_Palace_06', 'White_Palace_07', 'White_Palace_08', 'White_Palace_09', 'White_Palace_11', 'White_Palace_12', 'White_Palace_13', 'White_Palace_14', 'White_Palace_15', 'White_Palace_16', 'White_Palace_17', 'White_Palace_18', 'White_Palace_19', 'White_Palace_20'} +starts = {"king's_pass": 'Tutorial_01'} +vanilla_location_costs = {'Dash_Slash': {'GEO': 800}, 'Unbreakable_Heart': {'GEO': 600}, 'Unbreakable_Greed': {'GEO': 450}, 'Unbreakable_Strength': {'GEO': 750}, 'Vessel_Fragment-Basin': {'GEO': 3000}, 'Crossroads_Map': {'GEO': 30}, 'Greenpath_Map': {'GEO': 60}, 'Fog_Canyon_Map': {'GEO': 150}, 'Fungal_Wastes_Map': {'GEO': 75}, 'Deepnest_Map-Upper': {'GEO': 38}, 'Deepnest_Map-Right': {'GEO': 38}, 'Ancient_Basin_Map': {'GEO': 112}, "Kingdom's_Edge_Map": {'GEO': 112}, 'City_of_Tears_Map': {'GEO': 90}, 'Royal_Waterways_Map': {'GEO': 75}, 'Howling_Cliffs_Map': {'GEO': 75}, 'Crystal_Peak_Map': {'GEO': 112}, "Queen's_Gardens_Map": {'GEO': 150}, 'Resting_Grounds_Map': {'GEO': 56}, 'Crossroads_Stag': {'GEO': 50}, 'Greenpath_Stag': {'GEO': 140}, "Queen's_Station_Stag": {'GEO': 120}, "Queen's_Gardens_Stag": {'GEO': 200}, 'City_Storerooms_Stag': {'GEO': 200}, "King's_Station_Stag": {'GEO': 300}, 'Distant_Village_Stag': {'GEO': 250}, 'Hidden_Station_Stag': {'GEO': 300}, 'Stag_Nest_Stag': {'GEO': 300}, 'Elevator_Pass': {'GEO': 150}} +vanilla_shop_costs = {('Sly', 'Simple_Key'): [{'GEO': 950}], ('Sly', 'Rancid_Egg'): [{'GEO': 60}], ('Sly', 'Lumafly_Lantern'): [{'GEO': 1800}], ('Sly', 'Gathering_Swarm'): [{'GEO': 300}], ('Sly', 'Stalwart_Shell'): [{'GEO': 200}], ('Sly', 'Mask_Shard'): [{'GEO': 500}, {'GEO': 150}], ('Sly', 'Vessel_Fragment'): [{'GEO': 550}], ('Sly_(Key)', 'Heavy_Blow'): [{'GEO': 350}], ('Sly_(Key)', 'Elegant_Key'): [{'GEO': 800}], ('Sly_(Key)', 'Mask_Shard'): [{'GEO': 1500}, {'GEO': 800}], ('Sly_(Key)', 'Vessel_Fragment'): [{'GEO': 900}], ('Sly_(Key)', 'Sprintmaster'): [{'GEO': 400}], ('Iselda', 'Wayward_Compass'): [{'GEO': 220}], ('Iselda', 'Quill'): [{'GEO': 120}], ('Salubra', 'Lifeblood_Heart'): [{'GEO': 250}], ('Salubra', 'Longnail'): [{'GEO': 300}], ('Salubra', 'Steady_Body'): [{'GEO': 120}], ('Salubra', 'Shaman_Stone'): [{'GEO': 220}], ('Salubra', 'Quick_Focus'): [{'GEO': 800}], ('Leg_Eater', 'Fragile_Heart'): [{'GEO': 350}], ('Leg_Eater', 'Fragile_Greed'): [{'GEO': 250}], ('Leg_Eater', 'Fragile_Strength'): [{'GEO': 600}], ('Seer', 'Dream_Gate'): [{'ESSENCE': 900}], ('Seer', 'Awoken_Dream_Nail'): [{'ESSENCE': 1800}], ('Grubfather', 'Grubsong'): [{'GRUBS': 10}], ('Grubfather', "Grubberfly's_Elegy"): [{'GRUBS': 46}], ('Seer', 'Mask_Shard'): [{'ESSENCE': 1500}], ('Grubfather', 'Mask_Shard'): [{'GRUBS': 5}], ('Seer', 'Vessel_Fragment'): [{'ESSENCE': 700}], ('Salubra', 'Charm_Notch'): [{'CHARMS': 25, 'GEO': 1400}, {'CHARMS': 18, 'GEO': 900}, {'CHARMS': 10, 'GEO': 500}, {'CHARMS': 5, 'GEO': 120}], ('Salubra', "Salubra's_Blessing"): [{'CHARMS': 40, 'GEO': 800}], ('Seer', 'Pale_Ore'): [{'ESSENCE': 300}], ('Grubfather', 'Pale_Ore'): [{'GRUBS': 31}], ('Grubfather', 'Rancid_Egg'): [{'GRUBS': 16}], ('Seer', 'Hallownest_Seal'): [{'ESSENCE': 100}], ('Grubfather', "King's_Idol"): [{'GRUBS': 38}], ('Seer', 'Arcane_Egg'): [{'ESSENCE': 1200}]} diff --git a/World/Extractor.py b/World/Extractor.py new file mode 100644 index 0000000..8666084 --- /dev/null +++ b/World/Extractor.py @@ -0,0 +1,464 @@ +""" +Logic Extractor designed for "Randomizer 4". +Place a Randomizer 4 compatible "Resources" folder next to this script, then run the script, to create AP data. +""" +import os +import json +import typing +import ast + +import jinja2 + +from ast import unparse + +from Utils import get_text_between + + +def put_digits_at_end(text: str) -> str: + for x in range(len(text)): + if text[0].isdigit(): + text = text[1:] + text[0] + else: + break + return text + + +def hk_loads(file: str) -> typing.Any: + with open(file, encoding="utf-8-sig") as f: + data = f.read() + new_data = [] + for row in data.split("\n"): + if not row.strip().startswith(r"//"): + new_data.append(row) + return json.loads("\n".join(new_data)) + + +def hk_convert(text: str) -> str: + parts = text.replace("(", "( ").replace(")", " )").replace(">", " > ").replace("=", "==").split() + new_parts = [] + for part in parts: + part = put_digits_at_end(part) + + if part in items or part in effect_names or part in event_names or part in connectors: + new_parts.append(f"\"{part}\"") + else: + new_parts.append(part) + text = " ".join(new_parts) + result = "" + parts = text.split("$StartLocation[") + for i, part in enumerate(parts[:-1]): + result += part + "StartLocation[\"" + parts[i+1] = parts[i+1].replace("]", "\"]", 1) + + text = result + parts[-1] + + result = "" + parts = text.split("COMBAT[") + for i, part in enumerate(parts[:-1]): + result += part + "COMBAT[\"" + parts[i+1] = parts[i+1].replace("]", "\"]", 1) + + text = result + parts[-1] + return text.replace("+", "and").replace("|", "or").replace("$", "").strip() + + +class Absorber(ast.NodeTransformer): + additional_truths = set() + additional_falses = set() + + def __init__(self, truth_values, false_values): + self.truth_values = truth_values + self.truth_values |= {"True", "None", "ANY", "ITEMRANDO"} + self.false_values = false_values + self.false_values |= {"False", "NONE"} + + super(Absorber, self).__init__() + + def generic_visit(self, node: ast.AST) -> ast.AST: + # Need to call super() in any case to visit child nodes of the current one. + node = super().generic_visit(node) + return node + + def visit_BoolOp(self, node: ast.BoolOp) -> ast.AST: + if type(node.op) == ast.And: + if self.is_always_true(node.values[0]): + return self.visit(node.values[1]) + if self.is_always_true(node.values[1]): + return self.visit(node.values[0]) + if self.is_always_false(node.values[0]) or self.is_always_false(node.values[1]): + return ast.Constant(False, ctx=ast.Load()) + elif type(node.op) == ast.Or: + if self.is_always_true(node.values[0]) or self.is_always_true(node.values[1]): + return ast.Constant(True, ctx=ast.Load()) + if self.is_always_false(node.values[0]): + return self.visit(node.values[1]) + if self.is_always_false(node.values[1]): + return self.visit(node.values[0]) + return self.generic_visit(node) + + def visit_Name(self, node: ast.Name) -> ast.AST: + if node.id in self.truth_values: + return ast.Constant(True, ctx=node.ctx) + if node.id in self.false_values: + return ast.Constant(False, ctx=node.ctx) + if node.id in logic_options: + return ast.Call( + func=ast.Attribute(value=ast.Name(id='state', ctx=ast.Load()), attr='_hk_option', ctx=ast.Load()), + args=[ast.Name(id="player", ctx=ast.Load()), ast.Constant(value=logic_options[node.id])], keywords=[]) + if node.id in macros: + return macros[node.id].body + if node.id in region_names: + raise Exception(f"Should be event {node.id}") + # You'd think this means reach Scene/Region of that name, but is actually waypoint/event + # if node.id in region_names: + # return ast.Call( + # func=ast.Attribute(value=ast.Name(id='state', ctx=ast.Load()), attr='can_reach', ctx=ast.Load()), + # args=[ast.Constant(value=node.id), + # ast.Constant(value="Region"), + # ast.Name(id="player", ctx=ast.Load())], + # keywords=[]) + return self.generic_visit(node) + + def visit_Constant(self, node: ast.Constant) -> ast.AST: + if type(node.value) == str: + logic_items.add(node.value) + return ast.Call( + func=ast.Attribute(value=ast.Name(id='state', ctx=ast.Load()), attr='count', ctx=ast.Load()), + args=[ast.Constant(value=node.value), ast.Name(id="player", ctx=ast.Load())], keywords=[]) + + return node + + def visit_Subscript(self, node: ast.Subscript) -> ast.AST: + if node.value.id == "NotchCost": + notches = [ast.Constant(value=notch.value - 1) for notch in node.slice.elts] # apparently 1-indexed + return ast.Call( + func=ast.Attribute(value=ast.Name(id='state', ctx=ast.Load()), attr='_hk_notches', ctx=ast.Load()), + args=[ast.Name(id="player", ctx=ast.Load())] + notches, keywords=[]) + elif node.value.id == "StartLocation": + node.slice.value = node.slice.value.replace(" ", "_").lower() + if node.slice.value in removed_starts: + return ast.Constant(False, ctx=node.ctx) + return ast.Call( + func=ast.Attribute(value=ast.Name(id='state', ctx=ast.Load()), attr='_hk_start', ctx=ast.Load()), + args=[ast.Name(id="player", ctx=ast.Load()), node.slice], keywords=[]) + elif node.value.id == "COMBAT": + return macros[unparse(node)].body + else: + name = unparse(node) + if name in self.additional_truths: + return ast.Constant(True, ctx=ast.Load()) + elif name in self.additional_falses: + return ast.Constant(False, ctx=ast.Load()) + elif name in macros: + # macro such as "COMBAT[White_Palace_Arenas]" + return macros[name].body + else: + # assume Entrance + entrance = unparse(node) + assert entrance in connectors, entrance + return ast.Call( + func=ast.Attribute(value=ast.Name(id='state', ctx=ast.Load()), attr='can_reach', ctx=ast.Load()), + args=[ast.Constant(value=entrance), + ast.Constant(value="Entrance"), + ast.Name(id="player", ctx=ast.Load())], + keywords=[]) + return node + + def is_always_true(self, node): + if isinstance(node, ast.Name) and (node.id in self.truth_values or node.id in self.additional_truths): + return True + if isinstance(node, ast.Subscript) and unparse(node) in self.additional_truths: + return True + + def is_always_false(self, node): + if isinstance(node, ast.Name) and (node.id in self.false_values or node.id in self.additional_falses): + return True + if isinstance(node, ast.Subscript) and unparse(node) in self.additional_falses: + return True + + +def get_parser(truths: typing.Set[str] = frozenset(), falses: typing.Set[str] = frozenset()): + return Absorber(truths, falses) + + +def ast_parse(parser, rule_text, truths: typing.Set[str] = frozenset(), falses: typing.Set[str] = frozenset()): + tree = ast.parse(hk_convert(rule_text), mode='eval') + parser.additional_truths = truths + parser.additional_falses = falses + new_tree = parser.visit(tree) + parser.additional_truths = set() + parser.additional_truths = set() + return new_tree + + +world_folder = os.path.dirname(__file__) + +resources_source = os.path.join(world_folder, "Resources") +data_folder = os.path.join(resources_source, "Data") +logic_folder = os.path.join(resources_source, "Logic") +logic_options: typing.Dict[str, str] = hk_loads(os.path.join(data_folder, "logic_settings.json")) +for logic_key, logic_value in logic_options.items(): + logic_options[logic_key] = logic_value.split(".", 1)[-1] + +vanilla_cost_data: typing.Dict[str, typing.Dict[str, typing.Any]] = hk_loads(os.path.join(data_folder, "costs.json")) +vanilla_location_costs = { + key: { + value["term"]: int(value["amount"]) + } + for key, value in vanilla_cost_data.items() + if value["amount"] > 0 and value["term"] == "GEO" +} + +salubra_geo_costs_by_charm_count = { + 5: 120, + 10: 500, + 18: 900, + 25: 1400, + 40: 800 +} + +# Can't extract this data, so supply it ourselves. Source: the wiki +vanilla_shop_costs = { + ('Sly', 'Simple_Key'): [{'GEO': 950}], + ('Sly', 'Rancid_Egg'): [{'GEO': 60}], + ('Sly', 'Lumafly_Lantern'): [{'GEO': 1800}], + ('Sly', 'Gathering_Swarm'): [{'GEO': 300}], + ('Sly', 'Stalwart_Shell'): [{'GEO': 200}], + ('Sly', 'Mask_Shard'): [ + {'GEO': 150}, + {'GEO': 500}, + ], + ('Sly', 'Vessel_Fragment'): [{'GEO': 550}], + ('Sly_(Key)', 'Heavy_Blow'): [{'GEO': 350}], + ('Sly_(Key)', 'Elegant_Key'): [{'GEO': 800}], + ('Sly_(Key)', 'Mask_Shard'): [ + {'GEO': 800}, + {'GEO': 1500}, + ], + ('Sly_(Key)', 'Vessel_Fragment'): [{'GEO': 900}], + ('Sly_(Key)', 'Sprintmaster'): [{'GEO': 400}], + + ('Iselda', 'Wayward_Compass'): [{'GEO': 220}], + ('Iselda', 'Quill'): [{'GEO': 120}], + + ('Salubra', 'Lifeblood_Heart'): [{'GEO': 250}], + ('Salubra', 'Longnail'): [{'GEO': 300}], + ('Salubra', 'Steady_Body'): [{'GEO': 120}], + ('Salubra', 'Shaman_Stone'): [{'GEO': 220}], + ('Salubra', 'Quick_Focus'): [{'GEO': 800}], + + ('Leg_Eater', 'Fragile_Heart'): [{'GEO': 350}], + ('Leg_Eater', 'Fragile_Greed'): [{'GEO': 250}], + ('Leg_Eater', 'Fragile_Strength'): [{'GEO': 600}], +} +extra_pool_options: typing.List[typing.Dict[str, typing.Any]] = hk_loads(os.path.join(data_folder, "pools.json")) +pool_options: typing.Dict[str, typing.Tuple[typing.List[str], typing.List[str]]] = {} +for option in extra_pool_options: + if option["Path"] != "False": + items: typing.List[str] = [] + locations: typing.List[str] = [] + for pairing in option["Vanilla"]: + items.append(pairing["item"]) + location_name = pairing["location"] + item_costs = pairing.get("costs", []) + if item_costs: + if any(cost_entry["term"] == "CHARMS" for cost_entry in item_costs): + location_name += "_(Requires_Charms)" + #vanilla_shop_costs[pairing["location"], pairing["item"]] = \ + cost = { + entry["term"]: int(entry["amount"]) for entry in item_costs + } + # Rando4 doesn't include vanilla geo costs for Salubra charms, so dirty hardcode here. + if 'CHARMS' in cost: + geo = salubra_geo_costs_by_charm_count.get(cost['CHARMS']) + if geo: + cost['GEO'] = geo + + key = (pairing["location"], pairing["item"]) + vanilla_shop_costs.setdefault(key, []).append(cost) + + locations.append(location_name) + if option["Path"]: + # basename carries over from prior entry if no Path given + basename = option["Path"].split(".", 1)[-1] + if not basename.startswith("Randomize"): + basename = "Randomize" + basename + assert len(items) == len(locations) + if items: # skip empty pools + if basename in pool_options: + pool_options[basename] = pool_options[basename][0]+items, pool_options[basename][1]+locations + else: + pool_options[basename] = items, locations +del extra_pool_options + +# reverse all the vanilla shop costs (really, this is just for Salubra). +# When we use these later, we pop off the end of the list so this ensures they are still sorted. +vanilla_shop_costs = { + k: list(reversed(v)) for k, v in vanilla_shop_costs.items() +} + +# items +items: typing.Dict[str, typing.Dict] = hk_loads(os.path.join(data_folder, "items.json")) +logic_items: typing.Set[str] = set() +for item_name in sorted(items): + item = items[item_name] + items[item_name] = item["Pool"] +items: typing.Dict[str, str] + +extra_item_data: typing.List[typing.Dict[str, typing.Any]] = hk_loads(os.path.join(logic_folder, "items.json")) +item_effects: typing.Dict[str, typing.Dict[str, int]] = {} +effect_names: typing.Set[str] = set() +for item_data in extra_item_data: + if "FalseItem" in item_data: + item_data = item_data["FalseItem"] + effects = [] + if "Effect" in item_data: + effects = [item_data["Effect"]] + elif "Effects" in item_data: + effects = item_data["Effects"] + for effect in effects: + effect_names.add(effect["Term"]) + effects = {effect["Term"]: effect["Value"] for effect in effects if + effect["Term"] != item_data["Name"] and effect["Term"] not in {"GEO", + "HALLOWNESTSEALS", + "WANDERERSJOURNALS", + 'HALLOWNESTSEALS', + "KINGSIDOLS", + 'ARCANEEGGS', + 'MAPS' + }} + + if effects: + item_effects[item_data["Name"]] = effects + +del extra_item_data + +# locations +original_locations: typing.Dict[str, typing.Dict[str, typing.Any]] = hk_loads(os.path.join(data_folder, "locations.json")) +del(original_locations["Start"]) # Starting Inventory works different in AP + +locations: typing.List[str] = [] +locations_in_regions: typing.Dict[str, typing.List[str]] = {} +location_to_region_lookup: typing.Dict[str, str] = {} +multi_locations: typing.Dict[str, typing.List[str]] = {} +for location_name, location_data in original_locations.items(): + region_name = location_data["SceneName"] + if location_data["FlexibleCount"]: + location_names = [f"{location_name}_{count}" for count in range(1, 17)] + multi_locations[location_name] = location_names + else: + location_names = [location_name] + + location_to_region_lookup.update({name: region_name for name in location_names}) + locations_in_regions.setdefault(region_name, []).extend(location_names) + locations.extend(location_names) +del original_locations + +# regions +region_names: typing.Set[str] = set(hk_loads(os.path.join(data_folder, "rooms.json"))) +connectors_data: typing.Dict[str, typing.Dict[str, typing.Any]] = hk_loads(os.path.join(data_folder, "transitions.json")) +connectors_logic: typing.List[typing.Dict[str, typing.Any]] = hk_loads(os.path.join(logic_folder, "transitions.json")) +exits: typing.Dict[str, typing.List[str]] = {} +connectors: typing.Dict[str, str] = {} +one_ways: typing.Set[str] = set() +for connector_name, connector_data in connectors_data.items(): + exits.setdefault(connector_data["SceneName"], []).append(connector_name) + connectors[connector_name] = connector_data["VanillaTarget"] + if connector_data["Sides"] != "Both": + one_ways.add(connector_name) +del connectors_data + +# starts +starts: typing.Dict[str, typing.Dict[str, typing.Any]] = hk_loads(os.path.join(data_folder, "starts.json")) + +# only allow always valid starts for now +removed_starts: typing.Set[str] = {name.replace(" ", "_").lower() for name, data in starts.items() if + name != "King's Pass"} + +starts: typing.Dict[str, str] = { + name.replace(" ", "_").lower(): data["sceneName"] for name, data in starts.items() if name == "King's Pass"} + +# logic +falses = {"MAPAREARANDO", "FULLAREARANDO"} +macros: typing.Dict[str, ast.AST] = { +} +parser = get_parser(set(), falses) +extra_macros: typing.Dict[str, str] = hk_loads(os.path.join(logic_folder, "macros.json")) +raw_location_rules: typing.List[typing.Dict[str, str]] = hk_loads(os.path.join(logic_folder, "locations.json")) +events: typing.List[typing.Dict[str, typing.Any]] = hk_loads(os.path.join(logic_folder, "waypoints.json")) + +event_names: typing.Set[str] = {event["name"] for event in events} + +for macro_name, rule in extra_macros.items(): + if macro_name not in macros: + macro_name = put_digits_at_end(macro_name) + if macro_name in items or macro_name in effect_names: + continue + assert macro_name not in events + rule = ast_parse(parser, rule) + macros[macro_name] = rule + if macro_name.startswith("COMBAT["): + name = get_text_between(macro_name, "COMBAT[", "]") + if not "'" in name: + macros[f"COMBAT['{name}']"] = rule + macros[f'COMBAT["{name}"]'] = rule + +location_rules: typing.Dict[str, str] = {} +for loc_obj in raw_location_rules: + loc_name = loc_obj["name"] + rule = loc_obj["logic"] + if rule != "ANY": + rule = ast_parse(parser, rule) + location_rules[loc_name] = unparse(rule) +location_rules["Salubra_(Requires_Charms)"] = location_rules["Salubra"] + +connectors_rules: typing.Dict[str, str] = {} +for connector_obj in connectors_logic: + name = connector_obj["Name"] + rule = connector_obj["logic"] + rule = ast_parse(parser, rule) + rule = unparse(rule) + if rule != "True": + connectors_rules[name] = rule + +event_rules: typing.Dict[str, str] = {} +for event in events: + rule = ast_parse(parser, event["logic"]) + rule = unparse(rule) + if rule != "True": + event_rules[event["name"]] = rule + + +event_rules.update(connectors_rules) +connectors_rules = {} + + +# Apply some final fixes +item_effects.update({ + 'Left_Mothwing_Cloak': {'LEFTDASH': 1}, + 'Right_Mothwing_Cloak': {'RIGHTDASH': 1}, +}) +names = sorted({"logic_options", "starts", "pool_options", "locations", "multi_locations", "location_to_region_lookup", + "event_names", "item_effects", "items", "logic_items", "region_names", + "exits", "connectors", "one_ways", "vanilla_shop_costs", "vanilla_location_costs"}) +warning = "# This module is written by Extractor.py, do not edit manually!.\n\n" +with open(os.path.join(os.path.dirname(__file__), "ExtractedData.py"), "wt") as py: + py.write(warning) + for name in names: + var = globals()[name] + if type(var) == set: + # sort so a regen doesn't cause a file change every time + var = sorted(var) + var = "{"+str(var)[1:-1]+"}" + py.write(f"{name} = {var}\n") + + +template_env: jinja2.Environment = \ + jinja2.Environment(loader=jinja2.FileSystemLoader([os.path.join(os.path.dirname(__file__), "templates")])) +rules_template = template_env.get_template("RulesTemplate.pyt") +rules = rules_template.render(location_rules=location_rules, one_ways=one_ways, connectors_rules=connectors_rules, + event_rules=event_rules) + +with open("GeneratedRules.py", "wt") as py: + py.write(warning) + py.write(rules) diff --git a/World/GeneratedRules.py b/World/GeneratedRules.py new file mode 100644 index 0000000..a339c8e --- /dev/null +++ b/World/GeneratedRules.py @@ -0,0 +1,1699 @@ +# This module is written by Extractor.py, do not edit manually!. + +# This module is written by Extractor.py, do not edit manually!. +from functools import partial + +def set_generated_rules(hk_world, hk_set_rule): + player = hk_world.player + fn = partial(hk_set_rule, hk_world) + + # Events + + fn("Can_Replenish_Geo", lambda state: state.count('Tutorial_01', player) or state.count('Can_Replenish_Geo-Crossroads', player) or state.count('Fungus1_01[right1]', player) or state.count('Fungus2_03[left1]', player) or state.count('Fungus2_06[top1]', player) or state.count('Fungus2_12[left1]', player) or state.count('Fungus2_14[top1]', player) or (state.count('Deepnest_41[left1]', player) and (state._hk_option(player, 'DarkRooms') or state.count('LANTERN', player))) or state.count('Ruins1_01[left1]', player) or state.count('Ruins1_17[right1]', player) or state.count('Ruins2_04[right2]', player) or state.count('Ruins2_06[right2]', player) or state.count('Abyss_04[left1]', player) or state.count('Abyss_12[right1]', player) or state.count('Fungus3_40[top1]', player) or state.count('Mines_02[left1]', player) or state.count('Cliffs_02[left1]', player) or state.count('Deepnest_East_01[bot1]', player) or state.count('Deepnest_East_03[left1]', player) or state.count('Deepnest_East_07[left2]', player) or state.count('Deepnest_East_08[top1]', player) or state.count('Waterways_02[top1]', player) or state.count('Waterways_01[right1]', player) or state.count('Waterways_04b[left1]', player)) + fn("Can_Replenish_Geo-Crossroads", lambda state: state.count('Crossroads_01[top1]', player) or state.count('Crossroads_03', player) or state.count('Crossroads_04[door1]', player) or state.count('Crossroads_05[left1]', player) or state.count('Crossroads_07', player) or state.count('Crossroads_08', player) or (state.count('Crossroads_11_alt[left1]', player) and (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player)))))) or (state.count('Crossroads_12[right1]', player) and (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player)))))) or state.count('Crossroads_13[left1]', player) or state.count('Crossroads_15[left1]', player) or state.count('Crossroads_16[left1]', player) or state.count('Crossroads_19', player) or state.count('Crossroads_21', player) or state.count('Crossroads_22[bot1]', player) or state.count('Crossroads_25[right1]', player) or state.count('Crossroads_27', player) or state.count('Crossroads_35[right1]', player) or state.count('Crossroads_37[right1]', player) or state.count('Crossroads_39[left1]', player) or state.count('Crossroads_40[left1]', player) or state.count('Crossroads_42[left1]', player) or state.count('Crossroads_48[left1]', player) or state.count('Crossroads_ShamanTemple[left1]', player)) + fn("Rescued_Sly", lambda state: state.count('Room_ruinhouse[left1]', player)) + fn("Rescued_Bretta", lambda state: state.count('Fungus2_23', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) or state.count('WINGS', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15))) or ((state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'EnemyPogos'))) and state.count('WINGS', player)))) + fn("Rescued_Deepnest_Zote", lambda state: state.count('Deepnest_33[top1]', player)) + fn("Defeated_Colosseum_Zote", lambda state: state.count('Room_Colosseum_01[left1]', player) and state.count('Rescued_Deepnest_Zote', player) and state.count('Defeated_Colosseum_1', player)) + fn("Lever-Shade_Soul", lambda state: state.count('Ruins1_31b[right1]', player) or (state.count('Ruins1_31b[right2]', player) and state.count('Defeated_Elegant_Warrior', player))) + fn("Completed_Path_of_Pain", lambda state: state.count('White_Palace_20[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('RIGHTDASH', player) and state.count('WINGS', player) and state.count('Defeated_Path_of_Pain_Arena', player)) + fn("Lever-Dung_Defender", lambda state: state.count('Waterways_05[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('Defeated_Dung_Defender', player) or state.count('Waterways_05[bot2]', player) or state.count('Waterways_05[right1]', player)) + fn("Warp-Lifeblood_Core_to_Abyss", lambda state: state.count('Abyss_08[right1]', player) and (state._hk_option(player, 'PreciseMovement') or state.count('LEFTDASH', player))) + fn("Warp-Palace_Grounds_to_White_Palace", lambda state: state.count('Abyss_05', player) and state.count('DREAMNAIL', player) > 2) + fn("Warp-White_Palace_Entrance_to_Palace_Grounds", lambda state: state.count('White_Palace_11[door2]', player) and ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Warp-White_Palace_Atrium_to_Palace_Grounds", lambda state: state.count('White_Palace_03_hub[left1]', player) or (state.count('White_Palace_03_hub[top1]', player) and state.count('Palace_Atrium_Gates_Opened', player)) or (state.count('White_Palace_03_hub[right1]', player) and state.count('Palace_Atrium_Gates_Opened', player)) or (state.count('White_Palace_03_hub', player) and (state._hk_option(player, 'PreciseMovement') or state.count('LEFTCLAW', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state.count('WINGS', player)))) + fn("Warp-Path_of_Pain_Complete", lambda state: state.count('White_Palace_20[bot1]', player) and state.count('Completed_Path_of_Pain', player)) + fn("Upper_Tram", lambda state: state.count('TRAM', player) and (state.count('Crossroads_46[left1]', player) or state.count('Crossroads_46b[right1]', player))) + fn("Lower_Tram", lambda state: state.count('TRAM', player) and (state.count('Abyss_03', player) or state.count('Abyss_03_b', player) or state.count('Abyss_03_c', player))) + fn("Left_Elevator", lambda state: (state.count('Crossroads_49[left1]', player) or state.count('Crossroads_49[right1]', player) or state.count('Crossroads_49b[right1]', player)) and (state.count('Crossroads_49b[right1]', player) and state._hk_option(player, 'RandomizeElevatorPass') == 0 or state.count('Elevator_Pass', player))) + fn("Right_Elevator", lambda state: (state.count('Ruins2_10[right1]', player) or state.count('Ruins2_10[left1]', player) or state.count('Ruins2_10b[right1]', player) or state.count('Ruins2_10b[right2]', player) or state.count('Ruins2_10b[left1]', player)) and (state._hk_option(player, 'RandomizeElevatorPass') == 0 or state.count('Elevator_Pass', player))) + fn("Defeated_Gruz_Mother", lambda state: (state.count('Crossroads_04[left1]', player) or state.count('Crossroads_04[top1]', player) or state.count('Crossroads_04[door_Mender_House]', player) or state.count('Crossroads_04[door1]', player) or state.count('Crossroads_04[door_charmshop]', player) or state.count('Crossroads_04[right1]', player)) and True) + fn("Defeated_False_Knight", lambda state: (state.count('Crossroads_10[right1]', player) or (state.count('Crossroads_10[left1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) and True) + fn("Defeated_Brooding_Mawlek", lambda state: (state.count('Crossroads_09[left1]', player) or state.count('Crossroads_09[right1]', player)) and ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Hornet_1", lambda state: state.count('Fungus1_04[right1]', player) and True) + fn("Defeated_Mantis_Lords", lambda state: (state.count('Fungus2_15[top3]', player) or state.count('Fungus2_15[right1]', player) or state.count('Fungus2_15[left1]', player)) and True) + fn("Defeated_Sanctum_Warrior", lambda state: (state.count('Ruins1_23', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'EnemyPogos'))) or state.count('Ruins1_23[top1]', player)) and True) + fn("Defeated_Soul_Master", lambda state: state.count('Ruins1_24[right1]', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))) + fn("Defeated_Elegant_Warrior", lambda state: (state.count('Ruins1_31b[right1]', player) or state.count('Ruins1_31b[right2]', player)) and ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Crystal_Guardian", lambda state: (state.count('Mines_18[left1]', player) or state.count('Mines_18[right1]', player) or state.count('Mines_18[top1]', player)) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('Great_Slash', player) or state.count('Cyclone_Slash', player) or ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) and state.count('Dash_Slash', player))) and True) + fn("Defeated_Enraged_Guardian", lambda state: state.count('Mines_32[bot1]', player) and state.count('Defeated_Crystal_Guardian', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Flukemarm", lambda state: state.count('Waterways_12[right1]', player) and (state.count('SWIM', player) or state.count('LEFTSUPERDASH', player)) and (state.count('FIREBALL', player) > 1 or state.count('SCREAM', player) > 1 or ((state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'RemoveSpellUpgrades') and (state.count('FIREBALL', player) or state.count('SCREAM', player))))) + fn("Defeated_Dung_Defender", lambda state: state.count('Waterways_05[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Broken_Vessel", lambda state: state.count('Abyss_19[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Hornet_2", lambda state: state.count('Deepnest_East_Hornet[left1]', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Watcher_Knights", lambda state: (state.count('Ruins2_03[bot1]', player) or state.count('Ruins2_03[top1]', player)) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Uumuu", lambda state: state.count('Fungus3_archive_02[top1]', player) and ((state.count('LEFTSUPERDASH', player) or state.count('RIGHTSUPERDASH', player)) or state.count('ACID', player) or (state._hk_option(player, 'AcidSkips') and state.count('LEFTDASH', player) and state.count('LEFTCLAW', player) and state.count('WINGS', player))) and (((state.count('FIREBALL', player) or state.count('SCREAM', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Defeated_Nosk", lambda state: state.count('Deepnest_32[left1]', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Traitor_Lord", lambda state: (state.count('Fungus3_23[left1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) or (state.count('Fungus3_23[right1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Grimm", lambda state: state.count('Grimm_Main_Tent[left1]', player) and state.count('GRIMMCHILD', player) and (state.count('FLAMES', player) > 5) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Collector", lambda state: state.count('Ruins2_11[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTDASH', player) and state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Hive_Knight", lambda state: state.count('Hive_05[left1]', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Pale_Lurker", lambda state: state.count('GG_Lurker[left1]', player) and (state.count('SWIM', player) or state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player))) and state.count('RIGHTCLAW', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Elder_Hu", lambda state: state.count('Fungus2_32[left1]', player) and state.count('DREAMNAIL', player) and (((state.count('FIREBALL', player) or state.count('SCREAM', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Defeated_Xero", lambda state: state.count('RestingGrounds_02', player) and state.count('DREAMNAIL', player) and (((state.count('FIREBALL', player) or state.count('SCREAM', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Defeated_Gorb", lambda state: state.count('Cliffs_02', player) and state.count('DREAMNAIL', player) and (((state.count('FIREBALL', player) or state.count('SCREAM', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Defeated_Marmu", lambda state: (state.count('Fungus3_40[top1]', player) or (state.count('Fungus3_40[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player)))) and state.count('DREAMNAIL', player) and (((state.count('FIREBALL', player) or state.count('SCREAM', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Defeated_No_Eyes", lambda state: (state.count('Fungus1_35[left1]', player) or state.count('Fungus1_35[right1]', player)) and state.count('LANTERN', player) and state.count('DREAMNAIL', player) and (((state.count('FIREBALL', player) or state.count('SCREAM', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Defeated_Galien", lambda state: state.count('Deepnest_40[right1]', player) and state.count('DREAMNAIL', player) and (((state.count('FIREBALL', player) or state.count('SCREAM', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Defeated_Markoth", lambda state: state.count('Deepnest_East_10[left1]', player) and state.count('DREAMNAIL', player) and (((state.count('FIREBALL', player) or state.count('SCREAM', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Defeated_Failed_Champion", lambda state: (state.count('Crossroads_10[left1]', player) or state.count('Crossroads_10[right1]', player)) and state.count('Defeated_False_Knight', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player))) and state.count('DREAMNAIL', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Soul_Tyrant", lambda state: (state.count('Ruins1_24[right1]', player) or state.count('Ruins1_24[left1]', player)) and state.count('Defeated_Soul_Master', player) and (state.count('LEFTCLAW', player) and state._hk_option(player, 'PreciseMovement') or state.count('WINGS', player) or state.count('LEFTDASH', player)) and state.count('DREAMNAIL', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Lost_Kin", lambda state: (state.count('Abyss_19[left1]', player) or state.count('Abyss_19[bot1]', player)) and state.count('Defeated_Broken_Vessel', player) and state.count('DREAMNAIL', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_White_Defender", lambda state: state.count('Waterways_15[top1]', player) and state.count('DREAMNAIL', player) and ((state.count('DREAMER', player) > 2 or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player) > 2)))) and state.count('Defeated_Dung_Defender', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Grey_Prince_Zote", lambda state: state.count('Room_Bretta[right1]', player) and state.count('DREAMNAIL', player) and state.count('WINGS', player) and state.count('Rescued_Bretta', player) and state.count('Defeated_Colosseum_Zote', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Colosseum_1", lambda state: state.count('Room_Colosseum_01[left1]', player) and state.count('Can_Replenish_Geo', player) and ((state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))) and (state.count('FOCUS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Colosseum_2", lambda state: state.count('Room_Colosseum_01[left1]', player) and state.count('Can_Replenish_Geo', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or ((state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')) and state.count('WINGS', player))) and ((state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))) and (state.count('FOCUS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Shrumal_Ogre_Arena", lambda state: (state.count('Fungus2_05[bot1]', player) or state.count('Fungus2_05[right1]', player)) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('Cyclone_Slash', player) or state.count('Great_Slash', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))) + fn("Defeated_King's_Station_Arena", lambda state: state.count('Ruins2_09[bot1]', player) and ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_West_Queen's_Gardens_Arena", lambda state: (state.count('Fungus3_10[bot1]', player) or (state.count('Fungus3_10[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player)))) and ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Defeated_Path_of_Pain_Arena", lambda state: state.count('White_Palace_20[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('RIGHTDASH', player) and state.count('WINGS', player) and (state.count('SPELLS', player) > 1 and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state._hk_option(player, 'ProficientCombat')) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Can_Bench", lambda state: state.count('Town', player) or state.count('Room_nailmaster[left1]', player) or state.count('Crossroads_30[left1]', player) or state.count('Crossroads_47[right1]', player) or state.count('Crossroads_04[door_charmshop]', player) or state.count('Crossroads_ShamanTemple[left1]', player) or (state.count('Room_temple[left1]', player) and state.count('Opened_Black_Egg_Temple', player)) or state.count('Fungus1_01b[left1]', player) or state.count('Fungus1_37[left1]', player) or state.count('Fungus1_31[bot1]', player) or state.count('Fungus1_16_alt[right1]', player) or state.count('Room_Slug_Shrine[left1]', player) or state.count('Fungus1_15[door1]', player) or (state.count('Fungus3_archive[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or state.count('Fungus2_02[right1]', player) or state.count('Fungus2_26[left1]', player) or state.count('Fungus2_13', player) or (state.count('Fungus2_31[left1]', player) and state.count('Defeated_Mantis_Lords', player)) or (state.count('Ruins1_02[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or state.count('Ruins1_02[top1]', player) or (state.count('Ruins1_31[left1]', player) and state.count('Can_Replenish_Geo', player)) or state.count('Ruins1_29[left1]', player) or state.count('Ruins1_18[right2]', player) or state.count('Ruins2_08[left1]', player) or state.count('Ruins_Bathhouse[door1]', player) or state.count('Deepnest_30[left1]', player) or state.count('Deepnest_14[left1]', player) or (state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) or (state.count('Waterways_02[top3]', player) and state.count('QUAKE', player)) or (state.count('Waterways_02', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player)) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips') and (state.count('WINGS', player) or state.count('RIGHTCLAW', player))))) or (state.count('Abyss_18[right1]', player) and state.count('Can_Replenish_Geo', player)) or state.count('Abyss_22[left1]', player) or state.count('Deepnest_East_06[door1]', player) or state.count('Deepnest_East_13[bot1]', player) or state.count('Room_Colosseum_02[top1]', player) or state.count('Room_Colosseum_02[top2]', player) or state.count('Hive_01[right2]', player) or state.count('Mines_29[left1]', player) or (state.count('Mines_18[left1]', player) and state.count('Defeated_Crystal_Guardian', player)) or state.count('RestingGrounds_09[left1]', player) or state.count('RestingGrounds_12[door_Mansion]', player) or (state.count('Fungus1_24[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or (state.count('Fungus3_50[right1]', player) and state.count('Can_Replenish_Geo', player)) or state.count('Fungus3_40[right1]', player) or state.count('White_Palace_01', player) or state.count('White_Palace_03_hub', player) or state.count('White_Palace_06[top1]', player) or state.count('Upper_Tram', player) or state.count('Lower_Tram', player)) + fn("Can_Stag", lambda state: state.count('Room_Town_Stag_Station[left1]', player) or state.count('Crossroads_47[right1]', player) or state.count('Fungus1_16_alt[right1]', player) or state.count('Fungus2_02[right1]', player) or (state.count('Fungus3_40[top1]', player) or state.count('Fungus3_40[right1]', player)) or state.count('Ruins1_29[left1]', player) or state.count('Ruins2_08[left1]', player) or state.count('RestingGrounds_09[left1]', player) or state.count('Deepnest_09[left1]', player) or state.count('Abyss_22[left1]', player)) + fn("Can_Repair_Fragile_Charms", lambda state: state.count('Fungus2_26[left1]', player) and state.count('Can_Replenish_Geo', player)) + fn("First_Grimmchild_Upgrade", lambda state: state.count('Grimm_Main_Tent[left1]', player) and state.count('GRIMMCHILD', player) and (state.count('FLAMES', player) > 2)) + fn("Second_Grimmchild_Upgrade", lambda state: state.count('Grimm_Main_Tent[left1]', player) and state.count('GRIMMCHILD', player) and (state.count('FLAMES', player) > 5) and state.count('Defeated_Grimm', player)) + fn("Nightmare_Lantern_Lit", lambda state: state.count('Cliffs_06[left1]', player) and state.count('DREAMNAIL', player) or state.count('GRIMMCHILD', player)) + fn("Opened_Waterways_Manhole", lambda state: state.count('Ruins1_05b', player) and state.count('SIMPLE', player) > 3) + fn("Opened_Dung_Defender_Wall", lambda state: state.count('Waterways_05[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('Defeated_Dung_Defender', player) or state.count('Waterways_05[bot2]', player) or state.count('Waterways_05[right1]', player)) + fn("Opened_Resting_Grounds_Floor", lambda state: (state.count('RestingGrounds_06[left1]', player) or state.count('RestingGrounds_06[right1]', player)) and (state.count('LEFTDASH', player) or state.count('LEFTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) or state.count('RestingGrounds_06[top1]', player)) + fn("Opened_Resting_Grounds_Catacombs_Wall", lambda state: state.count('RestingGrounds_10', player)) + fn("Opened_Pleasure_House_Wall", lambda state: state.count('Ruins_Bathhouse[door1]', player) or state.count('Ruins_Bathhouse[right1]', player)) + fn("Opened_Gardens_Stag_Exit", lambda state: state.count('Fungus3_40[top1]', player) or state.count('Fungus3_40[right1]', player) or (state.count("Queen's_Gardens_Stag", player) and state.count('Can_Stag', player))) + fn("Opened_Mawlek_Wall", lambda state: state.count('Crossroads_09[right1]', player) or (state.count('Crossroads_09[left1]', player) and state.count('Defeated_Brooding_Mawlek', player))) + fn("Opened_Shaman_Pillar", lambda state: state.count('Crossroads_06[left1]', player) or state.count('Crossroads_06[door1]', player) or state.count('Crossroads_06[right1]', player) or (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player))))) + fn("Opened_Archives_Exit_Wall", lambda state: state.count('Fungus3_47', player)) + fn("Opened_Tramway_Exit_Gate", lambda state: state.count('Deepnest_26b[right2]', player) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state._hk_option(player, 'EnemyPogos'))))) + fn("Broke_Sanctum_Glass_Floor", lambda state: state.count('Ruins1_30', player) and state.count('QUAKE', player)) + fn("Opened_Emilitia_Door", lambda state: state.count('Ruins_House_03[left1]', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('Ruins_House_03[left2]', player))) + fn("Lit_Abyss_Lighthouse", lambda state: state.count('Abyss_Lighthouse_room[left1]', player)) + fn("Opened_Lower_Kingdom's_Edge_Wall", lambda state: state.count('Deepnest_East_02', player)) + fn("Opened_Glade_Door", lambda state: state.count('RestingGrounds_07[right1]', player) and state.count('ESSENCE', player) > 199) + fn("Opened_Waterways_Exit", lambda state: (state.count('Waterways_09[left1]', player) or state.count('Waterways_09[right1]', player)) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))) or False) + fn("Palace_Entrance_Lantern_Lit", lambda state: state.count('White_Palace_02[left1]', player) and state.count('LEFTCLAW', player) and state.count('WINGS', player) and ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("Palace_Left_Lantern_Lit", lambda state: state.count('White_Palace_14[right1]', player)) + fn("Palace_Right_Lantern_Lit", lambda state: state.count('White_Palace_15[right1]', player)) + fn("Palace_Atrium_Gates_Opened", lambda state: state.count('Palace_Left_Lantern_Lit', player) and state.count('Palace_Right_Lantern_Lit', player)) + fn("Opened_Black_Egg_Temple", lambda state: state.count('Room_temple[left1]', player) and (state.count('DREAMER', player) > 2 or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player) > 2)))) + fn("Tutorial_01", lambda state: state.count('Tutorial_01[right1]', player) or state.count('Tutorial_01[top1]', player) or state.count('Tutorial_01[top2]', player)) + fn("Town", lambda state: state.count('Town[left1]', player) or state.count('Town[top1]', player) or state.count('Town[bot1]', player) or state.count('Town[right1]', player) or state.count('Town[door_station]', player) or state.count('Town[door_sly]', player) or state.count('Town[door_mapper]', player) or state.count('Town[door_bretta]', player) or state.count('Town[door_jiji]', player)) + fn("Crossroads_03", lambda state: state.count('Crossroads_03[right1]', player) or state.count('Crossroads_03[right2]', player) or state.count('Crossroads_03[left1]', player) or state.count('Crossroads_03[left2]', player) or state.count('Crossroads_03[bot1]', player)) + fn("Crossroads_07", lambda state: state.count('Crossroads_07[left1]', player) or state.count('Crossroads_07[left2]', player) or state.count('Crossroads_07[left3]', player) or state.count('Crossroads_07[right1]', player) or state.count('Crossroads_07[right2]', player) or state.count('Crossroads_07[bot1]', player)) + fn("Crossroads_08", lambda state: state.count('Crossroads_08[left1]', player) or state.count('Crossroads_08[left2]', player) or state.count('Crossroads_08[right1]', player) or state.count('Crossroads_08[right2]', player)) + fn("Crossroads_14", lambda state: state.count('Crossroads_14[left1]', player) or state.count('Crossroads_14[left2]', player) or state.count('Crossroads_14[right1]', player) or state.count('Crossroads_14[right2]', player)) + fn("Crossroads_18", lambda state: state.count('Crossroads_18[right1]', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player)))))) or state.count('Crossroads_18[bot1]', player) or state.count('Crossroads_18[right2]', player)) + fn("Crossroads_19", lambda state: state.count('Crossroads_19[left1]', player) or state.count('Crossroads_19[left2]', player) or state.count('Crossroads_19[right1]', player) or state.count('Crossroads_19[top1]', player)) + fn("Crossroads_21", lambda state: state.count('Crossroads_21[left1]', player) or state.count('Crossroads_21[right1]', player) or state.count('Crossroads_21[top1]', player)) + fn("Crossroads_27", lambda state: state.count('Crossroads_27[right1]', player) or state.count('Crossroads_27[bot1]', player) or state.count('Crossroads_27[left1]', player) or state.count('Crossroads_27[left2]', player)) + fn("Crossroads_33", lambda state: state.count('Crossroads_33[top1]', player) or state.count('Crossroads_33[left1]', player) or state.count('Crossroads_33[left2]', player) or state.count('Crossroads_33[right1]', player) or state.count('Crossroads_33[right2]', player)) + fn("Fungus1_11", lambda state: state.count('Fungus1_11[left1]', player) or state.count('Fungus1_11[top1]', player) or state.count('Fungus1_11[bot1]', player) or state.count('Fungus1_11[right1]', player) or state.count('Fungus1_11[right2]', player)) + fn("Fungus1_21", lambda state: state.count('Fungus1_21[left1]', player) or state.count('Fungus1_21[top1]', player) or (state.count('Fungus1_21[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player))) or state.count('Fungus1_21[bot1]', player)) + fn("Fungus1_30", lambda state: state.count('Fungus1_30[left1]', player) or state.count('Fungus1_30[right1]', player) or state.count('Fungus1_30[top1]', player) or state.count('Fungus1_30[top3]', player)) + fn("Fungus3_01", lambda state: state.count('Fungus3_01[left1]', player) or state.count('Fungus3_01[top1]', player) or state.count('Fungus3_01[right1]', player) or state.count('Fungus3_01[right2]', player)) + fn("Fungus3_02", lambda state: state.count('Fungus3_02[left1]', player) or state.count('Fungus3_02[left2]', player) or state.count('Fungus3_02[left3]', player) or state.count('Fungus3_02[right1]', player) or state.count('Fungus3_02[right2]', player)) + fn("Fungus3_26", lambda state: state.count('Fungus3_26[top1]', player) or state.count('Fungus3_26[left1]', player) or state.count('Fungus3_26[left2]', player) or state.count('Fungus3_26[left3]', player) or state.count('Fungus3_26[right1]', player)) + fn("Fungus3_44", lambda state: state.count('Fungus3_44[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) or state.count('Fungus3_44[door1]', player) or state.count('Fungus3_44[right1]', player)) + fn("Fungus3_47", lambda state: state.count('Fungus3_47[left1]', player) or state.count('Fungus3_47[door1]', player) or state.count('Fungus3_47[right1]', player)) + fn("Fungus2_01", lambda state: state.count('Fungus2_01[left1]', player) or state.count('Fungus2_01[left2]', player) or state.count('Fungus2_01[left3]', player) or state.count('Fungus2_01[right1]', player)) + fn("Fungus2_03", lambda state: state.count('Fungus2_03[left1]', player) or state.count('Fungus2_03[bot1]', player) or state.count('Fungus2_03[right1]', player)) + fn("Fungus2_04", lambda state: state.count('Fungus2_04[left1]', player) or state.count('Fungus2_04[right1]', player) or state.count('Fungus2_04[right2]', player) or state.count('Fungus2_04[top1]', player)) + fn("Fungus2_06", lambda state: state.count('Fungus2_06[left1]', player) or (state.count('Fungus2_06[left2]', player) and state.count('ACID', player)) or state.count('Fungus2_06[top1]', player) or state.count('Fungus2_06[right1]', player) or state.count('Fungus2_06[right2]', player)) + fn("Fungus2_11", lambda state: state.count('Fungus2_11[top1]', player) or state.count('Fungus2_11[left1]', player) or state.count('Fungus2_11[left2]', player) or state.count('Fungus2_11[right1]', player)) + fn("Fungus2_13", lambda state: state.count('Fungus2_13[top1]', player) or state.count('Fungus2_13[left2]', player) or (state.count('Fungus2_13[left3]', player) and (state.count('RIGHTDASH', player) or state.count('ACID', player) or state.count('WINGS', player) or state.count('LEFTCLAW', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True) or state._hk_option(player, 'ShadeSkips')))) + fn("Fungus2_14", lambda state: state.count('Fungus2_14[top1]', player) or state.count('Fungus2_14[bot3]', player) or (state.count('Fungus2_14[right1]', player) and (state.count('LEFTDASH', player) or state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('LEFTSUPERDASH', player) or state.count('ACID', player)))) + fn("Fungus2_17", lambda state: state.count('Fungus2_17[right1]', player) or state.count('Fungus2_17[left1]', player) or state.count('Fungus2_17[bot1]', player)) + fn("Fungus2_20", lambda state: state.count('Fungus2_20[left1]', player) or state.count('Fungus2_20[right1]', player)) + fn("Fungus2_23", lambda state: state.count('Fungus2_23[right1]', player) or (state.count('Fungus2_23[right2]', player) and state.count('Opened_Waterways_Exit', player))) + fn("Deepnest_01", lambda state: state.count('Deepnest_01[left1]', player) or state.count('Deepnest_01[bot1]', player) or state.count('Deepnest_01[right1]', player)) + fn("Deepnest_01b", lambda state: state.count('Deepnest_01b[top1]', player) or state.count('Deepnest_01b[top2]', player) or state.count('Deepnest_01b[right1]', player) or (state.count('Deepnest_01b[right2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or (state.count('Deepnest_01b[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_02", lambda state: state.count('Deepnest_02[left1]', player) or state.count('Deepnest_02[left2]', player) or state.count('Deepnest_02[right1]', player)) + fn("Deepnest_03", lambda state: state.count('Deepnest_03[right1]', player) or state.count('Deepnest_03[top1]', player) or state.count('Deepnest_03[left1]', player) or state.count('Deepnest_03[left2]', player)) + fn("Deepnest_10", lambda state: state.count('Deepnest_10[right1]', player) or state.count('Deepnest_10[right2]', player) or state.count('Deepnest_10[door1]', player) or state.count('Deepnest_10[door2]', player)) + fn("Deepnest_14", lambda state: state.count('Deepnest_14[left1]', player) or state.count('Deepnest_14[bot1]', player) or state.count('Deepnest_14[bot2]', player)) + fn("Deepnest_17", lambda state: state.count('Deepnest_17[left1]', player) or state.count('Deepnest_17[right1]', player) or state.count('Deepnest_17[top1]', player) or state.count('Deepnest_17[bot1]', player)) + fn("Deepnest_26", lambda state: state.count('Deepnest_26[right1]', player) or state.count('Deepnest_26[bot1]', player) or (state.count('Deepnest_26[left1]', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)) or state.count('WINGS', player)) and state.count('Opened_Tramway_Exit_Gate', player))) + fn("Deepnest_34", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_34[left1]', player) or state.count('Deepnest_34[right1]', player) or state.count('Deepnest_34[top1]', player))) + fn("Deepnest_35", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_35[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('Deepnest_35[left1]', player) or state.count('Deepnest_35[top1]', player))) + fn("Deepnest_37", lambda state: state.count('Deepnest_37[left1]', player) or state.count('Deepnest_37[top1]', player) or state.count('Deepnest_37[right1]', player) or state.count('Deepnest_37[bot1]', player)) + fn("Deepnest_39", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_39[right1]', player) or state.count('Deepnest_39[door1]', player) or state.count('Deepnest_39[top1]', player) or state.count('Deepnest_39[left1]', player))) + fn("Deepnest_41", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_41[left1]', player) and (state.count('RIGHTCLAW', player) or ((state.count('LEFTCLAW', player) or state.count('WINGS', player)) and state._hk_option(player, 'EnemyPogos'))) or (state.count('Deepnest_41[left2]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))))) or (state.count('Deepnest_41[right1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player))))) + fn("Deepnest_42", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_42[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state.count('Deepnest_42[left1]', player) or state.count('Deepnest_42[top1]', player))) + fn("Deepnest_East_02", lambda state: state.count('Deepnest_East_02[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'EnemyPogos'))) or state.count('Deepnest_East_02[top1]', player) or state.count('Deepnest_East_02[right1]', player)) + fn("Deepnest_East_03", lambda state: state.count('Deepnest_East_03[left1]', player) or state.count('Deepnest_East_03[left2]', player) or state.count('Deepnest_East_03[top1]', player) or state.count('Deepnest_East_03[right1]', player) or state.count('Deepnest_East_03[right2]', player) or state.count('Deepnest_East_03[top2]', player)) + fn("Deepnest_East_04", lambda state: state.count('Deepnest_East_04[left1]', player) and state.count('ACID', player) or state.count('Deepnest_East_04[left2]', player) or state.count('Deepnest_East_04[right2]', player) or (state.count('Deepnest_East_04[right1]', player) and (state.count('ACID', player) or state.count('LEFTDASH', player) or state.count('WINGS', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True) or (state.count('MASKSHARDS', player) > 7)))) + fn("Deepnest_East_07", lambda state: state.count('Deepnest_East_07[right1]', player) or state.count('Deepnest_East_07[left1]', player) or state.count('Deepnest_East_07[left2]', player)) + fn("Deepnest_East_11", lambda state: state.count('Deepnest_East_11[left1]', player) or state.count('Deepnest_East_11[bot1]', player) or (state.count('Deepnest_East_11[top1]', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Cyclone_Slash', player) or state.count('Great_Slash', player) or state.count('FIREBALL', player) or state.count('QUAKE', player))) or state.count('Deepnest_East_11[right1]', player)) + fn("Deepnest_East_18", lambda state: state.count('Deepnest_East_18[top1]', player) or state.count('Deepnest_East_18[bot1]', player) or (state.count('Deepnest_East_18[right2]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)))) + fn("Hive_03_c", lambda state: state.count('Hive_03_c[left1]', player) or state.count('Hive_03_c[top1]', player) or state.count('Hive_03_c[right2]', player) or state.count('Hive_03_c[right3]', player)) + fn("Abyss_03", lambda state: state.count('Abyss_03[top1]', player) or (state.count('Abyss_03[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player))) or state.count('Abyss_03[bot2]', player)) + fn("Abyss_03_b", lambda state: state.count('Abyss_03_b[left1]', player)) + fn("Abyss_03_c", lambda state: state.count('Abyss_03_c[top1]', player) or state.count('Abyss_03_c[right1]', player)) + fn("Abyss_04", lambda state: state.count('Abyss_04[top1]', player) or state.count('Abyss_04[right1]', player) or state.count('Abyss_04[bot1]', player) or state.count('Abyss_04[left1]', player)) + fn("Abyss_06_Core", lambda state: state.count('Abyss_06_Core[top1]', player) and state.count('BRAND', player) or state.count('Abyss_06_Core[left1]', player) or state.count('Abyss_06_Core[left3]', player) or state.count('Abyss_06_Core[bot1]', player) or state.count('Abyss_06_Core[right2]', player)) + fn("Abyss_09", lambda state: state.count('Abyss_09[left1]', player) and (state.count('RIGHTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or (state.count('SWIM', player) and (state.count('WHITEFRAGMENT', player) > 2 or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 7)))))) or state.count('WINGS', player)) or (state.count('Abyss_09[right1]', player) and (state.count('Lit_Abyss_Lighthouse', player) or (state.count('WHITEFRAGMENT', player) > 2 or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 7))))) and (state.count('LEFTSUPERDASH', player) or state.count('SWIM', player))) or state.count('Abyss_09[right2]', player)) + fn("Abyss_19", lambda state: state.count('Abyss_19[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or state.count('Abyss_19[right1]', player)) + fn("Abyss_01", lambda state: state.count('Abyss_01[left1]', player) or state.count('Abyss_01[right1]', player) or (state.count('Abyss_01[left3]', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player)))) or (state.count('Abyss_01[left2]', player) and (state._hk_option(player, 'SpikeTunnels') and state.count('RIGHTDASH', player) and (state.count('Dashmaster', player) and state.count('Can_Bench', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) or state.count('RIGHTSUPERDASH', player))) or (state.count('Abyss_01[right2]', player) and (state._hk_option(player, 'SpikeTunnels') and state.count('LEFTDASH', player) and (state.count('Dashmaster', player) and state.count('Can_Bench', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) or state.count('LEFTSUPERDASH', player)))) + fn("Waterways_01", lambda state: state.count('Waterways_01[top1]', player) or state.count('Waterways_01[right1]', player) or state.count('Waterways_01[bot1]', player) or state.count('Waterways_01[left1]', player)) + fn("Waterways_02", lambda state: state.count('Waterways_02[top1]', player) or state.count('Waterways_02[top2]', player) or (state.count('Waterways_02[top3]', player) and state.count('QUAKE', player)) or state.count('Waterways_02[bot1]', player) or state.count('Waterways_02[bot2]', player)) + fn("Waterways_04", lambda state: state.count('Waterways_04[right1]', player) or (state.count('Waterways_04[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or state.count('Waterways_04[left2]', player)) + fn("Waterways_04b", lambda state: state.count('Waterways_04b[right1]', player) or state.count('Waterways_04b[right2]', player) or state.count('Waterways_04b[left1]', player)) + fn("Waterways_07", lambda state: state.count('Waterways_07[left1]', player) and (state.count('ACID', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('RIGHTSUPERDASH', player)) or (state.count('WINGS', player) and state.count('RIGHTDASH', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) or (state.count('Waterways_07[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or (state.count('Waterways_07[right2]', player) and state.count('ACID', player)) or state.count('Waterways_07[door1]', player) or state.count('Waterways_07[top1]', player)) + fn("Ruins1_03", lambda state: state.count('Ruins1_03[top1]', player) or state.count('Ruins1_03[left1]', player) or state.count('Ruins1_03[right1]', player) or state.count('Ruins1_03[right2]', player)) + fn("Ruins1_05b", lambda state: state.count('Ruins1_05b[top1]', player) or state.count('Ruins1_05b[right1]', player) or state.count('Ruins1_05b[left1]', player) or state.count('Ruins1_05b[bot1]', player)) + fn("Ruins1_05c", lambda state: state.count('Ruins1_05c[bot1]', player) or state.count('Ruins1_05c[left2]', player) or state.count('Ruins1_05c[top1]', player) or state.count('Ruins1_05c[top2]', player) or state.count('Ruins1_05c[top3]', player)) + fn("Ruins1_05", lambda state: state.count('Ruins1_05[bot3]', player) or state.count('Ruins1_05[right1]', player) or state.count('Ruins1_05[right2]', player) or state.count('Ruins1_05[top1]', player)) + fn("Ruins1_23", lambda state: state.count('Ruins1_23[right2]', player) or state.count('Ruins1_23[left1]', player) or state.count('Ruins1_23[bot1]', player)) + fn("Ruins1_28", lambda state: state.count('Ruins1_28[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)) or state._hk_option(player, 'BackgroundObjectPogos') or (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips')))) or state.count('Ruins1_28[bot1]', player) or state.count('Ruins1_28[right1]', player)) + fn("Ruins1_30", lambda state: state.count('Ruins1_30[left1]', player) or (state.count('Ruins1_30[left2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('QUAKE', player)) or state.count('Ruins1_30[bot1]', player) or state.count('Ruins1_30[right1]', player)) + fn("Ruins1_31", lambda state: state.count('Ruins1_31[right1]', player) or state.count('Ruins1_31[left2]', player) or state.count('Ruins1_31[left3]', player)) + fn("Ruins2_01", lambda state: state.count('Ruins2_01[top1]', player) or state.count('Ruins2_01[bot1]', player) or state.count('Ruins2_01[left2]', player)) + fn("Ruins2_01_b", lambda state: state.count('Ruins2_01_b[top1]', player) or state.count('Ruins2_01_b[left1]', player) or state.count('Ruins2_01_b[right1]', player)) + fn("Ruins2_03b", lambda state: state.count('Ruins2_03b[top1]', player) or state.count('Ruins2_03b[top2]', player) or state.count('Ruins2_03b[left1]', player) or state.count('Ruins2_03b[bot1]', player)) + fn("Ruins2_04", lambda state: state.count('Ruins2_04[left1]', player) or state.count('Ruins2_04[left2]', player) or state.count('Ruins2_04[right1]', player) or state.count('Ruins2_04[right2]', player) or state.count('Ruins2_04[door_Ruin_House_01]', player) or state.count('Ruins2_04[door_Ruin_House_02]', player) or state.count('Ruins2_04[door_Ruin_House_03]', player) or state.count('Ruins2_04[door_Ruin_Elevator]', player)) + fn("Ruins2_10", lambda state: state.count('Ruins2_10[right1]', player) or state.count('Ruins2_10[left1]', player) or state.count('Right_Elevator', player)) + fn("RestingGrounds_02", lambda state: state.count('RestingGrounds_02[top1]', player) or state.count('RestingGrounds_02[left1]', player) or state.count('RestingGrounds_02[bot1]', player) or state.count('RestingGrounds_02[right1]', player)) + fn("RestingGrounds_05", lambda state: state.count('RestingGrounds_05[left1]', player) or state.count('RestingGrounds_05[left2]', player) or state.count('RestingGrounds_05[left3]', player) or state.count('RestingGrounds_05[right1]', player) or state.count('RestingGrounds_05[right2]', player) or state.count('RestingGrounds_05[bot1]', player)) + fn("RestingGrounds_10", lambda state: state.count('RestingGrounds_10[left1]', player) or state.count('RestingGrounds_10[top1]', player) or state.count('RestingGrounds_10[top2]', player)) + fn("Mines_02", lambda state: state.count('Mines_02[top1]', player) or state.count('Mines_02[top2]', player) or state.count('Mines_02[left1]', player) or state.count('Mines_02[right1]', player)) + fn("Mines_03", lambda state: state.count('Mines_03[right1]', player) or state.count('Mines_03[top1]', player) or state.count('Mines_03[bot1]', player)) + fn("Mines_04", lambda state: state.count('Mines_04[left1]', player) or state.count('Mines_04[left2]', player) or (state.count('Mines_04[left3]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state._hk_option(player, 'EnemyPogos'))))) or state.count('Mines_04[right1]', player) or state.count('Mines_04[top1]', player)) + fn("Mines_05", lambda state: state.count('Mines_05[right1]', player) or state.count('Mines_05[top1]', player) or state.count('Mines_05[bot1]', player) or state.count('Mines_05[left1]', player) or state.count('Mines_05[left2]', player)) + fn("Mines_10", lambda state: state.count('Mines_10[left1]', player) and (state.count('RIGHTDASH', player) and state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player)) or (state.count('Mines_10[bot1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) or (state.count('Mines_10[right1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('LEFTSUPERDASH', player))) + fn("Mines_11", lambda state: state.count('Mines_11[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or state.count('Mines_11[right1]', player) or state.count('Mines_11[top1]', player)) + fn("Mines_18", lambda state: state.count('Mines_18[left1]', player) or state.count('Mines_18[right1]', player) or state.count('Mines_18[top1]', player)) + fn("Mines_20", lambda state: state.count('Mines_20[left1]', player) or state.count('Mines_20[right1]', player) or (state.count('Mines_20[right2]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))))) + fn("Mines_23", lambda state: (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player))) or state.count('Mines_23[right1]', player)) and (state.count('Mines_23[left1]', player) or state.count('Mines_23[top1]', player) or state.count('Mines_23[right1]', player) or state.count('Mines_23[right2]', player))) + fn("Fungus3_04", lambda state: state.count('Fungus3_04[left1]', player) or state.count('Fungus3_04[left2]', player) or state.count('Fungus3_04[right1]', player) or state.count('Fungus3_04[right2]', player)) + fn("Fungus3_11", lambda state: state.count('Fungus3_11[left1]', player) or (state.count('Fungus3_11[left2]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player)))) or (state.count('Fungus3_11[right1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) + fn("Fungus3_13", lambda state: state.count('Fungus3_13[left1]', player) or state.count('Fungus3_13[left2]', player) or state.count('Fungus3_13[left3]', player) or state.count('Fungus3_13[bot1]', player) or state.count('Fungus3_13[right1]', player)) + fn("Fungus3_22", lambda state: state.count('Fungus3_22[right1]', player) or state.count('Fungus3_22[left1]', player) or state.count('Fungus3_22[bot1]', player)) + fn("Fungus3_34", lambda state: state.count('Fungus3_34[left1]', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player)) or state.count('Fungus3_34[right1]', player) or state.count('Fungus3_34[top1]', player)) + fn("Fungus3_40", lambda state: state.count('Fungus3_40[top1]', player) or state.count('Fungus3_40[right1]', player)) + fn("Cliffs_01", lambda state: state.count('Cliffs_01[right1]', player) or state.count('Cliffs_01[right2]', player) or state.count('Cliffs_01[right3]', player) or state.count('Cliffs_01[right4]', player)) + fn("Cliffs_02", lambda state: state.count('Cliffs_02[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')))) or state.count('Cliffs_02[door1]', player) or state.count('Cliffs_02[left1]', player) or state.count('Cliffs_02[left2]', player)) + fn("White_Palace_01", lambda state: state.count('White_Palace_01[left1]', player) and (state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player))) or (state.count('White_Palace_01[right1]', player) and (state.count('LEFTDASH', player) and (state._hk_option(player, 'BackgroundObjectPogos') or state.count('LEFTCLAW', player)) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('LEFTSUPERDASH', player)) or state.count('WINGS', player))) or (state.count('White_Palace_01[top1]', player) and state.count('Palace_Entrance_Lantern_Lit', player))) + fn("White_Palace_03_hub", lambda state: state.count('White_Palace_03_hub[left1]', player) or state.count('White_Palace_03_hub[left2]', player) or (state.count('White_Palace_03_hub[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or state.count('White_Palace_03_hub[right1]', player) or (state.count('White_Palace_03_hub[top1]', player) and state.count('Palace_Atrium_Gates_Opened', player))) + fn("White_Palace_13", lambda state: state.count('White_Palace_13[right1]', player) and state._hk_option(player, 'ObscureSkips') and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and state.count('LEFTCLAW', player) and (state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or (state.count('White_Palace_13[left1]', player) and state.count('RIGHTCLAW', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player))) or (state.count('White_Palace_13[left2]', player) and state.count('LEFTCLAW', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and (state.count('WINGS', player) or state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player)))) or state.count('White_Palace_13[left3]', player)) + fn("Abyss_05", lambda state: state.count('Abyss_05[left1]', player) or state.count('Abyss_05[right1]', player) or state.count('Warp-White_Palace_Entrance_to_Palace_Grounds', player) or state.count('Warp-White_Palace_Atrium_to_Palace_Grounds', player)) + fn("Room_temple[left1]", lambda state: state.count('Room_temple[left1]', player)) + fn("Tutorial_01[right1]", lambda state: state.count('Tutorial_01[right1]', player) or state.count('Tutorial_01', player)) + fn("Tutorial_01[top1]", lambda state: False) + fn("Tutorial_01[top2]", lambda state: state.count('Tutorial_01[top2]', player) or (((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips'))) and state.count('Tutorial_01', player))) + fn("Town[left1]", lambda state: state.count('Town[left1]', player) or (state.count('Town', player) and (state.count('LEFTCLAW', player) or (state.count('Town[right1]', player) and state.count('LEFTSUPERDASH', player))))) + fn("Town[bot1]", lambda state: state.count('Town[bot1]', player) or state.count('Town', player)) + fn("Town[right1]", lambda state: state.count('Town[right1]', player) or (state.count('Town', player) and (state.count('LEFTCLAW', player) or state.count('Town[left1]', player)) and state.count('WINGS', player) and state.count('RIGHTSUPERDASH', player))) + fn("Town[top1]", lambda state: False) + fn("Town[door_station]", lambda state: state.count('Town[door_station]', player) or (state.count('Town', player) and state.count('Dirtmouth_Stag', player))) + fn("Town[door_sly]", lambda state: state.count('Town[door_sly]', player) or (state.count('Town', player) and state.count('Rescued_Sly', player))) + fn("Town[door_mapper]", lambda state: state.count('Town[door_mapper]', player) or state.count('Town', player)) + fn("Town[door_jiji]", lambda state: state.count('Town[door_jiji]', player) or (state.count('Town', player) and state.count('SIMPLE', player) > 3)) + fn("Town[door_bretta]", lambda state: state.count('Town[door_bretta]', player) or (state.count('Town', player) and state.count('Rescued_Bretta', player))) + fn("Town[room_divine]", lambda state: state.count('Town[room_divine]', player) or (state.count('Town', player) and state.count('Nightmare_Lantern_Lit', player))) + fn("Town[room_grimm]", lambda state: state.count('Town[room_grimm]', player) or (state.count('Town', player) and state.count('Nightmare_Lantern_Lit', player))) + fn("Room_shop[left1]", lambda state: state.count('Room_shop[left1]', player)) + fn("Room_Town_Stag_Station[left1]", lambda state: state.count('Room_Town_Stag_Station[left1]', player) or (state.count('Dirtmouth_Stag', player) and state.count('Can_Stag', player))) + fn("Room_mapper[left1]", lambda state: state.count('Room_mapper[left1]', player)) + fn("Room_Bretta[right1]", lambda state: state.count('Room_Bretta[right1]', player)) + fn("Room_Ouiji[left1]", lambda state: state.count('Room_Ouiji[left1]', player)) + fn("Grimm_Divine[left1]", lambda state: state.count('Grimm_Divine[left1]', player)) + fn("Grimm_Main_Tent[left1]", lambda state: state.count('Grimm_Main_Tent[left1]', player)) + fn("Crossroads_01[top1]", lambda state: state.count('Crossroads_01[top1]', player) or state.count('Crossroads_01[left1]', player) or state.count('Crossroads_01[right1]', player)) + fn("Crossroads_01[left1]", lambda state: state.count('Crossroads_01[left1]', player) or state.count('Crossroads_01[top1]', player) or state.count('Crossroads_01[right1]', player)) + fn("Crossroads_01[right1]", lambda state: state.count('Crossroads_01[right1]', player) or state.count('Crossroads_01[top1]', player) or state.count('Crossroads_01[left1]', player)) + fn("Crossroads_02[left1]", lambda state: state.count('Crossroads_02[left1]', player) or state.count('Crossroads_02[door1]', player) or state.count('Crossroads_02[right1]', player)) + fn("Crossroads_02[door1]", lambda state: state.count('Crossroads_02[door1]', player) or state.count('Crossroads_02[left1]', player) or state.count('Crossroads_02[right1]', player)) + fn("Crossroads_02[right1]", lambda state: state.count('Crossroads_02[right1]', player) or state.count('Crossroads_02[left1]', player) or state.count('Crossroads_02[door1]', player)) + fn("Crossroads_03[right1]", lambda state: state.count('Crossroads_03[right1]', player) or state.count('Crossroads_03', player)) + fn("Crossroads_03[right2]", lambda state: state.count('Crossroads_03[right2]', player) or state.count('Crossroads_03', player)) + fn("Crossroads_03[left1]", lambda state: state.count('Crossroads_03[left1]', player) or state.count('Crossroads_03', player)) + fn("Crossroads_03[left2]", lambda state: state.count('Crossroads_03[left2]', player) or state.count('Crossroads_03', player)) + fn("Crossroads_03[bot1]", lambda state: state.count('Crossroads_03[bot1]', player) or state.count('Crossroads_03', player)) + fn("Crossroads_03[top1]", lambda state: state.count('Crossroads_03[top1]', player) or state.count('Crossroads_03', player)) + fn("Crossroads_04[left1]", lambda state: state.count('Crossroads_04[left1]', player) or state.count('Crossroads_04[door_Mender_House]', player) or state.count('Crossroads_04[door1]', player) or state.count('Crossroads_04[door_charmshop]', player) or state.count('Crossroads_04[right1]', player) or state.count('Crossroads_04[top1]', player)) + fn("Crossroads_04[top1]", lambda state: state.count('Crossroads_04[top1]', player) or state.count('Crossroads_04[door_Mender_House]', player) or state.count('Crossroads_04[door1]', player) or state.count('Crossroads_04[door_charmshop]', player) or state.count('Crossroads_04[right1]', player) or state.count('Crossroads_04[left1]', player)) + fn("Crossroads_04[door_Mender_House]", lambda state: state.count('Crossroads_04[door_Mender_House]', player) or state.count('Crossroads_04[door1]', player) or state.count('Crossroads_04[door_charmshop]', player) or state.count('Crossroads_04[right1]', player) or ((state.count('Crossroads_04[left1]', player) or state.count('Crossroads_04[top1]', player)) and state.count('Defeated_Gruz_Mother', player))) + fn("Crossroads_04[door1]", lambda state: state.count('Crossroads_04[door1]', player) or state.count('Crossroads_04[door_Mender_House]', player) or state.count('Crossroads_04[door_charmshop]', player) or state.count('Crossroads_04[right1]', player) or ((state.count('Crossroads_04[left1]', player) or state.count('Crossroads_04[top1]', player)) and state.count('Defeated_Gruz_Mother', player))) + fn("Crossroads_04[door_charmshop]", lambda state: state.count('Crossroads_04[door_charmshop]', player) or state.count('Crossroads_04[right1]', player) or ((state.count('Crossroads_04[door1]', player) or state.count('Crossroads_04[door_Mender_House]', player) or ((state.count('Crossroads_04[left1]', player) or state.count('Crossroads_04[top1]', player)) and state.count('Defeated_Gruz_Mother', player))) and (state.count('RIGHTCLAW', player) or state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True) or state._hk_option(player, 'ShadeSkips') or (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player)))))))) + fn("Crossroads_04[right1]", lambda state: state.count('Crossroads_04[right1]', player) or ((state.count('Crossroads_04[door_Mender_House]', player) or state.count('Crossroads_04[door1]', player) or state.count('Crossroads_04[door_charmshop]', player) or ((state.count('Crossroads_04[left1]', player) or state.count('Crossroads_04[top1]', player)) and state.count('Defeated_Gruz_Mother', player))) and (state.count('RIGHTCLAW', player) and state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)) or (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player))))) or ((state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'ComplexSkips') and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and True)))))) + fn("Crossroads_05[left1]", lambda state: state.count('Crossroads_05[left1]', player) or state.count('Crossroads_05[right1]', player)) + fn("Crossroads_05[right1]", lambda state: state.count('Crossroads_05[right1]', player) or state.count('Crossroads_05[left1]', player)) + fn("Crossroads_06[left1]", lambda state: state.count('Crossroads_06[left1]', player) or state.count('Crossroads_06[door1]', player) or state.count('Crossroads_06[right1]', player)) + fn("Crossroads_06[door1]", lambda state: state.count('Crossroads_06[door1]', player) or state.count('Crossroads_06[left1]', player) or state.count('Crossroads_06[right1]', player)) + fn("Crossroads_06[right1]", lambda state: state.count('Crossroads_06[right1]', player) or state.count('Crossroads_06[left1]', player) or state.count('Crossroads_06[door1]', player)) + fn("Crossroads_07[left1]", lambda state: state.count('Crossroads_07[left1]', player) or state.count('Crossroads_07', player)) + fn("Crossroads_07[left2]", lambda state: state.count('Crossroads_07[left2]', player) or state.count('Crossroads_07', player)) + fn("Crossroads_07[left3]", lambda state: state.count('Crossroads_07[left3]', player) or state.count('Crossroads_07', player)) + fn("Crossroads_07[right1]", lambda state: state.count('Crossroads_07[right1]', player) or state.count('Crossroads_07', player)) + fn("Crossroads_07[right2]", lambda state: state.count('Crossroads_07[right2]', player) or state.count('Crossroads_07', player)) + fn("Crossroads_07[bot1]", lambda state: state.count('Crossroads_07[bot1]', player) or state.count('Crossroads_07', player)) + fn("Crossroads_08[left1]", lambda state: state.count('Crossroads_08[left1]', player) or state.count('Crossroads_08', player)) + fn("Crossroads_08[left2]", lambda state: state.count('Crossroads_08[left2]', player) or state.count('Crossroads_08', player)) + fn("Crossroads_08[right1]", lambda state: state.count('Crossroads_08[right1]', player) or state.count('Crossroads_08', player)) + fn("Crossroads_08[right2]", lambda state: state.count('Crossroads_08[right2]', player) or state.count('Crossroads_08', player)) + fn("Crossroads_09[left1]", lambda state: state.count('Crossroads_09[left1]', player) or (state.count('Crossroads_09[right1]', player) and state.count('Defeated_Brooding_Mawlek', player))) + fn("Crossroads_09[right1]", lambda state: state.count('Crossroads_09[right1]', player) or (state.count('Crossroads_09[left1]', player) and state.count('Defeated_Brooding_Mawlek', player))) + fn("Crossroads_10[left1]", lambda state: state.count('Crossroads_10[left1]', player) or (state.count('Crossroads_10[right1]', player) and state.count('Defeated_False_Knight', player))) + fn("Crossroads_10[right1]", lambda state: state.count('Crossroads_10[right1]', player) or (state.count('Crossroads_10[left1]', player) and state.count('Defeated_False_Knight', player))) + fn("Crossroads_11_alt[left1]", lambda state: state.count('Crossroads_11_alt[left1]', player) or (state.count('Crossroads_11_alt[right1]', player) and ((state.count('FIREBALL', player) or state.count('QUAKE', player) or (state.count('Glowing_Womb', player) and state.count('Can_Bench', player)) or ((state.count('Weaversong', player) and state.count('Can_Bench', player) or ((state.count('Spore_Shroom', player) and state.count('Can_Bench', player)) and state.count('FOCUS', player))) and state._hk_option(player, 'ObscureSkips')) or (state.count('CYCLONE', player) and state._hk_option(player, 'DifficultSkips'))) or ((state.count("Grubberfly's_Elegy", player) and state.count('Can_Bench', player)) and state.count('LEFTSLASH', player)) or (state.count('Dash_Slash', player) and state.count('LEFTDASH', player)) or (((state.count('Mark_of_Pride', player) and state.count('Can_Bench', player)) and state.count('LEFTSLASH', player) or (state.count('LEFTDASH', player) and state.count('LEFTSLASH', player))) and state._hk_option(player, 'DifficultSkips'))))) + fn("Crossroads_11_alt[right1]", lambda state: state.count('Crossroads_11_alt[right1]', player)) + fn("Crossroads_12[left1]", lambda state: state.count('Crossroads_12[left1]', player) or state.count('Crossroads_12[right1]', player)) + fn("Crossroads_12[right1]", lambda state: state.count('Crossroads_12[right1]', player) or state.count('Crossroads_12[left1]', player)) + fn("Crossroads_13[left1]", lambda state: state.count('Crossroads_13[left1]', player) or state.count('Crossroads_13[right1]', player)) + fn("Crossroads_13[right1]", lambda state: state.count('Crossroads_13[right1]', player) or state.count('Crossroads_13[left1]', player)) + fn("Crossroads_14[left1]", lambda state: state.count('Crossroads_14[left1]', player) or state.count('Crossroads_14', player)) + fn("Crossroads_14[left2]", lambda state: state.count('Crossroads_14[left2]', player) or state.count('Crossroads_14', player)) + fn("Crossroads_14[right1]", lambda state: state.count('Crossroads_14[right1]', player) or state.count('Crossroads_14', player)) + fn("Crossroads_14[right2]", lambda state: state.count('Crossroads_14[right2]', player) or state.count('Crossroads_14', player)) + fn("Crossroads_15[left1]", lambda state: state.count('Crossroads_15[left1]', player) or state.count('Crossroads_15[right1]', player)) + fn("Crossroads_15[right1]", lambda state: state.count('Crossroads_15[right1]', player) or state.count('Crossroads_15[left1]', player)) + fn("Crossroads_16[left1]", lambda state: state.count('Crossroads_16[left1]', player) or state.count('Crossroads_16[right1]', player) or state.count('Crossroads_16[bot1]', player)) + fn("Crossroads_16[right1]", lambda state: state.count('Crossroads_16[right1]', player) or state.count('Crossroads_16[left1]', player) or state.count('Crossroads_16[bot1]', player)) + fn("Crossroads_16[bot1]", lambda state: state.count('Crossroads_16[bot1]', player) or state.count('Crossroads_16[left1]', player) or state.count('Crossroads_16[right1]', player)) + fn("Crossroads_18[right1]", lambda state: state.count('Crossroads_18[right1]', player) or state.count('Crossroads_18', player)) + fn("Crossroads_18[right2]", lambda state: state.count('Crossroads_18[right2]', player) or state.count('Crossroads_18', player)) + fn("Crossroads_18[bot1]", lambda state: state.count('Crossroads_18[bot1]', player) or state.count('Crossroads_18', player)) + fn("Crossroads_19[right1]", lambda state: state.count('Crossroads_19[right1]', player) or state.count('Crossroads_19', player)) + fn("Crossroads_19[top1]", lambda state: state.count('Crossroads_19[top1]', player) or state.count('Crossroads_19', player)) + fn("Crossroads_19[left1]", lambda state: state.count('Crossroads_19[left1]', player) or state.count('Crossroads_19', player)) + fn("Crossroads_19[left2]", lambda state: state.count('Crossroads_19[left2]', player) or state.count('Crossroads_19', player)) + fn("Crossroads_21[left1]", lambda state: state.count('Crossroads_21[left1]', player) or state.count('Crossroads_21', player)) + fn("Crossroads_21[right1]", lambda state: state.count('Crossroads_21[right1]', player) or state.count('Crossroads_21', player)) + fn("Crossroads_21[top1]", lambda state: state.count('Crossroads_21[top1]', player) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player)))))) or (state.count('Crossroads_21', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player)))))) and (state.count('LEFTSUPERDASH', player) or (state._hk_option(player, 'SpikeTunnels') and state.count('LEFTDASH', player) and (state.count('Dashmaster', player) and state.count('Can_Bench', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))))))) + fn("Crossroads_22[bot1]", lambda state: state.count('Crossroads_22[bot1]', player)) + fn("Crossroads_25[right1]", lambda state: state.count('Crossroads_25[right1]', player) or state.count('Crossroads_25[left1]', player)) + fn("Crossroads_25[left1]", lambda state: state.count('Crossroads_25[left1]', player) or state.count('Crossroads_25[right1]', player)) + fn("Crossroads_27[right1]", lambda state: state.count('Crossroads_27[right1]', player) or state.count('Crossroads_27', player)) + fn("Crossroads_27[bot1]", lambda state: state.count('Crossroads_27[bot1]', player) or state.count('Crossroads_27', player)) + fn("Crossroads_27[left1]", lambda state: state.count('Crossroads_27[left1]', player) or state.count('Crossroads_27', player)) + fn("Crossroads_27[left2]", lambda state: state.count('Crossroads_27[left2]', player) or state.count('Crossroads_27', player)) + fn("Crossroads_30[left1]", lambda state: state.count('Crossroads_30[left1]', player)) + fn("Crossroads_31[right1]", lambda state: state.count('Crossroads_31[right1]', player)) + fn("Crossroads_33[top1]", lambda state: state.count('Crossroads_33[top1]', player) or state.count('Crossroads_33', player)) + fn("Crossroads_33[left1]", lambda state: state.count('Crossroads_33[left1]', player) or (state.count('Crossroads_33', player) and state.count('Opened_Mawlek_Wall', player))) + fn("Crossroads_33[left2]", lambda state: state.count('Crossroads_33[left2]', player) or state.count('Crossroads_33', player)) + fn("Crossroads_33[right1]", lambda state: state.count('Crossroads_33[right1]', player) or (state.count('Crossroads_33', player) and state.count('Opened_Shaman_Pillar', player))) + fn("Crossroads_33[right2]", lambda state: state.count('Crossroads_33[right2]', player) or state.count('Crossroads_33', player)) + fn("Crossroads_35[bot1]", lambda state: state.count('Crossroads_35[bot1]', player) or (state.count('Crossroads_35[right1]', player) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) and (state.count('WINGS', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state.count('RIGHTDASH', player))) and state._hk_option(player, 'AcidSkips'))))) + fn("Crossroads_35[right1]", lambda state: state.count('Crossroads_35[right1]', player) or (state.count('Crossroads_35[bot1]', player) and state.count('RIGHTCLAW', player) and (state.count('ACID', player) or ((state.count('LEFTSUPERDASH', player) and state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTDASH', player))) and state._hk_option(player, 'AcidSkips'))))) + fn("Crossroads_36[right1]", lambda state: state.count('Crossroads_36[right1]', player) or state.count('Crossroads_36[right2]', player)) + fn("Crossroads_36[right2]", lambda state: state.count('Crossroads_36[right2]', player) or state.count('Crossroads_36[right1]', player)) + fn("Crossroads_37[right1]", lambda state: state.count('Crossroads_37[right1]', player)) + fn("Crossroads_38[right1]", lambda state: state.count('Crossroads_38[right1]', player)) + fn("Crossroads_39[right1]", lambda state: state.count('Crossroads_39[right1]', player) or state.count('Crossroads_39[left1]', player)) + fn("Crossroads_39[left1]", lambda state: state.count('Crossroads_39[left1]', player) or state.count('Crossroads_39[right1]', player)) + fn("Crossroads_40[right1]", lambda state: state.count('Crossroads_40[right1]', player) or state.count('Crossroads_40[left1]', player)) + fn("Crossroads_40[left1]", lambda state: state.count('Crossroads_40[left1]', player) or state.count('Crossroads_40[right1]', player)) + fn("Crossroads_42[left1]", lambda state: state.count('Crossroads_42[left1]', player) or state.count('Crossroads_42[right1]', player)) + fn("Crossroads_42[right1]", lambda state: state.count('Crossroads_42[right1]', player) or state.count('Crossroads_42[left1]', player)) + fn("Crossroads_43[left1]", lambda state: state.count('Crossroads_43[left1]', player) or state.count('Crossroads_43[right1]', player)) + fn("Crossroads_43[right1]", lambda state: state.count('Crossroads_43[right1]', player) or state.count('Crossroads_43[left1]', player)) + fn("Crossroads_45[right1]", lambda state: state.count('Crossroads_45[right1]', player) or state.count('Crossroads_45[left1]', player)) + fn("Crossroads_45[left1]", lambda state: state.count('Crossroads_45[left1]', player) or state.count('Crossroads_45[right1]', player)) + fn("Crossroads_46[left1]", lambda state: state.count('Crossroads_46[left1]', player) or state.count('Upper_Tram', player)) + fn("Crossroads_46b[right1]", lambda state: state.count('Crossroads_46b[right1]', player) or state.count('Upper_Tram', player)) + fn("Crossroads_ShamanTemple[left1]", lambda state: state.count('Crossroads_ShamanTemple[left1]', player)) + fn("Crossroads_47[right1]", lambda state: state.count('Crossroads_47[right1]', player) or (state.count('Can_Stag', player) and state.count('Crossroads_Stag', player))) + fn("Crossroads_48[left1]", lambda state: state.count('Crossroads_48[left1]', player)) + fn("Crossroads_49[right1]", lambda state: state.count('Crossroads_49[right1]', player) or state.count('Left_Elevator', player)) + fn("Crossroads_49[left1]", lambda state: state.count('Crossroads_49[left1]', player) or state.count('Left_Elevator', player)) + fn("Crossroads_49b[right1]", lambda state: state.count('Crossroads_49b[right1]', player) or state.count('Left_Elevator', player)) + fn("Crossroads_50[right1]", lambda state: state.count('Crossroads_50[right1]', player) or (state.count('Crossroads_50[left1]', player) and (state.count('RIGHTSUPERDASH', player) or state.count('SWIM', player)))) + fn("Crossroads_50[left1]", lambda state: state.count('Crossroads_50[left1]', player) or (state.count('Crossroads_50[right1]', player) and (state.count('LEFTSUPERDASH', player) or state.count('SWIM', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Crossroads_52[left1]", lambda state: state.count('Crossroads_52[left1]', player)) + fn("Room_ruinhouse[left1]", lambda state: state.count('Room_ruinhouse[left1]', player)) + fn("Room_Charm_Shop[left1]", lambda state: state.count('Room_Charm_Shop[left1]', player)) + fn("Room_Mender_House[left1]", lambda state: state.count('Room_Mender_House[left1]', player)) + fn("Fungus1_01[left1]", lambda state: state.count('Fungus1_01[left1]', player) or state.count('Fungus1_01[right1]', player)) + fn("Fungus1_01[right1]", lambda state: state.count('Fungus1_01[right1]', player) or state.count('Fungus1_01[left1]', player)) + fn("Fungus1_01b[left1]", lambda state: state.count('Fungus1_01b[left1]', player) or state.count('Fungus1_01b[right1]', player)) + fn("Fungus1_01b[right1]", lambda state: state.count('Fungus1_01b[right1]', player) or state.count('Fungus1_01b[left1]', player)) + fn("Fungus1_02[left1]", lambda state: state.count('Fungus1_02[left1]', player) or ((state.count('Fungus1_02[right1]', player) or state.count('Fungus1_02[right2]', player)) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Fungus1_02[right1]", lambda state: state.count('Fungus1_02[right1]', player) or state.count('Fungus1_02[left1]', player) or state.count('Fungus1_02[right2]', player)) + fn("Fungus1_02[right2]", lambda state: state.count('Fungus1_02[right2]', player) or state.count('Fungus1_02[left1]', player) or state.count('Fungus1_02[right1]', player)) + fn("Fungus1_03[left1]", lambda state: state.count('Fungus1_03[left1]', player) or state.count('Fungus1_03[right1]', player) or state.count('Fungus1_03[bot1]', player)) + fn("Fungus1_03[right1]", lambda state: state.count('Fungus1_03[right1]', player) or state.count('Fungus1_03[left1]', player) or state.count('Fungus1_03[bot1]', player)) + fn("Fungus1_03[bot1]", lambda state: state.count('Fungus1_03[bot1]', player) or state.count('Fungus1_03[left1]', player) or state.count('Fungus1_03[right1]', player)) + fn("Fungus1_04[left1]", lambda state: state.count('Fungus1_04[left1]', player) or (state.count('Fungus1_04[right1]', player) and state.count('Defeated_Hornet_1', player) and ((state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)) or state.count('WINGS', player) or state.count('ACID', player)))) + fn("Fungus1_04[right1]", lambda state: state.count('Fungus1_04[right1]', player) or (state.count('Fungus1_04[left1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('ACID', player) and state.count('RIGHTCLAW', player)) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player))) or (state.count('RIGHTDASH', player) and state.count('LEFTCLAW', player) and state._hk_option(player, 'PreciseMovement'))))) + fn("Fungus1_05[right1]", lambda state: state.count('Fungus1_05[right1]', player) or state.count('Fungus1_05[bot1]', player) or state.count('Fungus1_05[top1]', player)) + fn("Fungus1_05[bot1]", lambda state: state.count('Fungus1_05[bot1]', player) or state.count('Fungus1_05[right1]', player) or state.count('Fungus1_05[top1]', player)) + fn("Fungus1_05[top1]", lambda state: state.count('Fungus1_05[top1]', player) or state.count('Fungus1_05[right1]', player) or state.count('Fungus1_05[bot1]', player)) + fn("Fungus1_06[left1]", lambda state: state.count('Fungus1_06[left1]', player) or state.count('Fungus1_06[bot1]', player)) + fn("Fungus1_06[bot1]", lambda state: state.count('Fungus1_06[bot1]', player) or state.count('Fungus1_06[left1]', player)) + fn("Fungus1_07[top1]", lambda state: state.count('Fungus1_07[top1]', player) or state.count('Fungus1_07[left1]', player) or state.count('Fungus1_07[right1]', player)) + fn("Fungus1_07[left1]", lambda state: state.count('Fungus1_07[left1]', player) or state.count('Fungus1_07[top1]', player) or state.count('Fungus1_07[right1]', player)) + fn("Fungus1_07[right1]", lambda state: state.count('Fungus1_07[right1]', player) or state.count('Fungus1_07[top1]', player) or state.count('Fungus1_07[left1]', player)) + fn("Fungus1_08[left1]", lambda state: state.count('Fungus1_08[left1]', player)) + fn("Fungus1_09[left1]", lambda state: state.count('Fungus1_09[left1]', player) or (state.count('Fungus1_09[right1]', player) and (state.count('LEFTCLAW', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player)) or (state.count('WINGS', player) and state.count('LEFTDASH', player))) or (state.count('RIGHTCLAW', player) and state.count('LEFTDASH', player) and state.count('WINGS', player) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'DangerousSkips') and state._hk_option(player, 'PreciseMovement'))))) + fn("Fungus1_09[right1]", lambda state: state.count('Fungus1_09[right1]', player) or (state.count('Fungus1_09[left1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Great_Slash', player) or state.count('Cyclone_Slash', player) or (state.count('RIGHTDASH', player) and state.count('Dash_Slash', player))))) + fn("Fungus1_10[left1]", lambda state: state.count('Fungus1_10[left1]', player) or state.count('Fungus1_10[right1]', player) or state.count('Fungus1_10[top1]', player)) + fn("Fungus1_10[right1]", lambda state: state.count('Fungus1_10[right1]', player) or state.count('Fungus1_10[left1]', player) or state.count('Fungus1_10[top1]', player)) + fn("Fungus1_10[top1]", lambda state: state.count('Fungus1_10[top1]', player) or state.count('Fungus1_10[left1]', player) or state.count('Fungus1_10[right1]', player)) + fn("Fungus1_11[top1]", lambda state: state.count('Fungus1_11[top1]', player) or state.count('Fungus1_11', player)) + fn("Fungus1_11[right1]", lambda state: state.count('Fungus1_11[right1]', player) or state.count('Fungus1_11', player)) + fn("Fungus1_11[right2]", lambda state: state.count('Fungus1_11[right2]', player) or state.count('Fungus1_11', player)) + fn("Fungus1_11[left1]", lambda state: state.count('Fungus1_11[left1]', player) or (state.count('Fungus1_11', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('LEFTSUPERDASH', player) or state.count('LEFTDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True) or (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips')))))) + fn("Fungus1_11[bot1]", lambda state: state.count('Fungus1_11[bot1]', player) or state.count('Fungus1_11', player)) + fn("Fungus1_12[left1]", lambda state: state.count('Fungus1_12[left1]', player) or state.count('Fungus1_12[right1]', player)) + fn("Fungus1_12[right1]", lambda state: state.count('Fungus1_12[right1]', player) or state.count('Fungus1_12[left1]', player)) + fn("Fungus1_13[right1]", lambda state: state.count('Fungus1_13[right1]', player)) + fn("Fungus1_13[left1]", lambda state: state.count('Fungus1_13[left1]', player)) + fn("Fungus1_14[left1]", lambda state: state.count('Fungus1_14[left1]', player)) + fn("Fungus1_15[door1]", lambda state: state.count('Fungus1_15[door1]', player) or (state.count('Fungus1_15[right1]', player) and (state.count('RIGHTSUPERDASH', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player))))) + fn("Fungus1_15[right1]", lambda state: state.count('Fungus1_15[right1]', player) or state.count('Fungus1_15[door1]', player)) + fn("Fungus1_16_alt[right1]", lambda state: state.count('Fungus1_16_alt[right1]', player) or (state.count('Can_Stag', player) and state.count('Greenpath_Stag', player))) + fn("Fungus1_17[left1]", lambda state: state.count('Fungus1_17[left1]', player) or state.count('Fungus1_17[right1]', player)) + fn("Fungus1_17[right1]", lambda state: state.count('Fungus1_17[right1]', player) or state.count('Fungus1_17[left1]', player)) + fn("Fungus1_19[left1]", lambda state: state.count('Fungus1_19[left1]', player) or state.count('Fungus1_19[right1]', player) or state.count('Fungus1_19[bot1]', player)) + fn("Fungus1_19[right1]", lambda state: state.count('Fungus1_19[right1]', player) or state.count('Fungus1_19[left1]', player) or state.count('Fungus1_19[bot1]', player)) + fn("Fungus1_19[bot1]", lambda state: state.count('Fungus1_19[bot1]', player) or state.count('Fungus1_19[left1]', player) or state.count('Fungus1_19[right1]', player)) + fn("Fungus1_20_v02[bot1]", lambda state: state.count('Fungus1_20_v02[bot1]', player) or state.count('Fungus1_20_v02[bot2]', player) or state.count('Fungus1_20_v02[right1]', player)) + fn("Fungus1_20_v02[bot2]", lambda state: state.count('Fungus1_20_v02[bot2]', player) or state.count('Fungus1_20_v02[bot1]', player) or state.count('Fungus1_20_v02[right1]', player)) + fn("Fungus1_20_v02[right1]", lambda state: state.count('Fungus1_20_v02[right1]', player) or state.count('Fungus1_20_v02[bot1]', player) or state.count('Fungus1_20_v02[bot2]', player)) + fn("Fungus1_21[bot1]", lambda state: state.count('Fungus1_21[bot1]', player) or state.count('Fungus1_21', player)) + fn("Fungus1_21[top1]", lambda state: state.count('Fungus1_21[top1]', player) or state.count('Fungus1_21', player)) + fn("Fungus1_21[left1]", lambda state: state.count('Fungus1_21[left1]', player) or state.count('Fungus1_21', player)) + fn("Fungus1_21[right1]", lambda state: state.count('Fungus1_21[right1]', player) or state.count('Fungus1_21', player)) + fn("Fungus1_22[bot1]", lambda state: state.count('Fungus1_22[bot1]', player) or state.count('Fungus1_22[top1]', player) or state.count('Fungus1_22[left1]', player)) + fn("Fungus1_22[top1]", lambda state: state.count('Fungus1_22[top1]', player) or state.count('Fungus1_22[left1]', player)) + fn("Fungus1_22[left1]", lambda state: state.count('Fungus1_22[left1]', player) or state.count('Fungus1_22[top1]', player)) + fn("Fungus1_23[left1]", lambda state: state.count('Fungus1_23[left1]', player) or state.count('Fungus1_23[right1]', player)) + fn("Fungus1_23[right1]", lambda state: state.count('Fungus1_23[right1]', player) or state.count('Fungus1_23[left1]', player)) + fn("Fungus1_24[left1]", lambda state: state.count('Fungus1_24[left1]', player)) + fn("Fungus1_25[right1]", lambda state: state.count('Fungus1_25[right1]', player) or state.count('Fungus1_25[left1]', player)) + fn("Fungus1_25[left1]", lambda state: state.count('Fungus1_25[left1]', player) or state.count('Fungus1_25[right1]', player)) + fn("Fungus1_26[right1]", lambda state: state.count('Fungus1_26[right1]', player) or (state.count('Fungus1_26[left1]', player) and (state.count('ACID', player) or (state._hk_option(player, 'AcidSkips') and state.count('LEFTCLAW', player) and state.count('WINGS', player) and state.count('RIGHTSUPERDASH', player)))) or state.count('Fungus1_26[door_SlugShrine]', player)) + fn("Fungus1_26[left1]", lambda state: state.count('Fungus1_26[left1]', player) or ((state.count('Fungus1_26[right1]', player) or state.count('Fungus1_26[door_SlugShrine]', player)) and (state.count('ACID', player) or (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'AcidSkips') and state.count('WINGS', player) and state.count('LEFTSUPERDASH', player) and state.count('LEFTDASH', player) and (state.count('FIREBALL', player) and state._hk_option(player, 'FireballSkips') or ((state.count('Sharp_Shadow', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and state.count('Can_Bench', player)) and True)))) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Fungus1_26[door_SlugShrine]", lambda state: state.count('Fungus1_26[door_SlugShrine]', player) or (state.count('Fungus1_26[left1]', player) and (state.count('ACID', player) or (state._hk_option(player, 'AcidSkips') and state.count('LEFTCLAW', player) and state.count('WINGS', player) and state.count('RIGHTSUPERDASH', player)))) or state.count('Fungus1_26[right1]', player)) + fn("Fungus1_28[left1]", lambda state: state.count('Fungus1_28[left1]', player) or (state.count('Fungus1_28[left2]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) and ((state.count('FIREBALL', player) or state.count('QUAKE', player) or (state.count('Glowing_Womb', player) and state.count('Can_Bench', player)) or ((state.count('Weaversong', player) and state.count('Can_Bench', player) or ((state.count('Spore_Shroom', player) and state.count('Can_Bench', player)) and state.count('FOCUS', player))) and state._hk_option(player, 'ObscureSkips')) or (state.count('CYCLONE', player) and state._hk_option(player, 'DifficultSkips'))) or ((state.count("Grubberfly's_Elegy", player) and state.count('Can_Bench', player)) and state.count('RIGHTSLASH', player)) or (state.count('Dash_Slash', player) and state.count('RIGHTDASH', player)) or (((state.count('Mark_of_Pride', player) and state.count('Can_Bench', player)) and state.count('RIGHTSLASH', player) or (state.count('RIGHTDASH', player) and state.count('RIGHTSLASH', player))) and state._hk_option(player, 'DifficultSkips'))) or (state.count('WINGS', player) and state.count('LEFTCLAW', player)) or (state.count('WINGS', player) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)) and (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and state._hk_option(player, 'DifficultSkips') and (state.count('MASKSHARDS', player) > 15))))) + fn("Fungus1_28[left2]", lambda state: state.count('Fungus1_28[left2]', player) or state.count('Fungus1_28[left1]', player)) + fn("Fungus1_29[left1]", lambda state: state.count('Fungus1_29[left1]', player) or state.count('Fungus1_29[right1]', player)) + fn("Fungus1_29[right1]", lambda state: state.count('Fungus1_29[right1]', player) or state.count('Fungus1_29[left1]', player)) + fn("Fungus1_30[top1]", lambda state: state.count('Fungus1_30[top1]', player) or state.count('Fungus1_30', player)) + fn("Fungus1_30[top3]", lambda state: state.count('Fungus1_30[top3]', player) or state.count('Fungus1_30', player)) + fn("Fungus1_30[left1]", lambda state: state.count('Fungus1_30[left1]', player) or state.count('Fungus1_30', player)) + fn("Fungus1_30[right1]", lambda state: state.count('Fungus1_30[right1]', player) or state.count('Fungus1_30', player)) + fn("Fungus1_31[top1]", lambda state: state.count('Fungus1_31[top1]', player) or state.count('Fungus1_31[bot1]', player) or state.count('Fungus1_31[right1]', player)) + fn("Fungus1_31[bot1]", lambda state: state.count('Fungus1_31[bot1]', player) or state.count('Fungus1_31[top1]', player) or state.count('Fungus1_31[right1]', player)) + fn("Fungus1_31[right1]", lambda state: state.count('Fungus1_31[right1]', player) or state.count('Fungus1_31[top1]', player) or state.count('Fungus1_31[bot1]', player)) + fn("Fungus1_32[bot1]", lambda state: state.count('Fungus1_32[bot1]', player) or state.count('Fungus1_32[top1]', player) or state.count('Fungus1_32[left1]', player)) + fn("Fungus1_32[top1]", lambda state: state.count('Fungus1_32[top1]', player) or state.count('Fungus1_32[bot1]', player) or state.count('Fungus1_32[left1]', player)) + fn("Fungus1_32[left1]", lambda state: state.count('Fungus1_32[left1]', player) or state.count('Fungus1_32[bot1]', player) or state.count('Fungus1_32[top1]', player)) + fn("Fungus1_34[door1]", lambda state: state.count('Fungus1_34[door1]', player) or state.count('Fungus1_34[left1]', player)) + fn("Fungus1_34[left1]", lambda state: state.count('Fungus1_34[left1]', player) or state.count('Fungus1_34[door1]', player)) + fn("Fungus1_35[left1]", lambda state: state.count('Fungus1_35[left1]', player) or (state.count('Fungus1_35[right1]', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')))) + fn("Fungus1_35[right1]", lambda state: state.count('Fungus1_35[right1]', player) or (state.count('Fungus1_35[left1]', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')))) + fn("Fungus1_36[left1]", lambda state: state.count('Fungus1_36[left1]', player)) + fn("Fungus1_37[left1]", lambda state: state.count('Fungus1_37[left1]', player)) + fn("Fungus1_Slug[right1]", lambda state: state.count('Fungus1_Slug[right1]', player)) + fn("Room_Slug_Shrine[left1]", lambda state: state.count('Room_Slug_Shrine[left1]', player)) + fn("Room_nailmaster_02[left1]", lambda state: state.count('Room_nailmaster_02[left1]', player)) + fn("Fungus3_01[top1]", lambda state: state.count('Fungus3_01[top1]', player) or state.count('Fungus3_01', player)) + fn("Fungus3_01[right1]", lambda state: state.count('Fungus3_01[right1]', player) or state.count('Fungus3_01', player)) + fn("Fungus3_01[left1]", lambda state: state.count('Fungus3_01[left1]', player) or state.count('Fungus3_01', player)) + fn("Fungus3_01[right2]", lambda state: state.count('Fungus3_01[right2]', player) or state.count('Fungus3_01', player)) + fn("Fungus3_02[left1]", lambda state: state.count('Fungus3_02[left1]', player) or state.count('Fungus3_02', player)) + fn("Fungus3_02[left2]", lambda state: state.count('Fungus3_02[left2]', player) or state.count('Fungus3_02', player)) + fn("Fungus3_02[left3]", lambda state: state.count('Fungus3_02[left3]', player) or state.count('Fungus3_02', player)) + fn("Fungus3_02[right1]", lambda state: state.count('Fungus3_02[right1]', player) or (state.count('Fungus3_02', player) and state.count('Opened_Archives_Exit_Wall', player))) + fn("Fungus3_02[right2]", lambda state: state.count('Fungus3_02[right2]', player) or state.count('Fungus3_02', player)) + fn("Fungus3_03[right1]", lambda state: state.count('Fungus3_03[right1]', player) or (state.count('Fungus3_03[left1]', player) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Fungus3_03[left1]", lambda state: state.count('Fungus3_03[left1]', player) or (state.count('Fungus3_03[right1]', player) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Fungus3_24[right1]", lambda state: state.count('Fungus3_24[right1]', player) or state.count('Fungus3_24[left1]', player) or state.count('Fungus3_24[top1]', player)) + fn("Fungus3_24[left1]", lambda state: state.count('Fungus3_24[left1]', player) or state.count('Fungus3_24[right1]', player) or state.count('Fungus3_24[top1]', player)) + fn("Fungus3_24[top1]", lambda state: state.count('Fungus3_24[top1]', player) or state.count('Fungus3_24[right1]', player) or state.count('Fungus3_24[left1]', player)) + fn("Fungus3_25[right1]", lambda state: state.count('Fungus3_25[right1]', player) or (state.count('Fungus3_25[left1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)))) + fn("Fungus3_25[left1]", lambda state: state.count('Fungus3_25[left1]', player) or (state.count('Fungus3_25[right1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)))) + fn("Fungus3_25b[right1]", lambda state: state.count('Fungus3_25b[right1]', player) or state.count('Fungus3_25b[left1]', player)) + fn("Fungus3_25b[left1]", lambda state: state.count('Fungus3_25b[left1]', player) or state.count('Fungus3_25b[right1]', player)) + fn("Fungus3_26[top1]", lambda state: state.count('Fungus3_26[top1]', player) or (state.count('Fungus3_26', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or (state.count('RIGHTDASH', player) and (state.count('LEFTDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)) and state._hk_option(player, 'EnemyPogos'))))) + fn("Fungus3_26[left1]", lambda state: state.count('Fungus3_26[left1]', player) or state.count('Fungus3_26', player)) + fn("Fungus3_26[left2]", lambda state: state.count('Fungus3_26[left2]', player) or state.count('Fungus3_26', player)) + fn("Fungus3_26[left3]", lambda state: state.count('Fungus3_26[left3]', player) or state.count('Fungus3_26', player)) + fn("Fungus3_26[right1]", lambda state: state.count('Fungus3_26[right1]', player) or state.count('Fungus3_26', player)) + fn("Fungus3_27[left1]", lambda state: state.count('Fungus3_27[left1]', player) or state.count('Fungus3_27[right1]', player)) + fn("Fungus3_27[right1]", lambda state: state.count('Fungus3_27[right1]', player) or state.count('Fungus3_27[left1]', player)) + fn("Fungus3_28[right1]", lambda state: state.count('Fungus3_28[right1]', player)) + fn("Fungus3_30[bot1]", lambda state: state.count('Fungus3_30[bot1]', player)) + fn("Fungus3_35[right1]", lambda state: state.count('Fungus3_35[right1]', player)) + fn("Fungus3_44[bot1]", lambda state: state.count('Fungus3_44[bot1]', player) or (state.count('Fungus3_44', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)))) + fn("Fungus3_44[door1]", lambda state: state.count('Fungus3_44[door1]', player) or (state.count('Fungus3_44', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Fungus3_44[right1]", lambda state: state.count('Fungus3_44[right1]', player) or state.count('Fungus3_44', player)) + fn("Fungus3_47[left1]", lambda state: state.count('Fungus3_47[left1]', player) or state.count('Fungus3_47', player)) + fn("Fungus3_47[right1]", lambda state: state.count('Fungus3_47[right1]', player) or state.count('Fungus3_47', player)) + fn("Fungus3_47[door1]", lambda state: state.count('Fungus3_47[door1]', player) or state.count('Fungus3_47', player)) + fn("Room_Fungus_Shaman[left1]", lambda state: state.count('Room_Fungus_Shaman[left1]', player)) + fn("Fungus3_archive[left1]", lambda state: state.count('Fungus3_archive[left1]', player) or state.count('Fungus3_archive[bot1]', player)) + fn("Fungus3_archive[bot1]", lambda state: state.count('Fungus3_archive[bot1]', player) or state.count('Fungus3_archive[left1]', player)) + fn("Fungus3_archive_02[top1]", lambda state: state.count('Fungus3_archive_02[top1]', player)) + fn("Fungus2_01[left1]", lambda state: state.count('Fungus2_01[left1]', player) or state.count('Fungus2_01', player)) + fn("Fungus2_01[left2]", lambda state: state.count('Fungus2_01[left2]', player) or state.count('Fungus2_01', player)) + fn("Fungus2_01[left3]", lambda state: state.count('Fungus2_01[left3]', player) or state.count('Fungus2_01', player)) + fn("Fungus2_01[right1]", lambda state: state.count('Fungus2_01[right1]', player) or (state.count('Fungus2_01', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)))) + fn("Fungus2_02[right1]", lambda state: state.count('Fungus2_02[right1]', player) or (state.count('Can_Stag', player) and state.count("Queen's_Station_Stag", player))) + fn("Fungus2_34[right1]", lambda state: state.count('Fungus2_34[right1]', player)) + fn("Fungus2_03[left1]", lambda state: state.count('Fungus2_03[left1]', player) or state.count('Fungus2_03', player)) + fn("Fungus2_03[bot1]", lambda state: state.count('Fungus2_03[bot1]', player) or state.count('Fungus2_03', player)) + fn("Fungus2_03[right1]", lambda state: state.count('Fungus2_03[right1]', player) or state.count('Fungus2_03', player)) + fn("Fungus2_04[top1]", lambda state: state.count('Fungus2_04[top1]', player) or state.count('Fungus2_04[right1]', player)) + fn("Fungus2_04[right1]", lambda state: state.count('Fungus2_04[right1]', player) or state.count('Fungus2_04[top1]', player)) + fn("Fungus2_04[left1]", lambda state: state.count('Fungus2_04[left1]', player) or state.count('Fungus2_04', player)) + fn("Fungus2_04[right2]", lambda state: state.count('Fungus2_04[right2]', player) or state.count('Fungus2_04', player)) + fn("Fungus2_05[bot1]", lambda state: state.count('Fungus2_05[bot1]', player) or (state.count('Fungus2_05[right1]', player) and state.count('Defeated_Shrumal_Ogre_Arena', player))) + fn("Fungus2_05[right1]", lambda state: state.count('Fungus2_05[right1]', player) or (state.count('Fungus2_05[bot1]', player) and state.count('Defeated_Shrumal_Ogre_Arena', player))) + fn("Fungus2_06[top1]", lambda state: state.count('Fungus2_06[top1]', player) or (state.count('Fungus2_06', player) and (state.count('ACID', player) or state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTCLAW', player) or state.count('RIGHTSUPERDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True) or state.count('Fungus2_06[right1]', player)))) + fn("Fungus2_06[left1]", lambda state: state.count('Fungus2_06[left1]', player) or state.count('Fungus2_06', player)) + fn("Fungus2_06[left2]", lambda state: state.count('Fungus2_06[left2]', player) or (state.count('Fungus2_06', player) and state.count('ACID', player))) + fn("Fungus2_06[right1]", lambda state: state.count('Fungus2_06[right1]', player) or (state.count('Fungus2_06', player) and (state.count('ACID', player) or state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTCLAW', player) or state.count('RIGHTSUPERDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True) or state.count('Fungus2_06[top1]', player)))) + fn("Fungus2_06[right2]", lambda state: state.count('Fungus2_06[right2]', player) or state.count('Fungus2_06', player)) + fn("Fungus2_07[left1]", lambda state: state.count('Fungus2_07[left1]', player) or (state.count('Fungus2_07[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('LEFTDASH', player) or state.count('WINGS', player) or state.count('ACID', player)))) + fn("Fungus2_07[right1]", lambda state: state.count('Fungus2_07[right1]', player) or state.count('Fungus2_07[left1]', player)) + fn("Fungus2_08[left1]", lambda state: state.count('Fungus2_08[left1]', player) or state.count('Fungus2_08[left2]', player) or state.count('Fungus2_08[right1]', player)) + fn("Fungus2_08[left2]", lambda state: state.count('Fungus2_08[left2]', player) or state.count('Fungus2_08[left1]', player) or state.count('Fungus2_08[right1]', player)) + fn("Fungus2_08[right1]", lambda state: state.count('Fungus2_08[right1]', player) or state.count('Fungus2_08[left1]', player) or state.count('Fungus2_08[left2]', player)) + fn("Fungus2_09[left1]", lambda state: state.count('Fungus2_09[left1]', player) or state.count('Fungus2_09[right1]', player)) + fn("Fungus2_09[right1]", lambda state: state.count('Fungus2_09[right1]', player) or state.count('Fungus2_09[left1]', player)) + fn("Fungus2_10[right1]", lambda state: state.count('Fungus2_10[right1]', player) or state.count('Fungus2_10[right2]', player) or state.count('Fungus2_10[bot1]', player)) + fn("Fungus2_10[right2]", lambda state: state.count('Fungus2_10[right2]', player) or state.count('Fungus2_10[right1]', player) or state.count('Fungus2_10[bot1]', player)) + fn("Fungus2_10[bot1]", lambda state: state.count('Fungus2_10[bot1]', player) or state.count('Fungus2_10[right1]', player) or state.count('Fungus2_10[right2]', player)) + fn("Fungus2_11[top1]", lambda state: state.count('Fungus2_11[top1]', player) or state.count('Fungus2_11', player)) + fn("Fungus2_11[left1]", lambda state: state.count('Fungus2_11[left1]', player) or state.count('Fungus2_11', player)) + fn("Fungus2_11[left2]", lambda state: state.count('Fungus2_11[left2]', player) or (state.count('Fungus2_11', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and (state._hk_option(player, 'ObscureSkips') or state.count('LEFTDASH', player))) or ((state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and state.count('MASKSHARDS', player) > 15)))) + fn("Fungus2_11[right1]", lambda state: state.count('Fungus2_11[right1]', player) or state.count('Fungus2_11', player)) + fn("Fungus2_12[left1]", lambda state: state.count('Fungus2_12[left1]', player) or (state.count('Fungus2_12[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Fungus2_12[bot1]", lambda state: state.count('Fungus2_12[bot1]', player) or state.count('Fungus2_12[left1]', player)) + fn("Fungus2_13[top1]", lambda state: state.count('Fungus2_13[top1]', player) or (state.count('Fungus2_13', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Fungus2_13[left2]", lambda state: state.count('Fungus2_13[left2]', player) or state.count('Fungus2_13', player)) + fn("Fungus2_13[left3]", lambda state: state.count('Fungus2_13[left3]', player) or (state.count('Fungus2_13', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('ACID', player) or state._hk_option(player, 'EnemyPogos') or state._hk_option(player, 'PreciseMovement')))) + fn("Fungus2_14[top1]", lambda state: state.count('Fungus2_14[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('Fungus2_14', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player)) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Fungus2_14[right1]", lambda state: state.count('Fungus2_14[right1]', player) or (state.count('Fungus2_14', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('ACID', player) or (state.count('RIGHTDASH', player) and state._hk_option(player, 'EnemyPogos')) or state.count('RIGHTSUPERDASH', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DifficultSkips'))))) + fn("Fungus2_14[bot3]", lambda state: state.count('Fungus2_14[bot3]', player) or ((state.count('Fungus2_14', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state._hk_option(player, 'EnemyPogos')) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player)) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'EnemyPogos'))) or state.count('Fungus2_14[top1]', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'BackgroundObjectPogos')))))) + fn("Fungus2_15[top3]", lambda state: state.count('Fungus2_15[top3]', player) or ((state.count('Fungus2_15[right1]', player) or (state.count('Fungus2_15[left1]', player) and state.count('RIGHTCLAW', player))) and (state.count('RIGHTCLAW', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTDASH', player) or state._hk_option(player, 'EnemyPogos')) or state.count('WINGS', player)))) + fn("Fungus2_15[right1]", lambda state: state.count('Fungus2_15[right1]', player) or (state.count('Fungus2_15[top3]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos')))) or (state.count('Fungus2_15[left1]', player) and state.count('RIGHTCLAW', player))) + fn("Fungus2_15[left1]", lambda state: state.count('Fungus2_15[left1]', player) or ((state.count('Fungus2_15[top3]', player) or state.count('Fungus2_15[right1]', player)) and state.count('Defeated_Mantis_Lords', player))) + fn("Fungus2_17[left1]", lambda state: state.count('Fungus2_17[left1]', player) or (state.count('Fungus2_17', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTDASH', player) and state.count('Fungus2_17[right1]', player))))) + fn("Fungus2_17[right1]", lambda state: state.count('Fungus2_17[right1]', player) or (state.count('Fungus2_17', player) and (state.count('WINGS', player) or state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))))) + fn("Fungus2_17[bot1]", lambda state: state.count('Fungus2_17[bot1]', player) or state.count('Fungus2_17', player)) + fn("Fungus2_18[right1]", lambda state: state.count('Fungus2_18[right1]', player)) + fn("Fungus2_18[bot1]", lambda state: state.count('Fungus2_18[bot1]', player) or ((state.count('Fungus2_18[right1]', player) and (state.count('LEFTDASH', player) or state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or state._hk_option(player, 'EnemyPogos')) or state.count('Fungus2_18[top1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'ObscureSkips') or (state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips')))))))) + fn("Fungus2_18[top1]", lambda state: state.count('Fungus2_18[top1]', player) or (state.count('Fungus2_18[right1]', player) and (state.count('LEFTDASH', player) or state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or state._hk_option(player, 'EnemyPogos'))) or (state.count('Fungus2_18[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("Fungus2_19[top1]", lambda state: state.count('Fungus2_19[top1]', player) or (state.count('Fungus2_19[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("Fungus2_19[left1]", lambda state: state.count('Fungus2_19[left1]', player) or (state.count('Fungus2_19[top1]', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTDASH', player))))) + fn("Fungus2_20[right1]", lambda state: state.count('Fungus2_20[right1]', player) or state.count('Fungus2_20', player)) + fn("Fungus2_20[left1]", lambda state: state.count('Fungus2_20[left1]', player) or state.count('Fungus2_20', player)) + fn("Fungus2_21[right1]", lambda state: state.count('Fungus2_21[right1]', player) or (state.count('Fungus2_21[left1]', player) and (state.count('RIGHTCLAW', player) and (state.count('RIGHTDASH', player) or (state.count('WINGS', player) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)) or state.count('RIGHTSUPERDASH', player) or state.count('ACID', player)) and state.count('CREST', player))) + fn("Fungus2_21[left1]", lambda state: state.count('Fungus2_21[left1]', player) or (state.count('Fungus2_21[right1]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player))) and state.count('QUAKE', player))) + fn("Fungus2_23[right1]", lambda state: state.count('Fungus2_23[right1]', player) or state.count('Fungus2_23', player)) + fn("Fungus2_23[right2]", lambda state: state.count('Fungus2_23[right2]', player) or (state.count('Fungus2_23', player) and state.count('Opened_Waterways_Exit', player))) + fn("Fungus2_26[left1]", lambda state: state.count('Fungus2_26[left1]', player)) + fn("Fungus2_28[left1]", lambda state: state.count('Fungus2_28[left1]', player) or state.count('Fungus2_28[left2]', player)) + fn("Fungus2_28[left2]", lambda state: state.count('Fungus2_28[left2]', player) or state.count('Fungus2_28[left1]', player)) + fn("Fungus2_29[right1]", lambda state: state.count('Fungus2_29[right1]', player) or (state.count('Fungus2_29[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("Fungus2_29[bot1]", lambda state: state.count('Fungus2_29[bot1]', player) or (state.count('Fungus2_29[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player))) + fn("Fungus2_30[bot1]", lambda state: state.count('Fungus2_30[bot1]', player) or state.count('Fungus2_30[top1]', player)) + fn("Fungus2_30[top1]", lambda state: state.count('Fungus2_30[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement')))) + fn("Fungus2_31[left1]", lambda state: state.count('Fungus2_31[left1]', player)) + fn("Fungus2_32[left1]", lambda state: state.count('Fungus2_32[left1]', player)) + fn("Fungus2_33[right1]", lambda state: state.count('Fungus2_33[right1]', player) or state.count('Fungus2_33[left1]', player)) + fn("Fungus2_33[left1]", lambda state: state.count('Fungus2_33[left1]', player) or state.count('Fungus2_33[right1]', player)) + fn("Deepnest_01[right1]", lambda state: state.count('Deepnest_01[right1]', player) or state.count('Deepnest_01', player)) + fn("Deepnest_01[bot1]", lambda state: state.count('Deepnest_01[bot1]', player)) + fn("Deepnest_01[bot2]", lambda state: state.count('Deepnest_01[bot2]', player) or state.count('Deepnest_01', player)) + fn("Deepnest_01[left1]", lambda state: state.count('Deepnest_01[left1]', player) or state.count('Deepnest_01', player)) + fn("Deepnest_01b[top1]", lambda state: state.count('Deepnest_01b[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))) or (state.count('Deepnest_01b', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or (((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and (state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips')))) or (state.count('Deepnest_01b[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))))))) + fn("Deepnest_01b[top2]", lambda state: False) + fn("Deepnest_01b[right1]", lambda state: state.count('Deepnest_01b[right1]', player)) + fn("Deepnest_01b[right2]", lambda state: state.count('Deepnest_01b[right2]', player) or state.count('Deepnest_01b[top1]', player) or state.count('Deepnest_01b[top2]', player) or (state.count('Deepnest_01b', player) and (state.count('WINGS', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))) + fn("Deepnest_01b[bot1]", lambda state: state.count('Deepnest_01b[bot1]', player) or state.count('Deepnest_01b', player)) + fn("Deepnest_02[left1]", lambda state: state.count('Deepnest_02[left1]', player) or (state.count('Deepnest_02', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Deepnest_02[left2]", lambda state: state.count('Deepnest_02[left2]', player) or state.count('Deepnest_02', player)) + fn("Deepnest_02[right1]", lambda state: state.count('Deepnest_02[right1]', player) or state.count('Deepnest_02[left1]', player) or (state.count('Deepnest_02', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos') or state._hk_option(player, 'BackgroundObjectPogos')))) + fn("Deepnest_03[right1]", lambda state: state.count('Deepnest_03[right1]', player) or state.count('Deepnest_03', player)) + fn("Deepnest_03[left1]", lambda state: state.count('Deepnest_03[left1]', player) or (state.count('Deepnest_03', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('Deepnest_03[top1]', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'ObscureSkips'))))) + fn("Deepnest_03[top1]", lambda state: state.count('Deepnest_03[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Deepnest_03', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('Deepnest_03[left1]', player)) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'ObscureSkips')) or (state.count('LEFTCLAW', player) and (state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))))))) + fn("Deepnest_03[left2]", lambda state: state.count('Deepnest_03[left2]', player) or (state.count('Deepnest_03', player) and (state.count('LEFTSUPERDASH', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))))))) + fn("Deepnest_09[left1]", lambda state: state.count('Deepnest_09[left1]', player) or (state.count('Can_Stag', player) and state.count('Distant_Village_Stag', player))) + fn("Deepnest_10[right1]", lambda state: state.count('Deepnest_10[right1]', player) or (state.count('Deepnest_10', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('Deepnest_10[door1]', player) and (state.count('RIGHTCLAW', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))))) + fn("Deepnest_10[right2]", lambda state: state.count('Deepnest_10[right2]', player) or state.count('Deepnest_10', player)) + fn("Deepnest_10[right3]", lambda state: state.count('Deepnest_10[right3]', player) or state.count('Deepnest_10', player)) + fn("Deepnest_10[door1]", lambda state: state.count('Deepnest_10[door1]', player) or (state.count('Deepnest_10', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('Deepnest_10[right1]', player)))) + fn("Deepnest_10[door2]", lambda state: state.count('Deepnest_10[door2]', player) or (state.count('Deepnest_10', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('Deepnest_10[door1]', player) or state.count('Deepnest_10[right1]', player)))) + fn("Room_spider_small[left1]", lambda state: state.count('Room_spider_small[left1]', player)) + fn("Deepnest_Spider_Town[left1]", lambda state: state.count('Deepnest_Spider_Town[left1]', player)) + fn("Deepnest_14[right1]", lambda state: state.count('Deepnest_14[right1]', player) or (state.count('Deepnest_14', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state.count('Deepnest_14[left1]', player)))) + fn("Deepnest_14[left1]", lambda state: state.count('Deepnest_14[left1]', player) or (state.count('Deepnest_14', player) and (state.count('WINGS', player) or ((state.count('RIGHTCLAW', player) or state.count('RIGHTDASH', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player))) and (state.count('LEFTCLAW', player) or state.count('LEFTDASH', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player))))))) + fn("Deepnest_14[bot1]", lambda state: state.count('Deepnest_14[bot1]', player) or state.count('Deepnest_14', player)) + fn("Deepnest_14[bot2]", lambda state: state.count('Deepnest_14[bot2]', player) or state.count('Deepnest_14', player)) + fn("Deepnest_16[left1]", lambda state: state.count('Deepnest_16[left1]', player) or (state.count('Deepnest_16[bot1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player))))) + fn("Deepnest_16[bot1]", lambda state: state.count('Deepnest_16[bot1]', player)) + fn("Deepnest_17[left1]", lambda state: state.count('Deepnest_17[left1]', player) or state.count('Deepnest_17', player)) + fn("Deepnest_17[right1]", lambda state: state.count('Deepnest_17[right1]', player) or state.count('Deepnest_17', player)) + fn("Deepnest_17[top1]", lambda state: state.count('Deepnest_17[top1]', player) or state.count('Deepnest_17', player)) + fn("Deepnest_17[bot1]", lambda state: state.count('Deepnest_17[bot1]', player) or state.count('Deepnest_17', player)) + fn("Fungus2_25[top1]", lambda state: state.count('Fungus2_25[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or ((state.count('Fungus2_25[top2]', player) or state.count('Fungus2_25[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Fungus2_25[top2]", lambda state: False) + fn("Fungus2_25[right1]", lambda state: state.count('Fungus2_25[right1]', player) or ((state.count('Fungus2_25[top1]', player) or state.count('Fungus2_25[top2]', player)) and state.count('Defeated_Mantis_Lords', player))) + fn("Deepnest_26[left1]", lambda state: state.count('Deepnest_26[left1]', player) or (state.count('Deepnest_26', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))) and state.count('Opened_Tramway_Exit_Gate', player))) + fn("Deepnest_26[left2]", lambda state: state.count('Deepnest_26[left2]', player) or (state.count('Deepnest_26', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Deepnest_26[right1]", lambda state: state.count('Deepnest_26[right1]', player) or state.count('Deepnest_26', player)) + fn("Deepnest_26[bot1]", lambda state: state.count('Deepnest_26[bot1]', player) or state.count('Deepnest_26', player)) + fn("Deepnest_26b[right2]", lambda state: state.count('Deepnest_26b[right2]', player)) + fn("Deepnest_26b[right1]", lambda state: state.count('Deepnest_26b[right1]', player) or (state.count('Deepnest_26b[right2]', player) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state._hk_option(player, 'EnemyPogos')))))) + fn("Deepnest_30[left1]", lambda state: state.count('Deepnest_30[left1]', player) or state.count('Deepnest_30[right1]', player) or (state.count('Deepnest_30[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_30[top1]", lambda state: state.count('Deepnest_30[top1]', player)) + fn("Deepnest_30[right1]", lambda state: state.count('Deepnest_30[right1]', player) or state.count('Deepnest_30[left1]', player) or (state.count('Deepnest_30[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_31[right1]", lambda state: state.count('Deepnest_31[right1]', player) or (state.count('Deepnest_31[right2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTDASH', player))))) + fn("Deepnest_31[right2]", lambda state: state.count('Deepnest_31[right2]', player) or (state.count('Deepnest_31[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Deepnest_32[left1]", lambda state: state.count('Deepnest_32[left1]', player)) + fn("Deepnest_33[top1]", lambda state: state.count('Deepnest_33[top1]', player)) + fn("Deepnest_33[top2]", lambda state: state.count('Deepnest_33[top2]', player) or ((state.count('Deepnest_33[top1]', player) or state.count('Deepnest_33[bot1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_33[bot1]", lambda state: state.count('Deepnest_33[bot1]', player) or state.count('Deepnest_33[top1]', player) or state.count('Deepnest_33[top2]', player)) + fn("Deepnest_34[left1]", lambda state: state.count('Deepnest_34[left1]', player) or (state.count('Deepnest_34', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_34[right1]", lambda state: state.count('Deepnest_34[right1]', player) or (state.count('Deepnest_34', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTDASH', player)))) + fn("Deepnest_34[top1]", lambda state: state.count('Deepnest_34[top1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) or (state.count('Deepnest_34', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTDASH', player))))))) + fn("Deepnest_35[left1]", lambda state: state.count('Deepnest_35[left1]', player) or state.count('Deepnest_35', player)) + fn("Deepnest_35[top1]", lambda state: state.count('Deepnest_35[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Deepnest_35', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Deepnest_35[bot1]", lambda state: state.count('Deepnest_35[bot1]', player) or state.count('Deepnest_35', player)) + fn("Deepnest_36[left1]", lambda state: state.count('Deepnest_36[left1]', player)) + fn("Deepnest_37[left1]", lambda state: state.count('Deepnest_37[left1]', player) or state.count('Deepnest_37', player)) + fn("Deepnest_37[right1]", lambda state: state.count('Deepnest_37[right1]', player) or state.count('Deepnest_37', player)) + fn("Deepnest_37[top1]", lambda state: state.count('Deepnest_37[top1]', player) or state.count('Deepnest_37', player)) + fn("Deepnest_37[bot1]", lambda state: state.count('Deepnest_37[bot1]', player) or state.count('Deepnest_37', player)) + fn("Deepnest_38[bot1]", lambda state: state.count('Deepnest_38[bot1]', player)) + fn("Deepnest_39[left1]", lambda state: state.count('Deepnest_39[left1]', player) or ((state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_39', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')))) or (state.count('Deepnest_39[top1]', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))))) + fn("Deepnest_39[top1]", lambda state: state.count('Deepnest_39[top1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) or ((state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)) or state.count('WINGS', player)) and (state.count('Deepnest_39', player) and (state.count('Deepnest_39[left1]', player) or state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos'))))))) + fn("Deepnest_39[door1]", lambda state: state.count('Deepnest_39[door1]', player) or ((state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('RIGHTSUPERDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)))) and (state.count('Deepnest_39[right1]', player) and (state.count('RIGHTCLAW', player) or ((state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')) and state.count('WINGS', player))) or state.count('Deepnest_39[left1]', player) or state.count('Deepnest_39[top1]', player)))) + fn("Deepnest_39[right1]", lambda state: state.count('Deepnest_39[right1]', player) or ((state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and state.count('Deepnest_39', player))) + fn("Deepnest_40[right1]", lambda state: state.count('Deepnest_40[right1]', player)) + fn("Deepnest_41[right1]", lambda state: state.count('Deepnest_41[right1]', player) or (state.count('Deepnest_41[left1]', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos')))) or (state.count('Deepnest_41[left2]', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))))) + fn("Deepnest_41[left1]", lambda state: state.count('Deepnest_41[left1]', player) or (state.count('Deepnest_41[right1]', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and (state.count('RIGHTCLAW', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'EnemyPogos')))) or (state.count('Deepnest_41[left2]', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))))) + fn("Deepnest_41[left2]", lambda state: state.count('Deepnest_41[left2]', player)) + fn("Deepnest_42[bot1]", lambda state: state.count('Deepnest_42[bot1]', player) or state.count('Deepnest_42', player)) + fn("Deepnest_42[left1]", lambda state: state.count('Deepnest_42[left1]', player) or state.count('Deepnest_42', player)) + fn("Deepnest_42[top1]", lambda state: state.count('Deepnest_42[top1]', player) or (state.count('Deepnest_42', player) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Deepnest_43[bot1]", lambda state: state.count('Deepnest_43[bot1]', player) or ((state.count('Deepnest_43[left1]', player) or state.count('Deepnest_43[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_43[left1]", lambda state: state.count('Deepnest_43[left1]', player) or state.count('Deepnest_43[right1]', player) or (state.count('Deepnest_43[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))))) + fn("Deepnest_43[right1]", lambda state: state.count('Deepnest_43[right1]', player) or state.count('Deepnest_43[left1]', player) or (state.count('Deepnest_43[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))))) + fn("Deepnest_44[top1]", lambda state: state.count('Deepnest_44[top1]', player)) + fn("Deepnest_45_v02[left1]", lambda state: state.count('Deepnest_45_v02[left1]', player)) + fn("Room_Mask_Maker[right1]", lambda state: state.count('Room_Mask_Maker[right1]', player)) + fn("Deepnest_East_01[bot1]", lambda state: state.count('Deepnest_East_01[bot1]', player) or state.count('Deepnest_East_01[right1]', player) or state.count('Deepnest_East_01[top1]', player)) + fn("Deepnest_East_01[right1]", lambda state: state.count('Deepnest_East_01[right1]', player)) + fn("Deepnest_East_01[top1]", lambda state: state.count('Deepnest_East_01[top1]', player) or ((state.count('Deepnest_East_01[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or state.count('Deepnest_East_01[right1]', player)) and (state.count('RIGHTDASH', player) or state.count('LEFTCLAW', player) or state.count('WINGS', player)))) + fn("Deepnest_East_02[bot1]", lambda state: state.count('Deepnest_East_02[bot1]', player) or state.count('Deepnest_East_02', player)) + fn("Deepnest_East_02[bot2]", lambda state: state.count('Deepnest_East_02[bot2]', player) or (state.count('Deepnest_East_02', player) and state.count('QUAKE', player) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) or (state.count('LEFTDASH', player) and state.count('WINGS', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Deepnest_East_02[top1]", lambda state: state.count('Deepnest_East_02[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Deepnest_East_02', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_East_02[right1]", lambda state: state.count('Deepnest_East_02[right1]', player) or state.count('Deepnest_East_02', player)) + fn("Deepnest_East_03[left1]", lambda state: state.count('Deepnest_East_03[left1]', player) or state.count('Deepnest_East_03', player)) + fn("Deepnest_East_03[left2]", lambda state: state.count('Deepnest_East_03[left2]', player) or (state.count('Deepnest_East_03', player) and state.count("Opened_Lower_Kingdom's_Edge_Wall", player))) + fn("Deepnest_East_03[top1]", lambda state: state.count('Deepnest_East_03[top1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) or (state.count('Deepnest_East_03', player) and (((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or (state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'ObscureSkips'))) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player) and ((True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and state.count('MASKSHARDS', player) > 15))))) + fn("Deepnest_East_03[top2]", lambda state: False) + fn("Deepnest_East_03[right1]", lambda state: state.count('Deepnest_East_03[right1]', player) or (state.count('Deepnest_East_03', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state.count('Deepnest_East_03[top2]', player)))) + fn("Deepnest_East_03[right2]", lambda state: state.count('Deepnest_East_03[right2]', player) or state.count('Deepnest_East_03', player)) + fn("Deepnest_East_04[left1]", lambda state: state.count('Deepnest_East_04[left1]', player) or (state.count('Deepnest_East_04', player) and state.count('ACID', player))) + fn("Deepnest_East_04[left2]", lambda state: state.count('Deepnest_East_04[left2]', player) or (state.count('Deepnest_East_04', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos') or state.count('Deepnest_East_04[right2]', player)))) + fn("Deepnest_East_04[right2]", lambda state: state.count('Deepnest_East_04[right2]', player) or (state.count('Deepnest_East_04', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos') or state.count('Deepnest_East_04[left2]', player)) and (state.count('WINGS', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state._hk_option(player, 'EnemyPogos'))))) + fn("Deepnest_East_04[right1]", lambda state: state.count('Deepnest_East_04[right1]', player) or state.count('Deepnest_East_04', player)) + fn("Deepnest_East_06[top1]", lambda state: state.count('Deepnest_East_06[top1]', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('Deepnest_East_06[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos')))) or ((state.count('Deepnest_East_06[bot1]', player) or state.count('Deepnest_East_06[door1]', player) or state.count('Deepnest_East_06[right1]', player)) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Deepnest_East_06[left1]", lambda state: state.count('Deepnest_East_06[left1]', player) or state.count('Deepnest_East_06[top1]', player) or ((state.count('Deepnest_East_06[bot1]', player) or state.count('Deepnest_East_06[door1]', player) or state.count('Deepnest_East_06[right1]', player)) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Deepnest_East_06[bot1]", lambda state: state.count('Deepnest_East_06[bot1]', player)) + fn("Deepnest_East_06[door1]", lambda state: state.count('Deepnest_East_06[door1]', player) or state.count('Deepnest_East_06[right1]', player) or (state.count('Deepnest_East_06[left1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'BackgroundObjectPogos')))) or ((state.count('Deepnest_East_06[top1]', player) or state.count('Deepnest_East_06[bot1]', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))))) + fn("Deepnest_East_06[right1]", lambda state: state.count('Deepnest_East_06[right1]', player) or state.count('Deepnest_East_06[door1]', player) or (state.count('Deepnest_East_06[left1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'BackgroundObjectPogos')))) or ((state.count('Deepnest_East_06[top1]', player) or state.count('Deepnest_East_06[bot1]', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))))) + fn("Deepnest_East_07[bot1]", lambda state: state.count('Deepnest_East_07[bot1]', player)) + fn("Deepnest_East_07[bot2]", lambda state: state.count('Deepnest_East_07[bot2]', player) or state.count('Deepnest_East_07', player)) + fn("Deepnest_East_07[left1]", lambda state: state.count('Deepnest_East_07[left1]', player) or (state.count('Deepnest_East_07', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_East_07[left2]", lambda state: state.count('Deepnest_East_07[left2]', player) or state.count('Deepnest_East_07', player)) + fn("Deepnest_East_07[right1]", lambda state: state.count('Deepnest_East_07[right1]', player) or state.count('Deepnest_East_07', player)) + fn("Deepnest_East_08[right1]", lambda state: state.count('Deepnest_East_08[right1]', player) or state.count('Deepnest_East_08[top1]', player)) + fn("Deepnest_East_08[top1]", lambda state: state.count('Deepnest_East_08[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Deepnest_East_08[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_East_09[right1]", lambda state: state.count('Deepnest_East_09[right1]', player) or (state.count('Deepnest_East_09[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_East_09[left1]", lambda state: state.count('Deepnest_East_09[left1]', player) or state.count('Deepnest_East_09[right1]', player) or (state.count('Deepnest_East_09[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_East_09[bot1]", lambda state: state.count('Deepnest_East_09[bot1]', player) or state.count('Deepnest_East_09[right1]', player)) + fn("Deepnest_East_10[left1]", lambda state: state.count('Deepnest_East_10[left1]', player)) + fn("Deepnest_East_11[right1]", lambda state: state.count('Deepnest_East_11[right1]', player) or (state.count('Deepnest_East_11[top1]', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Cyclone_Slash', player) or state.count('Great_Slash', player) or state.count('FIREBALL', player) or state.count('QUAKE', player))) or ((state.count('Deepnest_East_11[left1]', player) or state.count('Deepnest_East_11[bot1]', player)) and (state.count('WINGS', player) or ((state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player))) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))))) + fn("Deepnest_East_11[left1]", lambda state: state.count('Deepnest_East_11[left1]', player) or state.count('Deepnest_East_11[top1]', player) or state.count('Deepnest_East_11[right1]', player) or (state.count('Deepnest_East_11[bot1]', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos')) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos')) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))))) + fn("Deepnest_East_11[top1]", lambda state: state.count('Deepnest_East_11[top1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) or (state.count('Deepnest_East_11[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'BackgroundObjectPogos'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) or ((state.count('Deepnest_East_11[left1]', player) or state.count('Deepnest_East_11[bot1]', player)) and (state.count('WINGS', player) or ((True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player))) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'BackgroundObjectPogos'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))))) + fn("Deepnest_East_11[bot1]", lambda state: state.count('Deepnest_East_11[bot1]', player) or state.count('Deepnest_East_11[left1]', player) or state.count('Deepnest_East_11[top1]', player) or state.count('Deepnest_East_11[right1]', player)) + fn("Deepnest_East_12[right1]", lambda state: state.count('Deepnest_East_12[right1]', player) or state.count('Deepnest_East_12[left1]', player)) + fn("Deepnest_East_12[left1]", lambda state: state.count('Deepnest_East_12[left1]', player) or state.count('Deepnest_East_12[right1]', player)) + fn("Deepnest_East_13[bot1]", lambda state: state.count('Deepnest_East_13[bot1]', player)) + fn("Deepnest_East_14[top2]", lambda state: state.count('Deepnest_East_14[top2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement')))) + fn("Deepnest_East_14[left1]", lambda state: state.count('Deepnest_East_14[left1]', player) or ((state.count('Deepnest_East_14[top2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and state.count('QUAKE', player) or state.count('Deepnest_East_14[door1]', player)) and (state.count('LEFTDASH', player) or state._hk_option(player, 'SpikeTunnels')))) + fn("Deepnest_East_14[door1]", lambda state: state.count('Deepnest_East_14[door1]', player) or (state.count('Deepnest_East_14[top2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and state.count('QUAKE', player) and (state.count('RIGHTDASH', player) or state._hk_option(player, 'PreciseMovement'))) or (state.count('Deepnest_East_14[left1]', player) and (state.count('RIGHTDASH', player) or state._hk_option(player, 'SpikeTunnels')))) + fn("Deepnest_East_14b[right1]", lambda state: state.count('Deepnest_East_14b[right1]', player) or state.count('Deepnest_East_14b[top1]', player)) + fn("Deepnest_East_14b[top1]", lambda state: state.count('Deepnest_East_14b[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) or (state.count('Deepnest_East_14b[right1]', player) and (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips') or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_East_15[left1]", lambda state: state.count('Deepnest_East_15[left1]', player)) + fn("Deepnest_East_16[left1]", lambda state: state.count('Deepnest_East_16[left1]', player) or state.count('Deepnest_East_16[bot1]', player)) + fn("Deepnest_East_16[bot1]", lambda state: state.count('Deepnest_East_16[bot1]', player) or (state.count('Deepnest_East_16[left1]', player) and state.count('QUAKE', player))) + fn("Deepnest_East_17[left1]", lambda state: state.count('Deepnest_East_17[left1]', player)) + fn("Deepnest_East_18[top1]", lambda state: state.count('Deepnest_East_18[top1]', player) or (state.count('Deepnest_East_18', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Deepnest_East_18[bot1]", lambda state: state.count('Deepnest_East_18[bot1]', player) or state.count('Deepnest_East_18', player)) + fn("Deepnest_East_18[right2]", lambda state: state.count('Deepnest_East_18[right2]', player) or (state.count('Deepnest_East_18', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)))) + fn("Room_nailmaster_03[left1]", lambda state: state.count('Room_nailmaster_03[left1]', player)) + fn("Deepnest_East_Hornet[left1]", lambda state: state.count('Deepnest_East_Hornet[left1]', player)) + fn("Deepnest_East_Hornet[left2]", lambda state: state.count('Deepnest_East_Hornet[left2]', player) or (state.count('Deepnest_East_Hornet[left1]', player) and state.count('Defeated_Hornet_2', player))) + fn("Room_Wyrm[right1]", lambda state: state.count('Room_Wyrm[right1]', player)) + fn("GG_Lurker[left1]", lambda state: state.count('GG_Lurker[left1]', player)) + fn("Hive_01[left1]", lambda state: state.count('Hive_01[left1]', player) or state.count('Hive_01[right1]', player)) + fn("Hive_01[right1]", lambda state: state.count('Hive_01[right1]', player) or (state.count('Hive_01[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))))))) + fn("Hive_01[right2]", lambda state: state.count('Hive_01[right2]', player)) + fn("Hive_02[left1]", lambda state: state.count('Hive_02[left1]', player) or ((state.count('Hive_02[left2]', player) or state.count('Hive_02[left3]', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTCLAW', player))))) + fn("Hive_02[left2]", lambda state: state.count('Hive_02[left2]', player) or ((state.count('Hive_02[left1]', player) or state.count('Hive_02[left3]', player)) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos'))) or state.count('WINGS', player)))) + fn("Hive_02[left3]", lambda state: state.count('Hive_02[left3]', player) or state.count('Hive_02[left2]', player) or state.count('Hive_02[left1]', player)) + fn("Hive_03_c[left1]", lambda state: state.count('Hive_03_c[left1]', player) or (state.count('Hive_03_c', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("Hive_03_c[right2]", lambda state: state.count('Hive_03_c[right2]', player)) + fn("Hive_03_c[right3]", lambda state: state.count('Hive_03_c[right3]', player) or state.count('Hive_03_c', player)) + fn("Hive_03_c[top1]", lambda state: state.count('Hive_03_c[top1]', player) or (state.count('Hive_03_c', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))))) or (state.count('Hive_03_c[right2]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) + fn("Hive_03[bot1]", lambda state: state.count('Hive_03[bot1]', player) or state.count('Hive_03[right1]', player)) + fn("Hive_03[right1]", lambda state: state.count('Hive_03[right1]', player) or (state.count('Hive_03[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos'))))) + fn("Hive_03[top1]", lambda state: state.count('Hive_03[top1]', player)) + fn("Hive_04[left1]", lambda state: state.count('Hive_04[left1]', player) or (state.count('Hive_04[right1]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('LEFTDASH', player) or state.count('WINGS', player)))) + fn("Hive_04[left2]", lambda state: state.count('Hive_04[left2]', player) or state.count('Hive_04[left1]', player) or state.count('Hive_04[right1]', player)) + fn("Hive_04[right1]", lambda state: state.count('Hive_04[right1]', player) or (state.count('Hive_04[left1]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('RIGHTDASH', player) or state._hk_option(player, 'EnemyPogos')) or state.count('WINGS', player)))) + fn("Hive_05[left1]", lambda state: state.count('Hive_05[left1]', player)) + fn("Room_Colosseum_01[left1]", lambda state: state.count('Room_Colosseum_01[left1]', player) or state.count('Room_Colosseum_01[bot1]', player)) + fn("Room_Colosseum_01[bot1]", lambda state: state.count('Room_Colosseum_01[bot1]', player) or state.count('Room_Colosseum_01[left1]', player)) + fn("Room_Colosseum_02[top1]", lambda state: state.count('Room_Colosseum_02[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('Room_Colosseum_02[top2]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Room_Colosseum_02[top2]", lambda state: state.count('Room_Colosseum_02[top2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('Room_Colosseum_02[top1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Room_Colosseum_Spectate[bot1]", lambda state: state.count('Room_Colosseum_Spectate[bot1]', player) or state.count('Room_Colosseum_Spectate[right1]', player)) + fn("Room_Colosseum_Spectate[right1]", lambda state: state.count('Room_Colosseum_Spectate[right1]', player) or state.count('Room_Colosseum_Spectate[bot1]', player)) + fn("Abyss_01[left1]", lambda state: state.count('Abyss_01[left1]', player) or (state.count('Abyss_01', player) and state.count('Opened_Dung_Defender_Wall', player) and ((state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) or state.count('LEFTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) or state.count('WINGS', player) or state.count('Abyss_01[right1]', player)))) + fn("Abyss_01[left2]", lambda state: state.count('Abyss_01[left2]', player) or (state.count('Abyss_01', player) and (state._hk_option(player, 'SpikeTunnels') and state.count('LEFTDASH', player) and (state.count('Dashmaster', player) and state.count('Can_Bench', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) or (state._hk_option(player, 'SpikeTunnels') and state.count('RIGHTCLAW', player) and state.count('LEFTDASH', player)))) or (state.count('Abyss_01[right2]', player) and state.count('LEFTSUPERDASH', player))) + fn("Abyss_01[left3]", lambda state: state.count('Abyss_01[left3]', player) or state.count('Abyss_01', player)) + fn("Abyss_01[right1]", lambda state: state.count('Abyss_01[right1]', player) or (state.count('Abyss_01', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player)) or (state.count('LEFTCLAW', player) and (state.count('WINGS', player) or (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos')))) or (state.count('Abyss_01[left1]', player) and state.count('LEFTCLAW', player) and (state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Abyss_01[right2]", lambda state: state.count('Abyss_01[right2]', player) or (state.count('Abyss_01', player) and (state._hk_option(player, 'SpikeTunnels') and state.count('RIGHTDASH', player) and (state.count('Dashmaster', player) and state.count('Can_Bench', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) or (state._hk_option(player, 'SpikeTunnels') and state.count('RIGHTCLAW', player) and state.count('LEFTDASH', player) and state.count('RIGHTSUPERDASH', player)))) or (state.count('Abyss_01[left2]', player) and state.count('RIGHTSUPERDASH', player))) + fn("Abyss_02[right1]", lambda state: state.count('Abyss_02[right1]', player) or (state.count('Abyss_02[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Abyss_02[bot1]", lambda state: state.count('Abyss_02[bot1]', player) or state.count('Abyss_02[right1]', player)) + fn("Abyss_03[bot1]", lambda state: state.count('Abyss_03[bot1]', player) or state.count('Abyss_03', player) or state.count('Lower_Tram', player)) + fn("Abyss_03[bot2]", lambda state: state.count('Abyss_03[bot2]', player) or state.count('Abyss_03', player) or state.count('Lower_Tram', player)) + fn("Abyss_03[top1]", lambda state: state.count('Abyss_03[top1]', player) or state.count('Abyss_03', player) or state.count('Lower_Tram', player)) + fn("Abyss_03_b[left1]", lambda state: state.count('Abyss_03_b[left1]', player) or state.count('Abyss_03_b', player) or state.count('Lower_Tram', player)) + fn("Abyss_03_c[right1]", lambda state: state.count('Abyss_03_c[right1]', player) or state.count('Abyss_03_c', player) or state.count('Lower_Tram', player)) + fn("Abyss_03_c[top1]", lambda state: state.count('Abyss_03_c[top1]', player) or ((state.count('Abyss_03_c', player) or state.count('Lower_Tram', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Abyss_04[top1]", lambda state: state.count('Abyss_04[top1]', player) or (state.count('Abyss_04', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Abyss_04[left1]", lambda state: state.count('Abyss_04[left1]', player) or state.count('Abyss_04', player)) + fn("Abyss_04[bot1]", lambda state: state.count('Abyss_04[bot1]', player) or state.count('Abyss_04', player)) + fn("Abyss_04[right1]", lambda state: state.count('Abyss_04[right1]', player) or (state.count('Abyss_04', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player))) + fn("Abyss_05[left1]", lambda state: state.count('Abyss_05[left1]', player) or state.count('Abyss_05', player)) + fn("Abyss_05[right1]", lambda state: state.count('Abyss_05[right1]', player) or state.count('Abyss_05', player)) + fn("Abyss_06_Core[top1]", lambda state: state.count('Abyss_06_Core[top1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'PreciseMovement'))))) + fn("Abyss_06_Core[left1]", lambda state: state.count('Abyss_06_Core[left1]', player) or state.count('Warp-Lifeblood_Core_to_Abyss', player) or (state.count('Abyss_06_Core', player) and (state.count('Lifeblood_Heart', player) or state.count('Lifeblood_Core', player) or state.count("Joni's_Blessing", player)) and (state.count('LEFTCLAW', player) and (state._hk_option(player, 'PreciseMovement') or state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) or state.count('WINGS', player) or (state.count('Abyss_06_Core[top1]', player) and state.count('BRAND', player))))) + fn("Abyss_06_Core[left3]", lambda state: state.count('Abyss_06_Core[left3]', player) or state.count('Abyss_06_Core', player)) + fn("Abyss_06_Core[right2]", lambda state: state.count('Abyss_06_Core[right2]', player) or state.count('Abyss_06_Core', player)) + fn("Abyss_06_Core[bot1]", lambda state: state.count('Abyss_06_Core[bot1]', player) or (state.count('Abyss_06_Core', player) and ((state.count('WHITEFRAGMENT', player) > 1 or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 3)))) and state.count('Can_Bench', player) or (state.count('WHITEFRAGMENT', player) > 2 or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 7))))))) + fn("Abyss_08[right1]", lambda state: state.count('Abyss_08[right1]', player)) + fn("Abyss_09[right1]", lambda state: state.count('Abyss_09[right1]', player) or (state.count('Abyss_09', player) and (state.count('Lit_Abyss_Lighthouse', player) or (state.count('WHITEFRAGMENT', player) > 2) or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 7)))) and (state.count('SWIM', player) or state.count('RIGHTSUPERDASH', player)))) + fn("Abyss_09[right2]", lambda state: state.count('Abyss_09[right2]', player) or (state.count('Abyss_09', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) or state.count('WINGS', player)))) + fn("Abyss_09[right3]", lambda state: state.count('Abyss_09[right3]', player)) + fn("Abyss_09[left1]", lambda state: state.count('Abyss_09[left1]', player) or state.count('Abyss_09', player)) + fn("Abyss_10[left1]", lambda state: state.count('Abyss_10[left1]', player) or (state.count('Abyss_10[left2]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)))) + fn("Abyss_10[left2]", lambda state: state.count('Abyss_10[left2]', player) or (state.count('Abyss_10[left1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips')))) or ((state.count('WINGS', player) or state.count('LEFTCLAW', player)) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player) or (state.count('WHITEFRAGMENT', player) > 2 or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 7))))))))) + fn("Abyss_12[right1]", lambda state: state.count('Abyss_12[right1]', player)) + fn("Abyss_15[top1]", lambda state: state.count('Abyss_15[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement')))) + fn("Abyss_16[left1]", lambda state: state.count('Abyss_16[left1]', player) or (state.count('Abyss_16[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))) + fn("Abyss_16[right1]", lambda state: state.count('Abyss_16[right1]', player) or (state.count('Abyss_16[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player)))) + fn("Abyss_17[top1]", lambda state: state.count('Abyss_17[top1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Abyss_18[left1]", lambda state: state.count('Abyss_18[left1]', player) or (state.count('Abyss_18[right1]', player) and (state.count('WINGS', player) or state.count('LEFTSUPERDASH', player)))) + fn("Abyss_18[right1]", lambda state: state.count('Abyss_18[right1]', player) or (state.count('Abyss_18[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player)))) + fn("Abyss_19[left1]", lambda state: state.count('Abyss_19[left1]', player) or (state.count('Abyss_19[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('Defeated_Broken_Vessel', player))) + fn("Abyss_19[right1]", lambda state: state.count('Abyss_19[right1]', player) or (state.count('Abyss_19[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or (state.count('Abyss_19[bot2]', player) and state.count('WINGS', player))) + fn("Abyss_19[bot1]", lambda state: state.count('Abyss_19[bot1]', player)) + fn("Abyss_19[bot2]", lambda state: state.count('Abyss_19[bot2]', player) or (state.count('Abyss_19[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or state.count('Abyss_19[right1]', player)) + fn("Abyss_20[top1]", lambda state: state.count('Abyss_20[top1]', player) or (state.count('Abyss_20[top2]', player) and (state.count('LEFTCLAW', player) or (state._hk_option(player, 'EnemyPogos') and state.count('WINGS', player))))) + fn("Abyss_20[top2]", lambda state: state.count('Abyss_20[top2]', player) or (state.count('Abyss_20[top1]', player) and state.count('RIGHTCLAW', player))) + fn("Abyss_21[right1]", lambda state: state.count('Abyss_21[right1]', player)) + fn("Abyss_22[left1]", lambda state: state.count('Abyss_22[left1]', player) or (state.count('Can_Stag', player) and state.count('Hidden_Station_Stag', player))) + fn("Abyss_Lighthouse_room[left1]", lambda state: state.count('Abyss_Lighthouse_room[left1]', player)) + fn("Waterways_01[top1]", lambda state: state.count('Waterways_01[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('Waterways_01', player) and state.count('Opened_Waterways_Manhole', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Waterways_01[left1]", lambda state: state.count('Waterways_01[left1]', player) or state.count('Waterways_01', player)) + fn("Waterways_01[right1]", lambda state: state.count('Waterways_01[right1]', player) or (state.count('Waterways_01', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Waterways_01[bot1]", lambda state: state.count('Waterways_01[bot1]', player) or state.count('Waterways_01', player)) + fn("Waterways_02[top1]", lambda state: state.count('Waterways_02[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('Waterways_02', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state._hk_option(player, 'EnemyPogos') and state.count('WINGS', player))))) + fn("Waterways_02[top2]", lambda state: state.count('Waterways_02[top2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Waterways_02', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player)) or ((state.count('WINGS', player) or state.count('LEFTCLAW', player)) and state._hk_option(player, 'EnemyPogos'))))) + fn("Waterways_02[top3]", lambda state: state.count('Waterways_02[top3]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement')))) + fn("Waterways_02[bot1]", lambda state: state.count('Waterways_02[bot1]', player) or (state.count('Waterways_02[top1]', player) and state.count('QUAKE', player)) or (state.count('Waterways_02[top2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('SWIM', player)) and state.count('QUAKE', player)) or (state.count('Waterways_02[top3]', player) and state.count('QUAKE', player)) or (state.count('Waterways_02[bot1]', player) and state.count('QUAKE', player)) or (state.count('Waterways_02[bot2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('SWIM', player)) and state.count('QUAKE', player))) + fn("Waterways_02[bot2]", lambda state: state.count('Waterways_02[bot2]', player) or state.count('Waterways_02[top1]', player) or state.count('Waterways_02[top2]', player) or (state.count('Waterways_02[top3]', player) and state.count('QUAKE', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or (state._hk_option(player, 'EnemyPogos') and state.count('SWIM', player)) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips') and state.count('RIGHTDASH', player)))) or (state.count('Waterways_02[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and state.count('SWIM', player)) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips') and state.count('RIGHTDASH', player)))) or state.count('Waterways_02[bot2]', player)) + fn("Waterways_03[left1]", lambda state: state.count('Waterways_03[left1]', player)) + fn("Waterways_04[bot1]", lambda state: state.count('Waterways_04[bot1]', player) or (state.count('Waterways_04[right1]', player) and state.count('QUAKE', player)) or (state.count('Waterways_04[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) and state.count('QUAKE', player)) or (state.count('Waterways_04[left2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))) and state.count('QUAKE', player))) + fn("Waterways_04[right1]", lambda state: state.count('Waterways_04[right1]', player) or (state.count('Waterways_04[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player))) or (state.count('Waterways_04[left2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Waterways_04[left1]", lambda state: state.count('Waterways_04[left1]', player) or (state.count('Waterways_04[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state.count('WINGS', player))) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos')))) or (state.count('Waterways_04[left2]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Waterways_04[left2]", lambda state: state.count('Waterways_04[left2]', player) or (state.count('Waterways_04[right1]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')))) or (state.count('Waterways_04[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Waterways_04b[right1]", lambda state: state.count('Waterways_04b[right1]', player) or (state.count('Waterways_04b[left1]', player) and state.count('WINGS', player)) or (state.count('Waterways_04b[right2]', player) and state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')) and (state.count('SWIM', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player))))) + fn("Waterways_04b[right2]", lambda state: state.count('Waterways_04b[right2]', player) or (state.count('Waterways_04b[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or state.count('SWIM', player))) or (state.count('Waterways_04b[right1]', player) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state.count('LEFTSUPERDASH', player))) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or state.count('SWIM', player)))) + fn("Waterways_04b[left1]", lambda state: state.count('Waterways_04b[left1]', player) or (state.count('Waterways_04b[right1]', player) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state.count('LEFTSUPERDASH', player)))) or (state.count('Waterways_04b[right2]', player) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos'))) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')) and (state.count('SWIM', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player))))) + fn("Waterways_05[right1]", lambda state: state.count('Waterways_05[right1]', player) or (state.count('Waterways_05[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('Defeated_Dung_Defender', player)) or state.count('Waterways_05[bot2]', player)) + fn("Waterways_05[bot1]", lambda state: state.count('Waterways_05[bot1]', player)) + fn("Waterways_05[bot2]", lambda state: state.count('Waterways_05[bot2]', player) or ((state.count('Waterways_05[right1]', player) or (state.count('Waterways_05[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('Defeated_Dung_Defender', player))) and state.count('QUAKE', player))) + fn("Waterways_06[right1]", lambda state: state.count('Waterways_06[right1]', player) or (state.count('Waterways_06[top1]', player) and (state.count('ACID', player) or state.count('RIGHTSUPERDASH', player)))) + fn("Waterways_06[top1]", lambda state: state.count('Waterways_06[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Waterways_06[right1]', player) and (state.count('ACID', player) or state.count('LEFTSUPERDASH', player)) and (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips') or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) or state._hk_option(player, 'EnemyPogos') or state.count('RIGHTCLAW', player))) or state.count('WINGS', player)))) + fn("Waterways_07[right1]", lambda state: state.count('Waterways_07[right1]', player) or (state.count('Lever-Dung_Defender', player) and (state.count('Waterways_07', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or ((state.count('Waterways_07[door1]', player) or state.count('Waterways_07[top1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))))) + fn("Waterways_07[right2]", lambda state: state.count('Waterways_07[right2]', player) or (state.count('Waterways_07', player) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Waterways_07[left1]", lambda state: state.count('Waterways_07[left1]', player) or (state.count('Waterways_07', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and (state.count('ACID', player) or (state.count('LEFTDASH', player) and state.count('WINGS', player)))) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player) and (state.count('ACID', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))) and (state.count('LEFTSUPERDASH', player) or (state.count('ACID', player) and state.count('WINGS', player))))) + fn("Waterways_07[door1]", lambda state: state.count('Waterways_07[door1]', player) or (state.count('Waterways_07', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('Waterways_07[top1]', player) and state.count('WINGS', player))) + fn("Waterways_07[top1]", lambda state: state.count('Waterways_07[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Waterways_08[top1]", lambda state: state.count('Waterways_08[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Waterways_08[left1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player))) or (state.count('Waterways_08[left2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Waterways_08[left1]", lambda state: state.count('Waterways_08[left1]', player) or (state.count('Waterways_08[top1]', player) and (state._hk_option(player, 'EnemyPogos') or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player))) or state.count('Waterways_08[left2]', player)) + fn("Waterways_08[left2]", lambda state: state.count('Waterways_08[left2]', player) or (state.count('Waterways_08[left1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) + fn("Waterways_09[right1]", lambda state: state.count('Waterways_09[right1]', player) or state.count('Waterways_09[left1]', player)) + fn("Waterways_09[left1]", lambda state: state.count('Waterways_09[left1]', player) or (state.count('Waterways_09[right1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))))) + fn("Waterways_12[right1]", lambda state: state.count('Waterways_12[right1]', player)) + fn("Waterways_13[left1]", lambda state: state.count('Waterways_13[left1]', player) or (state.count('Waterways_13[left2]', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player))) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and state._hk_option(player, 'AcidSkips'))))) + fn("Waterways_13[left2]", lambda state: state.count('Waterways_13[left2]', player) or (state.count('Waterways_13[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Waterways_14[bot1]", lambda state: state.count('Waterways_14[bot1]', player) or (state.count('Waterways_14[bot2]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player))) and (state.count('ACID', player) or state.count('LEFTSUPERDASH', player)))) + fn("Waterways_14[bot2]", lambda state: state.count('Waterways_14[bot2]', player) or (state.count('Waterways_14[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('ACID', player) or state.count('RIGHTSUPERDASH', player)))) + fn("Waterways_15[top1]", lambda state: state.count('Waterways_15[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement')))) + fn("GG_Pipeway[right1]", lambda state: state.count('GG_Pipeway[right1]', player) or (state.count('GG_Pipeway[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("GG_Pipeway[left1]", lambda state: state.count('GG_Pipeway[left1]', player) or (state.count('GG_Pipeway[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("GG_Waterways[right1]", lambda state: state.count('GG_Waterways[right1]', player) or (state.count('GG_Waterways[door1]', player) and (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player)) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player))))) + fn("GG_Waterways[door1]", lambda state: state.count('GG_Waterways[door1]', player) or (state.count('GG_Waterways[right1]', player) and ((state.count('LEFTSUPERDASH', player) or state.count('SWIM', player)) and (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('RIGHTSUPERDASH', player) and state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('WINGS', player) and state.count('RIGHTDASH', player) and state.count('RIGHTCLAW', player) and state._hk_option(player, 'DifficultSkips'))))) + fn("Room_GG_Shortcut[left1]", lambda state: state.count('Room_GG_Shortcut[left1]', player) or (state.count('Room_GG_Shortcut[top1]', player) and (state.count('WINGS', player) or state.count('SWIM', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))) + fn("Room_GG_Shortcut[top1]", lambda state: state.count('Room_GG_Shortcut[top1]', player) and (state.count('WINGS', player) or state.count('LEFTCLAW', player)) or (state.count('Room_GG_Shortcut[left1]', player) and (state.count('WINGS', player) or state.count('LEFTCLAW', player)) and (state.count('RIGHTCLAW', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player) or (state.count('RIGHTDASH', player) and state.count('SWIM', player))) or (state.count('LEFTCLAW', player) and state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))))) + fn("Ruins1_01[left1]", lambda state: state.count('Ruins1_01[left1]', player) or state.count('Ruins1_01[top1]', player) or (state.count('Ruins1_01[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins1_01[top1]", lambda state: state.count('Ruins1_01[top1]', player) or state.count('Ruins1_01[left1]', player) or (state.count('Ruins1_01[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins1_01[bot1]", lambda state: state.count('Ruins1_01[bot1]', player) or state.count('Ruins1_01[top1]', player) or state.count('Ruins1_01[left1]', player)) + fn("Ruins1_02[top1]", lambda state: state.count('Ruins1_02[top1]', player) or (state.count('Ruins1_02[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins1_02[bot1]", lambda state: state.count('Ruins1_02[bot1]', player) or state.count('Ruins1_02[top1]', player)) + fn("Ruins1_03[top1]", lambda state: state.count('Ruins1_03[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Ruins1_03', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins1_03[left1]", lambda state: state.count('Ruins1_03[left1]', player) or state.count('Ruins1_03', player)) + fn("Ruins1_03[right1]", lambda state: state.count('Ruins1_03[right1]', player) or state.count('Ruins1_03', player)) + fn("Ruins1_03[right2]", lambda state: state.count('Ruins1_03[right2]', player) or state.count('Ruins1_03', player)) + fn("Ruins1_04[right1]", lambda state: state.count('Ruins1_04[right1]', player) or state.count('Ruins1_04[door1]', player) or (state.count('Ruins1_04[bot1]', player) and (state._hk_option(player, 'EnemyPogos') or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player) or state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'PreciseMovement'))))) + fn("Ruins1_04[door1]", lambda state: state.count('Ruins1_04[door1]', player) or ((state.count('Ruins1_04[bot1]', player) or (state.count('Ruins1_04[right1]', player) and (state._hk_option(player, 'EnemyPogos') or state.count('LEFTDASH', player) or state.count('WINGS', player) or state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'PreciseMovement'))))) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('RIGHTDASH', player)))))) + fn("Ruins1_04[bot1]", lambda state: state.count('Ruins1_04[bot1]', player)) + fn("Ruins1_05b[left1]", lambda state: state.count('Ruins1_05b[left1]', player) or state.count('Ruins1_05b', player)) + fn("Ruins1_05b[top1]", lambda state: state.count('Ruins1_05b[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement')))) + fn("Ruins1_05b[bot1]", lambda state: state.count('Ruins1_05b[bot1]', player) or (state.count('Ruins1_05b', player) and state.count('Opened_Waterways_Manhole', player))) + fn("Ruins1_05b[right1]", lambda state: state.count('Ruins1_05b[right1]', player) or state.count('Ruins1_05b', player)) + fn("Ruins1_05c[left2]", lambda state: state.count('Ruins1_05c[left2]', player) or state.count('Ruins1_05c', player)) + fn("Ruins1_05c[bot1]", lambda state: state.count('Ruins1_05c[bot1]', player) or state.count('Ruins1_05c', player)) + fn("Ruins1_05c[top1]", lambda state: state.count('Ruins1_05c[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('Ruins1_05c', player) and (state.count('WINGS', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DifficultSkips'))) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) or state._hk_option(player, 'EnemyPogos') or state.count('Ruins1_05c[top2]', player)))))) + fn("Ruins1_05c[top2]", lambda state: state.count('Ruins1_05c[top2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Ruins1_05c[top3]", lambda state: state.count('Ruins1_05c[top3]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) or (state.count('Ruins1_05c[top2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Ruins1_05[bot1]", lambda state: state.count('Ruins1_05[bot1]', player)) + fn("Ruins1_05[bot2]", lambda state: state.count('Ruins1_05[bot2]', player) or (state.count('Ruins1_05[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state._hk_option(player, 'EnemyPogos')))))) + fn("Ruins1_05[bot3]", lambda state: state.count('Ruins1_05[bot3]', player) or state.count('Ruins1_05', player)) + fn("Ruins1_05[right1]", lambda state: state.count('Ruins1_05[right1]', player) or (state.count('Ruins1_05', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('Ruins1_05[top1]', player)))) + fn("Ruins1_05[right2]", lambda state: state.count('Ruins1_05[right2]', player) or state.count('Ruins1_05', player)) + fn("Ruins1_05[top1]", lambda state: state.count('Ruins1_05[top1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state._hk_option(player, 'PreciseMovement')))) or (state.count('Ruins1_05', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player))) and (state.count('WINGS', player) or state.count('LEFTCLAW', player) or state.count('Ruins1_05[right1]', player)))) + fn("Ruins1_06[left1]", lambda state: state.count('Ruins1_06[left1]', player) or state.count('Ruins1_06[right1]', player)) + fn("Ruins1_06[right1]", lambda state: state.count('Ruins1_06[right1]', player) or state.count('Ruins1_06[left1]', player)) + fn("Ruins1_09[top1]", lambda state: state.count('Ruins1_09[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Ruins1_09[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins1_09[left1]", lambda state: state.count('Ruins1_09[left1]', player) or state.count('Ruins1_09[top1]', player)) + fn("Ruins1_17[top1]", lambda state: state.count('Ruins1_17[top1]', player) or state.count('Ruins1_17[right1]', player)) + fn("Ruins1_17[right1]", lambda state: state.count('Ruins1_17[right1]', player) or state.count('Ruins1_17[top1]', player)) + fn("Ruins1_17[bot1]", lambda state: state.count('Ruins1_17[bot1]', player) or state.count('Ruins1_17[top1]', player) or state.count('Ruins1_17[right1]', player)) + fn("Ruins1_18[left1]", lambda state: state.count('Ruins1_18[left1]', player) or state.count('Ruins1_18[right1]', player)) + fn("Ruins1_18[right1]", lambda state: state.count('Ruins1_18[right1]', player)) + fn("Ruins1_18[right2]", lambda state: state.count('Ruins1_18[right2]', player)) + fn("Ruins1_23[top1]", lambda state: state.count('Ruins1_23[top1]', player) and state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement') or (state.count('Ruins1_23', player) and state.count('Defeated_Sanctum_Warrior', player) and state.count('Broke_Sanctum_Glass_Floor', player) and state.count('WINGS', player) and (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player))) or state._hk_option(player, 'BackgroundObjectPogos')))) + fn("Ruins1_23[right1]", lambda state: state.count('Ruins1_23[right1]', player) or ((state.count('Ruins1_23', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'EnemyPogos'))) or state.count('Ruins1_23[top1]', player)) and state.count('Defeated_Sanctum_Warrior', player))) + fn("Ruins1_23[right2]", lambda state: state.count('Ruins1_23[right2]', player)) + fn("Ruins1_23[bot1]", lambda state: state.count('Ruins1_23[bot1]', player) or state.count('Ruins1_23', player)) + fn("Ruins1_23[left1]", lambda state: state.count('Ruins1_23[left1]', player) or state.count('Ruins1_23', player)) + fn("Ruins1_24[left1]", lambda state: state.count('Ruins1_24[left1]', player) or (state.count('Ruins1_24[right1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player))) and state.count('Defeated_Soul_Master', player))) + fn("Ruins1_24[right1]", lambda state: state.count('Ruins1_24[right1]', player)) + fn("Ruins1_24[left2]", lambda state: state.count('Ruins1_24[left2]', player) or state.count('Ruins1_24[right2]', player)) + fn("Ruins1_24[right2]", lambda state: state.count('Ruins1_24[right2]', player) or state.count('Ruins1_24[left2]', player)) + fn("Ruins1_25[left1]", lambda state: state.count('Ruins1_25[left1]', player) or ((state.count('Ruins1_25[left2]', player) or state.count('Ruins1_25[left3]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins1_25[left2]", lambda state: state.count('Ruins1_25[left2]', player) or ((state.count('Ruins1_25[left1]', player) or state.count('Ruins1_25[left3]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins1_25[left3]", lambda state: state.count('Ruins1_25[left3]', player) or (state.count('Ruins1_25[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or state.count('Ruins1_25[left2]', player)) + fn("Ruins1_27[left1]", lambda state: state.count('Ruins1_27[left1]', player) or state.count('Ruins1_27[right1]', player)) + fn("Ruins1_27[right1]", lambda state: state.count('Ruins1_27[right1]', player) or (state.count('Ruins1_27[left1]', player) and state.count('RIGHTCLAW', player) and state.count('WINGS', player))) + fn("Ruins1_28[left1]", lambda state: state.count('Ruins1_28[left1]', player) or state.count('Ruins1_28', player)) + fn("Ruins1_28[right1]", lambda state: state.count('Ruins1_28[right1]', player) or state.count('Ruins1_28', player)) + fn("Ruins1_28[bot1]", lambda state: state.count('Ruins1_28[bot1]', player) or state.count('Ruins1_28', player)) + fn("Ruins1_29[left1]", lambda state: state.count('Ruins1_29[left1]', player) or (state.count('Can_Stag', player) and state.count('City_Storerooms_Stag', player))) + fn("Ruins1_30[left1]", lambda state: state.count('Ruins1_30[left1]', player) or (state.count('Ruins1_30', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins1_30[left2]", lambda state: state.count('Ruins1_30[left2]', player)) + fn("Ruins1_30[bot1]", lambda state: state.count('Ruins1_30[bot1]', player) or (state.count('Ruins1_30', player) and state.count('QUAKE', player))) + fn("Ruins1_30[right1]", lambda state: state.count('Ruins1_30[right1]', player) or (state.count('Ruins1_30', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Ruins1_30[left1]', player)))) + fn("Ruins1_31[bot1]", lambda state: state.count('Ruins1_31[bot1]', player) or state.count('Ruins1_31', player) or state.count('Ruins1_31[left1]', player)) + fn("Ruins1_31[left1]", lambda state: state.count('Ruins1_31[left1]', player) or state.count('Ruins1_31', player) or state.count('Ruins1_31[bot1]', player)) + fn("Ruins1_31[left2]", lambda state: state.count('Ruins1_31[left2]', player) or (state.count('Ruins1_31', player) and state.count('Lever-Shade_Soul', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('RIGHTCLAW', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))) + fn("Ruins1_31[left3]", lambda state: state.count('Ruins1_31[left3]', player) or (state.count('Ruins1_31', player) and state.count('ELEGANT', player))) + fn("Ruins1_31[right1]", lambda state: state.count('Ruins1_31[right1]', player) or state.count('Ruins1_31', player)) + fn("Ruins1_31b[right1]", lambda state: state.count('Ruins1_31b[right1]', player) or (state.count('Ruins1_31b[right2]', player) and state.count('Defeated_Elegant_Warrior', player))) + fn("Ruins1_31b[right2]", lambda state: state.count('Ruins1_31b[right2]', player) or (state.count('Ruins1_31b[right1]', player) and state.count('Defeated_Elegant_Warrior', player))) + fn("Ruins1_32[right1]", lambda state: state.count('Ruins1_32[right1]', player)) + fn("Ruins1_32[right2]", lambda state: state.count('Ruins1_32[right2]', player) or (state.count('Ruins1_32[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('QUAKE', player))) + fn("Room_nailsmith[left1]", lambda state: state.count('Room_nailsmith[left1]', player)) + fn("Ruins2_01[top1]", lambda state: state.count('Ruins2_01[top1]', player) or (state.count('Ruins2_01', player) and (state.count('Ruins2_01[left2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player))) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DifficultSkips'))))) + fn("Ruins2_01[bot1]", lambda state: state.count('Ruins2_01[bot1]', player) or state.count('Ruins2_01', player)) + fn("Ruins2_01[left2]", lambda state: state.count('Ruins2_01[left2]', player) or (state.count('Ruins2_01', player) and (state.count('Ruins2_01[top1]', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player))) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DifficultSkips'))))) + fn("Ruins2_01_b[top1]", lambda state: state.count('Ruins2_01_b[top1]', player) or (state.count('Ruins2_01_b', player) and (state.count('LEFTCLAW', player) and state._hk_option(player, 'BackgroundObjectPogos') or state.count('WINGS', player)))) + fn("Ruins2_01_b[left1]", lambda state: state.count('Ruins2_01_b[left1]', player) or state.count('Ruins2_01_b', player)) + fn("Ruins2_01_b[right1]", lambda state: state.count('Ruins2_01_b[right1]', player) or state.count('Ruins2_01_b', player)) + fn("Ruins2_03b[top1]", lambda state: state.count('Ruins2_03b[top1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) or (state.count('Ruins2_03b', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))))) + fn("Ruins2_03b[top2]", lambda state: state.count('Ruins2_03b[top2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Ruins2_03b', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins2_03b[left1]", lambda state: state.count('Ruins2_03b[left1]', player) or state.count('Ruins2_03b', player)) + fn("Ruins2_03b[bot1]", lambda state: state.count('Ruins2_03b[bot1]', player) or state.count('Ruins2_03b', player)) + fn("Ruins2_03[top1]", lambda state: state.count('Ruins2_03[top1]', player) or (state.count('Ruins2_03[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('Defeated_Watcher_Knights', player))) + fn("Ruins2_03[bot1]", lambda state: state.count('Ruins2_03[bot1]', player) or (state.count('Ruins2_03[top1]', player) and state.count('Defeated_Watcher_Knights', player))) + fn("Ruins2_03[bot2]", lambda state: state.count('Ruins2_03[bot2]', player)) + fn("Ruins2_04[left1]", lambda state: state.count('Ruins2_04[left1]', player) or state.count('Ruins2_04', player)) + fn("Ruins2_04[left2]", lambda state: state.count('Ruins2_04[left2]', player) or state.count('Ruins2_04', player)) + fn("Ruins2_04[right1]", lambda state: state.count('Ruins2_04[right1]', player) or (state.count('Ruins2_04', player) and ((state.count('LEFTDASH', player) or state.count('LEFTCLAW', player)) and (state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Ruins2_04[door_Ruin_House_02]', player) or (state.count('Ruins2_04[door_Ruin_Elevator]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))))) + fn("Ruins2_04[right2]", lambda state: state.count('Ruins2_04[right2]', player) or state.count('Ruins2_04', player)) + fn("Ruins2_04[door_Ruin_House_01]", lambda state: state.count('Ruins2_04[door_Ruin_House_01]', player) or (state.count('Ruins2_04', player) and ((state.count('LEFTDASH', player) or state.count('LEFTCLAW', player)) and (state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Ruins2_04[right1]', player) or state.count('Ruins2_04[door_Ruin_House_02]', player) or (state.count('Ruins2_04[door_Ruin_Elevator]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('RIGHTSUPERDASH', player)))))) + fn("Ruins2_04[door_Ruin_House_02]", lambda state: state.count('Ruins2_04[door_Ruin_House_02]', player) or (state.count('Ruins2_04', player) and ((state.count('LEFTDASH', player) or state.count('LEFTCLAW', player)) and (state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Ruins2_04[right1]', player) or (state.count('Ruins2_04[door_Ruin_Elevator]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))))) + fn("Ruins2_04[door_Ruin_House_03]", lambda state: state.count('Ruins2_04[door_Ruin_House_03]', player) or (state.count('Ruins2_04', player) and state.count('Opened_Emilitia_Door', player))) + fn("Ruins2_04[door_Ruin_Elevator]", lambda state: state.count('Ruins2_04[door_Ruin_Elevator]', player) or (state.count('Ruins2_04', player) and state.count('SIMPLE', player) > 3 and ((state.count('LEFTDASH', player) or state.count('LEFTCLAW', player)) and (state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Ruins2_04[right1]', player) or state.count('Ruins2_04[door_Ruin_House_02]', player)))) + fn("Ruins2_05[left1]", lambda state: state.count('Ruins2_05[left1]', player) or state.count('Ruins2_05[top1]', player) or (state.count('Ruins2_05[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Ruins2_05[top1]", lambda state: state.count('Ruins2_05[top1]', player) or ((state.count('Ruins2_05[left1]', player) or state.count('Ruins2_05[bot1]', player)) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Ruins2_05[bot1]", lambda state: state.count('Ruins2_05[bot1]', player) or state.count('Ruins2_05[left1]', player) or state.count('Ruins2_05[top1]', player)) + fn("Ruins2_06[left1]", lambda state: state.count('Ruins2_06[left1]', player) or state.count('Ruins2_06[left1]', player) or state.count('Ruins2_06[top1]', player) or (state.count('Ruins2_06[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('Ruins2_06[right2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('Ruins2_06[left2]', player) and (state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state._hk_option(player, 'PreciseMovement'))) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Ruins2_06[left2]", lambda state: state.count('Ruins2_06[left2]', player) or ((state.count('Ruins2_06[left1]', player) or state.count('Ruins2_06[top1]', player) or state.count('Ruins2_06[right1]', player) or state.count('Ruins2_06[right2]', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state.count('WINGS', player) or state.count('SWIM', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DifficultSkips')) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)))) + fn("Ruins2_06[right1]", lambda state: state.count('Ruins2_06[right1]', player) or state.count('Ruins2_06[left1]', player) or state.count('Ruins2_06[top1]', player) or state.count('Ruins2_06[right1]', player) or (state.count('Ruins2_06[right2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) or state._hk_option(player, 'EnemyPogos'))) or (state.count('Ruins2_06[left2]', player) and (state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state._hk_option(player, 'PreciseMovement'))) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) or state._hk_option(player, 'EnemyPogos')))) + fn("Ruins2_06[right2]", lambda state: state.count('Ruins2_06[right2]', player) or state.count('Ruins2_06[left1]', player) or state.count('Ruins2_06[top1]', player) or state.count('Ruins2_06[right1]', player) or state.count('Ruins2_06[right2]', player) or (state.count('Ruins2_06[left2]', player) and (state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state._hk_option(player, 'PreciseMovement'))))) + fn("Ruins2_06[top1]", lambda state: state.count('Ruins2_06[top1]', player) or state.count('Ruins2_06[left1]', player) or state.count('Ruins2_06[top1]', player) or (state.count('Ruins2_06[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('Ruins2_06[right2]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('Ruins2_06[left2]', player) and (state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state._hk_option(player, 'PreciseMovement'))) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Ruins2_07[right1]", lambda state: state.count('Ruins2_07[right1]', player) or (state.count('Ruins2_07[left1]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'AcidSkips') and state.count('RIGHTDASH', player) and state.count('RIGHTCLAW', player) and state.count('WINGS', player) and ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True or ((state.count('Sharp_Shadow', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) and state.count('Can_Bench', player)) and True))))) or state.count('Ruins2_07[right1]', player) or state.count('Ruins2_07[top1]', player)) + fn("Ruins2_07[left1]", lambda state: state.count('Ruins2_07[left1]', player) or state.count('Ruins2_07[left1]', player) or (state.count('Ruins2_07[right1]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) or (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'AcidSkips') and state.count('LEFTDASH', player) and state.count('RIGHTCLAW', player) and state.count('WINGS', player) and ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True or ((state.count('Sharp_Shadow', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and state.count('Can_Bench', player)) and True))))) or (state.count('Ruins2_07[top1]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) or (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'AcidSkips') and state.count('LEFTDASH', player) and state.count('RIGHTCLAW', player) and state.count('WINGS', player) and ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True or ((state.count('Sharp_Shadow', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and state.count('Can_Bench', player)) and True)))))) + fn("Ruins2_07[top1]", lambda state: state.count('Ruins2_07[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Ruins2_07[left1]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) or (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'AcidSkips') and state.count('RIGHTDASH', player) and state.count('RIGHTCLAW', player) and state.count('WINGS', player) and ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True or ((state.count('Sharp_Shadow', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) and state.count('Can_Bench', player)) and True)))) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or (state.count('Ruins2_07[right1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('SWIM', player) or state.count('LEFTDASH', player))))) or (state.count('Ruins2_07[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Ruins2_08[left1]", lambda state: state.count('Ruins2_08[left1]', player) or (state.count('Can_Stag', player) and state.count("King's_Station_Stag", player))) + fn("Ruins2_09[bot1]", lambda state: state.count('Ruins2_09[bot1]', player)) + fn("Ruins2_10[right1]", lambda state: state.count('Ruins2_10[right1]', player) or (state.count('Right_Elevator', player) and state.count('Opened_Resting_Grounds_Catacombs_Wall', player))) + fn("Ruins2_10[left1]", lambda state: state.count('Ruins2_10[left1]', player) or state.count('Right_Elevator', player)) + fn("Ruins2_10b[right1]", lambda state: state.count('Ruins2_10b[right1]', player) or ((state.count('Right_Elevator', player) or state.count('Ruins2_10b[right2]', player)) and (state.count('LEFTCLAW', player) and state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player) and state.count('LEFTDASH', player)) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)))) or (state.count('Ruins2_10b[left1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player) and state.count('LEFTDASH', player))))) + fn("Ruins2_10b[right2]", lambda state: state.count('Ruins2_10b[right2]', player) or state.count('Ruins2_10b[left1]', player) or state.count('Ruins2_10b[right1]', player) or state.count('Right_Elevator', player)) + fn("Ruins2_10b[left1]", lambda state: state.count('Ruins2_10b[left1]', player) or ((state.count('Right_Elevator', player) or state.count('Ruins2_10b[right1]', player) or state.count('Ruins2_10b[right2]', player)) and state.count('Opened_Pleasure_House_Wall', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state.count('Ruins2_10b[right1]', player)))) + fn("Ruins2_11_b[right1]", lambda state: state.count('Ruins2_11_b[right1]', player) or state.count('Ruins2_11_b[left1]', player)) + fn("Ruins2_11_b[left1]", lambda state: state.count('Ruins2_11_b[left1]', player) or (state.count('Ruins2_11_b[right1]', player) and state.count('LOVE', player))) + fn("Ruins2_11_b[bot1]", lambda state: state.count('Ruins2_11_b[bot1]', player) or state.count('Ruins2_11_b[right1]', player) or state.count('Ruins2_11_b[left1]', player)) + fn("Ruins2_11[right1]", lambda state: state.count('Ruins2_11[right1]', player)) + fn("Ruins2_Watcher_Room[bot1]", lambda state: state.count('Ruins2_Watcher_Room[bot1]', player)) + fn("Ruins_House_01[left1]", lambda state: state.count('Ruins_House_01[left1]', player)) + fn("Ruins_House_02[left1]", lambda state: state.count('Ruins_House_02[left1]', player)) + fn("Ruins_House_03[left1]", lambda state: state.count('Ruins_House_03[left1]', player) or (state.count('Ruins_House_03[left2]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Ruins_House_03[left2]", lambda state: state.count('Ruins_House_03[left2]', player) or state.count('Ruins_House_03[left1]', player)) + fn("Ruins_Elevator[left1]", lambda state: state.count('Ruins_Elevator[left1]', player) or state.count('Ruins_Elevator[left2]', player)) + fn("Ruins_Elevator[left2]", lambda state: state.count('Ruins_Elevator[left2]', player) or state.count('Ruins_Elevator[left1]', player)) + fn("Ruins_Bathhouse[door1]", lambda state: state.count('Ruins_Bathhouse[door1]', player) or state.count('Ruins_Bathhouse[right1]', player)) + fn("Ruins_Bathhouse[right1]", lambda state: state.count('Ruins_Bathhouse[right1]', player) or state.count('Ruins_Bathhouse[door1]', player)) + fn("RestingGrounds_02[right1]", lambda state: state.count('RestingGrounds_02[right1]', player) or state.count('RestingGrounds_02', player)) + fn("RestingGrounds_02[left1]", lambda state: state.count('RestingGrounds_02[left1]', player) or state.count('RestingGrounds_02', player)) + fn("RestingGrounds_02[bot1]", lambda state: state.count('RestingGrounds_02[bot1]', player) or (state.count('RestingGrounds_02', player) and state.count('Opened_Resting_Grounds_Floor', player))) + fn("RestingGrounds_02[top1]", lambda state: False) + fn("RestingGrounds_04[left1]", lambda state: state.count('RestingGrounds_04[left1]', player) or state.count('RestingGrounds_04[right1]', player)) + fn("RestingGrounds_04[right1]", lambda state: state.count('RestingGrounds_04[right1]', player) or state.count('RestingGrounds_04[left1]', player)) + fn("RestingGrounds_05[left1]", lambda state: state.count('RestingGrounds_05[left1]', player) or state.count('RestingGrounds_05', player)) + fn("RestingGrounds_05[left2]", lambda state: state.count('RestingGrounds_05[left2]', player) or state.count('RestingGrounds_05', player)) + fn("RestingGrounds_05[left3]", lambda state: state.count('RestingGrounds_05[left3]', player) or state.count('RestingGrounds_05', player)) + fn("RestingGrounds_05[right1]", lambda state: state.count('RestingGrounds_05[right1]', player) or (state.count('RestingGrounds_05', player) and state.count('Opened_Glade_Door', player))) + fn("RestingGrounds_05[right2]", lambda state: state.count('RestingGrounds_05[right2]', player) or state.count('RestingGrounds_05', player)) + fn("RestingGrounds_05[bot1]", lambda state: state.count('RestingGrounds_05[bot1]', player) or (state.count('RestingGrounds_05', player) and state.count('QUAKE', player))) + fn("RestingGrounds_06[left1]", lambda state: state.count('RestingGrounds_06[left1]', player) or state.count('RestingGrounds_06[right1]', player) or state.count('RestingGrounds_06[top1]', player)) + fn("RestingGrounds_06[right1]", lambda state: state.count('RestingGrounds_06[right1]', player) or state.count('RestingGrounds_06[left1]', player) or state.count('RestingGrounds_06[top1]', player)) + fn("RestingGrounds_06[top1]", lambda state: state.count('RestingGrounds_06[top1]', player) or ((state.count('RestingGrounds_06[left1]', player) or state.count('RestingGrounds_06[right1]', player)) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('LEFTDASH', player) or state._hk_option(player, 'EnemyPogos')))) + fn("RestingGrounds_07[right1]", lambda state: state.count('RestingGrounds_07[right1]', player)) + fn("RestingGrounds_08[left1]", lambda state: state.count('RestingGrounds_08[left1]', player)) + fn("RestingGrounds_09[left1]", lambda state: state.count('RestingGrounds_09[left1]', player) or (state.count('Can_Stag', player) and state.count('Resting_Grounds_Stag', player))) + fn("RestingGrounds_10[left1]", lambda state: state.count('RestingGrounds_10[left1]', player) or state.count('RestingGrounds_10', player)) + fn("RestingGrounds_10[top1]", lambda state: state.count('RestingGrounds_10[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement')))) + fn("RestingGrounds_10[top2]", lambda state: state.count('RestingGrounds_10[top2]', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and (state.count('RIGHTCLAW', player) or state._hk_option(player, 'PreciseMovement')))) or (state.count('RestingGrounds_10', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))))) + fn("RestingGrounds_12[bot1]", lambda state: state.count('RestingGrounds_12[bot1]', player) or state.count('RestingGrounds_12[door_Mansion]', player)) + fn("RestingGrounds_12[door_Mansion]", lambda state: state.count('RestingGrounds_12[door_Mansion]', player) or state.count('RestingGrounds_12[bot1]', player)) + fn("RestingGrounds_17[right1]", lambda state: state.count('RestingGrounds_17[right1]', player)) + fn("Room_Mansion[left1]", lambda state: state.count('Room_Mansion[left1]', player)) + fn("Mines_01[bot1]", lambda state: state.count('Mines_01[bot1]', player) or (state.count('Mines_01[left1]', player) and state.count('QUAKE', player))) + fn("Mines_01[left1]", lambda state: state.count('Mines_01[left1]', player)) + fn("Mines_02[top1]", lambda state: state.count('Mines_02[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Mines_02', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Mines_02[top2]", lambda state: state.count('Mines_02', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Mines_02[left1]", lambda state: state.count('Mines_02[left1]', player) or state.count('Mines_02', player)) + fn("Mines_02[right1]", lambda state: state.count('Mines_02[right1]', player) or state.count('Mines_02', player)) + fn("Mines_03[right1]", lambda state: state.count('Mines_03[right1]', player) or (state.count('Mines_03', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('Mines_03[top1]', player)))) + fn("Mines_03[bot1]", lambda state: state.count('Mines_03[bot1]', player) or state.count('Mines_03', player)) + fn("Mines_03[top1]", lambda state: state.count('Mines_03[top1]', player) or (state.count('Mines_03', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('Mines_03[right1]', player)) or (state._hk_option(player, 'SpikeTunnels') and state.count('WINGS', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)))))) + fn("Mines_04[right1]", lambda state: state.count('Mines_04[right1]', player) or state.count('Mines_04', player)) + fn("Mines_04[top1]", lambda state: state.count('Mines_04[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Mines_04[left1]", lambda state: state.count('Mines_04[left1]', player) or (state.count('Mines_04', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTDASH', player) and state._hk_option(player, 'EnemyPogos')) or state.count('Mines_04[top1]', player)))) + fn("Mines_04[left2]", lambda state: state.count('Mines_04[left2]', player) or state.count('Mines_04', player)) + fn("Mines_04[left3]", lambda state: state.count('Mines_04[left3]', player) or state.count('Mines_04', player)) + fn("Mines_05[right1]", lambda state: state.count('Mines_05[right1]', player) or (state.count('Mines_05', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and ((True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) or state._hk_option(player, 'BackgroundObjectPogos'))) or state.count('Mines_05[left1]', player) or state.count('Mines_05[top1]', player)))) + fn("Mines_05[top1]", lambda state: state.count('Mines_05[top1]', player) or (state.count('Mines_05', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and ((True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) or state._hk_option(player, 'BackgroundObjectPogos'))) or (state.count('RIGHTCLAW', player) and state.count('Mines_05[right1]', player)) or state.count('Mines_05[left1]', player)))) + fn("Mines_05[bot1]", lambda state: state.count('Mines_05[bot1]', player) or state.count('Mines_05', player)) + fn("Mines_05[left1]", lambda state: state.count('Mines_05[left1]', player) or (state.count('Mines_05', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and ((True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) or state._hk_option(player, 'BackgroundObjectPogos'))) or (state.count('RIGHTCLAW', player) and state.count('Mines_05[right1]', player)) or state.count('Mines_05[top1]', player)))) + fn("Mines_05[left2]", lambda state: state.count('Mines_05[left2]', player) or state.count('Mines_05', player)) + fn("Mines_06[right1]", lambda state: state.count('Mines_06[right1]', player) or state.count('Mines_06[left1]', player)) + fn("Mines_06[left1]", lambda state: state.count('Mines_06[left1]', player) or (state.count('Mines_06[right1]', player) and (state.count('LEFTSUPERDASH', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('WINGS', player) and state.count('LEFTDASH', player) and state._hk_option(player, 'BackgroundObjectPogos') and state._hk_option(player, 'PreciseMovement') and state._hk_option(player, 'ComplexSkips'))))) + fn("Mines_07[right1]", lambda state: state.count('Mines_07[right1]', player) or (state.count('Mines_07[left1]', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')))) + fn("Mines_07[left1]", lambda state: state.count('Mines_07[left1]', player) or (state.count('Mines_07[right1]', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')))) + fn("Mines_10[right1]", lambda state: state.count('Mines_10[right1]', player) or (state.count('Mines_10', player) and state.count('RIGHTCLAW', player) and state.count('RIGHTSUPERDASH', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTDASH', player) and state.count('WINGS', player))))) + fn("Mines_10[left1]", lambda state: state.count('Mines_10[left1]', player) or state.count('Mines_10', player)) + fn("Mines_10[bot1]", lambda state: state.count('Mines_10[bot1]', player) or state.count('Mines_10', player)) + fn("Mines_11[right1]", lambda state: state.count('Mines_11[right1]', player) or state.count('Mines_11', player)) + fn("Mines_11[top1]", lambda state: state.count('Mines_11[top1]', player) or state.count('Mines_11', player)) + fn("Mines_11[bot1]", lambda state: state.count('Mines_11[bot1]', player) or state.count('Mines_11', player)) + fn("Mines_13[right1]", lambda state: state.count('Mines_13[right1]', player) or (state.count('Mines_13[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or state.count('Mines_13[top1]', player)) + fn("Mines_13[top1]", lambda state: False) + fn("Mines_13[bot1]", lambda state: state.count('Mines_13[bot1]', player) or state.count('Mines_13[top1]', player) or state.count('Mines_13[right1]', player)) + fn("Mines_16[top1]", lambda state: state.count('Mines_16[top1]', player)) + fn("Mines_17[right1]", lambda state: state.count('Mines_17[right1]', player) or state.count('Mines_17[left1]', player)) + fn("Mines_17[left1]", lambda state: state.count('Mines_17[left1]', player) or state.count('Mines_17[right1]', player)) + fn("Mines_18[top1]", lambda state: state.count('Mines_18[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Mines_18', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player))) + fn("Mines_18[left1]", lambda state: state.count('Mines_18[left1]', player) or state.count('Mines_18', player)) + fn("Mines_18[right1]", lambda state: state.count('Mines_18[right1]', player) or state.count('Mines_18', player)) + fn("Mines_19[left1]", lambda state: state.count('Mines_19[left1]', player) or state.count('Mines_19[right1]', player)) + fn("Mines_19[right1]", lambda state: state.count('Mines_19[right1]', player) or state.count('Mines_19[left1]', player)) + fn("Mines_20[left1]", lambda state: state.count('Mines_20[left1]', player) or state.count('Mines_20', player)) + fn("Mines_20[left2]", lambda state: state.count('Mines_20[left2]', player) or state.count('Mines_20', player)) + fn("Mines_20[left3]", lambda state: state.count('Mines_20[left3]', player) or state.count('Mines_20', player) or state.count('Mines_20[bot1]', player) or state.count('Mines_20[left2]', player) or state.count('Mines_20[right2]', player)) + fn("Mines_20[bot1]", lambda state: state.count('Mines_20[bot1]', player) or state.count('Mines_20', player) or state.count('Mines_20[left3]', player) or state.count('Mines_20[left2]', player) or state.count('Mines_20[right2]', player)) + fn("Mines_20[right1]", lambda state: state.count('Mines_20[right1]', player) or (state.count('Mines_20', player) and (state.count('RIGHTCLAW', player) and state._hk_option(player, 'BackgroundObjectPogos') or (state.count('LEFTDASH', player) and state.count('LEFTCLAW', player) and state._hk_option(player, 'BackgroundObjectPogos')) or state.count('WINGS', player)))) + fn("Mines_20[right2]", lambda state: state.count('Mines_20[right2]', player) or state.count('Mines_20', player)) + fn("Mines_23[left1]", lambda state: state.count('Mines_23[left1]', player) or (state.count('Mines_23[right1]', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or state.count('LEFTSUPERDASH', player) or state.count('LEFTCLAW', player) or state._hk_option(player, 'PreciseMovement') or state._hk_option(player, 'EnemyPogos'))) or state.count('Mines_23[top1]', player) or (state.count('Mines_23[right2]', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('LEFTSUPERDASH', player))))) + fn("Mines_23[right1]", lambda state: state.count('Mines_23[right1]', player) or (state.count('Mines_23[top1]', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('RIGHTSUPERDASH', player) and state.count('RIGHTCLAW', player)))) or (state.count('Mines_23[left1]', player) and (state.count('WINGS', player) or (state.count('RIGHTDASH', player) and state.count('RIGHTCLAW', player)) or (state.count('RIGHTSUPERDASH', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player))))) or (state.count('Mines_23[right2]', player) and (state.count('WINGS', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player))) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))))) + fn("Mines_23[right2]", lambda state: state.count('Mines_23[right2]', player) or state.count('Mines_23[right1]', player) or (state.count('Mines_23[top1]', player) and (state.count('RIGHTDASH', player) or (state.count('RIGHTSUPERDASH', player) and state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or (state.count('Mines_23[left1]', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTSUPERDASH', player))))) + fn("Mines_23[top1]", lambda state: False) + fn("Mines_24[left1]", lambda state: state.count('Mines_24[left1]', player)) + fn("Mines_25[left1]", lambda state: state.count('Mines_25[left1]', player) or state.count('Mines_25[top1]', player)) + fn("Mines_25[top1]", lambda state: state.count('Mines_25[top1]', player) and (state.count('WINGS', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state._hk_option(player, 'PreciseMovement')) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'ComplexSkips'))) or (state.count('Mines_25[left1]', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player))) and (state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'ComplexSkips'))))) + fn("Mines_28[left1]", lambda state: state.count('Mines_28[left1]', player) or (state.count('Mines_28[door1]', player) and (state.count('LEFTSUPERDASH', player) or (state.count('WINGS', player) and state.count('LEFTDASH', player)) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True and (state.count('WINGS', player) or state.count('LEFTDASH', player)))))) + fn("Mines_28[bot1]", lambda state: state.count('Mines_28[bot1]', player) or state.count('Mines_28[left1]', player) or state.count('Mines_28[door1]', player)) + fn("Mines_28[door1]", lambda state: state.count('Mines_28[door1]', player) or (state.count('Mines_28[left1]', player) and (state.count('RIGHTSUPERDASH', player) or (state.count('WINGS', player) and state.count('RIGHTDASH', player)) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True and (state.count('WINGS', player) or state.count('RIGHTDASH', player)))))) + fn("Mines_29[left1]", lambda state: state.count('Mines_29[left1]', player) or state.count('Mines_29[right1]', player) or state.count('Mines_29[right2]', player)) + fn("Mines_29[right1]", lambda state: state.count('Mines_29[right1]', player) or state.count('Mines_29[left1]', player) or state.count('Mines_29[right2]', player)) + fn("Mines_29[right2]", lambda state: state.count('Mines_29[right2]', player) or state.count('Mines_29[left1]', player) or state.count('Mines_29[right1]', player)) + fn("Mines_30[left1]", lambda state: state.count('Mines_30[left1]', player) or (state.count('Mines_30[right1]', player) and state.count('LEFTSUPERDASH', player))) + fn("Mines_30[right1]", lambda state: state.count('Mines_30[right1]', player) or (state.count('Mines_30[left1]', player) and state.count('RIGHTSUPERDASH', player))) + fn("Mines_31[left1]", lambda state: state.count('Mines_31[left1]', player)) + fn("Mines_32[bot1]", lambda state: state.count('Mines_32[bot1]', player)) + fn("Mines_33[right1]", lambda state: state.count('Mines_33[right1]', player) or (state.count('Mines_33[left1]', player) and state.count('LANTERN', player))) + fn("Mines_33[left1]", lambda state: state.count('Mines_33[left1]', player) or (state.count('Mines_33[right1]', player) and state.count('LANTERN', player))) + fn("Mines_34[bot1]", lambda state: state.count('Mines_34[bot1]', player)) + fn("Mines_34[bot2]", lambda state: state.count('Mines_34[bot2]', player) or (state.count('Mines_34[bot1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player))) and (state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) or (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Mines_34[left1]", lambda state: state.count('Mines_34[left1]', player) or ((state.count('Mines_34[bot1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player))) and (state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) or (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) and (state.count('LEFTSUPERDASH', player) or (state.count('WINGS', player) and state.count('LEFTDASH', player))))) + fn("Mines_35[left1]", lambda state: state.count('Mines_35[left1]', player)) + fn("Mines_36[right1]", lambda state: state.count('Mines_36[right1]', player)) + fn("Mines_37[bot1]", lambda state: state.count('Mines_37[bot1]', player) or (state.count('Mines_37[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and state.count('RIGHTCLAW', player) and state._hk_option(player, 'ObscureSkips') and state._hk_option(player, 'PreciseMovement') and state._hk_option(player, 'ComplexSkips')) or ((state.count('Dashmaster', player) and state.count('Sprintmaster', player) and (state.count('NOTCHES', player) > state._hk_notches(player, 30, 36)) and state.count('Can_Bench', player)) and state._hk_option(player, 'ObscureSkips'))))) + fn("Mines_37[top1]", lambda state: state.count('Mines_37[top1]', player) or (state.count('Mines_37[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Fungus3_04[left1]", lambda state: state.count('Fungus3_04[left1]', player) or state.count('Fungus3_04[left2]', player)) + fn("Fungus3_04[left2]", lambda state: state.count('Fungus3_04[left2]', player) or state.count('Fungus3_04[left1]', player)) + fn("Fungus3_04[right1]", lambda state: state.count('Fungus3_04[right1]', player) or state.count('Fungus3_04', player)) + fn("Fungus3_04[right2]", lambda state: state.count('Fungus3_04[right2]', player) or state.count('Fungus3_04', player)) + fn("Fungus3_05[left1]", lambda state: state.count('Fungus3_05[left1]', player) or state.count('Fungus3_05[right1]', player)) + fn("Fungus3_05[right1]", lambda state: state.count('Fungus3_05[right1]', player) or (state.count('Fungus3_05[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Fungus3_05[right2]", lambda state: state.count('Fungus3_05[right2]', player) or ((state.count('Fungus3_05[left1]', player) or state.count('Fungus3_05[right1]', player)) and (state.count('LEFTDASH', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)) or ((state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and state.count('LEFTSUPERDASH', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))))) + fn("Fungus3_08[left1]", lambda state: state.count('Fungus3_08[left1]', player) or state.count('Fungus3_08[right1]', player) or state.count('Fungus3_08[top1]', player)) + fn("Fungus3_08[right1]", lambda state: state.count('Fungus3_08[right1]', player) or state.count('Fungus3_08[left1]', player) or state.count('Fungus3_08[top1]', player)) + fn("Fungus3_08[top1]", lambda state: state.count('Fungus3_08[top1]', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state._hk_option(player, 'PreciseMovement')))) or ((state.count('Fungus3_08[right1]', player) or state.count('Fungus3_08[left1]', player)) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and (state.count('RIGHTCLAW', player) or state._hk_option(player, 'EnemyPogos')))))) + fn("Fungus3_10[top1]", lambda state: state.count('Fungus3_10[top1]', player) or (state.count('Fungus3_10[bot1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player)) and state.count("Defeated_West_Queen's_Gardens_Arena", player))) + fn("Fungus3_10[bot1]", lambda state: state.count('Fungus3_10[bot1]', player) or (state.count('Fungus3_10[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player)) and state.count("Defeated_West_Queen's_Gardens_Arena", player))) + fn("Fungus3_11[left1]", lambda state: state.count('Fungus3_11[left1]', player) or state.count('Fungus3_11', player)) + fn("Fungus3_11[left2]", lambda state: state.count('Fungus3_11[left2]', player) or state.count('Fungus3_11', player)) + fn("Fungus3_11[right1]", lambda state: state.count('Fungus3_11[right1]', player) or state.count('Fungus3_11', player)) + fn("Fungus3_13[left1]", lambda state: state.count('Fungus3_13[left1]', player) or (state.count('Fungus3_13', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('Fungus3_13[left3]', player) and state._hk_option(player, 'EnemyPogos')) or state.count('Fungus3_13[right1]', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and state._hk_option(player, 'DifficultSkips') and (state.count('MASKSHARDS', player) > 15))))) + fn("Fungus3_13[left2]", lambda state: state.count('Fungus3_13[left2]', player) or (state.count('Fungus3_13', player) and state.count('Opened_Gardens_Stag_Exit', player))) + fn("Fungus3_13[left3]", lambda state: state.count('Fungus3_13[left3]', player) or (state.count('Fungus3_13', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('Fungus3_13[right1]', player) or state.count('Fungus3_13[left1]', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and state._hk_option(player, 'DifficultSkips') and (state.count('MASKSHARDS', player) > 15))))) + fn("Fungus3_13[bot1]", lambda state: state.count('Fungus3_13[bot1]', player) or state.count('Fungus3_13', player)) + fn("Fungus3_13[right1]", lambda state: state.count('Fungus3_13[right1]', player) or (state.count('Fungus3_13', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('Fungus3_13[left3]', player) and state._hk_option(player, 'EnemyPogos')) or state.count('Fungus3_13[left1]', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (True and state._hk_option(player, 'ShadeSkips') or ((state.count('DREAMNAIL', player) > 1 and state.count('ESSENCE', player)) and state._hk_option(player, 'ShadeSkips'))) and state._hk_option(player, 'DifficultSkips') and (state.count('MASKSHARDS', player) > 15))))) + fn("Fungus3_21[right1]", lambda state: state.count('Fungus3_21[right1]', player) or (state.count('Fungus3_21[top1]', player) and state.count('RIGHTDASH', player))) + fn("Fungus3_21[top1]", lambda state: state.count('Fungus3_21[top1]', player) or (state.count('Fungus3_21[right1]', player) and state.count('LEFTDASH', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("Fungus3_22[right1]", lambda state: state.count('Fungus3_22[right1]', player) or (state.count('Fungus3_22', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Fungus3_22[left1]", lambda state: state.count('Fungus3_22[left1]', player) or state.count('Fungus3_22', player)) + fn("Fungus3_22[bot1]", lambda state: state.count('Fungus3_22[bot1]', player) or state.count('Fungus3_22', player)) + fn("Fungus3_23[right1]", lambda state: state.count('Fungus3_23[right1]', player) or (state.count('Fungus3_23[left1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) and state.count('Defeated_Traitor_Lord', player))) + fn("Fungus3_23[left1]", lambda state: state.count('Fungus3_23[left1]', player) or (state.count('Fungus3_23[right1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('Defeated_Traitor_Lord', player))) + fn("Fungus3_34[right1]", lambda state: state.count('Fungus3_34[right1]', player) or state.count('Fungus3_34', player)) + fn("Fungus3_34[left1]", lambda state: state.count('Fungus3_34[left1]', player) or (state.count('Fungus3_34', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTSUPERDASH', player) or state._hk_option(player, 'BackgroundObjectPogos') or state._hk_option(player, 'EnemyPogos')))))) + fn("Fungus3_34[top1]", lambda state: state.count('Fungus3_34[top1]', player) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('Fungus3_34', player) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))))) + fn("Fungus3_39[right1]", lambda state: state.count('Fungus3_39[right1]', player) or state.count('Fungus3_39[left1]', player)) + fn("Fungus3_39[left1]", lambda state: state.count('Fungus3_39[left1]', player)) + fn("Fungus3_40[right1]", lambda state: state.count('Fungus3_40[right1]', player) or (state.count('Fungus3_40[top1]', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)) or state._hk_option(player, 'EnemyPogos') or state._hk_option(player, 'ShadeSkips') or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True))) or (state.count('Can_Stag', player) and state.count("Queen's_Gardens_Stag", player))) + fn("Fungus3_40[top1]", lambda state: state.count('Fungus3_40[top1]', player) or ((state.count('Fungus3_40[right1]', player) or (state.count('Can_Stag', player) and state.count("Queen's_Gardens_Stag", player))) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player)))) + fn("Fungus3_48[right1]", lambda state: state.count('Fungus3_48[right1]', player) or state.count('Fungus3_48[door1]', player)) + fn("Fungus3_48[right2]", lambda state: state.count('Fungus3_48[right2]', player) or (state.count('Fungus3_48[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Fungus3_48[door1]", lambda state: state.count('Fungus3_48[door1]', player) or state.count('Fungus3_48[right1]', player)) + fn("Fungus3_48[bot1]", lambda state: state.count('Fungus3_48[bot1]', player) or state.count('Fungus3_48[right2]', player)) + fn("Fungus3_49[right1]", lambda state: state.count('Fungus3_49[right1]', player)) + fn("Fungus3_50[right1]", lambda state: state.count('Fungus3_50[right1]', player)) + fn("Room_Queen[left1]", lambda state: state.count('Room_Queen[left1]', player)) + fn("Cliffs_01[right1]", lambda state: state.count('Cliffs_01[right1]', player) or (state.count('Cliffs_01', player) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos') or state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) or state.count('WINGS', player)))) + fn("Cliffs_01[right2]", lambda state: state.count('Cliffs_01[right2]', player) or (state.count('Cliffs_01', player) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos') or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Cliffs_01[right1]', player)))) + fn("Cliffs_01[right3]", lambda state: state.count('Cliffs_01[right3]', player) or state.count('Cliffs_01', player)) + fn("Cliffs_01[right4]", lambda state: state.count('Cliffs_01[right4]', player) or (state.count('Cliffs_01', player) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos') or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Cliffs_01[right1]', player) or state.count('Cliffs_01[right2]', player)))) + fn("Cliffs_02[right1]", lambda state: state.count('Cliffs_02[right1]', player) or (state.count('Cliffs_02', player) and (state.count('RIGHTSUPERDASH', player) or (state.count('WINGS', player) and state.count('RIGHTDASH', player))))) + fn("Cliffs_02[bot1]", lambda state: state.count('Cliffs_02[bot1]', player)) + fn("Cliffs_02[bot2]", lambda state: state.count('Cliffs_02[bot2]', player) or state.count('Cliffs_02', player) or (state.count('Cliffs_02[bot1]', player) and state.count('RIGHTCLAW', player))) + fn("Cliffs_02[door1]", lambda state: state.count('Cliffs_02[door1]', player) or state.count('Cliffs_02', player)) + fn("Cliffs_02[left1]", lambda state: state.count('Cliffs_02[left1]', player) or state.count('Cliffs_02', player)) + fn("Cliffs_02[left2]", lambda state: state.count('Cliffs_02[left2]', player) or (state.count('Cliffs_02', player) and state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))) + fn("Cliffs_03[right1]", lambda state: state.count('Cliffs_03[right1]', player) or ((state.count('STAGS', player) > 8 or state.count('Stag_Nest_Stag', player)) and state.count('Can_Stag', player))) + fn("Cliffs_04[right1]", lambda state: state.count('Cliffs_04[right1]', player) or (state.count('Cliffs_04[left1]', player) and (state._hk_option(player, 'DarkRooms') or state.count('LANTERN', player)))) + fn("Cliffs_04[left1]", lambda state: state.count('Cliffs_04[left1]', player) or (state.count('Cliffs_04[right1]', player) and (state._hk_option(player, 'DarkRooms') or state.count('LANTERN', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('QUAKE', player)))) + fn("Cliffs_05[left1]", lambda state: state.count('Cliffs_05[left1]', player)) + fn("Cliffs_06[left1]", lambda state: state.count('Cliffs_06[left1]', player)) + fn("Room_nailmaster[left1]", lambda state: state.count('Room_nailmaster[left1]', player)) + fn("White_Palace_01[left1]", lambda state: state.count('White_Palace_01[left1]', player) or state.count('White_Palace_01', player)) + fn("White_Palace_01[right1]", lambda state: state.count('White_Palace_01[right1]', player) or state.count('White_Palace_01', player)) + fn("White_Palace_01[top1]", lambda state: state.count('White_Palace_01[top1]', player) or (state.count('White_Palace_01', player) and state.count('Palace_Entrance_Lantern_Lit', player))) + fn("White_Palace_02[left1]", lambda state: state.count('White_Palace_02[left1]', player)) + fn("White_Palace_03_hub[left1]", lambda state: state.count('White_Palace_03_hub[left1]', player)) + fn("White_Palace_03_hub[left2]", lambda state: state.count('White_Palace_03_hub[left2]', player) or state.count('White_Palace_03_hub', player)) + fn("White_Palace_03_hub[right1]", lambda state: state.count('White_Palace_03_hub[right1]', player) or (state.count('White_Palace_03_hub', player) and (state.count('RIGHTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('LEFTCLAW', player)) or state.count('WINGS', player)))) + fn("White_Palace_03_hub[top1]", lambda state: state.count('White_Palace_03_hub[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('White_Palace_03_hub', player) and state.count('Palace_Atrium_Gates_Opened', player) and (state.count('WINGS', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('LEFTSUPERDASH', player))))) + fn("White_Palace_03_hub[bot1]", lambda state: state.count('White_Palace_03_hub[bot1]', player) or state.count('White_Palace_03_hub', player)) + fn("White_Palace_04[top1]", lambda state: state.count('White_Palace_04[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('White_Palace_04[right2]', player) and state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('WINGS', player))) + fn("White_Palace_04[right2]", lambda state: state.count('White_Palace_04[right2]', player) or (state.count('White_Palace_04[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('WINGS', player))) + fn("White_Palace_05[left1]", lambda state: state.count('White_Palace_05[left1]', player) or (state.count('White_Palace_05[right1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) + fn("White_Palace_05[left2]", lambda state: state.count('White_Palace_05[left2]', player) or state.count('White_Palace_05[right2]', player)) + fn("White_Palace_05[right1]", lambda state: state.count('White_Palace_05[right1]', player) or (state.count('White_Palace_05[left1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) + fn("White_Palace_05[right2]", lambda state: state.count('White_Palace_05[right2]', player) or state.count('White_Palace_05[left2]', player)) + fn("White_Palace_06[left1]", lambda state: state.count('White_Palace_06[left1]', player) or state.count('White_Palace_06[top1]', player) or state.count('White_Palace_06[bot1]', player) or state.count('Warp-Path_of_Pain_Complete', player)) + fn("White_Palace_06[top1]", lambda state: state.count('White_Palace_06[top1]', player) or ((state.count('White_Palace_06[left1]', player) or state.count('White_Palace_06[bot1]', player) or state.count('Warp-Path_of_Pain_Complete', player)) and (state.count('RIGHTCLAW', player) and (state.count('WINGS', player) or state.count('LEFTCLAW', player))))) + fn("White_Palace_06[bot1]", lambda state: state.count('White_Palace_06[bot1]', player) or state.count('White_Palace_06[left1]', player) or state.count('White_Palace_06[top1]', player) or state.count('Warp-Path_of_Pain_Complete', player)) + fn("White_Palace_07[top1]", lambda state: state.count('White_Palace_07[top1]', player) or (state.count('White_Palace_07[bot1]', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) and state.count('WINGS', player))) + fn("White_Palace_07[bot1]", lambda state: state.count('White_Palace_07[bot1]', player) or state.count('White_Palace_07[top1]', player)) + fn("White_Palace_08[left1]", lambda state: state.count('White_Palace_08[left1]', player) or state.count('White_Palace_08[right1]', player)) + fn("White_Palace_08[right1]", lambda state: state.count('White_Palace_08[right1]', player) or (state.count('White_Palace_08[left1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player))) + fn("White_Palace_09[right1]", lambda state: state.count('White_Palace_09[right1]', player)) + fn("White_Palace_11[door2]", lambda state: (state.count('White_Palace_11[door2]', player) or state.count('Warp-Palace_Grounds_to_White_Palace', player)) and ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))))) + fn("White_Palace_12[right1]", lambda state: state.count('White_Palace_12[right1]', player) or (state.count('White_Palace_12[bot1]', player) and (state._hk_option(player, 'SpikeTunnels') or state.count('RIGHTDASH', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player)) or state.count('WINGS', player)) and state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player))) + fn("White_Palace_12[bot1]", lambda state: state.count('White_Palace_12[bot1]', player)) + fn("White_Palace_13[right1]", lambda state: state.count('White_Palace_13[right1]', player) or ((state.count('White_Palace_13', player) or state.count('White_Palace_13[left1]', player)) and state.count('RIGHTSUPERDASH', player) and (state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTCLAW', player))))) + fn("White_Palace_13[left1]", lambda state: state.count('White_Palace_13[left1]', player) or (state.count('White_Palace_13', player) and state.count('RIGHTCLAW', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) + fn("White_Palace_13[left2]", lambda state: state.count('White_Palace_13[left2]', player) or (state.count('White_Palace_13', player) and (state.count('LEFTCLAW', player) and state.count('WINGS', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('LEFTSUPERDASH', player)) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player))))) + fn("White_Palace_13[left3]", lambda state: state.count('White_Palace_13[left3]', player) or (state.count('White_Palace_13', player) and state.count('WINGS', player))) + fn("White_Palace_14[bot1]", lambda state: state.count('White_Palace_14[bot1]', player) or (state.count('White_Palace_14[right1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) + fn("White_Palace_14[right1]", lambda state: state.count('White_Palace_14[right1]', player) or (state.count('White_Palace_14[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) + fn("White_Palace_15[left1]", lambda state: state.count('White_Palace_15[left1]', player) or state.count('White_Palace_15[right1]', player) or ((state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player))) and state.count('White_Palace_15[right2]', player))) + fn("White_Palace_15[right1]", lambda state: state.count('White_Palace_15[right1]', player)) + fn("White_Palace_15[right2]", lambda state: state.count('White_Palace_15[right2]', player) or state.count('White_Palace_15[right1]', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('White_Palace_15[left1]', player))) + fn("White_Palace_16[left1]", lambda state: state.count('White_Palace_16[left1]', player) or (state.count('White_Palace_16[left2]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("White_Palace_16[left2]", lambda state: state.count('White_Palace_16[left2]', player) or state.count('White_Palace_16[left1]', player)) + fn("White_Palace_17[right1]", lambda state: state.count('White_Palace_17[right1]', player) or (state.count('White_Palace_17[bot1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) + fn("White_Palace_17[bot1]", lambda state: state.count('White_Palace_17[bot1]', player)) + fn("White_Palace_18[top1]", lambda state: state.count('White_Palace_18[top1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) or (state.count('White_Palace_18[right1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) + fn("White_Palace_18[right1]", lambda state: state.count('White_Palace_18[right1]', player) or (state.count('White_Palace_18[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) + fn("White_Palace_19[top1]", lambda state: state.count('White_Palace_19[top1]', player) or (state.count('White_Palace_19[left1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and state.count('WINGS', player))) + fn("White_Palace_19[left1]", lambda state: state.count('White_Palace_19[left1]', player) or (state.count('White_Palace_19[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and state.count('WINGS', player))) + fn("White_Palace_20[bot1]", lambda state: state.count('White_Palace_20[bot1]', player)) + + # Locations + + fn("Sly", lambda state: state.count('Room_shop[left1]', player) and state.count('Rescued_Sly', player)) + fn("Sly_(Key)", lambda state: state.count('Room_shop[left1]', player) and state.count('Rescued_Sly', player) and state.count('SHOPKEY', player)) + fn("Iselda", lambda state: state.count('Room_mapper[left1]', player)) + fn("Salubra", lambda state: state.count('Room_Charm_Shop[left1]', player)) + fn("Leg_Eater", lambda state: state.count('Fungus2_26[left1]', player)) + fn("Grubfather", lambda state: state.count('Crossroads_38[right1]', player)) + fn("Seer", lambda state: state.count('RestingGrounds_07[right1]', player)) + fn("Lurien", lambda state: state.count('Ruins2_Watcher_Room[bot1]', player) and state.count('DREAMNAIL', player)) + fn("Monomon", lambda state: state.count('Fungus3_archive_02[top1]', player) and state.count('DREAMNAIL', player) and state.count('Defeated_Uumuu', player) and (state.count('ACID', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player))) or (state.count('LEFTSUPERDASH', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player))))) + fn("Herrah", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) and state.count('DREAMNAIL', player) and (state.count('RIGHTSLASH', player) or ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) or state.count('LEFTDASH', player) or state.count('Herrah', player) or ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("World_Sense", lambda state: state.count('Room_temple[left1]', player) and state.count('Opened_Black_Egg_Temple', player)) + fn("Mothwing_Cloak", lambda state: state.count('Fungus1_04[right1]', player) and state.count('Defeated_Hornet_1', player)) + fn("Mantis_Claw", lambda state: state.count('Fungus2_14', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or state._hk_option(player, 'EnemyPogos'))) + fn("Crystal_Heart", lambda state: state.count('Mines_31[left1]', player) and (state.count('RIGHTSUPERDASH', player) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))))) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Monarch_Wings", lambda state: state.count('Abyss_21[right1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Shade_Cloak", lambda state: (state.count('Abyss_10[left2]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) or (state.count('Abyss_10[left1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15))))) and (state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or (state.count('RIGHTDASH', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'PreciseMovement') or state._hk_option(player, 'BackgroundObjectPogos')))) or ((state.count('Abyss_10[left2]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) or state.count('Abyss_10[left1]', player)) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player) or ((state.count('WHITEFRAGMENT', player) > 2 or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 7)))) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state.count('SWIM', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player))))) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)) or (state.count('LEFTCLAW', player) and state.count('RIGHTDASH', player)) or (state._hk_option(player, 'BackgroundObjectPogos') and state.count('RIGHTDASH', player))))) + fn("Isma's_Tear", lambda state: state.count('Waterways_13[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))) or (state.count('Waterways_13[left2]', player) and (state.count('ACID', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) or (state._hk_option(player, 'AcidSkips') and state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) and (state.count('WINGS', player) or state.count('RIGHTCLAW', player)))))) + fn("Dream_Nail", lambda state: state.count('RestingGrounds_04[left1]', player) or state.count('RestingGrounds_04[right1]', player)) + fn("Vengeful_Spirit", lambda state: state.count('Crossroads_ShamanTemple[left1]', player)) + fn("Shade_Soul", lambda state: state.count('Ruins1_31b[right1]', player) or (state.count('Ruins1_31b[right2]', player) and state.count('Defeated_Elegant_Warrior', player))) + fn("Desolate_Dive", lambda state: state.count('Ruins1_24[right1]', player) and state.count('Defeated_Soul_Master', player)) + fn("Descending_Dark", lambda state: state.count('Mines_35[left1]', player) and state.count('QUAKE', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'PreciseMovement') and (state.count('RIGHTDASH', player) or (state._hk_option(player, 'DifficultSkips') and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))))) or state.count('WINGS', player))) + fn("Howling_Wraiths", lambda state: state.count('Room_Fungus_Shaman[left1]', player)) + fn("Abyss_Shriek", lambda state: state.count('Abyss_12[right1]', player) and state.count('SCREAM', player)) + fn("Cyclone_Slash", lambda state: state.count('Room_nailmaster[left1]', player)) + fn("Dash_Slash", lambda state: state.count('Room_nailmaster_03[left1]', player) and state.count('Ruins1_05b[top1]', player)) + fn("Great_Slash", lambda state: state.count('Room_nailmaster_02[left1]', player)) + fn("Focus", lambda state: state.count('Tutorial_01', player)) + fn("Baldur_Shell", lambda state: ((state.count('FIREBALL', player) or state.count('QUAKE', player) or (state.count('Glowing_Womb', player) and state.count('Can_Bench', player)) or ((state.count('Weaversong', player) and state.count('Can_Bench', player) or ((state.count('Spore_Shroom', player) and state.count('Can_Bench', player)) and state.count('FOCUS', player))) and state._hk_option(player, 'ObscureSkips')) or (state.count('CYCLONE', player) and state._hk_option(player, 'DifficultSkips'))) or ((state.count("Grubberfly's_Elegy", player) and state.count('Can_Bench', player)) and state.count('RIGHTSLASH', player)) or (state.count('Dash_Slash', player) and state.count('RIGHTDASH', player)) or (((state.count('Mark_of_Pride', player) and state.count('Can_Bench', player)) and state.count('RIGHTSLASH', player) or (state.count('RIGHTDASH', player) and state.count('RIGHTSLASH', player))) and state._hk_option(player, 'DifficultSkips'))) and (state.count('Fungus1_28[left1]', player) or (state.count('Fungus1_28[left2]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'ShadeSkips'))))) + fn("Fury_of_the_Fallen", lambda state: state.count('Tutorial_01', player)) + fn("Lifeblood_Core", lambda state: state.count('Abyss_08[right1]', player) and (state._hk_option(player, 'PreciseMovement') or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('WINGS', player)))) + fn("Defender's_Crest", lambda state: state.count('Waterways_05[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('Defeated_Dung_Defender', player)) + fn("Flukenest", lambda state: state.count('Waterways_12[right1]', player) and (state.count('SWIM', player) or state.count('LEFTSUPERDASH', player)) and state.count('Defeated_Flukemarm', player)) + fn("Thorns_of_Agony", lambda state: state.count('Fungus1_14[left1]', player) and (state.count('RIGHTDASH', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)))) + fn("Mark_of_Pride", lambda state: state.count('Fungus2_31[left1]', player) and state.count('Defeated_Mantis_Lords', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'ShadeSkips')))) + fn("Sharp_Shadow", lambda state: state.count('Deepnest_44[top1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player) or state.count('MASKSHARDS', player) > 15)) + fn("Spore_Shroom", lambda state: (state.count('Fungus2_20[left1]', player) or state.count('Fungus2_20[right1]', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and (state.count('ACID', player) or state.count('RIGHTDASH', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)))) + fn("Soul_Catcher", lambda state: state.count('Crossroads_ShamanTemple[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or ((state.count('FIREBALL', player) or state.count('QUAKE', player) or (state.count('Glowing_Womb', player) and state.count('Can_Bench', player)) or ((state.count('Weaversong', player) and state.count('Can_Bench', player) or ((state.count('Spore_Shroom', player) and state.count('Can_Bench', player)) and state.count('FOCUS', player))) and state._hk_option(player, 'ObscureSkips')) or (state.count('CYCLONE', player) and state._hk_option(player, 'DifficultSkips'))) or ((state.count("Grubberfly's_Elegy", player) and state.count('Can_Bench', player)) and state.count('LEFTSLASH', player)) or (state.count('Dash_Slash', player) and state.count('LEFTDASH', player)) or (((state.count('Mark_of_Pride', player) and state.count('Can_Bench', player)) and state.count('LEFTSLASH', player) or (state.count('LEFTDASH', player) and state.count('LEFTSLASH', player))) and state._hk_option(player, 'DifficultSkips'))) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips'))) and (((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or (((state.count('FIREBALL', player) or state.count('QUAKE', player) or (state.count('Glowing_Womb', player) and state.count('Can_Bench', player)) or ((state.count('Weaversong', player) and state.count('Can_Bench', player) or ((state.count('Spore_Shroom', player) and state.count('Can_Bench', player)) and state.count('FOCUS', player))) and state._hk_option(player, 'ObscureSkips')) or (state.count('CYCLONE', player) and state._hk_option(player, 'DifficultSkips'))) or ((state.count("Grubberfly's_Elegy", player) and state.count('Can_Bench', player)) and state.count('LEFTSLASH', player)) or (state.count('Dash_Slash', player) and state.count('LEFTDASH', player)) or (((state.count('Mark_of_Pride', player) and state.count('Can_Bench', player)) and state.count('LEFTSLASH', player) or (state.count('LEFTDASH', player) and state.count('LEFTSLASH', player))) and state._hk_option(player, 'DifficultSkips'))) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player))) and state._hk_option(player, 'ObscureSkips')))) + fn("Soul_Eater", lambda state: state.count('RestingGrounds_10', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Glowing_Womb", lambda state: state.count('Crossroads_22[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'BackgroundObjectPogos') or state._hk_option(player, 'EnemyPogos'))) + fn("Nailmaster's_Glory", lambda state: state.count('Room_shop[left1]', player) and state.count('Rescued_Sly', player) and state.count('Cyclone_Slash', player) and state.count('Dash_Slash', player) and state.count('Great_Slash', player)) + fn("Joni's_Blessing", lambda state: state.count('Cliffs_05[left1]', player)) + fn("Shape_of_Unn", lambda state: state.count('Fungus1_Slug[right1]', player) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and state._hk_option(player, 'AcidSkips')))) + fn("Hiveblood", lambda state: state.count('Hive_05[left1]', player) and state.count('Defeated_Hive_Knight', player)) + fn("Dashmaster", lambda state: state.count('Fungus2_23', player)) + fn("Quick_Slash", lambda state: state.count('Deepnest_East_14b[top1]', player) or (state.count('Deepnest_East_14b[right1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))))) + fn("Spell_Twister", lambda state: state.count('Ruins1_30', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Deep_Focus", lambda state: state.count('Mines_36[right1]', player)) + fn("Queen_Fragment", lambda state: state.count('Room_Queen[left1]', player)) + fn("King_Fragment", lambda state: state.count('White_Palace_09[right1]', player) and state.count('LEFTSUPERDASH', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Void_Heart", lambda state: state.count('Abyss_15[top1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) and state.count('DREAMNAIL', player) and (state._hk_option(player, 'EnemyPogos') or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'ObscureSkips') and state.count('RIGHTCLAW', player)) or (state._hk_option(player, 'ObscureSkips') and state.count('LEFTCLAW', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player))))) + fn("Dreamshield", lambda state: state.count('RestingGrounds_17[right1]', player)) + fn("Weaversong", lambda state: state.count('Deepnest_45_v02[left1]', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos')))) + fn("Grimmchild", lambda state: state.count('Nightmare_Lantern_Lit', player) and state.count('Grimm_Main_Tent[left1]', player)) + fn("Unbreakable_Heart", lambda state: state.count('Grimm_Divine[left1]', player) and (state.count('Fragile_Heart', player) and state.count('Can_Bench', player) and (state.count('Can_Repair_Fragile_Charms', player) or state.count('Fragile_Heart', player) > 1))) + fn("Unbreakable_Greed", lambda state: state.count('Grimm_Divine[left1]', player) and (state.count('Fragile_Greed', player) and state.count('Can_Bench', player) and (state.count('Can_Repair_Fragile_Charms', player) or state.count('Fragile_Greed', player) > 1))) + fn("Unbreakable_Strength", lambda state: state.count('Grimm_Divine[left1]', player) and (state.count('Fragile_Strength', player) and state.count('Can_Bench', player) and (state.count('Can_Repair_Fragile_Charms', player) or state.count('Fragile_Strength', player) > 1))) + fn("City_Crest", lambda state: (state.count('Crossroads_10[left1]', player) or state.count('Crossroads_10[right1]', player)) and state.count('Defeated_False_Knight', player)) + fn("Tram_Pass", lambda state: state.count('Deepnest_26b[right2]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player))) + fn("Simple_Key-Basin", lambda state: state.count('Abyss_20[top1]', player) or state.count('Abyss_20[top2]', player)) + fn("Simple_Key-City", lambda state: (state.count('Ruins1_17[top1]', player) or state.count('Ruins1_17[right1]', player)) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Simple_Key-Lurker", lambda state: state.count('GG_Lurker[left1]', player) and (state.count('SWIM', player) or state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player))) and state.count('RIGHTCLAW', player) and state.count('Defeated_Pale_Lurker', player)) + fn("Shopkeeper's_Key", lambda state: state.count('Mines_11', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Love_Key", lambda state: state.count('Fungus3_39[left1]', player) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) or (state._hk_option(player, 'AcidSkips') and state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state.count('WINGS', player) and (state.count('Dashmaster', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))))) or (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'AcidSkips') and (state.count('Sharp_Shadow', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) and state.count('Can_Bench', player)) and state.count('WINGS', player)))) + fn("King's_Brand", lambda state: state.count('Room_Wyrm[right1]', player)) + fn("Godtuner", lambda state: (state.count('GG_Waterways[door1]', player) or (state.count('GG_Waterways[right1]', player) and (state.count('LEFTSUPERDASH', player) or state.count('SWIM', player)))) and state.count('SIMPLE', player) > 3) + fn("Collector's_Map", lambda state: state.count('Ruins2_11[right1]', player) and (state.count('LEFTCLAW', player) or ((state.count('WINGS', player) or state.count('RIGHTDASH', player)) and state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips'))) and state.count('Defeated_Collector', player)) + fn("Mask_Shard-Brooding_Mawlek", lambda state: (state.count('Crossroads_09[left1]', player) or state.count('Crossroads_09[right1]', player)) and state.count('Defeated_Brooding_Mawlek', player)) + fn("Mask_Shard-Crossroads_Goam", lambda state: (state.count('Crossroads_13[left1]', player) or state.count('Crossroads_13[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Mask_Shard-Stone_Sanctuary", lambda state: state.count('Fungus1_36[left1]', player)) + fn("Mask_Shard-Queen's_Station", lambda state: state.count('Fungus2_01', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) or state.count('WINGS', player) or (state.count('RIGHTDASH', player) and state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) and state._hk_option(player, 'ObscureSkips')))) + fn("Mask_Shard-Deepnest", lambda state: state.count('Fungus2_25[top2]', player)) + fn("Mask_Shard-Waterways", lambda state: state.count('Waterways_04b[left1]', player) and (state.count('SWIM', player) or (state.count('LEFTCLAW', player) and state.count('LEFTDASH', player))) or (state.count('Waterways_04b[right1]', player) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state.count('LEFTSUPERDASH', player))) and (state.count('SWIM', player) or (state.count('LEFTCLAW', player) and state.count('LEFTDASH', player)))) or (state.count('Waterways_04b[right2]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Mask_Shard-Enraged_Guardian", lambda state: state.count('Mines_32[bot1]', player) and state.count('Defeated_Enraged_Guardian', player)) + fn("Mask_Shard-Hive", lambda state: state.count('Hive_04[left1]', player) or state.count('Hive_04[left2]', player) or state.count('Hive_04[right1]', player)) + fn("Mask_Shard-Grey_Mourner", lambda state: state.count('Room_Mansion[left1]', player) and state.count('Fungus3_49[right1]', player) and state.count('QUAKE', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and state.count('ACID', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and (((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player))) + fn("Mask_Shard-Bretta", lambda state: state.count('Room_Bretta[right1]', player)) + fn("Vessel_Fragment-Greenpath", lambda state: state.count('Fungus1_13[right1]', player) and (state.count('LEFTCLAW', player) or (state._hk_option(player, 'DamageBoosts') and state.count('MASKSHARDS', player) > 7 and state.count('WINGS', player)) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))) or False) + fn("Vessel_Fragment-City", lambda state: state.count('Ruins2_09[bot1]', player) and state.count("Defeated_King's_Station_Arena", player)) + fn("Vessel_Fragment-Crossroads", lambda state: state.count('Crossroads_37[right1]', player)) + fn("Vessel_Fragment-Basin", lambda state: state.count('Abyss_04', player) and state.count('Ruins1_05b[top1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('Abyss_04[top1]', player) or state._hk_option(player, 'EnemyPogos'))))) + fn("Vessel_Fragment-Deepnest", lambda state: state.count('Deepnest_38[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Vessel_Fragment-Stag_Nest", lambda state: state.count('Cliffs_03[right1]', player) or ((state.count('STAGS', player) > 8 or state.count('Stag_Nest_Stag', player)) and state.count('Can_Stag', player))) + fn("Charm_Notch-Shrumal_Ogres", lambda state: (state.count('Fungus2_05[bot1]', player) or state.count('Fungus2_05[right1]', player)) and state.count('Defeated_Shrumal_Ogre_Arena', player)) + fn("Charm_Notch-Fog_Canyon", lambda state: state.count('Fungus3_28[right1]', player) and (state.count('ACID', player) or (state._hk_option(player, 'AcidSkips') and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips') or (state.count('WINGS', player) and state.count('LEFTDASH', player)) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) or (state._hk_option(player, 'DamageBoosts') and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))))) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player)) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos')))) + fn("Charm_Notch-Colosseum", lambda state: state.count('Room_Colosseum_01[left1]', player) and state.count('Can_Replenish_Geo', player) and state.count('Defeated_Colosseum_1', player)) + fn("Charm_Notch-Grimm", lambda state: state.count('Grimm_Main_Tent[left1]', player) and state.count('Defeated_Grimm', player)) + fn("Pale_Ore-Basin", lambda state: state.count('Abyss_17[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or (state.count('LEFTDASH', player) and state._hk_option(player, 'ObscureSkips')) or (state._hk_option(player, 'DamageBoosts') and state.count('MASKSHARDS', player) > 7))) + fn("Pale_Ore-Crystal_Peak", lambda state: state.count('Mines_34[bot1]', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player))) and (state.count('WINGS', player) or (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) + fn("Pale_Ore-Nosk", lambda state: state.count('Deepnest_32[left1]', player) and state.count('Defeated_Nosk', player)) + fn("Pale_Ore-Colosseum", lambda state: state.count('Room_Colosseum_01[left1]', player) and state.count('Can_Replenish_Geo', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or ((state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')) and state.count('WINGS', player))) and state.count('Defeated_Colosseum_2', player)) + fn("Geo_Chest-False_Knight", lambda state: (state.count('Crossroads_10[left1]', player) or state.count('Crossroads_10[right1]', player)) and state.count('Defeated_False_Knight', player)) + fn("Geo_Chest-Soul_Master", lambda state: state.count('Ruins1_32[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) + fn("Geo_Chest-Watcher_Knights", lambda state: state.count('Ruins2_03[top1]', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('Defeated_Watcher_Knights', player) and state.count('Ruins2_03[bot1]', player))) + fn("Geo_Chest-Greenpath", lambda state: state.count('Fungus1_13[right1]', player)) + fn("Geo_Chest-Mantis_Lords", lambda state: state.count('Fungus2_31[left1]', player) and state.count('Defeated_Mantis_Lords', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Geo_Chest-Resting_Grounds", lambda state: state.count('RestingGrounds_10', player)) + fn("Geo_Chest-Crystal_Peak", lambda state: ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state.count("Grubberfly's_Elegy", player) and state.count('LEFTSLASH', player) and state._hk_option(player, 'ShadeSkips') and state._hk_option(player, 'ComplexSkips'))) and (state.count('Mines_37[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and state.count('RIGHTCLAW', player) and state._hk_option(player, 'ObscureSkips') and state._hk_option(player, 'PreciseMovement')) or ((state.count('Dashmaster', player) and state.count('Sprintmaster', player) and (state.count('NOTCHES', player) > state._hk_notches(player, 30, 36)) and state.count('Can_Bench', player)) and state._hk_option(player, 'ObscureSkips'))) or state.count('Mines_37[bot1]', player))) + fn("Geo_Chest-Weavers_Den", lambda state: state.count('Deepnest_45_v02[left1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')))) and (state.count('LEFTDASH', player) and state.count('WINGS', player) or state.count('LEFTSUPERDASH', player)) and (state.count('LEFTDASH', player) or state._hk_option(player, 'SpikeTunnels')) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('LEFTSLASH', player) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player))) + fn("Geo_Chest-Junk_Pit_1", lambda state: state.count('GG_Waterways[door1]', player) or (state.count('GG_Waterways[right1]', player) and (state.count('LEFTSUPERDASH', player) or state.count('SWIM', player)))) + fn("Geo_Chest-Junk_Pit_2", lambda state: state.count('GG_Waterways[door1]', player) or (state.count('GG_Waterways[right1]', player) and (state.count('LEFTSUPERDASH', player) or state.count('SWIM', player)))) + fn("Geo_Chest-Junk_Pit_3", lambda state: state.count('GG_Waterways[door1]', player) or (state.count('GG_Waterways[right1]', player) and (state.count('LEFTSUPERDASH', player) or state.count('SWIM', player)))) + fn("Geo_Chest-Junk_Pit_5", lambda state: state.count('GG_Waterways[door1]', player) or (state.count('GG_Waterways[right1]', player) and (state.count('LEFTSUPERDASH', player) or state.count('SWIM', player)))) + fn("Lumafly_Escape-Junk_Pit_Chest_4", lambda state: state.count('GG_Waterways[door1]', player) or (state.count('GG_Waterways[right1]', player) and (state.count('LEFTSUPERDASH', player) or state.count('SWIM', player)))) + fn("Rancid_Egg-Sheo", lambda state: state.count('Fungus1_15[right1]', player) or state.count('Fungus1_15[door1]', player)) + fn("Rancid_Egg-Fungal_Core", lambda state: state.count('Fungus2_29[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or (state.count('Fungus2_29[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) + fn("Rancid_Egg-Queen's_Gardens", lambda state: state.count('Fungus3_34', player) and (state.count('RIGHTCLAW', player) and state._hk_option(player, 'BackgroundObjectPogos') or state.count('WINGS', player) or (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) or (state.count('Fungus3_34[left1]', player) and state.count('RIGHTDASH', player))) + fn("Rancid_Egg-Blue_Lake", lambda state: state.count('Crossroads_50[left1]', player) and state.count('RIGHTSUPERDASH', player) or ((state.count('Crossroads_50[left1]', player) or state.count('Crossroads_50[right1]', player)) and state.count('SWIM', player) and state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))) + fn("Rancid_Egg-Crystal_Peak_Dive_Entrance", lambda state: state.count('Mines_01[left1]', player) and state.count('QUAKE', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player))) or (state.count('Mines_01[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player))) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'PreciseMovement')) or (state.count('LEFTCLAW', player) and state.count('WINGS', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))))) + fn("Rancid_Egg-Crystal_Peak_Dark_Room", lambda state: state.count('Mines_29[left1]', player) or state.count('Mines_29[right1]', player) or state.count('Mines_29[right2]', player)) + fn("Rancid_Egg-Crystal_Peak_Tall_Room", lambda state: state.count('Mines_20', player) and state.count('QUAKE', player)) + fn("Rancid_Egg-City_of_Tears_Left", lambda state: state.count('Ruins1_05c', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'BackgroundObjectPogos'))) + fn("Rancid_Egg-City_of_Tears_Pleasure_House", lambda state: state.count('Ruins_Elevator[left1]', player) or state.count('Ruins_Elevator[left2]', player)) + fn("Rancid_Egg-Beast's_Den", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Rancid_Egg-Dark_Deepnest", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_39[left1]', player) or state.count('Deepnest_39[top1]', player) or state.count('Deepnest_39[door1]', player) or (state.count('Deepnest_39[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player)) or ((state.count('WINGS', player) or state.count('RIGHTCLAW', player)) and state._hk_option(player, 'EnemyPogos')))))) + fn("Rancid_Egg-Weaver's_Den", lambda state: state.count('Deepnest_45_v02[left1]', player) and (state._hk_option(player, 'SpikeTunnels') or state.count('LEFTDASH', player))) + fn("Rancid_Egg-Near_Quick_Slash", lambda state: state.count('Deepnest_East_14[top2]', player) and state.count('QUAKE', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Rancid_Egg-Upper_Kingdom's_Edge", lambda state: state.count('Deepnest_East_07', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Rancid_Egg-Waterways_East", lambda state: state.count('Waterways_07', player)) + fn("Rancid_Egg-Waterways_Main", lambda state: state.count('Waterways_02', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Waterways_02[top1]', player) or (state.count('QUAKE', player) and state.count('Waterways_02[top3]', player)))) + fn("Rancid_Egg-Waterways_West_Bluggsac", lambda state: state.count('Waterways_04[right1]', player) and (state.count('SWIM', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state._hk_option(player, 'EnemyPogos')) or (((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) and state.count('WINGS', player)) or (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'FireballSkips') and state._hk_option(player, 'AcidSkips') and state.count('FIREBALL', player) and state.count('LEFTDASH', player) and state.count('RIGHTCLAW', player) and state.count('WINGS', player))) or (state.count('Waterways_04[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) and (state.count('SWIM', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state._hk_option(player, 'EnemyPogos')) or (((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) and state.count('WINGS', player)) or (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'FireballSkips') and state._hk_option(player, 'AcidSkips') and state.count('FIREBALL', player) and state.count('LEFTDASH', player) and state.count('RIGHTCLAW', player) and state.count('WINGS', player)))) or (state.count('Waterways_04[left2]', player) and (state.count('SWIM', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state._hk_option(player, 'EnemyPogos')) or (((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')) and state.count('WINGS', player))))) + fn("Rancid_Egg-Waterways_West_Pickup", lambda state: state.count('Waterways_04b[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips')))) + fn("Rancid_Egg-Tuk_Defender's_Crest", lambda state: state.count('Waterways_03[left1]', player) and (state.count("Defender's_Crest", player) and state.count('Can_Bench', player))) + fn("Wanderer's_Journal-Cliffs", lambda state: state.count('Cliffs_01[right1]', player) or state.count('Cliffs_01[right2]', player) or (state.count('Cliffs_01[right3]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos')))) or state.count('Cliffs_01[right4]', player)) + fn("Wanderer's_Journal-Greenpath_Stag", lambda state: state.count('Fungus1_22[left1]', player) or state.count('Fungus1_22[top1]', player)) + fn("Wanderer's_Journal-Greenpath_Lower", lambda state: state.count('Fungus1_11', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) + fn("Wanderer's_Journal-Fungal_Wastes_Thorns_Gauntlet", lambda state: state.count('Fungus2_04', player) and (state.count('LEFTCLAW', player) and state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('WINGS', player) or state.count('RIGHTDASH', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player)) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))))))) + fn("Wanderer's_Journal-Above_Mantis_Village", lambda state: state.count('Fungus2_17', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) + fn("Wanderer's_Journal-Crystal_Peak_Crawlers", lambda state: state.count('Mines_20', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Wanderer's_Journal-Resting_Grounds_Catacombs", lambda state: state.count('RestingGrounds_10', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Wanderer's_Journal-King's_Station", lambda state: state.count('Ruins2_05[bot1]', player) and state._hk_option(player, 'EnemyPogos') or state.count('Ruins2_05[left1]', player) or state.count('Ruins2_05[top1]', player)) + fn("Wanderer's_Journal-Pleasure_House", lambda state: state.count('Ruins_Elevator[left1]', player) or state.count('Ruins_Elevator[left2]', player)) + fn("Wanderer's_Journal-City_Storerooms", lambda state: state.count('Ruins1_28', player) or state.count('Ruins1_28[left1]', player)) + fn("Wanderer's_Journal-Ancient_Basin", lambda state: (state.count('Abyss_02[right1]', player) or (state.count('Abyss_02[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) and (state.count('RIGHTDASH', player) or state._hk_option(player, 'SpikeTunnels'))) + fn("Wanderer's_Journal-Kingdom's_Edge_Entrance", lambda state: state.count('Deepnest_East_07[bot1]', player)) + fn("Wanderer's_Journal-Kingdom's_Edge_Camp", lambda state: state.count('Deepnest_East_13[bot1]', player)) + fn("Wanderer's_Journal-Kingdom's_Edge_Requires_Dive", lambda state: state.count('Deepnest_East_18', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Deepnest_East_18[top1]', player)) and state.count('QUAKE', player)) + fn("Hallownest_Seal-Crossroads_Well", lambda state: (state.count('Crossroads_01[left1]', player) or state.count('Crossroads_01[top1]', player) or state.count('Crossroads_01[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and (state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15 or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) or (state.count('LEFTDASH', player) or state.count('RIGHTDASH', player))) or (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player))))))) or ((state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player))))) and (state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))))) + fn("Hallownest_Seal-Greenpath", lambda state: (state.count('Fungus1_10[left1]', player) or state.count('Fungus1_10[top1]', player) or state.count('Fungus1_10[right1]', player)) and (state.count('ACID', player) or (state.count('WINGS', player) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) or (state.count('LEFTDASH', player) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)) or (state.count('Dashmaster', player) and state._hk_option(player, 'ObscureSkips')) or state.count('WINGS', player) or state.count('LEFTCLAW', player))) or state.count('LEFTSUPERDASH', player))) + fn("Hallownest_Seal-Fog_Canyon_West", lambda state: state.count('Fungus3_30[bot1]', player)) + fn("Hallownest_Seal-Fog_Canyon_East", lambda state: (state.count('Fungus3_26', player) and (state.count('Fungus3_26[top1]', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or (state.count('RIGHTDASH', player) and (state.count('LEFTDASH', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) and state._hk_option(player, 'EnemyPogos')))) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('LEFTSUPERDASH', player) or state.count('LEFTDASH', player) or (state._hk_option(player, 'DamageBoosts') and state.count('MASKSHARDS', player) > 7))) + fn("Hallownest_Seal-Queen's_Station", lambda state: state.count('Fungus2_34[right1]', player) and state.count('WINGS', player)) + fn("Hallownest_Seal-Fungal_Wastes_Sporgs", lambda state: state.count('Fungus2_03', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')) and (state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('LEFTCLAW', player) or state._hk_option(player, 'PreciseMovement') or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips')))) + fn("Hallownest_Seal-Mantis_Lords", lambda state: state.count('Fungus2_31[left1]', player) and state.count('Defeated_Mantis_Lords', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Hallownest_Seal-Resting_Grounds_Catacombs", lambda state: state.count('RestingGrounds_10', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Hallownest_Seal-King's_Station", lambda state: state.count('Ruins2_08[left1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTDASH', player)))) + fn("Hallownest_Seal-City_Rafters", lambda state: state.count('Ruins1_03', player)) + fn("Hallownest_Seal-Soul_Sanctum", lambda state: state.count('Ruins1_32[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('QUAKE', player)) + fn("Hallownest_Seal-Watcher_Knight", lambda state: (state.count('Ruins2_03[top1]', player) or (state.count('Ruins2_03[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('Defeated_Watcher_Knights', player))) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)) or (state.count('RIGHTDASH', player) and state._hk_option(player, 'BackgroundObjectPogos')))) + fn("Hallownest_Seal-Deepnest_By_Mantis_Lords", lambda state: state.count('Deepnest_16[bot1]', player) and (state.count('LEFTCLAW', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player)))) + fn("Hallownest_Seal-Beast's_Den", lambda state: state.count('Deepnest_Spider_Town[left1]', player)) + fn("Hallownest_Seal-Queen's_Gardens", lambda state: (state.count('Fungus3_48[right2]', player) or state.count('Fungus3_48[bot1]', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips')))) + fn("King's_Idol-Cliffs", lambda state: state.count('Cliffs_01', player)) + fn("King's_Idol-Crystal_Peak", lambda state: (state.count('Mines_30[right1]', player) or (state.count('RIGHTSUPERDASH', player) and state.count('Mines_30[left1]', player))) and (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state._hk_option(player, 'BackgroundObjectPogos') or state.count('WINGS', player))) + fn("King's_Idol-Glade_of_Hope", lambda state: state.count('RestingGrounds_08[left1]', player) and (state.count('SWIM', player) and state.count('LEFTCLAW', player) or (state.count('SWIM', player) and state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('RIGHTSUPERDASH', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player))) or (state.count('RIGHTSUPERDASH', player) and state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state.count('RIGHTDASH', player)) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state._hk_option(player, 'DifficultSkips') and (state.count('SWIM', player) or state.count('RIGHTSUPERDASH', player))))) + fn("King's_Idol-Dung_Defender", lambda state: state.count('Waterways_15[top1]', player)) + fn("King's_Idol-Great_Hopper", lambda state: state.count('Deepnest_East_08[top1]', player) or state.count('Deepnest_East_08[right1]', player)) + fn("King's_Idol-Pale_Lurker", lambda state: state.count('GG_Lurker[left1]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')))) + fn("King's_Idol-Deepnest", lambda state: state.count('Deepnest_33[top1]', player)) + fn("Arcane_Egg-Lifeblood_Core", lambda state: state.count('Abyss_08[right1]', player) and (state._hk_option(player, 'PreciseMovement') or state.count('LEFTDASH', player)) and (state.count('RIGHTSUPERDASH', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("Arcane_Egg-Shade_Cloak", lambda state: state.count('Abyss_10[left2]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) or (state.count('Abyss_10[left1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player) or ((state.count('WHITEFRAGMENT', player) > 2 or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 7))))and (state.count('SWIM', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))))) + fn("Arcane_Egg-Birthplace", lambda state: state.count('Abyss_15[top1]', player)) + fn("Whispering_Root-Crossroads", lambda state: state.count('Crossroads_07', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player))) and (state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) or (state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player)))))) and state.count('DREAMNAIL', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Whispering_Root-Greenpath", lambda state: state.count('Fungus1_13[left1]', player) and state.count('Fungus1_13[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or (state.count('MASKSHARDS', player) > 7 and state._hk_option(player, 'DamageBoosts'))))) and state.count('DREAMNAIL', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Great_Slash', player) or state.count('Cyclone_Slash', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('Dash_Slash', player)))) + fn("Whispering_Root-Leg_Eater", lambda state: (state.count('Fungus2_33[left1]', player) or state.count('Fungus2_33[right1]', player)) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Mantis_Village", lambda state: state.count('Fungus2_17', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Deepnest", lambda state: state.count('Deepnest_39', player) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Queens_Gardens", lambda state: state.count('Fungus3_11', player) and state.count('LEFTCLAW', player) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Kingdoms_Edge", lambda state: state.count('Deepnest_East_07', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Waterways", lambda state: state.count('Abyss_01[left3]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-City", lambda state: (state.count('Ruins1_17[top1]', player) or state.count('Ruins1_17[right1]', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) or state._hk_option(player, 'EnemyPogos')) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Resting_Grounds", lambda state: state.count('RestingGrounds_05', player) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Spirits_Glade", lambda state: state.count('RestingGrounds_08[left1]', player) and state.count('DREAMNAIL', player) and (state.count('WINGS', player) and (state.count('SWIM', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('RIGHTDASH', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('RIGHTSUPERDASH', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) or (state.count('LEFTCLAW', player) and state.count('SWIM', player) and state.count('RIGHTDASH', player)) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('RIGHTSUPERDASH', player) and state.count('RIGHTDASH', player)) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state._hk_option(player, 'DifficultSkips') and (state.count('SWIM', player) or state.count('RIGHTSUPERDASH', player))))) + fn("Whispering_Root-Crystal_Peak", lambda state: (state.count('Mines_23[left1]', player) or state.count('Mines_23[top1]', player) or state.count('Mines_23[right1]', player) or state.count('Mines_23[right2]', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or state.count('WINGS', player)) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Howling_Cliffs", lambda state: state.count('Cliffs_01', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos'))) and state.count('DREAMNAIL', player)) + fn("Whispering_Root-Ancestral_Mound", lambda state: state.count('Crossroads_ShamanTemple[left1]', player) and (state.count('WINGS', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state._hk_option(player, 'EnemyPogos'))) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or ((state.count('FIREBALL', player) or state.count('QUAKE', player) or (state.count('Glowing_Womb', player) and state.count('Can_Bench', player)) or ((state.count('Weaversong', player) and state.count('Can_Bench', player) or ((state.count('Spore_Shroom', player) and state.count('Can_Bench', player)) and state.count('FOCUS', player))) and state._hk_option(player, 'ObscureSkips')) or (state.count('CYCLONE', player) and state._hk_option(player, 'DifficultSkips'))) or ((state.count("Grubberfly's_Elegy", player) and state.count('Can_Bench', player)) and state.count('LEFTSLASH', player)) or (state.count('Dash_Slash', player) and state.count('LEFTDASH', player)) or (((state.count('Mark_of_Pride', player) and state.count('Can_Bench', player)) and state.count('LEFTSLASH', player) or (state.count('LEFTDASH', player) and state.count('LEFTSLASH', player))) and state._hk_option(player, 'DifficultSkips')))) and state.count('DREAMNAIL', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Whispering_Root-Hive", lambda state: (state.count('Hive_02[left1]', player) or state.count('Hive_02[left2]', player) or state.count('Hive_02[left3]', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTCLAW', player))) and state.count('DREAMNAIL', player)) + fn("Boss_Essence-Elder_Hu", lambda state: state.count('Fungus2_32[left1]', player) and state.count('DREAMNAIL', player) and state.count('Defeated_Elder_Hu', player)) + fn("Boss_Essence-Xero", lambda state: state.count('RestingGrounds_02', player) and state.count('DREAMNAIL', player) and state.count('Defeated_Xero', player)) + fn("Boss_Essence-Gorb", lambda state: state.count('Cliffs_02', player) and state.count('DREAMNAIL', player) and state.count('Defeated_Gorb', player)) + fn("Boss_Essence-Marmu", lambda state: (state.count('Fungus3_40[top1]', player) or (state.count('Fungus3_40[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player)))) and state.count('DREAMNAIL', player) and state.count('Defeated_Marmu', player)) + fn("Boss_Essence-No_Eyes", lambda state: (state.count('Fungus1_35[left1]', player) or state.count('Fungus1_35[right1]', player)) and state.count('LANTERN', player) and state.count('DREAMNAIL', player) and state.count('Defeated_No_Eyes', player)) + fn("Boss_Essence-Galien", lambda state: state.count('Deepnest_40[right1]', player) and state.count('DREAMNAIL', player) and state.count('Defeated_Galien', player)) + fn("Boss_Essence-Markoth", lambda state: state.count('Deepnest_East_10[left1]', player) and state.count('DREAMNAIL', player) and state.count('Defeated_Markoth', player)) + fn("Boss_Essence-Failed_Champion", lambda state: (state.count('Crossroads_10[left1]', player) or state.count('Crossroads_10[right1]', player)) and state.count('Defeated_False_Knight', player) and state.count('Defeated_Failed_Champion', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player))))))) and state.count('DREAMNAIL', player)) + fn("Boss_Essence-Soul_Tyrant", lambda state: (state.count('Ruins1_24[right1]', player) or state.count('Ruins1_24[left1]', player)) and state.count('Defeated_Soul_Master', player) and state.count('Defeated_Soul_Tyrant', player) and state.count('DREAMNAIL', player)) + fn("Boss_Essence-Lost_Kin", lambda state: state.count('Abyss_19[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and state.count('DREAMNAIL', player) and state.count('Defeated_Broken_Vessel', player) and state.count('Defeated_Lost_Kin', player)) + fn("Boss_Essence-White_Defender", lambda state: state.count('Waterways_15[top1]', player) and state.count('DREAMNAIL', player) and ((state.count('DREAMER', player) > 2 or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player) > 2)))) and state.count('Defeated_Dung_Defender', player) and state.count('Defeated_White_Defender', player)) + fn("Boss_Essence-Grey_Prince_Zote", lambda state: state.count('Room_Bretta[right1]', player) and state.count('DREAMNAIL', player) and state.count('WINGS', player) and state.count('Rescued_Bretta', player) and state.count('Defeated_Colosseum_Zote', player) and state.count('Defeated_Grey_Prince_Zote', player)) + fn("Grub-Crossroads_Acid", lambda state: state.count('Crossroads_35[right1]', player) or (state.count('Crossroads_35[bot1]', player) and state.count('RIGHTCLAW', player) and (state.count('ACID', player) or ((state.count('LEFTSUPERDASH', player) and state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTDASH', player))) and state._hk_option(player, 'AcidSkips'))))) + fn("Grub-Crossroads_Center", lambda state: (state.count('Crossroads_05[left1]', player) or state.count('Crossroads_05[right1]', player)) and (state._hk_option(player, 'EnemyPogos') or state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player))) + fn("Grub-Crossroads_Stag", lambda state: state.count('Crossroads_03', player)) + fn("Grub-Crossroads_Spike", lambda state: state.count('Crossroads_31[right1]', player)) + fn("Grub-Crossroads_Guarded", lambda state: state.count('Crossroads_48[left1]', player)) + fn("Grub-Greenpath_Cornifer", lambda state: (state.count('Fungus1_06[left1]', player) or state.count('Fungus1_06[bot1]', player)) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Great_Slash', player) or state.count('Cyclone_Slash', player) or state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Grub-Greenpath_Journal", lambda state: (state.count('Fungus1_07[left1]', player) or state.count('Fungus1_07[top1]', player) or state.count('Fungus1_07[right1]', player)) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Great_Slash', player) or state.count('Cyclone_Slash', player) or state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state.count('ACID', player) and (state.count('RIGHTCLAW', player) or state._hk_option(player, 'EnemyPogos'))) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DifficultSkips')))) + fn("Grub-Greenpath_MMC", lambda state: state.count('Fungus1_13[right1]', player)) + fn("Grub-Greenpath_Stag", lambda state: state.count('Fungus1_21', player)) + fn("Grub-Fog_Canyon", lambda state: state.count('LEFTSUPERDASH', player) and state.count('Fungus3_47', player)) + fn("Grub-Fungal_Bouncy", lambda state: state.count('Fungus2_18[right1]', player)) + fn("Grub-Fungal_Spore_Shroom", lambda state: state.count('Fungus2_20[left1]', player) or state.count('Fungus2_20[right1]', player)) + fn("Grub-Deepnest_Mimic", lambda state: state.count('Deepnest_36[left1]', player)) + fn("Grub-Deepnest_Nosk", lambda state: state.count('Deepnest_31[right1]', player) or (state.count('Deepnest_31[right2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Grub-Deepnest_Spike", lambda state: state.count('Deepnest_03', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('Deepnest_03[top1]', player)))) + fn("Grub-Dark_Deepnest", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_39', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')))) or state.count('Deepnest_39[top1]', player) or (state.count('Deepnest_39[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player))))) + fn("Grub-Beast's_Den", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Grub-Kingdom's_Edge_Oro", lambda state: ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) and (state.count('Deepnest_East_14[top2]', player) and state.count('QUAKE', player) and (state._hk_option(player, 'PreciseMovement') or state.count('RIGHTDASH', player)) or (state.count('Deepnest_East_14[left1]', player) and (state._hk_option(player, 'SpikeTunnels') or state.count('RIGHTDASH', player))) or state.count('Deepnest_East_14[door1]', player))) + fn("Grub-Kingdom's_Edge_Camp", lambda state: state.count('Deepnest_East_11', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or (state._hk_option(player, 'PreciseMovement') and state.count('LEFTDASH', player)))) + fn("Grub-Hive_External", lambda state: state.count('Hive_03[top1]', player)) + fn("Grub-Hive_Internal", lambda state: (state.count('Hive_04[left1]', player) or state.count('Hive_04[right1]', player)) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DifficultSkips')))) + fn("Grub-Basin_Requires_Wings", lambda state: state.count('Abyss_19', player) and state.count('WINGS', player) and (state.count('RIGHTCLAW', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and state._hk_option(player, 'EnemyPogos')))) + fn("Grub-Basin_Requires_Dive", lambda state: state.count('Abyss_17[top1]', player) and state.count('QUAKE', player)) + fn("Grub-Waterways_Main", lambda state: state.count('Waterways_04[right1]', player) and (state.count('RIGHTCLAW', player) or state.count('SWIM', player) or state.count('CYCLONE', player) or state.count('FIREBALL', player) or state.count('SCREAM', player)) or (state.count('Waterways_04[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) and (state.count('RIGHTCLAW', player) or state.count('SWIM', player) or state.count('CYCLONE', player) or state.count('FIREBALL', player) or state.count('SCREAM', player))) or (state.count('Waterways_04[left2]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Grub-Isma's_Grove", lambda state: (state.count('Waterways_13[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player)))) or (state.count('Waterways_13[left2]', player) and (state.count('RIGHTCLAW', player) or ((state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) and state.count('LEFTCLAW', player))))) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips')))) + fn("Grub-Waterways_Requires_Tram", lambda state: state.count('Waterways_14[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('RIGHTSUPERDASH', player) and state.count('WINGS', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos'))) or (state.count('ACID', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player))))) or (state.count('Waterways_14[bot2]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player))) and (state.count('LEFTSUPERDASH', player) and state.count('WINGS', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos'))) or (state.count('ACID', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player))))))) + fn("Grub-City_of_Tears_Left", lambda state: state.count('Ruins1_05', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and (state.count('Ruins1_05[top1]', player) or state.count('Ruins1_05[right1]', player))))) + fn("Grub-Soul_Sanctum", lambda state: state.count('Ruins1_32[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('QUAKE', player)) + fn("Grub-Watcher's_Spire", lambda state: state.count('Ruins2_03[bot2]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player)))) + fn("Grub-City_of_Tears_Guarded", lambda state: state.count('Ruins_House_01[left1]', player)) + fn("Grub-King's_Station", lambda state: state.count('Ruins2_07[left1]', player) and (state.count('SWIM', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))) or (state.count('Ruins2_07[top1]', player) and (state.count('LEFTDASH', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement')))) or (state.count('Ruins2_07[right1]', player) and (state.count('LEFTDASH', player) or state.count('SWIM', player) or ((state.count('RIGHTCLAW', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player))) and state.count('LEFTSUPERDASH', player)) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player) and state._hk_option(player, 'PreciseMovement'))))) + fn("Grub-Resting_Grounds", lambda state: state.count('RestingGrounds_10', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Grub-Crystal_Peak_Below_Chest", lambda state: state.count('Mines_04[top1]', player)) + fn("Grub-Crystallized_Mound", lambda state: state.count('Mines_35[left1]', player) and state.count('QUAKE', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'PreciseMovement') and (state.count('RIGHTDASH', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))))) or state.count('WINGS', player))) + fn("Grub-Crystal_Peak_Spike", lambda state: state.count('Mines_03', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) or (state.count('WINGS', player) and state._hk_option(player, 'SpikeTunnels') and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))))))) + fn("Grub-Crystal_Peak_Mimic", lambda state: state.count('Mines_16[top1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player))) + fn("Grub-Crystal_Peak_Crushers", lambda state: (state.count('Mines_19[left1]', player) and state.count('Mines_19[right1]', player)) and state.count('LEFTDASH', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Grub-Crystal_Heart", lambda state: state.count('Mines_31[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('RIGHTDASH', player) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))))) + fn("Grub-Hallownest_Crown", lambda state: state.count('Mines_24[left1]', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'SpikeTunnels'))) + fn("Grub-Howling_Cliffs", lambda state: state.count('Fungus1_28[left1]', player) or (state.count('Fungus1_28[left2]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) and ((state.count('FIREBALL', player) or state.count('QUAKE', player) or (state.count('Glowing_Womb', player) and state.count('Can_Bench', player)) or ((state.count('Weaversong', player) and state.count('Can_Bench', player) or ((state.count('Spore_Shroom', player) and state.count('Can_Bench', player)) and state.count('FOCUS', player))) and state._hk_option(player, 'ObscureSkips')) or (state.count('CYCLONE', player) and state._hk_option(player, 'DifficultSkips'))) or ((state.count("Grubberfly's_Elegy", player) and state.count('Can_Bench', player)) and state.count('RIGHTSLASH', player)) or (state.count('Dash_Slash', player) and state.count('RIGHTDASH', player)) or (((state.count('Mark_of_Pride', player) and state.count('Can_Bench', player)) and state.count('RIGHTSLASH', player) or (state.count('RIGHTDASH', player) and state.count('RIGHTSLASH', player))) and state._hk_option(player, 'DifficultSkips'))) or (state.count('WINGS', player) and state.count('LEFTCLAW', player))))) + fn("Grub-Queen's_Gardens_Stag", lambda state: state.count('Fungus3_10[bot1]', player) and (state.count('WINGS', player) or (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) and state.count("Defeated_West_Queen's_Gardens_Arena", player) or state.count('Fungus3_10[top1]', player)) + fn("Grub-Queen's_Gardens_Marmu", lambda state: (state.count('Fungus3_48[bot1]', player) or state.count('Fungus3_48[right2]', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))))) + fn("Grub-Queen's_Gardens_Top", lambda state: state.count('Fungus3_22', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('LEFTSUPERDASH', player) and (state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player)) or (state._hk_option(player, 'ComplexSkips') and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and state.count('WINGS', player) and state.count('LEFTCLAW', player) and (state.count('RIGHTCLAW', player) and (state.count('Sharp_Shadow', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and state.count('Can_Bench', player)) or (state.count('RIGHTCLAW', player) and state.count('LEFTDASH', player) and state._hk_option(player, 'DifficultSkips')) or ((state.count('Sharp_Shadow', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('LEFTDASH', player)) and state.count('Can_Bench', player)) and state._hk_option(player, 'DifficultSkips')))))) + fn("Grub-Collector_1", lambda state: state.count('Ruins2_11[right1]', player) and (state.count('LEFTCLAW', player) or ((state.count('WINGS', player) or state.count('RIGHTDASH', player)) and state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips'))) and state.count('Defeated_Collector', player)) + fn("Grub-Collector_2", lambda state: state.count('Ruins2_11[right1]', player) and (state.count('LEFTCLAW', player) or ((state.count('WINGS', player) or state.count('RIGHTDASH', player)) and state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips'))) and state.count('Defeated_Collector', player)) + fn("Grub-Collector_3", lambda state: state.count('Ruins2_11[right1]', player) and (state.count('LEFTCLAW', player) or ((state.count('WINGS', player) or state.count('RIGHTDASH', player)) and state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips'))) and state.count('Defeated_Collector', player)) + fn("Mimic_Grub-Deepnest_1", lambda state: state.count('Deepnest_36[left1]', player)) + fn("Mimic_Grub-Deepnest_2", lambda state: state.count('Deepnest_36[left1]', player)) + fn("Mimic_Grub-Deepnest_3", lambda state: state.count('Deepnest_36[left1]', player)) + fn("Mimic_Grub-Crystal_Peak", lambda state: state.count('Mines_16[top1]', player)) + fn("Crossroads_Map", lambda state: state.count('Crossroads_33', player)) + fn("Greenpath_Map", lambda state: state.count('Fungus1_06[left1]', player) or state.count('Fungus1_06[bot1]', player)) + fn("Fog_Canyon_Map", lambda state: (state.count('Fungus3_25[left1]', player) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) or state.count('Fungus3_25[right1]', player)) and (state.count('LEFTCLAW', player) and state.count('LEFTDASH', player) and state._hk_option(player, 'EnemyPogos') or state.count('WINGS', player)) or (False and state.count('LEFTDASH', player) and state.count('LEFTCLAW', player))) + fn("Fungal_Wastes_Map", lambda state: state.count('Fungus2_18[top1]', player) or state.count('Fungus2_18[right1]', player) or (state.count('Fungus2_18[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("Deepnest_Map-Upper", lambda state: state.count('Deepnest_01b', player)) + fn("Deepnest_Map-Right", lambda state: (state.count('Fungus2_25[top1]', player) or state.count('Fungus2_25[top2]', player) or state.count('Fungus2_25[right1]', player)) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) + fn("Ancient_Basin_Map", lambda state: state.count('Abyss_04[top1]', player) and (state.count('RIGHTDASH', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'PreciseMovement')) or ((state.count('Abyss_04[left1]', player) or state.count('Abyss_04[right1]', player) or state.count('Abyss_04[bot1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Kingdom's_Edge_Map", lambda state: state.count('Deepnest_East_03', player)) + fn("City_of_Tears_Map", lambda state: state.count('Ruins1_31', player) or state.count('Ruins1_31[bot1]', player) or state.count('Ruins1_31[left1]', player)) + fn("Royal_Waterways_Map", lambda state: (state.count('Waterways_09[left1]', player) or state.count('Waterways_09[right1]', player)) and (state.count('LEFTCLAW', player) or ((state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) and state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or False) + fn("Howling_Cliffs_Map", lambda state: state.count('Cliffs_01', player) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos') or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Cliffs_01[right1]', player) or state.count('Cliffs_01[right2]', player))) + fn("Crystal_Peak_Map", lambda state: state.count('Mines_30[right1]', player) or (state.count('RIGHTSUPERDASH', player) and state.count('Mines_30[left1]', player))) + fn("Queen's_Gardens_Map", lambda state: state.count('Fungus1_24[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Resting_Grounds_Map", lambda state: state.count('RestingGrounds_09[left1]', player) or (state.count('Resting_Grounds_Stag', player) and state.count('Can_Stag', player))) + fn("Dirtmouth_Stag", lambda state: state.count('Room_Town_Stag_Station[left1]', player) or state.count('Can_Stag', player)) + fn("Crossroads_Stag", lambda state: state.count('Crossroads_47[right1]', player) or (state.count('Crossroads_Stag', player) and state.count('Can_Stag', player))) + fn("Greenpath_Stag", lambda state: state.count('Fungus1_16_alt[right1]', player) or (state.count('Greenpath_Stag', player) and state.count('Can_Stag', player))) + fn("Queen's_Station_Stag", lambda state: state.count('Fungus2_02[right1]', player) or (state.count("Queen's_Station_Stag", player) and state.count('Can_Stag', player))) + fn("Queen's_Gardens_Stag", lambda state: state.count('Fungus3_40[top1]', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player)) or state._hk_option(player, 'EnemyPogos') or state._hk_option(player, 'ShadeSkips') or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and True)) or state.count('Fungus3_40[right1]', player) or (state.count("Queen's_Gardens_Stag", player) and state.count('Can_Stag', player))) + fn("City_Storerooms_Stag", lambda state: state.count('Ruins1_29[left1]', player) or (state.count('City_Storerooms_Stag', player) and state.count('Can_Stag', player))) + fn("King's_Station_Stag", lambda state: state.count('Ruins2_08[left1]', player) or (state.count("King's_Station_Stag", player) and state.count('Can_Stag', player))) + fn("Resting_Grounds_Stag", lambda state: state.count('RestingGrounds_09[left1]', player) or (state.count('Resting_Grounds_Stag', player) and state.count('Can_Stag', player))) + fn("Distant_Village_Stag", lambda state: state.count('Deepnest_09[left1]', player) or (state.count('Distant_Village_Stag', player) and state.count('Can_Stag', player))) + fn("Hidden_Station_Stag", lambda state: state.count('Abyss_22[left1]', player) or (state.count('Hidden_Station_Stag', player) and state.count('Can_Stag', player))) + fn("Stag_Nest_Stag", lambda state: state.count('Cliffs_03[right1]', player) or (state.count('STAGS', player) > 8 and state.count('Can_Stag', player))) + fn("Lifeblood_Cocoon-King's_Pass", lambda state: state.count('Tutorial_01', player)) + fn("Lifeblood_Cocoon-Ancestral_Mound", lambda state: state.count('Crossroads_ShamanTemple[left1]', player) and (((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player))) and state._hk_option(player, 'ObscureSkips')))) + fn("Lifeblood_Cocoon-Greenpath", lambda state: state.count('Fungus1_32[bot1]', player) or state.count('Fungus1_32[top1]', player) or state.count('Fungus1_32[left1]', player)) + fn("Lifeblood_Cocoon-Fog_Canyon_West", lambda state: state.count('Fungus3_30[bot1]', player)) + fn("Lifeblood_Cocoon-Mantis_Village", lambda state: (state.count('Fungus2_15[top3]', player) or state.count('Fungus2_15[right1]', player) or state.count('Fungus2_15[left1]', player)) and (state.count('LEFTCLAW', player) and state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)))) + fn("Lifeblood_Cocoon-Failed_Tramway", lambda state: state.count('Deepnest_26', player) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and (state._hk_option(player, 'EnemyPogos') or state._hk_option(player, 'ShadeSkips'))))) + fn("Lifeblood_Cocoon-Galien", lambda state: state.count('Deepnest_40[right1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player)))) + fn("Lifeblood_Cocoon-Kingdom's_Edge", lambda state: state.count('Deepnest_East_15[left1]', player)) + fn("Grimmkin_Flame-City_Storerooms", lambda state: state.count('Ruins1_28', player) and state.count('GRIMMCHILD', player)) + fn("Grimmkin_Flame-Greenpath", lambda state: (state.count('Fungus1_10[left1]', player) or state.count('Fungus1_10[top1]', player) or state.count('Fungus1_10[right1]', player)) and state.count('GRIMMCHILD', player)) + fn("Grimmkin_Flame-Crystal_Peak", lambda state: ((state.count('Mines_10[left1]', player) or state.count('Mines_10[bot1]', player)) and (state.count('WINGS', player) and state.count('RIGHTDASH', player) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'ShadeSkips') and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and (state.count('MASKSHARDS', player) > 15))) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('RIGHTSUPERDASH', player))) or (state.count('Mines_10[right1]', player) and (state.count('LEFTSUPERDASH', player) or (state.count('LEFTDASH', player) and state.count('WINGS', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))))))) and state.count('GRIMMCHILD', player)) + fn("Grimmkin_Flame-King's_Pass", lambda state: state.count('Tutorial_01', player) and state.count('First_Grimmchild_Upgrade', player)) + fn("Grimmkin_Flame-Resting_Grounds", lambda state: (state.count('RestingGrounds_06[left1]', player) or state.count('RestingGrounds_06[right1]', player) or state.count('RestingGrounds_06[top1]', player)) and state.count('First_Grimmchild_Upgrade', player)) + fn("Grimmkin_Flame-Kingdom's_Edge", lambda state: state.count('Deepnest_East_03', player) and state.count('First_Grimmchild_Upgrade', player)) + fn("Grimmkin_Flame-Fungal_Core", lambda state: state.count('Fungus2_30[top1]', player) and state.count('Second_Grimmchild_Upgrade', player)) + fn("Grimmkin_Flame-Ancient_Basin", lambda state: (state.count('Abyss_02[right1]', player) or (state.count('Abyss_02[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos')))) and state.count('Second_Grimmchild_Upgrade', player)) + fn("Grimmkin_Flame-Hive", lambda state: (state.count('Hive_03[right1]', player) or (state.count('Hive_03[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos'))))) and state.count('Second_Grimmchild_Upgrade', player)) + fn("Grimmkin_Flame-Brumm", lambda state: state.count('Room_spider_small[left1]', player) and state.count('Second_Grimmchild_Upgrade', player)) + fn("Hunter's_Journal", lambda state: state.count('Fungus1_08[left1]', player)) + fn("Journal_Entry-Void_Tendrils", lambda state: state.count('Abyss_09[right3]', player)) + fn("Journal_Entry-Charged_Lumafly", lambda state: state.count('Fungus3_archive_02[top1]', player) and state.count('Defeated_Uumuu', player) and ((state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player))) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player) or state.count('ACID', player)) or (state._hk_option(player, 'AcidSkips') and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player)))) + fn("Journal_Entry-Goam", lambda state: state.count('Crossroads_52[left1]', player) and state.count('QUAKE', player)) + fn("Journal_Entry-Garpede", lambda state: state.count('Deepnest_44[top1]', player)) + fn("Journal_Entry-Seal_of_Binding", lambda state: state.count('White_Palace_20[bot1]', player) and state.count('Completed_Path_of_Pain', player)) + fn("Elevator_Pass", lambda state: state.count('Crossroads_49b[right1]', player)) + fn("Split_Mothwing_Cloak", lambda state: state.count('Fungus1_04[right1]', player) and state.count('Defeated_Hornet_1', player)) + fn("Left_Mantis_Claw", lambda state: state.count('Fungus2_14', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or state._hk_option(player, 'EnemyPogos'))) + fn("Right_Mantis_Claw", lambda state: state.count('Fungus2_14', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or (state.count('LEFTSUPERDASH', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or state._hk_option(player, 'EnemyPogos'))) + fn("Split_Crystal_Heart", lambda state: state.count('Mines_31[left1]', player) and (state.count('RIGHTSUPERDASH', player) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))))) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Leftslash", lambda state: state.count('Tutorial_01', player)) + fn("Rightslash", lambda state: state.count('Tutorial_01', player)) + fn("Upslash", lambda state: state.count('Tutorial_01', player)) + fn("Egg_Shop", lambda state: state.count('Room_Ouiji[left1]', player)) + fn("Geo_Rock-Broken_Elevator_1", lambda state: state.count('Abyss_01[right1]', player) or state.count('Abyss_01[left1]', player) or (state.count('Abyss_01', player) and (state.count('WINGS', player) or state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))))) + fn("Geo_Rock-Broken_Elevator_2", lambda state: (state.count('Abyss_01[right1]', player) or state.count('Abyss_01[left1]', player) or (state.count('Abyss_01', player) and (state.count('WINGS', player) or state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))))) and (state.count('RIGHTDASH', player) or state._hk_option(player, 'SpikeTunnels'))) + fn("Geo_Rock-Broken_Elevator_3", lambda state: state.count('Abyss_01[right1]', player) or state.count('Abyss_01[left1]', player) or (state.count('Abyss_01', player) and (state.count('WINGS', player) or state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))))) + fn("Geo_Rock-Broken_Bridge_Upper", lambda state: (state.count('Abyss_02[right1]', player) or (state.count('Abyss_02[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Geo_Rock-Broken_Bridge_Lower", lambda state: state.count('Abyss_02[right1]', player) or (state.count('Abyss_02[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) + fn("Geo_Rock-Broken_Bridge_Lower_Dupe", lambda state: state.count('Abyss_02[right1]', player) or (state.count('Abyss_02[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) + fn("Geo_Rock-Abyss_1", lambda state: state.count('Abyss_06_Core[top1]', player) and state.count('BRAND', player) and (state.count('LEFTDASH', player) or state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player)) or ((state.count('Abyss_06_Core[left1]', player) or state.count('Abyss_06_Core[left3]', player) or state.count('Abyss_06_Core[right2]', player) or state.count('Abyss_06_Core[bot1]', player)) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Abyss_2", lambda state: state.count('Abyss_06_Core[top1]', player) and state.count('BRAND', player) and (state.count('LEFTDASH', player) or state.count('LEFTCLAW', player) or state.count('WINGS', player)) or ((state.count('Abyss_06_Core[left1]', player) or state.count('Abyss_06_Core[left3]', player) or state.count('Abyss_06_Core[right2]', player) or state.count('Abyss_06_Core[bot1]', player)) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Abyss_3", lambda state: state.count('Abyss_06_Core[top1]', player) and state.count('BRAND', player) or ((state.count('Abyss_06_Core[left3]', player) or state.count('Abyss_06_Core[right2]', player) or state.count('Abyss_06_Core[bot1]', player)) and (state.count('LEFTCLAW', player) and (state._hk_option(player, 'PreciseMovement') or state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) or state.count('WINGS', player))) or state.count('Abyss_06_Core[left1]', player)) + fn("Geo_Rock-Basin_Tunnel", lambda state: state.count('Abyss_18[right1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state.count('LEFTSUPERDASH', player)) or (state.count('Abyss_18[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player)))) + fn("Geo_Rock-Basin_Grub", lambda state: state.count('Abyss_19', player) and state.count('WINGS', player)) + fn("Geo_Rock-Basin_Before_Broken_Vessel", lambda state: state.count('Abyss_19[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or state.count('Abyss_19[bot2]', player) or state.count('Abyss_19[right1]', player)) + fn("Geo_Rock-Cliffs_Main_1", lambda state: state.count('Cliffs_01[right1]', player) or (state.count('Cliffs_01[right2]', player) and (state.count('LEFTDASH', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) or ((state.count('Cliffs_01[right3]', player) or state.count('Cliffs_01[right4]', player)) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos') or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Cliffs_Main_2", lambda state: state.count('Cliffs_01[right1]', player) or state.count('Cliffs_01[right2]', player) or ((state.count('Cliffs_01[right3]', player) or state.count('Cliffs_01[right4]', player)) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos') or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Cliffs_Main_3", lambda state: (state.count('Cliffs_01[right1]', player) or state.count('Cliffs_01[right2]', player)) and (state.count('RIGHTDASH', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos') or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) or ((state.count('Cliffs_01[right3]', player) or state.count('Cliffs_01[right4]', player)) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos') or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Cliffs_Main_4", lambda state: state.count('Cliffs_01[right1]', player) or state.count('Cliffs_01[right2]', player) or ((state.count('Cliffs_01[right3]', player) or state.count('Cliffs_01[right4]', player)) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos') or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Below_Gorb_Dupe", lambda state: state.count('Cliffs_02', player)) + fn("Geo_Rock-Below_Gorb", lambda state: state.count('Cliffs_02', player)) + fn("Geo_Rock-Crossroads_Well", lambda state: state.count('Crossroads_01[left1]', player) or state.count('Crossroads_01[top1]', player) or state.count('Crossroads_01[right1]', player)) + fn("Geo_Rock-Crossroads_Center_Grub", lambda state: state.count('Crossroads_05[left1]', player) or state.count('Crossroads_05[right1]', player)) + fn("Geo_Rock-Crossroads_Root", lambda state: state.count('Crossroads_07', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Geo_Rock-Crossroads_Root_Dupe_1", lambda state: state.count('Crossroads_07', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Geo_Rock-Crossroads_Root_Dupe_2", lambda state: state.count('Crossroads_07', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Geo_Rock-Crossroads_Aspid_Arena", lambda state: state.count('Crossroads_08', player)) + fn("Geo_Rock-Crossroads_Aspid_Arena_Dupe_1", lambda state: state.count('Crossroads_08', player)) + fn("Geo_Rock-Crossroads_Aspid_Arena_Dupe_2", lambda state: state.count('Crossroads_08', player)) + fn("Geo_Rock-Crossroads_Aspid_Arena_Hidden", lambda state: state.count('Crossroads_08', player)) + fn("Geo_Rock-Crossroads_Above_False_Knight", lambda state: (state.count('Crossroads_10[left1]', player) or state.count('Crossroads_10[right1]', player)) and state.count('Defeated_False_Knight', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) + fn("Geo_Rock-Crossroads_Before_Acid_Grub", lambda state: state.count('Crossroads_12[left1]', player) or state.count('Crossroads_12[right1]', player)) + fn("Geo_Rock-Crossroads_Below_Goam_Mask_Shard", lambda state: state.count('Crossroads_13[left1]', player) or state.count('Crossroads_13[right1]', player)) + fn("Geo_Rock-Crossroads_After_Goam_Mask_Shard", lambda state: state.count('Crossroads_13[left1]', player) or state.count('Crossroads_13[right1]', player)) + fn("Geo_Rock-Crossroads_Above_Lever", lambda state: state.count('Crossroads_16[left1]', player) or state.count('Crossroads_16[right1]', player) or state.count('Crossroads_16[bot1]', player)) + fn("Geo_Rock-Crossroads_Before_Fungal", lambda state: state.count('Crossroads_18[right1]', player) or state.count('Crossroads_18[bot1]', player) or state.count('Crossroads_18[right2]', player)) + fn("Geo_Rock-Crossroads_Before_Fungal_Dupe_1", lambda state: state.count('Crossroads_18[right1]', player) or state.count('Crossroads_18[bot1]', player) or state.count('Crossroads_18[right2]', player)) + fn("Geo_Rock-Crossroads_Before_Fungal_Dupe_2", lambda state: state.count('Crossroads_18[right1]', player) or state.count('Crossroads_18[bot1]', player) or state.count('Crossroads_18[right2]', player)) + fn("Geo_Rock-Crossroads_Before_Shops", lambda state: state.count('Crossroads_19', player)) + fn("Geo_Rock-Crossroads_Before_Glowing_Womb", lambda state: state.count('Crossroads_21', player)) + fn("Geo_Rock-Crossroads_Above_Tram", lambda state: state.count('Crossroads_27', player)) + fn("Geo_Rock-Crossroads_Above_Mawlek", lambda state: state.count('Crossroads_36[right1]', player) or state.count('Crossroads_36[right2]', player)) + fn("Geo_Rock-Crossroads_Vessel_Fragment", lambda state: state.count('Crossroads_37[right1]', player)) + fn("Geo_Rock-Crossroads_Goam_Alcove", lambda state: state.count('Crossroads_42[left1]', player) or state.count('Crossroads_42[right1]', player)) + fn("Geo_Rock-Crossroads_Goam_Damage_Boost", lambda state: (state.count('Crossroads_42[left1]', player) or state.count('Crossroads_42[right1]', player)) and (state.count('MASKSHARDS', player) > 7 or (state.count('Lifeblood_Heart', player) or state.count('Lifeblood_Core', player) or state.count("Joni's_Blessing", player)))) + fn("Geo_Rock-Crossroads_Tram", lambda state: state.count('Crossroads_46[left1]', player) or (state.count('Crossroads_46b[right1]', player) and state.count('TRAM', player))) + fn("Geo_Rock-Crossroads_Goam_Journal", lambda state: state.count('Crossroads_52[left1]', player) and state.count('QUAKE', player)) + fn("Geo_Rock-Crossroads_Goam_Journal_Dupe", lambda state: state.count('Crossroads_52[left1]', player) and state.count('QUAKE', player)) + fn("Geo_Rock-Ancestral_Mound", lambda state: state.count('Crossroads_ShamanTemple[left1]', player) and (((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player))) and state._hk_option(player, 'ObscureSkips')))) + fn("Geo_Rock-Ancestral_Mound_Dupe", lambda state: state.count('Crossroads_ShamanTemple[left1]', player) and (((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player))) and state._hk_option(player, 'ObscureSkips')))) + fn("Geo_Rock-Ancestral_Mound_Tree", lambda state: state.count('Crossroads_ShamanTemple[left1]', player) and state.count('WINGS', player) and (((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player))) and state._hk_option(player, 'ObscureSkips')))) + fn("Geo_Rock-Ancestral_Mound_Tree_Dupe", lambda state: state.count('Crossroads_ShamanTemple[left1]', player) and state.count('WINGS', player) and (((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player))) and state._hk_option(player, 'ObscureSkips')))) + fn("Geo_Rock-Moss_Prophet", lambda state: state.count('Deepnest_01', player)) + fn("Geo_Rock-Moss_Prophet_Dupe", lambda state: state.count('Deepnest_01', player)) + fn("Geo_Rock-Deepnest_Below_Mimics", lambda state: state.count('Deepnest_02', player)) + fn("Geo_Rock-Deepnest_Below_Mimics_Dupe", lambda state: state.count('Deepnest_02', player)) + fn("Geo_Rock-Deepnest_Below_Spike_Grub", lambda state: state.count('Deepnest_03', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('Deepnest_03[left1]', player)) or state.count('Deepnest_03[top1]', player))) + fn("Geo_Rock-Deepnest_Below_Spike_Grub_Dupe", lambda state: state.count('Deepnest_03', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('Deepnest_03[left1]', player)) or state.count('Deepnest_03[top1]', player))) + fn("Geo_Rock-Deepnest_Spike_Grub_Right", lambda state: state.count('Deepnest_03', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('Deepnest_03[left1]', player)) or state.count('Deepnest_03[top1]', player))) + fn("Geo_Rock-Deepnest_By_Mantis_Lords_Garpede_Pogo", lambda state: state.count('Deepnest_16[bot1]', player)) + fn("Geo_Rock-Deepnest_By_Mantis_Lords_Garpede_Pogo_Dupe", lambda state: state.count('Deepnest_16[bot1]', player)) + fn("Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_1", lambda state: state.count('Deepnest_16[bot1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player)))) + fn("Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_2", lambda state: state.count('Deepnest_16[bot1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player)))) + fn("Geo_Rock-Deepnest_By_Mantis_Lords_Requires_Claw_3", lambda state: state.count('Deepnest_16[bot1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player)))) + fn("Geo_Rock-Deepnest_Nosk_1", lambda state: state.count('Deepnest_31[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player)) or (state.count('Deepnest_31[right2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Deepnest_Nosk_2", lambda state: state.count('Deepnest_31[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player)) or (state.count('Deepnest_31[right2]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Deepnest_Nosk_3", lambda state: state.count('Deepnest_31[right2]', player) or (state.count('Deepnest_31[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Geo_Rock-Deepnest_Above_Galien", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_35[top1]', player) or (state.count('Deepnest_35', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))))) + fn("Geo_Rock-Deepnest_Galien_Spike", lambda state: state.count('Deepnest_35', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player)))) + fn("Geo_Rock-Deepnest_Garpede_1", lambda state: state.count('Deepnest_37', player)) + fn("Geo_Rock-Deepnest_Garpede_2", lambda state: state.count('Deepnest_37', player)) + fn("Geo_Rock-Dark_Deepnest_Above_Grub_1", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_39', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')))) or state.count('Deepnest_39[top1]', player) or (state.count('Deepnest_39[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player))))) + fn("Geo_Rock-Dark_Deepnest_Above_Grub_2", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_39', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')))) or state.count('Deepnest_39[top1]', player) or (state.count('Deepnest_39[left1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTDASH', player))))) + fn("Geo_Rock-Dark_Deepnest_Bottom_Left", lambda state: state.count('Deepnest_39', player)) + fn("Geo_Rock-Above_Mask_Maker_1", lambda state: (state.count('Deepnest_43[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state.count('Deepnest_43[left1]', player) or state.count('Deepnest_43[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Geo_Rock-Above_Mask_Maker_2", lambda state: (state.count('Deepnest_43[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state.count('Deepnest_43[left1]', player) or state.count('Deepnest_43[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player))) + fn("Geo_Rock-Lower_Kingdom's_Edge_1", lambda state: (state.count('Deepnest_East_01[bot1]', player) or state.count('Deepnest_East_01[top1]', player) or state.count('Deepnest_East_01[right1]', player)) and (state.count('LEFTDASH', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Geo_Rock-Lower_Kingdom's_Edge_2", lambda state: (state.count('Deepnest_East_01[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)) or state.count('Deepnest_East_01[top1]', player) or state.count('Deepnest_East_01[right1]', player)) and (state.count('LEFTDASH', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Geo_Rock-Lower_Kingdom's_Edge_3", lambda state: state.count('Deepnest_East_02', player)) + fn("Geo_Rock-Lower_Kingdom's_Edge_Dive", lambda state: state.count('Deepnest_East_02', player) and state.count('QUAKE', player) or (state.count('Deepnest_East_02[bot2]', player) and (state.count('ACID', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'AcidSkips'))))) + fn("Geo_Rock-Kingdom's_Edge_Below_Bardoon", lambda state: state.count('Deepnest_East_04', player)) + fn("Geo_Rock-Kingdom's_Edge_Oro_Far_Left", lambda state: (state.count('Deepnest_East_06[left1]', player) or state.count('Deepnest_East_06[top1]', player) or ((state.count('Deepnest_East_06[bot1]', player) or state.count('Deepnest_East_06[door1]', player) or state.count('Deepnest_East_06[right1]', player)) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos')) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips')))) + fn("Geo_Rock-Kingdom's_Edge_Oro_Middle_Left", lambda state: state.count('Deepnest_East_06[top1]', player) or (state.count('Deepnest_East_06[left1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'BackgroundObjectPogos')))) or ((state.count('Deepnest_East_06[bot1]', player) or state.count('Deepnest_East_06[door1]', player) or state.count('Deepnest_East_06[right1]', player)) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Geo_Rock-Kingdom's_Edge_Above_Root", lambda state: state.count('Deepnest_East_07', player)) + fn("Geo_Rock-Kingdom's_Edge_Above_Tower", lambda state: state.count('Deepnest_East_07', player)) + fn("Geo_Rock-Kingdom's_Edge_Below_Colosseum", lambda state: (state.count('Deepnest_East_08[top1]', player) or (state.count('Deepnest_East_08[right1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTDASH', player))) + fn("Geo_Rock-Kingdom's_Edge_Above_420_Geo_Rock", lambda state: state.count('Deepnest_East_17[left1]', player) and state.count('QUAKE', player)) + fn("Geo_Rock-Kingdom's_Edge_420_Geo_Rock", lambda state: state.count('Deepnest_East_17[left1]', player) and state.count('QUAKE', player)) + fn("Geo_Rock-Beast's_Den_Above_Trilobite", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Geo_Rock-Beast's_Den_Above_Trilobite_Dupe", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Geo_Rock-Beast's_Den_Below_Herrah", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Geo_Rock-Beast's_Den_Below_Egg", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Geo_Rock-Beast's_Den_Below_Egg_Dupe", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) or (state.count('WINGS', player) and state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Geo_Rock-Beast's_Den_Bottom", lambda state: state.count('Deepnest_Spider_Town[left1]', player)) + fn("Geo_Rock-Beast's_Den_Bottom_Dupe", lambda state: state.count('Deepnest_Spider_Town[left1]', player)) + fn("Geo_Rock-Beast's_Den_After_Herrah", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) and (state.count('RIGHTSLASH', player) or ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.count('RIGHTDASH', player)) or state.count('LEFTDASH', player) or state.count('Herrah', player) or ((state.count('SPELLS', player) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips'))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or ((state.count('CYCLONE', player) or state.count('Great_Slash', player)) and state._hk_option(player, 'ProficientCombat')) or (state._hk_option(player, 'ProficientCombat') and state._hk_option(player, 'DifficultSkips')))))) + fn("Geo_Rock-Greenpath_Entrance", lambda state: state.count('Fungus1_01[left1]', player) or state.count('Fungus1_01[right1]', player)) + fn("Geo_Rock-Greenpath_Waterfall", lambda state: state.count('Fungus1_01b[left1]', player) or state.count('Fungus1_01b[right1]', player)) + fn("Geo_Rock-Greenpath_Below_Skip_Squit", lambda state: state.count('Fungus1_02[left1]', player) or state.count('Fungus1_02[right1]', player) or state.count('Fungus1_02[right2]', player)) + fn("Geo_Rock-Greenpath_Skip_Squit", lambda state: state.count('Fungus1_02[left1]', player) or state.count('Fungus1_02[right1]', player) or state.count('Fungus1_02[right2]', player)) + fn("Geo_Rock-Greenpath_Second_Skip_Fool_Eater", lambda state: state.count('Fungus1_03[left1]', player) or state.count('Fungus1_03[right1]', player) or state.count('Fungus1_03[bot1]', player)) + fn("Geo_Rock-Greenpath_Second_Skip_Fool_Eater_Dupe", lambda state: state.count('Fungus1_03[left1]', player) or state.count('Fungus1_03[right1]', player) or state.count('Fungus1_03[bot1]', player)) + fn("Geo_Rock-Greenpath_Second_Skip_Lower", lambda state: state.count('Fungus1_03[left1]', player) or state.count('Fungus1_03[right1]', player) or state.count('Fungus1_03[bot1]', player)) + fn("Geo_Rock-Greenpath_Below_Hornet", lambda state: (state.count('Fungus1_04[left1]', player) or (state.count('Fungus1_04[right1]', player) and state.count('Defeated_Hornet_1', player))) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or ((state.count('RIGHTSUPERDASH', player) or state.count('ACID', player)) and state.count('RIGHTCLAW', player)))) + fn("Geo_Rock-Greenpath_Above_Thorns", lambda state: state.count('Fungus1_05[top1]', player) or state.count('Fungus1_05[right1]', player) or state.count('Fungus1_05[bot1]', player)) + fn("Geo_Rock-Greenpath_Hunter's_Journal", lambda state: state.count('Fungus1_07[top1]', player) or state.count('Fungus1_07[left1]', player) or state.count('Fungus1_07[right1]', player)) + fn("Geo_Rock-Greenpath_Acid_Bridge", lambda state: (state.count('Fungus1_10[left1]', player) or state.count('Fungus1_10[right1]', player) or state.count('Fungus1_10[top1]', player)) and ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) or state._hk_option(player, 'ShadeSkips'))) + fn("Geo_Rock-Greenpath_After_MMC_Hidden", lambda state: state.count('Fungus1_12[left1]', player) or state.count('Fungus1_12[right1]', player)) + fn("Geo_Rock-Greenpath_After_MMC", lambda state: state.count('Fungus1_12[left1]', player) or state.count('Fungus1_12[right1]', player)) + fn("Geo_Rock-Greenpath_After_MMC_Dupe", lambda state: state.count('Fungus1_12[left1]', player) or state.count('Fungus1_12[right1]', player)) + fn("Geo_Rock-Greenpath_Obbles_Fool_Eater", lambda state: state.count('Fungus1_19[left1]', player) or state.count('Fungus1_19[right1]', player) or state.count('Fungus1_19[bot1]', player)) + fn("Geo_Rock-Greenpath_Moss_Knights", lambda state: state.count('Fungus1_21', player)) + fn("Geo_Rock-Greenpath_Moss_Knights_Dupe_1", lambda state: state.count('Fungus1_21', player)) + fn("Geo_Rock-Greenpath_Moss_Knights_Dupe_2", lambda state: state.count('Fungus1_21', player)) + fn("Geo_Rock-Greenpath_Below_Stag", lambda state: state.count('Fungus1_22[top1]', player) or state.count('Fungus1_22[left1]', player)) + fn("Geo_Rock-Greenpath_Below_Stag_Fool_Eater", lambda state: state.count('Fungus1_22[top1]', player) or state.count('Fungus1_22[left1]', player) or state.count('Fungus1_22[bot1]', player)) + fn("Geo_Rock-Baldur_Shell_Top_Left", lambda state: state.count('Fungus1_28[left1]', player) or state.count('Fungus1_28[left2]', player)) + fn("Geo_Rock-Baldur_Shell_Alcove", lambda state: state.count('Fungus1_28[left1]', player) or state.count('Fungus1_28[left2]', player)) + fn("Geo_Rock-Greenpath_MMC", lambda state: state.count('Fungus1_29[left1]', player) or state.count('Fungus1_29[right1]', player)) + fn("Geo_Rock-Greenpath_Below_Toll", lambda state: state.count('Fungus1_31[top1]', player) or state.count('Fungus1_31[bot1]', player) or state.count('Fungus1_31[right1]', player)) + fn("Geo_Rock-Greenpath_Toll_Hidden", lambda state: state.count('Fungus1_31[top1]', player) or state.count('Fungus1_31[bot1]', player) or state.count('Fungus1_31[right1]', player)) + fn("Geo_Rock-Greenpath_Toll_Hidden_Dupe", lambda state: state.count('Fungus1_31[top1]', player) or state.count('Fungus1_31[bot1]', player) or state.count('Fungus1_31[right1]', player)) + fn("Geo_Rock-Fungal_Below_Shrumal_Ogres", lambda state: state.count('Fungus2_04', player)) + fn("Geo_Rock-Fungal_Above_Cloth", lambda state: state.count('Fungus2_08[left1]', player) or state.count('Fungus2_08[left2]', player) or state.count('Fungus2_08[right1]', player)) + fn("Geo_Rock-Fungal_After_Cloth", lambda state: (state.count('Fungus2_10[right1]', player) or state.count('Fungus2_10[right2]', player) or state.count('Fungus2_10[bot1]', player)) and (state.count('RIGHTDASH', player) or state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Geo_Rock-Fungal_Below_Pilgrim's_Way", lambda state: state.count('Fungus2_11[top1]', player) or state.count('Fungus2_11[left1]', player) or state.count('Fungus2_11[left2]', player) or state.count('Fungus2_11[right1]', player)) + fn("Geo_Rock-Fungal_Below_Pilgrim's_Way_Dupe", lambda state: state.count('Fungus2_11[top1]', player) or state.count('Fungus2_11[left1]', player) or state.count('Fungus2_11[left2]', player) or state.count('Fungus2_11[right1]', player)) + fn("Geo_Rock-Mantis_Outskirts_Guarded", lambda state: state.count('Fungus2_13', player)) + fn("Geo_Rock-Mantis_Outskirts_Guarded_Dupe", lambda state: state.count('Fungus2_13', player)) + fn("Geo_Rock-Mantis_Outskirts_Alcove", lambda state: state.count('Fungus2_13', player) and (state.count('Fungus2_13[left3]', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('ACID', player) or state._hk_option(player, 'EnemyPogos') or state._hk_option(player, 'PreciseMovement'))) + fn("Geo_Rock-Mantis_Village_After_Lever", lambda state: state.count('Fungus2_14', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player))) or state._hk_option(player, 'EnemyPogos'))) + fn("Geo_Rock-Mantis_Village_Above_Claw", lambda state: state.count('Fungus2_14', player) and (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'EnemyPogos') or state.count('WINGS', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos'))))) + fn("Geo_Rock-Mantis_Village_Above_Claw_Dupe", lambda state: state.count('Fungus2_14', player) and (state._hk_option(player, 'ComplexSkips') and state._hk_option(player, 'EnemyPogos') or state.count('WINGS', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state._hk_option(player, 'EnemyPogos'))))) + fn("Geo_Rock-Mantis_Village_Below_Lore", lambda state: state.count('Fungus2_14[top1]', player) or (state.count('Fungus2_14', player) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state._hk_option(player, 'EnemyPogos')) and (state.count('RIGHTCLAW', player) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) or state.count('LEFTCLAW', player)))) + fn("Geo_Rock-Mantis_Village_Above_Lever", lambda state: (state.count('Fungus2_14[top1]', player) or (state.count('Fungus2_14', player) and (state.count('LEFTDASH', player) or state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state._hk_option(player, 'EnemyPogos')) and (state.count('RIGHTCLAW', player) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) or state.count('LEFTCLAW', player)))) and (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state._hk_option(player, 'BackgroundObjectPogos')) or state.count('WINGS', player) or state.count('RIGHTCLAW', player))) + fn("Geo_Rock-Above_Mantis_Lords_1", lambda state: (state.count('Fungus2_15[top3]', player) or state.count('Fungus2_15[right1]', player) or (state.count('Fungus2_15[left1]', player) and state.count('RIGHTCLAW', player))) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player))) + fn("Geo_Rock-Above_Mantis_Lords_2", lambda state: state.count('Fungus2_15[top3]', player) or state.count('Fungus2_15[right1]', player) or (state.count('Fungus2_15[left1]', player) and state.count('RIGHTCLAW', player))) + fn("Geo_Rock-Fungal_After_Bouncy_Grub", lambda state: state.count('Fungus2_18[right1]', player)) + fn("Geo_Rock-Fungal_After_Bouncy_Grub_Dupe", lambda state: state.count('Fungus2_18[right1]', player)) + fn("Geo_Rock-Fungal_Bouncy_Grub_Lever", lambda state: state.count('Fungus2_18[right1]', player)) + fn("Geo_Rock-Fungal_After_Cornifer", lambda state: state.count('Fungus2_18[top1]', player) or state.count('Fungus2_18[right1]', player) or (state.count('Fungus2_18[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player)))) + fn("Geo_Rock-Fungal_Above_City_Entrance", lambda state: state.count('Fungus2_21[right1]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player)))) + fn("Geo_Rock-Deepnest_By_Mantis_Lords_1", lambda state: state.count('Fungus2_25[top1]', player) or ((state.count('Fungus2_25[top2]', player) or state.count('Fungus2_25[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Deepnest_By_Mantis_Lords_2", lambda state: state.count('Fungus2_25[top1]', player) or ((state.count('Fungus2_25[top2]', player) or state.count('Fungus2_25[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Deepnest_Lower_Cornifer", lambda state: (state.count('Fungus2_25[top1]', player) or state.count('Fungus2_25[top2]', player) or state.count('Fungus2_25[right1]', player)) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) + fn("Geo_Rock-Fungal_Core_Entrance", lambda state: state.count('Fungus2_29[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or (state.count('Fungus2_29[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) + fn("Geo_Rock-Fungal_Core_Hidden", lambda state: state.count('Fungus2_30[top1]', player)) + fn("Geo_Rock-Fungal_Core_Above_Elder", lambda state: state.count('Fungus2_30[top1]', player) and state.count('WINGS', player)) + fn("Geo_Rock-Queen's_Gardens_Acid_Entrance", lambda state: state.count('Fungus3_03[right1]', player) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips')))) + fn("Geo_Rock-Queen's_Gardens_Below_Stag", lambda state: state.count('Fungus3_10[top1]', player)) + fn("Geo_Rock-Fog_Canyon_East", lambda state: state.count('Fungus3_26', player) and (state.count('MASKSHARDS', player) > 15 or state.count('FIREBALL', player))) + fn("Geo_Rock-Love_Key", lambda state: state.count('Fungus3_39[left1]', player)) + fn("Geo_Rock-Love_Key_Dupe", lambda state: state.count('Fungus3_39[left1]', player)) + fn("Geo_Rock-Queen's_Gardens_Above_Marmu", lambda state: state.count('Fungus3_48[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or (state.count('Fungus3_48[right2]', player) and (state.count('RIGHTSUPERDASH', player) or state.count('RIGHTDASH', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Geo_Rock-Pale_Lurker", lambda state: state.count('GG_Lurker[left1]', player) and state.count('RIGHTCLAW', player) and (state.count('WINGS', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player)))) + fn("Geo_Rock-Godhome_Pipeway", lambda state: state.count('GG_Pipeway[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('RIGHTDASH', player) or state.count('SWIM', player))) or state.count('WINGS', player)) or (state.count('GG_Pipeway[right1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and (state.count('RIGHTDASH', player) or state.count('SWIM', player))) or state.count('WINGS', player)))) + fn("Geo_Rock-Hive_Entrance", lambda state: state.count('Hive_01[left1]', player) or state.count('Hive_01[right1]', player)) + fn("Geo_Rock-Hive_Outside_Bench", lambda state: state.count('Hive_02[left2]', player) or ((state.count('Hive_02[left1]', player) or state.count('Hive_02[left3]', player)) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))))) + fn("Geo_Rock-Hive_Below_Root", lambda state: state.count('Hive_02[left1]', player) or ((state.count('Hive_02[left2]', player) or state.count('Hive_02[left3]', player)) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTCLAW', player) or state._hk_option(player, 'EnemyPogos')))) + fn("Geo_Rock-Hive_After_Root", lambda state: state.count('Hive_02[left1]', player) or ((state.count('Hive_02[left2]', player) or state.count('Hive_02[left3]', player)) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTCLAW', player))))) + fn("Geo_Rock-Hive_Below_Stash", lambda state: state.count('Hive_03[bot1]', player) or state.count('Hive_03[right1]', player)) + fn("Geo_Rock-Hive_Stash", lambda state: state.count('Hive_03[right1]', player) or (state.count('Hive_03[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos'))))) + fn("Geo_Rock-Hive_Stash_Dupe", lambda state: state.count('Hive_03[right1]', player) or (state.count('Hive_03[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos'))))) + fn("Geo_Rock-Hive_Below_Grub", lambda state: state.count('Hive_04[left1]', player) or (state.count('Hive_04[right1]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('LEFTDASH', player) or state.count('WINGS', player)))) + fn("Geo_Rock-Hive_Above_Mask", lambda state: state.count('Hive_04[left1]', player) or (state.count('Hive_04[right1]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('LEFTDASH', player) or state.count('WINGS', player)))) + fn("Geo_Rock-Crystal_Peak_Lower_Middle", lambda state: state.count('Mines_02', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('Mines_02[top2]', player))) + fn("Geo_Rock-Crystal_Peak_Lower_Conveyer_1", lambda state: state.count('Mines_02', player)) + fn("Geo_Rock-Crystal_Peak_Lower_Conveyer_2", lambda state: state.count('Mines_02', player)) + fn("Geo_Rock-Crystal_Peak_Before_Dark_Room", lambda state: state.count('Mines_04', player)) + fn("Geo_Rock-Crystal_Peak_Before_Dark_Room_Dupe", lambda state: state.count('Mines_04', player)) + fn("Geo_Rock-Crystal_Peak_Above_Spike_Grub", lambda state: state.count('Mines_05', player)) + fn("Geo_Rock-Crystal_Peak_Mimic_Grub", lambda state: state.count('Mines_16[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or (state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips')))) + fn("Geo_Rock-Crystal_Peak_Dive_Egg", lambda state: state.count('Mines_20', player) and state.count('QUAKE', player)) + fn("Geo_Rock-Crystal_Peak_Dive_Egg_Dupe", lambda state: state.count('Mines_20', player) and state.count('QUAKE', player)) + fn("Geo_Rock-Crystal_Peak_Conga_Line", lambda state: state.count('Mines_20', player)) + fn("Geo_Rock-Hallownest_Crown_Dive", lambda state: (state.count('Mines_25[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) or state.count('Mines_25[top1]', player)) and state.count('QUAKE', player)) + fn("Geo_Rock-Hallownest_Crown_Dive_Dupe", lambda state: (state.count('Mines_25[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) or state.count('Mines_25[top1]', player)) and state.count('QUAKE', player)) + fn("Geo_Rock-Hallownest_Crown_Hidden", lambda state: state.count('Mines_25[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) or (state.count('Mines_25[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('CYCLONE', player)))) + fn("Geo_Rock-Hallownest_Crown_Hidden_Dupe_1", lambda state: state.count('Mines_25[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) or (state.count('Mines_25[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('CYCLONE', player)))) + fn("Geo_Rock-Hallownest_Crown_Hidden_Dupe_2", lambda state: state.count('Mines_25[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) or (state.count('Mines_25[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('CYCLONE', player)))) + fn("Geo_Rock-Crystal_Peak_Before_Crystal_Heart", lambda state: state.count('Mines_31[left1]', player)) + fn("Geo_Rock-Crystal_Peak_Entrance", lambda state: (state.count('Mines_33[left1]', player) or state.count('Mines_33[right1]', player)) and state.count('LANTERN', player)) + fn("Geo_Rock-Crystal_Peak_Entrance_Dupe_1", lambda state: (state.count('Mines_33[left1]', player) or state.count('Mines_33[right1]', player)) and state.count('LANTERN', player)) + fn("Geo_Rock-Crystal_Peak_Entrance_Dupe_2", lambda state: (state.count('Mines_33[left1]', player) or state.count('Mines_33[right1]', player)) and state.count('LANTERN', player)) + fn("Geo_Rock-Crystal_Peak_Above_Crushers_Lower", lambda state: (state.count('Mines_37[top1]', player) or state.count('Mines_37[bot1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips')))) + fn("Geo_Rock-Crystal_Peak_Above_Crushers_Higher", lambda state: (state.count('Mines_37[top1]', player) or state.count('Mines_37[bot1]', player)) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player)))) + fn("Geo_Rock-Resting_Grounds_Catacombs_Grub", lambda state: state.count('RestingGrounds_10[top1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Geo_Rock-Resting_Grounds_Catacombs_Left_Dupe", lambda state: state.count('RestingGrounds_10[top1]', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Geo_Rock-Resting_Grounds_Catacombs_Left", lambda state: state.count('RestingGrounds_10[top1]', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))))) + fn("Geo_Rock-Overgrown_Mound", lambda state: state.count('Room_Fungus_Shaman[left1]', player)) + fn("Geo_Rock-Fluke_Hermit_Dupe", lambda state: state.count('Room_GG_Shortcut[top1]', player) or (state.count('Room_GG_Shortcut[left1]', player) and (state.count('RIGHTCLAW', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player) or (state.count('RIGHTDASH', player) and state.count('SWIM', player))) or (state.count('LEFTCLAW', player) and state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))))) + fn("Geo_Rock-Fluke_Hermit", lambda state: state.count('Room_GG_Shortcut[top1]', player) or (state.count('Room_GG_Shortcut[left1]', player) and (state.count('RIGHTCLAW', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player) or (state.count('RIGHTDASH', player) and state.count('SWIM', player))) or (state.count('LEFTCLAW', player) and state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)))))) + fn("Geo_Rock-Pleasure_House", lambda state: state.count('Ruins_Elevator[left1]', player) or state.count('Ruins_Elevator[left2]', player)) + fn("Geo_Rock-City_of_Tears_Quirrel", lambda state: state.count('Ruins1_03', player)) + fn("Geo_Rock-City_of_Tears_Lemm", lambda state: state.count('Ruins1_05b', player)) + fn("Geo_Rock-City_of_Tears_Above_Lemm", lambda state: state.count('Ruins1_05c', player)) + fn("Geo_Rock-Soul_Sanctum", lambda state: state.count('Ruins1_32[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('QUAKE', player)) + fn("Geo_Rock-Watcher's_Spire", lambda state: (state.count('Ruins2_01[top1]', player) or state.count('Ruins2_01[left2]', player) or (state.count('Ruins2_01[bot1]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state._hk_option(player, 'EnemyPogos')) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DifficultSkips'))))) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or state.count('WINGS', player))) + fn("Geo_Rock-Above_King's_Station", lambda state: state.count('Ruins2_05[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) or state.count('Ruins2_05[left1]', player) or state.count('Ruins2_05[top1]', player)) + fn("Geo_Rock-King's_Station", lambda state: (state.count('Ruins2_06[left1]', player) or state.count('Ruins2_06[top1]', player) or state.count('Ruins2_06[right1]', player) or state.count('Ruins2_06[right2]', player)) and (state.count('RIGHTCLAW', player) or ((state.count('WINGS', player) or state.count('LEFTCLAW', player)) and state._hk_option(player, 'ShadeSkips')) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')))) or (state.count('Ruins2_06[left2]', player) and (state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state._hk_option(player, 'PreciseMovement'))) and (state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')))))) + fn("Geo_Rock-King's_Pass_Left", lambda state: state.count('Tutorial_01[right1]', player) or state.count('Tutorial_01[top1]', player) or state.count('Tutorial_01[top2]', player)) + fn("Geo_Rock-King's_Pass_Below_Fury", lambda state: state.count('Tutorial_01[right1]', player) or state.count('Tutorial_01[top1]', player) or state.count('Tutorial_01[top2]', player)) + fn("Geo_Rock-King's_Pass_Hidden", lambda state: state.count('Tutorial_01[right1]', player) or state.count('Tutorial_01[top1]', player) or state.count('Tutorial_01[top2]', player)) + fn("Geo_Rock-King's_Pass_Collapse", lambda state: state.count('Tutorial_01[right1]', player) or state.count('Tutorial_01[top1]', player) or state.count('Tutorial_01[top2]', player)) + fn("Geo_Rock-King's_Pass_Above_Fury", lambda state: state.count('Tutorial_01[right1]', player) or state.count('Tutorial_01[top1]', player) or state.count('Tutorial_01[top2]', player)) + fn("Geo_Rock-Waterways_Tuk", lambda state: state.count('Waterways_01', player) and (state.count('Waterways_01[right1]', player) or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Geo_Rock-Waterways_Tuk_Alcove", lambda state: state.count('Waterways_01', player)) + fn("Geo_Rock-Waterways_Left", lambda state: state.count('Waterways_04b[left1]', player) or (state.count('Waterways_04b[right1]', player) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state.count('LEFTSUPERDASH', player)))) or (state.count('Waterways_04b[right2]', player) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')) and (state.count('SWIM', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player))))) + fn("Geo_Rock-Waterways_East", lambda state: state.count('Waterways_07[top1]', player) or state.count('Waterways_07[door1]', player) or (state.count('Waterways_07', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Geo_Rock-Waterways_Flukemarm", lambda state: state.count('Waterways_08[left2]', player) or ((state.count('Waterways_08[top1]', player) and (state._hk_option(player, 'EnemyPogos') or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player)) or state.count('Waterways_08[left1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Boss_Geo-Massive_Moss_Charger", lambda state: state.count('Fungus1_29[left1]', player) or state.count('Fungus1_29[right1]', player)) + fn("Boss_Geo-Gorgeous_Husk", lambda state: state.count('Ruins_House_02[left1]', player)) + fn("Boss_Geo-Sanctum_Soul_Warrior", lambda state: state.count('Ruins1_23[top1]', player) or (state.count('Ruins1_23', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player) and state._hk_option(player, 'BackgroundObjectPogos'))))) + fn("Boss_Geo-Elegant_Soul_Warrior", lambda state: (state.count('Ruins1_31b[right1]', player) or state.count('Ruins1_31b[right2]', player)) and state.count('Defeated_Elegant_Warrior', player)) + fn("Boss_Geo-Crystal_Guardian", lambda state: (state.count('Mines_18[left1]', player) or state.count('Mines_18[right1]', player) or state.count('Mines_18[top1]', player)) and state.count('Defeated_Crystal_Guardian', player)) + fn("Boss_Geo-Enraged_Guardian", lambda state: state.count('Mines_32[bot1]', player) and state.count('Defeated_Enraged_Guardian', player)) + fn("Boss_Geo-Gruz_Mother", lambda state: (state.count('Crossroads_04[left1]', player) or state.count('Crossroads_04[door_Mender_House]', player) or state.count('Crossroads_04[door1]', player) or state.count('Crossroads_04[door_charmshop]', player) or state.count('Crossroads_04[right1]', player) or state.count('Crossroads_04[top1]', player)) and state.count('Defeated_Gruz_Mother', player)) + fn("Boss_Geo-Vengefly_King", lambda state: (state.count('Fungus1_20_v02[bot1]', player) or state.count('Fungus1_20_v02[bot2]', player) or state.count('Fungus1_20_v02[right1]', player)) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state._hk_option(player, 'EnemyPogos') or state.count('FIREBALL', player) or state.count('QUAKE', player) or state.count('SCREAM', player) or state.count('WINGS', player) or state.count('Cyclone_Slash', player) or state.count('Great_Slash', player) or ((state.count('LEFTDASH', player) or state.count('RIGHTDASH', player)) and state.count('Dash_Slash', player)))) + fn("Soul_Totem-Basin", lambda state: state.count('Abyss_04[top1]', player) or ((state.count('Abyss_04[left1]', player) or state.count('Abyss_04[right1]', player) or state.count('Abyss_04[bot1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos'))))) + fn("Soul_Totem-Cliffs_Main", lambda state: state.count('Cliffs_01', player)) + fn("Soul_Totem-Cliffs_Gorb", lambda state: state.count('Cliffs_02', player)) + fn("Soul_Totem-Cliffs_Joni's", lambda state: (state.count('Cliffs_04[left1]', player) or state.count('Cliffs_04[right1]', player)) and (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms'))) + fn("Soul_Totem-Crossroads_Goam_Journal", lambda state: state.count('Crossroads_18[right1]', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or (state.count('LEFTCLAW', player) and (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)) or (state._hk_option(player, 'InfectionSkips') and (state.count('DREAMER', player) or (state._hk_option(player, 'AltBlackEgg') and (state.count('SPELLS', player)))))))) or ((state.count('Crossroads_18[bot1]', player) or state.count('Crossroads_18[right2]', player)) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or state.count('LEFTCLAW', player)))) + fn("Soul_Totem-Crossroads_Shops", lambda state: state.count('Crossroads_19', player)) + fn("Soul_Totem-Crossroads_Mawlek_Upper", lambda state: state.count('Crossroads_25[left1]', player) or state.count('Crossroads_25[right1]', player)) + fn("Soul_Totem-Crossroads_Acid", lambda state: state.count('Crossroads_35[right1]', player) and (state._hk_option(player, 'AcidSkips') and (state.count('LEFTCLAW', player) and state.count('RIGHTSUPERDASH', player) and (state.count('WINGS', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state.count('RIGHTDASH', player))) or state.count('ACID', player)) or state.count('Crossroads_35[bot1]', player)) + fn("Soul_Totem-Crossroads_Mawlek_Lower", lambda state: state.count('Crossroads_36[right1]', player) or state.count('Crossroads_36[right2]', player)) + fn("Soul_Totem-Crossroads_Myla", lambda state: state.count('Crossroads_45[left1]', player) or state.count('Crossroads_45[right1]', player)) + fn("Soul_Totem-Ancestral_Mound", lambda state: state.count('Crossroads_ShamanTemple[left1]', player) and (((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('UPSLASH', player) or state.count('FIREBALL', player) or state.count('SCREAM', player) or state.count('QUAKE', player) or state.count('CYCLONE', player) or state.count('Great_Slash', player) or (state.count('Dash_Slash', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) or ((state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player) or (state.count('RIGHTSUPERDASH', player) and state.count('LEFTCLAW', player))) and state._hk_option(player, 'ObscureSkips')))) + fn("Soul_Totem-Distant_Village", lambda state: state.count('Deepnest_10[door1]', player) or state.count('Deepnest_10[door2]', player) or state.count('Deepnest_10[right1]', player) or (state.count('Deepnest_10[right2]', player) and (state.count('LEFTDASH', player) or ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state._hk_option(player, 'PreciseMovement')) or state.count('WINGS', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))))) + fn("Soul_Totem-Deepnest_Vessel", lambda state: state.count('Deepnest_38[bot1]', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Soul_Totem-Mask_Maker", lambda state: (state.count('LANTERN', player) or state._hk_option(player, 'DarkRooms')) and (state.count('Deepnest_42[left1]', player) or state.count('Deepnest_42[bot1]', player) or state.count('Deepnest_42[top1]', player))) + fn("Soul_Totem-Lower_Kingdom's_Edge_1", lambda state: state.count('Deepnest_East_01[top1]', player) or state.count('Deepnest_East_01[bot1]', player) or state.count('Deepnest_East_01[right1]', player)) + fn("Soul_Totem-Lower_Kingdom's_Edge_2", lambda state: (state.count('Deepnest_East_02[top1]', player) or state.count('Deepnest_East_02[bot1]', player) or state.count('Deepnest_East_02[right1]', player)) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player) or state.count('ACID', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) or state._hk_option(player, 'EnemyPogos'))) + fn("Soul_Totem-Upper_Kingdom's_Edge", lambda state: state.count('Deepnest_East_07', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('Deepnest_East_07[left1]', player))) + fn("Soul_Totem-Kingdom's_Edge_Camp", lambda state: (state.count('Deepnest_East_11[left1]', player) or state.count('Deepnest_East_11[top1]', player) or state.count('Deepnest_East_11[right1]', player) or (state.count('Deepnest_East_11[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')))) and (state.count('LEFTDASH', player) or state.count('LEFTCLAW', player) or state.count('WINGS', player) or state._hk_option(player, 'DifficultSkips'))) + fn("Soul_Totem-Oro_Dive_2", lambda state: state.count('Deepnest_East_14[top2]', player) and state.count('QUAKE', player) and (state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Soul_Totem-Oro_Dive_1", lambda state: state.count('Deepnest_East_14[top2]', player)) + fn("Soul_Totem-Oro", lambda state: state.count('Deepnest_East_16[left1]', player) or state.count('Deepnest_East_16[bot1]', player)) + fn("Soul_Totem-420_Geo_Rock", lambda state: state.count('Deepnest_East_17[left1]', player) and state.count('QUAKE', player)) + fn("Soul_Totem-Beast's_Den", lambda state: state.count('Deepnest_Spider_Town[left1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player))) + fn("Soul_Totem-Greenpath_Hunter's_Journal", lambda state: state.count('Fungus1_07[top1]', player) or state.count('Fungus1_07[right1]', player) or state.count('Fungus1_07[left1]', player)) + fn("Soul_Totem-Greenpath_MMC", lambda state: state.count('Fungus1_29[left1]', player) or state.count('Fungus1_29[right1]', player)) + fn("Soul_Totem-Greenpath_Below_Toll", lambda state: state.count('Fungus1_30', player)) + fn("Soul_Totem-Before_Pilgrim's_Way", lambda state: state.count('Fungus2_10[right1]', player) or state.count('Fungus2_10[right2]', player) or state.count('Fungus2_10[bot1]', player)) + fn("Soul_Totem-Pilgrim's_Way", lambda state: state.count('Fungus2_21[left1]', player) and (state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player))) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state.count('ACID', player)) or (state.count('Fungus2_21[right1]', player) and ((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player))) and state.count('QUAKE', player))) + fn("Soul_Totem-Fungal_Core", lambda state: state.count('Fungus2_29[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or (state.count('Fungus2_29[bot1]', player) and (state.count('LEFTCLAW', player) or state.count('WINGS', player)))) + fn("Soul_Totem-Top_Left_Queen's_Gardens", lambda state: state.count('Fungus3_21[right1]', player) and (state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))))) or (state.count('Fungus3_21[top1]', player) and state.count('RIGHTDASH', player))) + fn("Soul_Totem-Below_Marmu", lambda state: state.count('Fungus3_40[top1]', player) or (state.count('Fungus3_40[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('LEFTSUPERDASH', player)) or state.count('WINGS', player) or state.count('LEFTDASH', player)))) + fn("Soul_Totem-Upper_Crystal_Peak", lambda state: state.count('Mines_20', player) or state.count('Mines_20[left2]', player) or ((state.count('Mines_20[left3]', player) or state.count('Mines_20[bot1]', player)) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) + fn("Soul_Totem-Hallownest_Crown", lambda state: (state.count('Mines_25[left1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or (state.count('WINGS', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)))) or state.count('Mines_25[top1]', player)) and state.count('QUAKE', player)) + fn("Soul_Totem-Outside_Crystallized_Mound", lambda state: state.count('Mines_28[door1]', player) or (state.count('Mines_28[left1]', player) and (state.count('WINGS', player) and state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and (state.count('WINGS', player) or state.count('RIGHTDASH', player)))))) + fn("Soul_Totem-Crystal_Heart_1", lambda state: state.count('Mines_31[left1]', player) and (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) or (state.count('RIGHTSUPERDASH', player) and state._hk_option(player, 'PreciseMovement'))) or (state.count('RIGHTCLAW', player) and state.count('RIGHTSUPERDASH', player) and state.count('RIGHTDASH', player) and state.count('WINGS', player)) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Soul_Totem-Crystal_Heart_2", lambda state: state.count('Mines_31[left1]', player) and (state.count('LEFTCLAW', player) and (state.count('RIGHTDASH', player) or state.count('WINGS', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player)))) or (state.count('RIGHTCLAW', player) and state.count('RIGHTSUPERDASH', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('WINGS', player)) or (state.count('WINGS', player) and state._hk_option(player, 'ShadeSkips') and (state.count('MASKSHARDS', player) > 15)))) + fn("Soul_Totem-Crystallized_Mound", lambda state: state.count('Mines_35[left1]', player) and state.count('QUAKE', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'PreciseMovement') and (state.count('RIGHTDASH', player) or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))))) or state.count('WINGS', player)) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state._hk_option(player, 'BackgroundObjectPogos'))) + fn("Soul_Totem-Resting_Grounds", lambda state: state.count('RestingGrounds_05', player)) + fn("Soul_Totem-Below_Xero", lambda state: state.count('RestingGrounds_06[left1]', player) or state.count('RestingGrounds_06[right1]', player) or state.count('RestingGrounds_06[top1]', player)) + fn("Soul_Totem-Sanctum_Below_Soul_Master", lambda state: state.count('Ruins1_24[left2]', player) or state.count('Ruins1_24[right2]', player)) + fn("Soul_Totem-Sanctum_Below_Chest", lambda state: state.count('Ruins1_32[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player))) + fn("Soul_Totem-Sanctum_Above_Grub", lambda state: state.count('Ruins1_32[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('QUAKE', player)) + fn("Soul_Totem-Waterways_Entrance", lambda state: state.count('Waterways_01', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)) or ((state.count('Waterways_01[top1]', player) or state.count('Waterways_01[right1]', player)) and (state.count('LEFTDASH', player) or state._hk_option(player, 'EnemyPogos') or (state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) or state._hk_option(player, 'ShadeSkips')))) + fn("Soul_Totem-Top_Left_Waterways", lambda state: state.count('Waterways_04b[left1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))) or (state.count('Waterways_04b[right1]', player) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('SWIM', player) or (state.count('RIGHTCLAW', player) and state.count('RIGHTDASH', player) and state.count('LEFTSUPERDASH', player))) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips')))) or (state.count('Waterways_04b[right2]', player) and (state.count('WINGS', player) or (state.count('LEFTCLAW', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))) and (state.count('LEFTCLAW', player) or state._hk_option(player, 'EnemyPogos')) and (state.count('SWIM', player) or (state.count('LEFTSUPERDASH', player) and state.count('RIGHTCLAW', player))) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or (state.count('WINGS', player) and state._hk_option(player, 'EnemyPogos') and state._hk_option(player, 'DangerousSkips'))))) + fn("Soul_Totem-Waterways_East", lambda state: state.count('Waterways_07', player) and (state.count('LEFTCLAW', player) and (state.count('LEFTDASH', player) or state.count('WINGS', player) or state.count('LEFTSUPERDASH', player) or ((state._hk_option(player, 'FireballSkips') and (state.count('FIREBALL', player) or state.count('SCREAM', player))) and state.count('RIGHTCLAW', player)) or state._hk_option(player, 'EnemyPogos')) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player)))) + fn("Soul_Totem-Waterways_Flukemarm", lambda state: state.count('Waterways_08[top1]', player) and (state._hk_option(player, 'EnemyPogos') or state.count('RIGHTCLAW', player) or state.count('WINGS', player) or state.count('RIGHTSUPERDASH', player)) or state.count('Waterways_08[left1]', player) or state.count('Waterways_08[left2]', player)) + fn("Soul_Totem-White_Palace_Entrance", lambda state: state.count('White_Palace_02[left1]', player) and (state.count('LEFTCLAW', player) and state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('LEFTSUPERDASH', player)))) + fn("Soul_Totem-White_Palace_Hub", lambda state: state.count('White_Palace_03_hub', player) and (state.count('LEFTDASH', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state.count('White_Palace_03_hub[left1]', player))) + fn("Soul_Totem-White_Palace_Left", lambda state: state.count('White_Palace_04[right2]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or state.count('White_Palace_04[top1]', player)) + fn("Soul_Totem-White_Palace_Final", lambda state: state.count('White_Palace_09[right1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player)) and state.count('LEFTSUPERDASH', player)) + fn("Soul_Totem-White_Palace_Right", lambda state: state.count('White_Palace_15[right1]', player)) + fn("Soul_Totem-Path_of_Pain_Below_Lever", lambda state: state.count('White_Palace_17[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player)) + fn("Soul_Totem-Path_of_Pain_Left_of_Lever", lambda state: state.count('White_Palace_17[bot1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player)) + fn("Soul_Totem-Path_of_Pain_Entrance", lambda state: state.count('White_Palace_18[right1]', player) and ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state.count('WINGS', player) or state.count('LEFTSUPERDASH', player)) or (state.count('White_Palace_18[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) + fn("Soul_Totem-Path_of_Pain_Second", lambda state: state.count('White_Palace_18[right1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) or (state.count('White_Palace_18[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) + fn("Soul_Totem-Path_of_Pain_Hidden", lambda state: (state.count('White_Palace_19[left1]', player) or state.count('White_Palace_19[top1]', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player))) + fn("Soul_Totem-Path_of_Pain_Below_Thornskip", lambda state: state.count('White_Palace_19[left1]', player) or (state.count('White_Palace_19[top1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)))) + fn("Soul_Totem-Path_of_Pain_Final", lambda state: state.count('White_Palace_20[bot1]', player) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player))) + fn("Soul_Totem-Pale_Lurker", lambda state: state.count('GG_Lurker[left1]', player)) + fn("Lore_Tablet-City_Entrance", lambda state: state.count('Ruins1_02[top1]', player) or (state.count('Ruins1_02[bot1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Lore_Tablet-Pleasure_House", lambda state: state.count('Ruins_Elevator[left1]', player) or state.count('Ruins_Elevator[left2]', player)) + fn("Lore_Tablet-Sanctum_Entrance", lambda state: (state.count('Ruins1_23[left1]', player) or state.count('Ruins1_23[bot1]', player) or state.count('Ruins1_23[right2]', player)) and (state.count('LEFTCLAW', player) or state.count('WINGS', player) or (state.count('RIGHTCLAW', player) and state._hk_option(player, 'EnemyPogos')))) + fn("Lore_Tablet-Sanctum_Past_Soul_Master", lambda state: state.count('Ruins1_32[right1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('QUAKE', player)) + fn("Lore_Tablet-Watcher's_Spire", lambda state: state.count('Ruins2_Watcher_Room[bot1]', player)) + fn("Lore_Tablet-Archives_Upper", lambda state: state.count('Fungus3_archive_02[top1]', player) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos'))) + fn("Lore_Tablet-Archives_Left", lambda state: state.count('Fungus3_archive_02[top1]', player) and state.count('Defeated_Uumuu', player) and ((state.count('RIGHTCLAW', player) or (state.count('LEFTCLAW', player) and state.count('WINGS', player))) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player) or state.count('ACID', player)) or (state._hk_option(player, 'AcidSkips') and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player)))) + fn("Lore_Tablet-Archives_Right", lambda state: state.count('Fungus3_archive_02[top1]', player) and state.count('Defeated_Uumuu', player) and ((state.count('LEFTSUPERDASH', player) or state.count('RIGHTSUPERDASH', player)) or state.count('ACID', player) or (state._hk_option(player, 'AcidSkips') and state.count('LEFTDASH', player) and state.count('LEFTCLAW', player) and state.count('WINGS', player)))) + fn("Lore_Tablet-Pilgrim's_Way_1", lambda state: state.count('Crossroads_11_alt[right1]', player)) + fn("Lore_Tablet-Pilgrim's_Way_2", lambda state: state.count('Fungus2_21[left1]', player) or (((state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player)) or ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player))) and state.count('QUAKE', player) and state.count('Fungus2_21[right1]', player))) + fn("Lore_Tablet-Mantis_Outskirts", lambda state: state.count('Fungus2_12[bot1]', player) or state.count('Fungus2_12[left1]', player)) + fn("Lore_Tablet-Mantis_Village", lambda state: state.count('Fungus2_14[top1]', player) or (state.count('Fungus2_14', player) and (state.count('WINGS', player) or state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player) or (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) or state._hk_option(player, 'EnemyPogos')) and (state.count('RIGHTCLAW', player) and (state.count('WINGS', player) or state._hk_option(player, 'EnemyPogos')) or state.count('LEFTCLAW', player)))) + fn("Lore_Tablet-Greenpath_Upper_Hidden", lambda state: state.count('Fungus1_17[left1]', player) or state.count('Fungus1_17[right1]', player)) + fn("Lore_Tablet-Greenpath_Below_Toll", lambda state: state.count('Fungus1_30', player)) + fn("Lore_Tablet-Greenpath_Lifeblood", lambda state: state.count('Fungus1_32[bot1]', player) or state.count('Fungus1_32[top1]', player) or state.count('Fungus1_32[left1]', player)) + fn("Lore_Tablet-Greenpath_Stag", lambda state: state.count('Fungus1_21', player)) + fn("Lore_Tablet-Greenpath_QG", lambda state: state.count('Fungus1_13[left1]', player) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Cyclone_Slash', player) or state.count('Great_Slash', player) or (state.count('RIGHTDASH', player) and state.count('Dash_Slash', player))) or (state.count('Fungus1_13[right1]', player) and (state.count('LEFTCLAW', player) or (state.count('RIGHTCLAW', player) and state.count('WINGS', player) and (state.count('LEFTDASH', player) or state.count('LEFTSUPERDASH', player))) or ((state.count('WINGS', player) or state.count('LEFTSUPERDASH', player)) and state._hk_option(player, 'DamageBoosts') and (state.count('MASKSHARDS', player) > 7))) and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Cyclone_Slash', player) or state.count('Great_Slash', player) or (state.count('LEFTDASH', player) and state.count('Dash_Slash', player)))) or (False and ((state.count('LEFTSLASH', player) or state.count('RIGHTSLASH', player)) or state.count('Cyclone_Slash', player) or state.count('Great_Slash', player) or (state.count('LEFTDASH', player) and state.count('Dash_Slash', player))))) + fn("Lore_Tablet-Greenpath_Lower_Hidden", lambda state: state.count('Fungus1_19[bot1]', player) or state.count('Fungus1_19[left1]', player) or state.count('Fungus1_19[right1]', player)) + fn("Lore_Tablet-Dung_Defender", lambda state: state.count('Waterways_07', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or ((state.count('Waterways_07[door1]', player) or state.count('Waterways_07[top1]', player) or state.count('Waterways_07[right1]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player)))) + fn("Lore_Tablet-Spore_Shroom", lambda state: (state.count('Fungus2_20[left1]', player) or state.count('Fungus2_20[right1]', player)) and (state.count('RIGHTDASH', player) or state.count('RIGHTSUPERDASH', player) or state.count('WINGS', player)) and state.count('Spore_Shroom', player)) + fn("Lore_Tablet-Fungal_Wastes_Hidden", lambda state: (state.count('Fungus2_07[left1]', player) or state.count('Fungus2_07[right1]', player)) and (state.count('LEFTCLAW', player) or (state.count('WINGS', player) and state.count('RIGHTCLAW', player))) and state.count('Spore_Shroom', player)) + fn("Lore_Tablet-Fungal_Wastes_Below_Shrumal_Ogres", lambda state: state.count('Fungus2_04', player) and state.count('Spore_Shroom', player)) + fn("Lore_Tablet-Fungal_Core", lambda state: state.count('Fungus2_30[top1]', player) and state.count('Spore_Shroom', player)) + fn("Lore_Tablet-Ancient_Basin", lambda state: state.count('Abyss_06_Core[top1]', player)) + fn("Lore_Tablet-King's_Pass_Focus", lambda state: state.count('Tutorial_01', player)) + fn("Lore_Tablet-King's_Pass_Fury", lambda state: state.count('Tutorial_01', player)) + fn("Lore_Tablet-King's_Pass_Exit", lambda state: state.count('Tutorial_01', player)) + fn("Lore_Tablet-World_Sense", lambda state: state.count('Room_temple[left1]', player) and state.count('Opened_Black_Egg_Temple', player)) + fn("Lore_Tablet-Howling_Cliffs", lambda state: state.count('Cliffs_01[right1]', player) or state.count('Cliffs_01[right2]', player) or ((state.count('Cliffs_01[right3]', player) or state.count('Cliffs_01[right4]', player)) and ((state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) or state.count('WINGS', player) or ((state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and state._hk_option(player, 'EnemyPogos'))))) + fn("Lore_Tablet-Kingdom's_Edge", lambda state: state.count('Deepnest_East_17[left1]', player) and state.count('QUAKE', player) and state.count('Spore_Shroom', player)) + fn("Lore_Tablet-Palace_Workshop", lambda state: state.count('White_Palace_08[right1]', player) or (state.count('White_Palace_08[left1]', player) and (state.count('LEFTCLAW', player) or state.count('RIGHTCLAW', player)) and state.count('WINGS', player))) + fn("Lore_Tablet-Palace_Throne", lambda state: state.count('White_Palace_09[right1]', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player) or state.count('WINGS', player))) + fn("Lore_Tablet-Path_of_Pain_Entrance", lambda state: state.count('White_Palace_18[right1]', player) or (state.count('White_Palace_18[top1]', player) and (state.count('LEFTDASH', player) and state.count('RIGHTDASH', player)) and (state.count('LEFTCLAW', player) and state.count('RIGHTCLAW', player)) and state.count('WINGS', player) and (state.count('LEFTSUPERDASH', player) and state.count('RIGHTSUPERDASH', player)))) + fn("Salubra_(Requires_Charms)", lambda state: state.count('Room_Charm_Shop[left1]', player)) + + # Connectors + \ No newline at end of file diff --git a/World/GodhomeData.py b/World/GodhomeData.py new file mode 100644 index 0000000..a2dd69e --- /dev/null +++ b/World/GodhomeData.py @@ -0,0 +1,55 @@ +from functools import partial + + +godhome_event_names = ["Godhome_Flower_Quest", "Defeated_Pantheon_5", "GG_Atrium_Roof", "Defeated_Pantheon_1", "Defeated_Pantheon_2", "Defeated_Pantheon_3", "Opened_Pantheon_4", "Defeated_Pantheon_4", "GG_Atrium", "Hit_Pantheon_5_Unlock_Orb", "GG_Workshop", "Can_Damage_Crystal_Guardian", 'Defeated_Any_Soul_Warrior', "Defeated_Colosseum_3", "COMBAT[Radiance]", "COMBAT[Pantheon_1]", "COMBAT[Pantheon_2]", "COMBAT[Pantheon_3]", "COMBAT[Pantheon_4]", "COMBAT[Pantheon_5]", "COMBAT[Colosseum_3]", 'Warp-Junk_Pit_to_Godhome', 'Bench-Godhome_Atrium', 'Bench-Hall_of_Gods', "GODTUNERUNLOCK", "GG_Waterways", "Warp-Godhome_to_Junk_Pit", "NAILCOMBAT", "BOSS", "AERIALMINIBOSS"] + + +def set_godhome_rules(hk_world, hk_set_rule): + player = hk_world.player + fn = partial(hk_set_rule, hk_world) + + required_events = { + "Godhome_Flower_Quest": lambda state: state.count('Defeated_Pantheon_5', player) and state.count('Room_Mansion[left1]', player) and state.count('Fungus3_49[right1]', player) and state.has('Godtuner', player), + + "Defeated_Pantheon_5": lambda state: state.has('GG_Atrium_Roof', player) and state.has('WINGS', player) and (state.has('LEFTCLAW', player) or state.has('RIGHTCLAW', player)) and ((state.has('Defeated_Pantheon_1', player) and state.has('Defeated_Pantheon_2', player) and state.has('Defeated_Pantheon_3', player) and state.has('Defeated_Pantheon_4', player) and state.has('COMBAT[Radiance]', player))), + "GG_Atrium_Roof": lambda state: state.has('GG_Atrium', player) and state.has('Hit_Pantheon_5_Unlock_Orb', player) and state.has('LEFTCLAW', player), + + "Defeated_Pantheon_1": lambda state: state.has('GG_Atrium', player) and ((state.has('Defeated_Gruz_Mother', player) and state.has('Defeated_False_Knight', player) and (state.has('Fungus1_29[left1]', player) or state.has('Fungus1_29[right1]', player)) and state.has('Defeated_Hornet_1', player) and state.has('Defeated_Gorb', player) and state.has('Defeated_Dung_Defender', player) and state.has('Defeated_Any_Soul_Warrior', player) and state.has('Defeated_Brooding_Mawlek', player))), + "Defeated_Pantheon_2": lambda state: state.has('GG_Atrium', player) and ((state.has('Defeated_Xero', player) and state.has('Defeated_Crystal_Guardian', player) and state.has('Defeated_Soul_Master', player) and state.has('Defeated_Colosseum_2', player) and state.has('Defeated_Mantis_Lords', player) and state.has('Defeated_Marmu', player) and state.has('Defeated_Nosk', player) and state.has('Defeated_Flukemarm', player) and state.has('Defeated_Broken_Vessel', player))), + "Defeated_Pantheon_3": lambda state: state.has('GG_Atrium', player) and ((state.has('Defeated_Hive_Knight', player) and state.has('Defeated_Elder_Hu', player) and state.has('Defeated_Collector', player) and state.has('Defeated_Colosseum_2', player) and state.has('Defeated_Grimm', player) and state.has('Defeated_Galien', player) and state.has('Defeated_Uumuu', player) and state.has('Defeated_Hornet_2', player))), + "Opened_Pantheon_4": lambda state: state.has('GG_Atrium', player) and (state.has('Defeated_Pantheon_1', player) and state.has('Defeated_Pantheon_2', player) and state.has('Defeated_Pantheon_3', player)), + "Defeated_Pantheon_4": lambda state: state.has('GG_Atrium', player) and state.has('Opened_Pantheon_4', player) and ((state.has('Defeated_Enraged_Guardian', player) and state.has('Defeated_Broken_Vessel', player) and state.has('Defeated_No_Eyes', player) and state.has('Defeated_Traitor_Lord', player) and state.has('Defeated_Dung_Defender', player) and state.has('Defeated_False_Knight', player) and state.has('Defeated_Markoth', player) and state.has('Defeated_Watcher_Knights', player) and state.has('Defeated_Soul_Master', player))), + "GG_Atrium": lambda state: state.has('Warp-Junk_Pit_to_Godhome', player) and (state.has('RIGHTCLAW', player) or state.has('WINGS', player) or state.has('LEFTCLAW', player) and state.has('RIGHTSUPERDASH', player)) or state.has('GG_Workshop', player) and (state.has('LEFTCLAW', player) or state.has('RIGHTCLAW', player) and state.has('WINGS', player)) or state.has('Bench-Godhome_Atrium', player), + "Hit_Pantheon_5_Unlock_Orb": lambda state: state.has('GG_Atrium', player) and state.has('WINGS', player) and (state.has('LEFTCLAW', player) or state.has('RIGHTCLAW', player)) and (((state.has('Queen_Fragment', player) and state.has('King_Fragment', player) and state.has('Void_Heart', player)) and state.has('Defeated_Pantheon_1', player) and state.has('Defeated_Pantheon_2', player) and state.has('Defeated_Pantheon_3', player) and state.has('Defeated_Pantheon_4', player))), + "GG_Workshop": lambda state: state.has('GG_Atrium', player) or state.has('Bench-Hall_of_Gods', player), + "Can_Damage_Crystal_Guardian": lambda state: state.has('UPSLASH', player) or state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player) or state._hk_option(player, 'ProficientCombat') and (state.has('CYCLONE', player) or state.has('Great_Slash', player)) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat')) and (state.has('CYCLONE', player) or state.has('Great_Slash', player)) and (state.has('DREAMNAIL', player) and (state.has('SPELLS', player) or state.has('FOCUS', player) and state.has('Spore_Shroom', player) or state.has('Glowing_Womb', player)) or state.has('Weaversong', player)), + 'Defeated_Any_Soul_Warrior': lambda state: state.has('Defeated_Sanctum_Warrior', player) or state.has('Defeated_Elegant_Warrior', player) or state.has('Room_Colosseum_01[left1]', player) and state.has('Defeated_Colosseum_3', player), + "Defeated_Colosseum_3": lambda state: state.has('Room_Colosseum_01[left1]', player) and state.has('Can_Replenish_Geo', player) and ((state.has('LEFTCLAW', player) or state.has('RIGHTCLAW', player)) or ((state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat')) and state.has('WINGS', player))) and state.has('COMBAT[Colosseum_3]', player), + + # MACROS + "COMBAT[Radiance]": lambda state: (state.has('LEFTDASH', player) and state.has('RIGHTDASH', player)) and ((((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.has('LEFTDASH', player)) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.has('RIGHTDASH', player))) or state.has('QUAKE', player)) and (state.count('FIREBALL', player) > 1 and state.has('UPSLASH', player) or state.count('SCREAM', player) > 1 and state.has('UPSLASH', player) or state._hk_option(player, 'RemoveSpellUpgrades') and (state.has('FIREBALL', player) or state.has('SCREAM', player)) and state.has('UPSLASH', player) or state._hk_option(player, 'ProficientCombat') and (state.has('FIREBALL', player) or state.has('SCREAM', player)) and (state.has('UPSLASH', player) or (state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player)) or state.has('Great_Slash', player)) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat'))), + "COMBAT[Pantheon_1]": lambda state: state.has('AERIALMINIBOSS', player) and state.count('SPELLS', player) > 1 and (state.has('FOCUS', player) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat'))), + "COMBAT[Pantheon_2]": lambda state: state.has('AERIALMINIBOSS', player) and state.count('SPELLS', player) > 1 and (state.has('FOCUS', player) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat'))) and state.has('Can_Damage_Crystal_Guardian', player), + "COMBAT[Pantheon_3]": lambda state: state.has('AERIALMINIBOSS', player) and state.count('SPELLS', player) > 1 and (state.has('FOCUS', player) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat'))), + "COMBAT[Pantheon_4]": lambda state: state.has('AERIALMINIBOSS', player) and (state.has('FOCUS', player) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat'))) and state.has('Can_Damage_Crystal_Guardian', player) and (state.has('LEFTDASH', player) and state.has('RIGHTDASH', player)) and ((((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.has('LEFTDASH', player)) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.has('RIGHTDASH', player))) or state.has('QUAKE', player)) and (state.count('FIREBALL', player) > 1 and state.has('UPSLASH', player) or state.count('SCREAM', player) > 1 and state.has('UPSLASH', player) or state._hk_option(player, 'RemoveSpellUpgrades') and (state.has('FIREBALL', player) or state.has('SCREAM', player)) and state.has('UPSLASH', player) or state._hk_option(player, 'ProficientCombat') and (state.has('FIREBALL', player) or state.has('SCREAM', player)) and (state.has('UPSLASH', player) or (state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player)) or state.has('Great_Slash', player)) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat'))), + "COMBAT[Pantheon_5]": lambda state: state.has('AERIALMINIBOSS', player) and state.has('FOCUS', player) and state.has('Can_Damage_Crystal_Guardian', player) and (state.has('LEFTDASH', player) and state.has('RIGHTDASH', player)) and ((((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.has('LEFTDASH', player)) and ((state.count('LEFTDASH', player) > 1 or state.count('RIGHTDASH', player) > 1) and state.has('RIGHTDASH', player))) or state.has('QUAKE', player)) and (state.count('FIREBALL', player) > 1 and state.has('UPSLASH', player) or state.count('SCREAM', player) > 1 and state.has('UPSLASH', player) or state._hk_option(player, 'RemoveSpellUpgrades') and (state.has('FIREBALL', player) or state.has('SCREAM', player)) and state.has('UPSLASH', player) or state._hk_option(player, 'ProficientCombat') and (state.has('FIREBALL', player) or state.has('SCREAM', player)) and (state.has('UPSLASH', player) or (state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player)) or state.has('Great_Slash', player)) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat'))), + "COMBAT[Colosseum_3]": lambda state: state.has('BOSS', player) and (state.has('FOCUS', player) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat'))), + + # MISC + 'Warp-Junk_Pit_to_Godhome': lambda state: state.has('GG_Waterways', player) and state.has('GODTUNERUNLOCK', player) and state.has('DREAMNAIL', player), + 'Bench-Godhome_Atrium': lambda state: state.has('GG_Atrium', player) and (state.has('RIGHTCLAW', player) and (state.has('RIGHTDASH', player) or state.has('LEFTCLAW', player) and state.has('RIGHTSUPERDASH', player) or state.has('WINGS', player)) or state.has('LEFTCLAW', player) and state.has('WINGS', player)), + 'Bench-Hall_of_Gods': lambda state: state.has('GG_Workshop', player) and ((state.has('LEFTCLAW', player) or state.has('RIGHTCLAW', player))), + + "GODTUNERUNLOCK": lambda state: state.count('SIMPLE', player) > 3, + "GG_Waterways": lambda state: state.has('GG_Waterways[door1]', player) or state.has('GG_Waterways[right1]', player) and (state.has('LEFTSUPERDASH', player) or state.has('SWIM', player)) or state.has('Warp-Godhome_to_Junk_Pit', player), + "Warp-Godhome_to_Junk_Pit": lambda state: state.has('Warp-Junk_Pit_to_Godhome', player) or state.has('GG_Atrium', player), + + # COMBAT MACROS + "NAILCOMBAT": lambda state: (state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player)) or state.has('UPSLASH', player) or state._hk_option(player, 'ProficientCombat') and (state.has('CYCLONE', player) or state.has('Great_Slash', player)) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat')), + "BOSS": lambda state: state.count('SPELLS', player) > 1 and ((state.has('LEFTDASH', player) or state.has('RIGHTDASH', player)) and ((state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player)) or state.has('UPSLASH', player)) or state._hk_option(player, 'ProficientCombat') and state.has('NAILCOMBAT', player)), + "AERIALMINIBOSS": lambda state: (state.has('FIREBALL', player) or state.has('SCREAM', player)) and (state.has('LEFTDASH', player) or state.has('RIGHTDASH', player)) and ((state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player)) or state.has('UPSLASH', player)) or state._hk_option(player, 'ProficientCombat') and (state.has('FIREBALL', player) or state.has('SCREAM', player)) and ((state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player)) or state.has('UPSLASH', player)) or (state._hk_option(player, 'DifficultSkips') and state._hk_option(player, 'ProficientCombat')) and ((state.has('LEFTSLASH', player) or state.has('RIGHTSLASH', player)) or state.has('UPSLASH', player) or state.has('CYCLONE', player) or state.has('Great_Slash', player)), + + } + + for item, rule in required_events.items(): + fn(item, rule) diff --git a/World/Items.py b/World/Items.py new file mode 100644 index 0000000..a2b7c06 --- /dev/null +++ b/World/Items.py @@ -0,0 +1,68 @@ +from typing import Dict, Set, NamedTuple +from .ExtractedData import items, logic_items, item_effects +from .GodhomeData import godhome_event_names + +item_table = {} + + +class HKItemData(NamedTuple): + advancement: bool + id: int + type: str + + +for i, (item_name, item_type) in enumerate(items.items(), start=0x1000000): + item_table[item_name] = HKItemData(advancement=item_name in logic_items or item_name in item_effects, + id=i, type=item_type) + +for item_name in godhome_event_names: + item_table[item_name] = HKItemData(advancement=True, id=None, type=None) + +lookup_id_to_name: Dict[int, str] = {data.id: item_name for item_name, data in item_table.items()} +lookup_type_to_names: Dict[str, Set[str]] = {} +for item, item_data in item_table.items(): + lookup_type_to_names.setdefault(item_data.type, set()).add(item) + +directionals = ('', 'Left_', 'Right_') +item_name_groups = ({ + "BossEssence": lookup_type_to_names["DreamWarrior"] | lookup_type_to_names["DreamBoss"], + "BossGeo": lookup_type_to_names["Boss_Geo"], + "CDash": {x + "Crystal_Heart" for x in directionals}, + "Charms": lookup_type_to_names["Charm"], + "CharmNotches": lookup_type_to_names["Notch"], + "Claw": {x + "Mantis_Claw" for x in directionals}, + "Cloak": {x + "Mothwing_Cloak" for x in directionals} | {"Shade_Cloak", "Split_Shade_Cloak"}, + "Dive": {"Desolate_Dive", "Descending_Dark"}, + "LifebloodCocoons": lookup_type_to_names["Cocoon"], + "Dreamers": {"Herrah", "Monomon", "Lurien"}, + "Fireball": {"Vengeful_Spirit", "Shade_Soul"}, + "GeoChests": lookup_type_to_names["Geo"], + "GeoRocks": lookup_type_to_names["Rock"], + "GrimmkinFlames": lookup_type_to_names["Flame"], + "Grimmchild": {"Grimmchild1", "Grimmchild2"}, + "Grubs": lookup_type_to_names["Grub"], + "JournalEntries": lookup_type_to_names["Journal"], + "JunkPitChests": lookup_type_to_names["JunkPitChest"], + "Keys": lookup_type_to_names["Key"], + "LoreTablets": lookup_type_to_names["Lore"] | lookup_type_to_names["PalaceLore"], + "Maps": lookup_type_to_names["Map"], + "MaskShards": lookup_type_to_names["Mask"], + "Mimics": lookup_type_to_names["Mimic"], + "Nail": lookup_type_to_names["CursedNail"], + "PalaceJournal": {"Journal_Entry-Seal_of_Binding"}, + "PalaceLore": lookup_type_to_names["PalaceLore"], + "PalaceTotem": {"Soul_Totem-Palace", "Soul_Totem-Path_of_Pain"}, + "RancidEggs": lookup_type_to_names["Egg"], + "Relics": lookup_type_to_names["Relic"], + "Scream": {"Howling_Wraiths", "Abyss_Shriek"}, + "Skills": lookup_type_to_names["Skill"], + "SoulTotems": lookup_type_to_names["Soul"], + "Stags": lookup_type_to_names["Stag"], + "VesselFragments": lookup_type_to_names["Vessel"], + "WhisperingRoots": lookup_type_to_names["Root"], + "WhiteFragments": {"Queen_Fragment", "King_Fragment", "Void_Heart"}, + "DreamNails": {"Dream_Nail", "Dream_Gate", "Awoken_Dream_Nail"}, +}) +item_name_groups['Horizontal'] = item_name_groups['Cloak'] | item_name_groups['CDash'] +item_name_groups['Vertical'] = item_name_groups['Claw'] | {'Monarch_Wings'} +item_name_groups['Skills'] |= item_name_groups['Vertical'] | item_name_groups['Horizontal'] diff --git a/World/Options.py b/World/Options.py new file mode 100644 index 0000000..3efa0bf --- /dev/null +++ b/World/Options.py @@ -0,0 +1,596 @@ +import typing +import re +from dataclasses import make_dataclass + +from .ExtractedData import logic_options, starts, pool_options +from .Rules import cost_terms +from schema import And, Schema, Optional + +from Options import Option, DefaultOnToggle, Toggle, Choice, Range, OptionDict, NamedRange, DeathLink, PerGameCommonOptions +from .Charms import vanilla_costs, names as charm_names + +if typing.TYPE_CHECKING: + # avoid import during runtime + from random import Random +else: + Random = typing.Any + +locations = {"option_" + start: i for i, start in enumerate(starts)} +# This way the dynamic start names are picked up by the MetaClass Choice belongs to +StartLocation = type("StartLocation", (Choice,), { + "__module__": __name__, + "auto_display_name": False, + "display_name": "Start Location", + "__doc__": "Choose your start location. " + "This is currently only locked to King's Pass.", + **locations, +}) +del (locations) + +option_docstrings = { + "RandomizeDreamers": "Allow for Dreamers to be randomized into the item pool and opens their locations for " + "randomization.", + "RandomizeSkills": "Allow for Skills, such as Mantis Claw or Shade Soul, to be randomized into the item pool. " + "Also opens their locations\n for receiving randomized items.", + "RandomizeFocus": "Removes the ability to focus and randomizes it into the item pool.", + "RandomizeSwim": "Removes the ability to swim in water and randomizes it into the item pool.", + "RandomizeCharms": "Allow for Charms to be randomized into the item pool and open their locations for " + "randomization. Includes Charms\n sold in shops.", + "RandomizeKeys": "Allow for Keys to be randomized into the item pool. Includes those sold in shops.", + "RandomizeMaskShards": "Allow for Mask Shard to be randomized into the item pool and open their locations for" + " randomization.", + "RandomizeVesselFragments": "Allow for Vessel Fragments to be randomized into the item pool and open their " + "locations for randomization.", + "RandomizeCharmNotches": "Allow for Charm Notches to be randomized into the item pool. " + "Includes those sold by Salubra.", + "RandomizePaleOre": "Randomize Pale Ores into the item pool and open their locations for randomization.", + "RandomizeGeoChests": "Allow for Geo Chests to contain randomized items, " + "as well as their Geo reward being randomized into the item pool.", + "RandomizeJunkPitChests": "Randomize the contents of junk pit chests into the item pool and open their locations " + "for randomization.", + "RandomizeRancidEggs": "Randomize Rancid Eggs into the item pool and open their locations for randomization", + "RandomizeRelics": "Randomize Relics (King's Idol, et al.) into the item pool and open their locations for" + " randomization.", + "RandomizeWhisperingRoots": "Randomize the essence rewards from Whispering Roots into the item pool. Whispering " + "Roots will now grant a randomized\n item when completed. This can be previewed by " + "standing on the root.", + "RandomizeBossEssence": "Randomize boss essence drops, such as those for defeating Warrior Dreams, into the item " + "pool and open their locations\n for randomization.", + "RandomizeGrubs": "Randomize Grubs into the item pool and open their locations for randomization.", + "RandomizeMimics": "Randomize Mimic Grubs into the item pool and open their locations for randomization.", + "RandomizeMaps": "Randomize Maps into the item pool. This causes Cornifer to give you a message allowing you to see" + " and buy an item\n that is randomized into that location as well.", + "RandomizeStags": "Randomize Stag Stations unlocks into the item pool as well as placing randomized items " + "on the stag station bell/toll.", + "RandomizeLifebloodCocoons": "Randomize Lifeblood Cocoon grants into the item pool and open their locations" + " for randomization.", + "RandomizeGrimmkinFlames": "Randomize Grimmkin Flames into the item pool and open their locations for " + "randomization.", + "RandomizeJournalEntries": "Randomize the Hunter's Journal as well as the findable journal entries into the item " + "pool, and open their locations\n for randomization. Does not include journal entries " + "gained by killing enemies.", + "RandomizeNail": "Removes the ability to swing the nail left, right and up, and shuffles these into the item pool.", + "RandomizeGeoRocks": "Randomize Geo Rock rewards into the item pool and open their locations for randomization.", + "RandomizeBossGeo": "Randomize boss Geo drops into the item pool and open those locations for randomization.", + "RandomizeSoulTotems": "Randomize Soul Refill items into the item pool and open the Soul Totem locations for" + " randomization.", + "RandomizeLoreTablets": "Randomize Lore items into the itempool, one per Lore Tablet, and place randomized item " + "grants on the tablets themselves.\n You must still read the tablet to get the item.", + "AltBlackEgg": "Access the Black Egg with any 3 spells/spell upgrades intead of dreamers.\n If Randomize Dreamers" + " is on, either one will open the Black Egg.", + "AltRadiance": "Access The Radiance after the player gets 8 total masks.", + "PreciseMovement": "Places skips into logic which require extremely precise player movement, possibly without " + "movement skills such as\n dash or claw.", + "ProficientCombat": "Places skips into logic which require proficient combat, possibly with limited items.", + "BackgroundObjectPogos": "Places skips into logic for locations which are reachable via pogoing off of " + "background objects.", + "EnemyPogos": "Places skips into logic for locations which are reachable via pogos off of enemies.", + "ObscureSkips": "Places skips into logic which are considered obscure enough that a beginner is not expected " + "to know them.", + "ShadeSkips": "Places shade skips into logic which utilize the player's shade for pogoing or damage boosting.", + "InfectionSkips": "Places skips into logic which are only possible after the crossroads become infected.", + "FireballSkips": "Places skips into logic which require the use of spells to reset fall speed while in mid-air.", + "SpikeTunnels": "Places skips into logic which require the navigation of narrow tunnels filled with spikes.", + "AcidSkips": "Places skips into logic which require crossing a pool of acid without Isma's Tear, or water if swim " + "is disabled.", + "DamageBoosts": "Places skips into logic which require you to take damage from an enemy or hazard to progress.", + "DangerousSkips": "Places skips into logic which contain a high risk of taking damage.", + "DarkRooms": "Places skips into logic which require navigating dark rooms without the use of the Lumafly Lantern.", + "ComplexSkips": "Places skips into logic which require intense setup or are obscure even beyond advanced skip " + "standards.", + "DifficultSkips": "Places skips into logic which are considered more difficult than typical.", + "RemoveSpellUpgrades": "Removes the second level of all spells from the item pool.", +} + +default_on = { + "RandomizeDreamers", + "RandomizeSkills", + "RandomizeCharms", + "RandomizeKeys", + "RandomizeMaskShards", + "RandomizeVesselFragments", + "RandomizeCharmNotches", + "RandomizePaleOre", + "RandomizeRancidEggs", + "RandomizeRelics", + "RandomizeStags", + "RandomizeLifebloodCocoons" +} + +shop_to_option = { + "Seer": "SeerRewardSlots", + "Grubfather": "GrubfatherRewardSlots", + "Sly": "SlyShopSlots", + "Sly_(Key)": "SlyKeyShopSlots", + "Iselda": "IseldaShopSlots", + "Salubra": "SalubraShopSlots", + "Leg_Eater": "LegEaterShopSlots", + "Salubra_(Requires_Charms)": "SalubraCharmShopSlots", + "Egg_Shop": "EggShopSlots", +} + +hollow_knight_randomize_options: typing.Dict[str, type(Option)] = {} + +splitter_pattern = re.compile(r'(? typing.List[int]: + charms: typing.List[int] + if -1 == self.value: + return self.vanilla_costs.copy() + elif -2 == self.value: + charms = self.vanilla_costs.copy() + random_source.shuffle(charms) + return charms + else: + charms = [0] * self.charm_count + for x in range(self.value): + index = random_source.randint(0, self.charm_count - 1) + while charms[index] > 5: + index = random_source.randint(0, self.charm_count - 1) + charms[index] += 1 + return charms + + +class CharmCost(Range): + range_end = 6 + + +class PlandoCharmCosts(OptionDict): + """Allows setting a Charm's Notch costs directly, mapping {name: cost}. + This is set after any random Charm Notch costs, if applicable.""" + display_name = "Charm Notch Cost Plando" + valid_keys = frozenset(charm_names) + schema = Schema({ + Optional(name): And(int, lambda n: 6 >= n >= 0, error="Charm costs must be integers in the range 0-6.") for name in charm_names + }) + + def __init__(self, value): + # To handle keys of random like other options, create an option instance from their values + # Additionally a vanilla keyword is added to plando individual charms to vanilla costs + # and default is disabled so as to not cause confusion + self.value = {} + for key, data in value.items(): + if isinstance(data, str): + if data.lower() == "vanilla" and key in self.valid_keys: + self.value[key] = vanilla_costs[charm_names.index(key)] + continue + elif data.lower() == "default": + # default is too easily confused with vanilla but actually 0 + # skip CharmCost resolution to fail schema afterwords + self.value[key] = data + continue + try: + self.value[key] = CharmCost.from_any(data).value + except ValueError: + # will fail schema afterwords + self.value[key] = data + + def get_costs(self, charm_costs: typing.List[int]) -> typing.List[int]: + for name, cost in self.value.items(): + charm_costs[charm_names.index(name)] = cost + return charm_costs + + +class SlyShopSlots(Range): + """For each extra slot, add a location to the Sly Shop and a filler item to the item pool.""" + + display_name = "Sly Shop Slots" + default = 8 + range_end = 16 + + +class SlyKeyShopSlots(Range): + """For each extra slot, add a location to the Sly Shop (requiring Shopkeeper's Key) and a filler item to the item + pool.""" + + display_name = "Sly Key Shop Slots" + default = 6 + range_end = 16 + + +class IseldaShopSlots(Range): + """For each extra slot, add a location to the Iselda Shop and a filler item to the item pool.""" + + display_name = "Iselda Shop Slots" + default = 2 + range_end = 16 + + +class SalubraShopSlots(Range): + """For each extra slot, add a location to the Salubra Shop, and a filler item to the item pool.""" + + display_name = "Salubra Shop Slots" + default = 5 + range_start = 0 + range_end = 16 + + +class SalubraCharmShopSlots(Range): + """For each extra slot, add a location to the Salubra Shop (requiring Charms), and a filler item to the item + pool.""" + + display_name = "Salubra Charm Shop Slots" + default = 5 + range_end = 16 + + +class LegEaterShopSlots(Range): + """For each extra slot, add a location to the Leg Eater Shop and a filler item to the item pool.""" + + display_name = "Leg Eater Shop Slots" + default = 3 + range_end = 16 + + +class GrubfatherRewardSlots(Range): + """For each extra slot, add a location to the Grubfather and a filler item to the item pool.""" + + display_name = "Grubfather Reward Slots" + default = 7 + range_end = 16 + + +class SeerRewardSlots(Range): + """For each extra slot, add a location to the Seer and a filler item to the item pool.""" + + display_name = "Seer Reward Reward Slots" + default = 8 + range_end = 16 + + +class EggShopSlots(Range): + """For each slot, add a location to the Egg Shop and a filler item to the item pool.""" + + display_name = "Egg Shop Item Slots" + range_end = 16 + + +class ExtraShopSlots(Range): + """For each extra slot, add a location to a randomly chosen shop a filler item to the item pool. + + The Egg Shop will be excluded from this list unless it has at least one item. + + Shops are capped at 16 items each. + """ + + display_name = "Additional Shop Slots" + default = 0 + range_end = 9 * 16 # Number of shops x max slots per shop. + + +class Goal(Choice): + """The goal required of you in order to complete your run in Archipelago.""" + display_name = "Goal" + option_any = 0 + option_hollowknight = 1 + option_siblings = 2 + option_radiance = 3 + option_godhome = 4 + option_godhome_flower = 5 + option_grub_hunt = 6 + default = 0 + + +class GrubHuntGoal(NamedRange): + """The amount of grubs required to finish Grub Hunt. + On 'All' any grubs from item links replacements etc. will be counted""" + rich_text_doc = False + display_name = "Grub Hunt Goal" + range_start = 1 + range_end = 46 + special_range_names = {"all": -1, "forty_six": 46} + default = 46 + + +class WhitePalace(Choice): + """ + Whether or not to include White Palace or not. Note: Even if excluded, the King Fragment check may still be + required if charms are vanilla. + """ + display_name = "White Palace" + option_exclude = 0 # No White Palace at all + option_kingfragment = 1 # Include King Fragment check only + option_nopathofpain = 2 # Exclude Path of Pain locations. + option_include = 3 # Include all White Palace locations, including Path of Pain. + default = 0 + + +class ExtraPlatforms(DefaultOnToggle): + """Places additional platforms to make traveling throughout Hallownest more convenient.""" + display_name = "Extra Platforms" + + +class AddUnshuffledLocations(Toggle): + """Adds non-randomized locations to the location pool, which allows syncing + of location state with co-op or automatic collection via collect. + + Note: This will increase the number of location checks required to purchase + hints to the total maximum. + """ + display_name = "Add Unshuffled Locations" + + +class DeathLinkShade(Choice): + """Sets whether to create a shade when you are killed by a DeathLink and how to handle your existing shade, if any. + + vanilla: DeathLink deaths function like any other death and overrides your existing shade (including geo), if any. + shadeless: DeathLink deaths do not spawn shades. Your existing shade (including geo), if any, is untouched. + shade: DeathLink deaths spawn a shade if you do not have an existing shade. Otherwise, it acts like shadeless. + + * This option has no effect if DeathLink is disabled. + ** Self-death shade behavior is not changed; if a self-death normally creates a shade in vanilla, it will override + your existing shade, if any. + """ + rich_text_doc = False + option_vanilla = 0 + option_shadeless = 1 + option_shade = 2 + default = 2 + display_name = "Deathlink Shade Handling" + + +class DeathLinkBreaksFragileCharms(Toggle): + """Sets if fragile charms break when you are killed by a DeathLink. + + * This option has no effect if DeathLink is disabled. + ** Self-death fragile charm behavior is not changed; if a self-death normally breaks fragile charms in vanilla, it + will continue to do so. + """ + rich_text_doc = False + display_name = "Deathlink Breaks Fragile Charms" + + +class StartingGeo(Range): + """The amount of starting geo you have.""" + display_name = "Starting Geo" + range_start = 0 + range_end = 1000 + default = 0 + + +class CostSanity(Choice): + """If enabled, most locations with costs (like stag stations) will have randomly determined costs. + If set to shopsonly, CostSanity will only apply to shops (including Grubfather, Seer and Egg Shop). + If set to notshops, CostSanity will only apply to non-shops (e.g. Stag stations and Cornifer locations) + + These costs can be in Geo (except Grubfather, Seer and Eggshop), Grubs, Charms, Essence and/or Rancid Eggs + """ + rich_text_doc = False + option_off = 0 + alias_no = 0 + option_on = 1 + alias_yes = 1 + option_shopsonly = 2 + option_notshops = 3 + display_name = "Costsanity" + + +class CostSanityHybridChance(Range): + """The chance that a CostSanity cost will include two components instead of one, e.g. Grubs + Essence""" + range_end = 100 + default = 10 + display_name = "Costsanity Hybrid Chance" + + +cost_sanity_weights: typing.Dict[str, type(Option)] = {} +for term, cost in cost_terms.items(): + option_name = f"CostSanity{cost.option}Weight" + display_name = f"Costsanity {cost.option} Weight" + extra_data = { + "__module__": __name__, "range_end": 1000, + "__doc__": ( + f"The likelihood of Costsanity choosing a {cost.option} cost." + " Chosen as a sum of all weights from other types." + ), + "default": cost.weight + } + if cost == 'GEO': + extra_data["__doc__"] += " Geo costs will never be chosen for Grubfather, Seer, or Egg Shop." + + option = type(option_name, (Range,), extra_data) + option.display_name = display_name + globals()[option.__name__] = option + cost_sanity_weights[option.__name__] = option + +hollow_knight_options: typing.Dict[str, type(Option)] = { + **hollow_knight_randomize_options, + RandomizeElevatorPass.__name__: RandomizeElevatorPass, + **hollow_knight_logic_options, + **{ + option.__name__: option + for option in ( + StartLocation, Goal, GrubHuntGoal, WhitePalace, ExtraPlatforms, AddUnshuffledLocations, StartingGeo, + DeathLink, DeathLinkShade, DeathLinkBreaksFragileCharms, + MinimumGeoPrice, MaximumGeoPrice, + MinimumGrubPrice, MaximumGrubPrice, + MinimumEssencePrice, MaximumEssencePrice, + MinimumCharmPrice, MaximumCharmPrice, + RandomCharmCosts, PlandoCharmCosts, + MinimumEggPrice, MaximumEggPrice, EggShopSlots, + SlyShopSlots, SlyKeyShopSlots, IseldaShopSlots, + SalubraShopSlots, SalubraCharmShopSlots, + LegEaterShopSlots, GrubfatherRewardSlots, + SeerRewardSlots, ExtraShopSlots, + SplitCrystalHeart, SplitMothwingCloak, SplitMantisClaw, + CostSanity, CostSanityHybridChance + ) + }, + **cost_sanity_weights +} + +HKOptions = make_dataclass("HKOptions", [(name, option) for name, option in hollow_knight_options.items()], bases=(PerGameCommonOptions,)) diff --git a/World/Regions.py b/World/Regions.py new file mode 100644 index 0000000..c6b2b21 --- /dev/null +++ b/World/Regions.py @@ -0,0 +1,25 @@ +from .ExtractedData import region_names, exits, connectors + + +def create_regions(world, player: int): + from . import create_region, HKLocation, HKItem + world.regions.append(create_region(world, player, 'Menu', None, ['Hollow Nest S&Q'])) + for region in region_names: + world.regions.append(create_region(world, player, region, [], + exits.get(region, []))) + for entrance_name, exit_name in connectors.items(): + if exit_name: + target_region = world.get_entrance(exit_name, player).parent_region + world.get_entrance(entrance_name, player).connect(target_region) + if not entrance_name.endswith("_R"): + # a traversable entrance puts the name of the target door "into logic". + loc = HKLocation(player, exit_name, None, target_region) + loc.place_locked_item(HKItem(exit_name, + not exit_name.startswith("White_Palace_"), + None, "Event", player)) + target_region.locations.append(loc) + else: + ent = world.get_entrance(entrance_name, player) + ent.parent_region.exits.remove(ent) + + diff --git a/World/Rules.py b/World/Rules.py new file mode 100644 index 0000000..4a6f219 --- /dev/null +++ b/World/Rules.py @@ -0,0 +1,90 @@ +from ..generic.Rules import set_rule, add_rule +from ..AutoWorld import World +from .GeneratedRules import set_generated_rules +from .GodhomeData import set_godhome_rules +from typing import NamedTuple + + +class CostTerm(NamedTuple): + term: str + option: str + singular: str + plural: str + weight: int # CostSanity + sort: int + + +cost_terms = {x.term: x for x in ( + CostTerm("RANCIDEGGS", "Egg", "Rancid Egg", "Rancid Eggs", 1, 3), + CostTerm("GRUBS", "Grub", "Grub", "Grubs", 1, 2), + CostTerm("ESSENCE", "Essence", "Essence", "Essence", 1, 4), + CostTerm("CHARMS", "Charm", "Charm", "Charms", 1, 1), + CostTerm("GEO", "Geo", "Geo", "Geo", 8, 9999), +)} + + +def hk_set_rule(hk_world: World, location: str, rule): + player = hk_world.player + + locations = hk_world.created_multi_locations.get(location) + if locations is None: + try: + locations = [hk_world.multiworld.get_location(location, player)] + except KeyError: + return + + for location in locations: + set_rule(location, rule) + + +def set_rules(hk_world: World): + player = hk_world.player + set_generated_rules(hk_world, hk_set_rule) + set_godhome_rules(hk_world, hk_set_rule) + + # Shop costs + for location in hk_world.multiworld.get_locations(player): + if location.costs: + for term, amount in location.costs.items(): + if term == "GEO": # No geo logic! + continue + add_rule(location, lambda state, term=term, amount=amount: state.count(term, player) >= amount) + + +def _hk_nail_combat(state, player) -> bool: + return state.has_any({'LEFTSLASH', 'RIGHTSLASH', 'UPSLASH'}, player) + + +def _hk_can_beat_thk(state, player) -> bool: + return ( + state.has('Opened_Black_Egg_Temple', player) + and (state.count('FIREBALL', player) + state.count('SCREAM', player) + state.count('QUAKE', player)) > 1 + and _hk_nail_combat(state, player) + and ( + state.has_any({'LEFTDASH', 'RIGHTDASH'}, player) + or state._hk_option(player, 'ProficientCombat') + ) + and state.has('FOCUS', player) + ) + + +def _hk_siblings_ending(state, player) -> bool: + return _hk_can_beat_thk(state, player) and state.has('WHITEFRAGMENT', player, 3) + + +def _hk_can_beat_radiance(state, player) -> bool: + return ( + state.has('Opened_Black_Egg_Temple', player) + and _hk_nail_combat(state, player) + and (state.has('WHITEFRAGMENT', player, 3) or ((state._hk_option(player, 'AltRadiance') and (state.count('MASKSHARDS', player) > 11)))) + and state.has('DREAMNAIL', player) + and ( + (state.has('LEFTCLAW', player) and state.has('RIGHTCLAW', player)) + or state.has('WINGS', player) + ) + and (state.count('FIREBALL', player) + state.count('SCREAM', player) + state.count('QUAKE', player)) > 1 + and ( + (state.has('LEFTDASH', player, 2) and state.has('RIGHTDASH', player, 2)) # Both Shade Cloaks + or (state._hk_option(player, 'ProficientCombat') and state.has('QUAKE', player)) # or Dive + ) + ) diff --git a/World/__init__.py b/World/__init__.py new file mode 100644 index 0000000..dd6dea9 --- /dev/null +++ b/World/__init__.py @@ -0,0 +1,804 @@ +from __future__ import annotations + +import logging +import typing +from copy import deepcopy +import itertools +import operator +from collections import defaultdict, Counter + +from .Items import item_table, item_name_groups +from .Rules import set_rules, cost_terms, _hk_can_beat_thk, _hk_siblings_ending, _hk_can_beat_radiance +from .Options import hollow_knight_options, hollow_knight_randomize_options, Goal, WhitePalace, CostSanity, \ + shop_to_option, HKOptions, GrubHuntGoal +from .ExtractedData import locations, starts, multi_locations, event_names, item_effects, connectors, \ + vanilla_shop_costs, vanilla_location_costs +from .Charms import names as charm_names + +from BaseClasses import Region, Location, MultiWorld, Item, LocationProgressType, Tutorial, ItemClassification, \ + CollectionState +from worlds.AutoWorld import World, LogicMixin, WebWorld + +from settings import Group, Bool + +logger = logging.getLogger("Hollow Knight Test") + + +class HollowKnightSettings(Group): + class DisableMapModSpoilers(Bool): + """Disallows the APMapMod from showing spoiler placements.""" + + disable_spoilers: typing.Union[DisableMapModSpoilers, bool] = False + + +path_of_pain_locations = { + "Soul_Totem-Path_of_Pain_Below_Thornskip", + "Lore_Tablet-Path_of_Pain_Entrance", + "Soul_Totem-Path_of_Pain_Left_of_Lever", + "Soul_Totem-Path_of_Pain_Hidden", + "Soul_Totem-Path_of_Pain_Entrance", + "Soul_Totem-Path_of_Pain_Final", + "Soul_Totem-Path_of_Pain_Below_Lever", + "Soul_Totem-Path_of_Pain_Second", + "Journal_Entry-Seal_of_Binding", + "Warp-Path_of_Pain_Complete", + "Defeated_Path_of_Pain_Arena", + "Completed_Path_of_Pain", + # Path of Pain transitions + "White_Palace_17[right1]", "White_Palace_17[bot1]", + "White_Palace_18[top1]", "White_Palace_18[right1]", + "White_Palace_19[left1]", "White_Palace_19[top1]", + "White_Palace_20[bot1]", +} + +white_palace_transitions = { + # Event-Transitions: + # "Grubfather_2", + "White_Palace_01[left1]", "White_Palace_01[right1]", "White_Palace_01[top1]", + "White_Palace_02[left1]", + "White_Palace_03_hub[bot1]", "White_Palace_03_hub[left1]", "White_Palace_03_hub[left2]", + "White_Palace_03_hub[right1]", "White_Palace_03_hub[top1]", + "White_Palace_04[right2]", "White_Palace_04[top1]", + "White_Palace_05[left1]", "White_Palace_05[left2]", "White_Palace_05[right1]", "White_Palace_05[right2]", + "White_Palace_06[bot1]", "White_Palace_06[left1]", "White_Palace_06[top1]", "White_Palace_07[bot1]", + "White_Palace_07[top1]", "White_Palace_08[left1]", "White_Palace_08[right1]", + "White_Palace_09[right1]", + "White_Palace_11[door2]", + "White_Palace_12[bot1]", "White_Palace_12[right1]", + "White_Palace_13[left1]", "White_Palace_13[left2]", "White_Palace_13[left3]", "White_Palace_13[right1]", + "White_Palace_14[bot1]", "White_Palace_14[right1]", + "White_Palace_15[left1]", "White_Palace_15[right1]", "White_Palace_15[right2]", + "White_Palace_16[left1]", "White_Palace_16[left2]", +} + +white_palace_checks = { + "Soul_Totem-White_Palace_Final", + "Soul_Totem-White_Palace_Entrance", + "Lore_Tablet-Palace_Throne", + "Soul_Totem-White_Palace_Left", + "Lore_Tablet-Palace_Workshop", + "Soul_Totem-White_Palace_Hub", + "Soul_Totem-White_Palace_Right" +} + +white_palace_events = { + "White_Palace_03_hub", + "White_Palace_13", + "White_Palace_01", + "Palace_Entrance_Lantern_Lit", + "Palace_Left_Lantern_Lit", + "Palace_Right_Lantern_Lit", + "Palace_Atrium_Gates_Opened", + "Warp-White_Palace_Atrium_to_Palace_Grounds", + "Warp-White_Palace_Entrance_to_Palace_Grounds", +} + +progression_charms = { + # Baldur Killers + "Grubberfly's_Elegy", "Weaversong", "Glowing_Womb", + # Spore Shroom spots in fungal wastes and elsewhere + "Spore_Shroom", + # Tuk gives egg, + "Defender's_Crest", + # Unlocks Grimm Troupe + "Grimmchild1", "Grimmchild2" +} + +# Vanilla placements of the following items have no impact on logic, thus we can avoid creating these items and +# locations entirely when the option to randomize them is disabled. +logicless_options = { + "RandomizeVesselFragments", "RandomizeGeoChests", "RandomizeJunkPitChests", "RandomizeRelics", + "RandomizeMaps", "RandomizeJournalEntries", "RandomizeGeoRocks", "RandomizeBossGeo", + "RandomizeLoreTablets", "RandomizeSoulTotems", +} + +# Options that affect vanilla starting items +randomizable_starting_items: typing.Dict[str, typing.Tuple[str, ...]] = { + "RandomizeFocus": ("Focus",), + "RandomizeSwim": ("Swim",), + "RandomizeNail": ('Upslash', 'Leftslash', 'Rightslash') +} + +# Shop cost types. +shop_cost_types: typing.Dict[str, typing.Tuple[str, ...]] = { + "Egg_Shop": ("RANCIDEGGS",), + "Grubfather": ("GRUBS",), + "Seer": ("ESSENCE",), + "Salubra_(Requires_Charms)": ("CHARMS", "GEO"), + "Sly": ("GEO",), + "Sly_(Key)": ("GEO",), + "Iselda": ("GEO",), + "Salubra": ("GEO",), + "Leg_Eater": ("GEO",), +} + + +class HKWeb(WebWorld): + rich_text_options_doc = True + + setup_en = Tutorial( + "Mod Setup and Use Guide", + "A guide to playing Hollow Knight with Archipelago.", + "English", + "setup_en.md", + "setup/en", + ["Ijwu"] + ) + + setup_pt_br = Tutorial( + setup_en.tutorial_name, + setup_en.description, + "Português Brasileiro", + "setup_pt_br.md", + "setup/pt_br", + ["JoaoVictor-FA"] + ) + + setup_es = Tutorial( + setup_en.tutorial_name, + setup_en.description, + "Español", + "setup_es.md", + "setup/es", + ["GreenMarco", "Panto UwUr"] + ) + + tutorials = [setup_en, setup_pt_br, setup_es] + game_info_languages = ["en", "es"] + + bug_report_page = "https://github.com/Ijwu/Archipelago.HollowKnight/issues/new?assignees=&labels=bug%2C+needs+investigation&template=bug_report.md&title=" + + +class HKWorld(World): + """Beneath the fading town of Dirtmouth sleeps a vast, ancient kingdom. Many are drawn beneath the surface, + searching for riches, or glory, or answers to old secrets. + + As the enigmatic Knight, you’ll traverse the depths, unravel its mysteries and conquer its evils. + """ # from https://www.hollowknight.com + game: str = "Hollow Knight Test" + options_dataclass = HKOptions + options: HKOptions + settings: typing.ClassVar[HollowKnightSettings] + + web = HKWeb() + + item_name_to_id = {name: data.id for name, data in item_table.items()} + location_name_to_id = {location_name: location_id for location_id, location_name in + enumerate(locations, start=0x1000000)} + item_name_groups = item_name_groups + + ranges: typing.Dict[str, typing.Tuple[int, int]] + charm_costs: typing.List[int] + cached_filler_items = {} + grub_count: int + grub_player_count: typing.Dict[int, int] + + def __init__(self, multiworld, player): + super(HKWorld, self).__init__(multiworld, player) + self.created_multi_locations: typing.Dict[str, typing.List[HKLocation]] = { + location: list() for location in multi_locations + } + self.ranges = {} + self.created_shop_items = 0 + self.vanilla_shop_costs = deepcopy(vanilla_shop_costs) + + def generate_early(self): + options = self.options + charm_costs = options.RandomCharmCosts.get_costs(self.random) + self.charm_costs = options.PlandoCharmCosts.get_costs(charm_costs) + # options.exclude_locations.value.update(white_palace_locations) + for term, data in cost_terms.items(): + mini = getattr(options, f"Minimum{data.option}Price") + maxi = getattr(options, f"Maximum{data.option}Price") + # if minimum > maximum, set minimum to maximum + mini.value = min(mini.value, maxi.value) + self.ranges[term] = mini.value, maxi.value + self.multiworld.push_precollected(HKItem(starts[options.StartLocation.current_key], + True, None, "Event", self.player)) + + # defaulting so completion condition isn't incorrect before pre_fill + self.grub_count = ( + 46 if options.GrubHuntGoal == GrubHuntGoal.special_range_names["all"] + else options.GrubHuntGoal.value + ) + self.grub_player_count = {self.player: self.grub_count} + + def white_palace_exclusions(self): + exclusions = set() + wp = self.options.WhitePalace + if wp <= WhitePalace.option_nopathofpain: + exclusions.update(path_of_pain_locations) + exclusions.update(( + "Soul_Totem-Path_of_Pain", + "Lore_Tablet-Path_of_Pain_Entrance", + "Journal_Entry-Seal_of_Binding", + )) + if wp <= WhitePalace.option_kingfragment: + exclusions.update(white_palace_checks) + if wp == WhitePalace.option_exclude: + exclusions.add("King_Fragment") + if self.options.RandomizeCharms: + # If charms are randomized, this will be junk-filled -- so transitions and events are not progression + exclusions.update(white_palace_transitions) + exclusions.update(white_palace_events) + exclusions.update(item_name_groups["PalaceJournal"]) + exclusions.update(item_name_groups["PalaceLore"]) + exclusions.update(item_name_groups["PalaceTotem"]) + return exclusions + + def create_regions(self): + menu_region: Region = create_region(self.multiworld, self.player, 'Menu') + self.multiworld.regions.append(menu_region) + + # check for any goal that godhome events are relevant to + all_event_names = event_names.copy() + if self.options.Goal in [Goal.option_godhome, Goal.option_godhome_flower, Goal.option_any]: + from .GodhomeData import godhome_event_names + all_event_names.update(set(godhome_event_names)) + + # Link regions + for event_name in sorted(all_event_names): + loc = HKLocation(self.player, event_name, None, menu_region) + loc.place_locked_item(HKItem(event_name, + True, + None, "Event", self.player)) + menu_region.locations.append(loc) + for entry_transition, exit_transition in connectors.items(): + if exit_transition: + # if door logic fulfilled -> award vanilla target as event + loc = HKLocation(self.player, entry_transition, None, menu_region) + loc.place_locked_item(HKItem(exit_transition, + True, + None, "Event", self.player)) + menu_region.locations.append(loc) + + def create_items(self): + unfilled_locations = 0 + # Generate item pool and associated locations (paired in HK) + pool: typing.List[HKItem] = [] + wp_exclusions = self.white_palace_exclusions() + junk_replace: typing.Set[str] = set() + if self.options.RemoveSpellUpgrades: + junk_replace.update(("Abyss_Shriek", "Shade_Soul", "Descending_Dark")) + + # If we have the Alt Black Egg entrance, we shouldn't put dreamers in the pool + # Unless we want extra dreamers + if self.options.AltBlackEgg and not self.options.RandomizeDreamers: + junk_replace.update(('Lurien', 'Monomon', 'Herrah')) + + # If we have the Alt Randiance entrance, we shouldn't royal fragments in the pool + if self.options.AltRadiance: + junk_replace.update(('Queen_Fragment','King_Fragment','Void_Heart')) + + randomized_starting_items = set() + for attr, items in randomizable_starting_items.items(): + if getattr(self.options, attr): + randomized_starting_items.update(items) + + # noinspection PyShadowingNames + def _add(item_name: str, location_name: str, randomized: bool): + """ + Adds a pairing of an item and location, doing appropriate checks to see if it should be vanilla or not. + """ + nonlocal unfilled_locations + + vanilla = not randomized + excluded = False + + if not vanilla and location_name in wp_exclusions: + if location_name == 'King_Fragment': + excluded = True + else: + vanilla = True + + if item_name in junk_replace: + item_name = self.get_filler_item_name() + + item = (self.create_item(item_name) + if not vanilla or location_name == "Start" or self.options.AddUnshuffledLocations + else self.create_event(item_name) + ) + + if location_name == "Start": + if item_name in randomized_starting_items: + if item_name == "Focus": + self.create_location("Focus") + unfilled_locations += 1 + pool.append(item) + else: + self.multiworld.push_precollected(item) + return + + if vanilla: + location = self.create_vanilla_location(location_name, item) + else: + pool.append(item) + if location_name in multi_locations: # Create shop locations later. + return + location = self.create_location(location_name) + unfilled_locations += 1 + if excluded: + location.progress_type = LocationProgressType.EXCLUDED + + for option_key, option in hollow_knight_randomize_options.items(): + randomized = getattr(self.options, option_key) + if all([not randomized, option_key in logicless_options, not self.options.AddUnshuffledLocations]): + continue + for item_name, location_name in zip(option.items, option.locations): + if item_name in junk_replace: + item_name = self.get_filler_item_name() + + if (item_name == "Crystal_Heart" and self.options.SplitCrystalHeart) or \ + (item_name == "Mothwing_Cloak" and self.options.SplitMothwingCloak): + _add("Left_" + item_name, location_name, randomized) + _add("Right_" + item_name, "Split_" + location_name, randomized) + continue + if item_name == "Mantis_Claw" and self.options.SplitMantisClaw: + _add("Left_" + item_name, "Left_" + location_name, randomized) + _add("Right_" + item_name, "Right_" + location_name, randomized) + continue + if item_name == "Shade_Cloak" and self.options.SplitMothwingCloak: + if self.random.randint(0, 1): + item_name = "Left_Mothwing_Cloak" + else: + item_name = "Right_Mothwing_Cloak" + if item_name == "Grimmchild2" and self.options.RandomizeGrimmkinFlames and self.options.RandomizeCharms: + _add("Grimmchild1", location_name, randomized) + continue + + _add(item_name, location_name, randomized) + + if self.options.RandomizeElevatorPass: + randomized = True + _add("Elevator_Pass", "Elevator_Pass", randomized) + + for shop, shop_locations in self.created_multi_locations.items(): + for _ in range(len(shop_locations), getattr(self.options, shop_to_option[shop]).value): + self.create_location(shop) + unfilled_locations += 1 + + # Balance the pool + item_count = len(pool) + additional_shop_items = max(item_count - unfilled_locations, self.options.ExtraShopSlots.value) + + # Add additional shop items, as needed. + if additional_shop_items > 0: + shops = [shop for shop, shop_locations in self.created_multi_locations.items() if len(shop_locations) < 16] + if not self.options.EggShopSlots: # No eggshop, so don't place items there + shops.remove('Egg_Shop') + + if shops: + for _ in range(additional_shop_items): + shop = self.random.choice(shops) + self.create_location(shop) + unfilled_locations += 1 + if len(self.created_multi_locations[shop]) >= 16: + shops.remove(shop) + if not shops: + break + + # Create filler items, if needed + if item_count < unfilled_locations: + pool.extend(self.create_item(self.get_filler_item_name()) for _ in range(unfilled_locations - item_count)) + self.multiworld.itempool += pool + self.apply_costsanity() + self.sort_shops_by_cost() + + def sort_shops_by_cost(self): + for shop, shop_locations in self.created_multi_locations.items(): + randomized_locations = [loc for loc in shop_locations if not loc.vanilla] + prices = sorted( + (loc.costs for loc in randomized_locations), + key=lambda costs: (len(costs),) + tuple(costs.values()) + ) + for loc, costs in zip(randomized_locations, prices): + loc.costs = costs + + def apply_costsanity(self): + setting = self.options.CostSanity.value + if not setting: + return # noop + + def _compute_weights(weights: dict, desc: str) -> typing.Dict[str, int]: + if all(x == 0 for x in weights.values()): + logger.warning( + f"All {desc} weights were zero for {self.multiworld.player_name[self.player]}." + f" Setting them to one instead." + ) + weights = {k: 1 for k in weights} + + return {k: v for k, v in weights.items() if v} + + random = self.random + hybrid_chance = getattr(self.options, "CostSanityHybridChance").value + weights = { + data.term: getattr(self.options, f"CostSanity{data.option}Weight").value + for data in cost_terms.values() + } + weights_geoless = dict(weights) + del weights_geoless["GEO"] + + weights = _compute_weights(weights, "CostSanity") + weights_geoless = _compute_weights(weights_geoless, "Geoless CostSanity") + + if hybrid_chance > 0: + if len(weights) == 1: + logger.warning( + f"Only one cost type is available for CostSanity in {self.multiworld.player_name[self.player]}'s world." + f" CostSanityHybridChance will not trigger." + ) + if len(weights_geoless) == 1: + logger.warning( + f"Only one cost type is available for CostSanity in {self.multiworld.player_name[self.player]}'s world." + f" CostSanityHybridChance will not trigger in geoless locations." + ) + + for region in self.multiworld.get_regions(self.player): + for location in region.locations: + if location.vanilla: + continue + if not location.costs: + continue + if location.name == "Vessel_Fragment-Basin": + continue + if setting == CostSanity.option_notshops and location.basename in multi_locations: + continue + if setting == CostSanity.option_shopsonly and location.basename not in multi_locations: + continue + if location.basename in {'Grubfather', 'Seer', 'Egg_Shop'}: + our_weights = dict(weights_geoless) + else: + our_weights = dict(weights) + + rolls = 1 + if random.randrange(100) < hybrid_chance: + rolls = 2 + + if rolls > len(our_weights): + terms = list(our_weights.keys()) # Can't randomly choose cost types, using all of them. + else: + terms = [] + for _ in range(rolls): + term = random.choices(list(our_weights.keys()), list(our_weights.values()))[0] + del our_weights[term] + terms.append(term) + + location.costs = {term: random.randint(*self.ranges[term]) for term in terms} + location.sort_costs() + + def set_rules(self): + multiworld = self.multiworld + player = self.player + goal = self.options.Goal + if goal == Goal.option_hollowknight: + multiworld.completion_condition[player] = lambda state: _hk_can_beat_thk(state, player) + elif goal == Goal.option_siblings: + multiworld.completion_condition[player] = lambda state: _hk_siblings_ending(state, player) + elif goal == Goal.option_radiance: + multiworld.completion_condition[player] = lambda state: _hk_can_beat_radiance(state, player) + elif goal == Goal.option_godhome: + multiworld.completion_condition[player] = lambda state: state.count("Defeated_Pantheon_5", player) + elif goal == Goal.option_godhome_flower: + multiworld.completion_condition[player] = lambda state: state.count("Godhome_Flower_Quest", player) + elif goal == Goal.option_grub_hunt: + multiworld.completion_condition[player] = lambda state: self.can_grub_goal(state) + else: + # Any goal + multiworld.completion_condition[player] = lambda state: _hk_siblings_ending(state, player) and \ + _hk_can_beat_radiance(state, player) and state.count("Godhome_Flower_Quest", player) and \ + self.can_grub_goal(state) + + set_rules(self) + + def can_grub_goal(self, state: CollectionState) -> bool: + return all(state.has("Grub", owner, count) for owner, count in self.grub_player_count.items()) + + @classmethod + def stage_pre_fill(cls, multiworld: "MultiWorld"): + worlds = [world for world in multiworld.get_game_worlds(cls.game) if world.options.Goal in ["any", "grub_hunt"]] + if worlds: + grubs = [item for item in multiworld.get_items() if item.name == "Grub"] + all_grub_players = [ + world.player + for world in worlds + if world.options.GrubHuntGoal == GrubHuntGoal.special_range_names["all"] + ] + + if all_grub_players: + group_lookup = defaultdict(set) + for group_id, group in multiworld.groups.items(): + for player in group["players"]: + group_lookup[group_id].add(player) + + grub_count_per_player = Counter() + per_player_grubs_per_player = defaultdict(Counter) + + for grub in grubs: + player = grub.player + if player in group_lookup: + for real_player in group_lookup[player]: + per_player_grubs_per_player[real_player][player] += 1 + else: + per_player_grubs_per_player[player][player] += 1 + + if grub.location and grub.location.player in group_lookup.keys(): + # will count the item linked grub instead + pass + elif player in group_lookup: + for real_player in group_lookup[player]: + grub_count_per_player[real_player] += 1 + else: + # for non-linked grubs + grub_count_per_player[player] += 1 + + for player, count in grub_count_per_player.items(): + multiworld.worlds[player].grub_count = count + + for player, grub_player_count in per_player_grubs_per_player.items(): + if player in all_grub_players: + multiworld.worlds[player].grub_player_count = grub_player_count + + for world in worlds: + if world.player not in all_grub_players: + world.grub_count = world.options.GrubHuntGoal.value + player = world.player + world.grub_player_count = {player: world.grub_count} + + def fill_slot_data(self): + slot_data = {} + + options = slot_data["options"] = {} + for option_name in hollow_knight_options: + option = getattr(self.options, option_name) + try: + # exclude more complex types - we only care about int, bool, enum for player options; the client + # can get them back to the necessary type. + optionvalue = int(option.value) + options[option_name] = optionvalue + except TypeError: + pass + + # 32 bit int + slot_data["seed"] = self.random.randint(-2147483647, 2147483646) + + # HKAP 0.1.0 and later cost data. + location_costs = {} + for region in self.multiworld.get_regions(self.player): + for location in region.locations: + if location.costs: + location_costs[location.name] = location.costs + slot_data["location_costs"] = location_costs + + slot_data["notch_costs"] = self.charm_costs + + slot_data["grub_count"] = self.grub_count + + slot_data["is_race"] = self.settings.disable_spoilers or self.multiworld.is_race + + return slot_data + + def create_item(self, name: str) -> HKItem: + item_data = item_table[name] + return HKItem(name, item_data.advancement, item_data.id, item_data.type, self.player, self.options.AltRadiance) + + def create_event(self, name: str) -> HKItem: + item_data = item_table[name] + return HKItem(name, item_data.advancement, None, item_data.type, self.player) + + def create_location(self, name: str, vanilla=False) -> HKLocation: + costs = None + basename = name + if name in shop_cost_types: + costs = { + term: self.random.randint(*self.ranges[term]) + for term in shop_cost_types[name] + } + elif name in vanilla_location_costs: + costs = vanilla_location_costs[name] + + multi = self.created_multi_locations.get(name) + + if multi is not None: + i = len(multi) + 1 + name = f"{name}_{i}" + + region = self.multiworld.get_region("Menu", self.player) + + if vanilla and not self.options.AddUnshuffledLocations: + loc = HKLocation(self.player, name, + None, region, costs=costs, vanilla=vanilla, + basename=basename) + else: + loc = HKLocation(self.player, name, + self.location_name_to_id[name], region, costs=costs, vanilla=vanilla, + basename=basename) + + if multi is not None: + multi.append(loc) + + region.locations.append(loc) + return loc + + def create_vanilla_location(self, location: str, item: Item): + costs = self.vanilla_shop_costs.get((location, item.name)) + location = self.create_location(location, vanilla=True) + location.place_locked_item(item) + if costs: + location.costs = costs.pop() + return location + + def collect(self, state, item: HKItem) -> bool: + change = super(HKWorld, self).collect(state, item) + if change: + for effect_name, effect_value in item_effects.get(item.name, {}).items(): + state.prog_items[item.player][effect_name] += effect_value + if item.name in {"Left_Mothwing_Cloak", "Right_Mothwing_Cloak"}: + if state.prog_items[item.player].get('RIGHTDASH', 0) and \ + state.prog_items[item.player].get('LEFTDASH', 0): + (state.prog_items[item.player]["RIGHTDASH"], state.prog_items[item.player]["LEFTDASH"]) = \ + ([max(state.prog_items[item.player]["RIGHTDASH"], state.prog_items[item.player]["LEFTDASH"])] * 2) + return change + + def remove(self, state, item: HKItem) -> bool: + change = super(HKWorld, self).remove(state, item) + + if change: + for effect_name, effect_value in item_effects.get(item.name, {}).items(): + if state.prog_items[item.player][effect_name] == effect_value: + del state.prog_items[item.player][effect_name] + else: + state.prog_items[item.player][effect_name] -= effect_value + + return change + + @classmethod + def stage_write_spoiler(cls, multiworld: MultiWorld, spoiler_handle): + hk_players = multiworld.get_game_players(cls.game) + spoiler_handle.write('\n\nCharm Notches:') + for player in hk_players: + name = multiworld.get_player_name(player) + spoiler_handle.write(f'\n{name}\n') + hk_world: HKWorld = multiworld.worlds[player] + for charm_number, cost in enumerate(hk_world.charm_costs): + spoiler_handle.write(f"\n{charm_names[charm_number]}: {cost}") + + spoiler_handle.write('\n\nShop Prices:') + for player in hk_players: + name = multiworld.get_player_name(player) + spoiler_handle.write(f'\n{name}\n') + hk_world: HKWorld = multiworld.worlds[player] + + if hk_world.options.CostSanity: + for loc in sorted( + ( + loc for loc in itertools.chain(*(region.locations for region in multiworld.get_regions(player))) + if loc.costs + ), key=operator.attrgetter('name') + ): + spoiler_handle.write(f"\n{loc}: {loc.item} costing {loc.cost_text()}") + else: + for shop_name, shop_locations in hk_world.created_multi_locations.items(): + for loc in shop_locations: + spoiler_handle.write(f"\n{loc}: {loc.item} costing {loc.cost_text()}") + + def get_multi_location_name(self, base: str, i: typing.Optional[int]) -> str: + if i is None: + i = len(self.created_multi_locations[base]) + 1 + assert 1 <= 16, "limited number of multi location IDs reserved." + return f"{base}_{i}" + + def get_filler_item_name(self) -> str: + if self.player not in self.cached_filler_items: + fillers = ["One_Geo", "Soul_Refill"] + exclusions = self.white_palace_exclusions() + for group in ( + 'RandomizeGeoRocks', 'RandomizeSoulTotems', 'RandomizeLoreTablets', 'RandomizeJunkPitChests', + 'RandomizeRancidEggs' + ): + if getattr(self.options, group): + fillers.extend(item for item in hollow_knight_randomize_options[group].items if item not in + exclusions) + self.cached_filler_items[self.player] = fillers + return self.random.choice(self.cached_filler_items[self.player]) + + +def create_region(multiworld: MultiWorld, player: int, name: str, location_names=None) -> Region: + ret = Region(name, player, multiworld) + if location_names: + for location in location_names: + loc_id = HKWorld.location_name_to_id.get(location, None) + location = HKLocation(player, location, loc_id, ret) + ret.locations.append(location) + return ret + + +class HKLocation(Location): + game: str = "Hollow Knight Test" + costs: typing.Dict[str, int] = None + unit: typing.Optional[str] = None + vanilla = False + basename: str + + def sort_costs(self): + if self.costs is None: + return + self.costs = {k: self.costs[k] for k in sorted(self.costs.keys(), key=lambda x: cost_terms[x].sort)} + + def __init__( + self, player: int, name: str, code=None, parent=None, + costs: typing.Dict[str, int] = None, vanilla: bool = False, basename: str = None + ): + self.basename = basename or name + super(HKLocation, self).__init__(player, name, code if code else None, parent) + self.vanilla = vanilla + if costs: + self.costs = dict(costs) + self.sort_costs() + + def cost_text(self, separator=" and "): + if self.costs is None: + return None + return separator.join( + f"{value} {cost_terms[term].singular if value == 1 else cost_terms[term].plural}" + for term, value in self.costs.items() + ) + + +class HKItem(Item): + game = "Hollow Knight Test" + type: str + + def __init__(self, name, advancement, code, type: str, player: int = None, alt_radiance = False): + if name == "Mimic_Grub": + classification = ItemClassification.trap + elif name == "Godtuner": + classification = ItemClassification.progression + elif type in ("Grub", "DreamWarrior", "Root", "Egg", "Dreamer"): + classification = ItemClassification.progression_skip_balancing + elif type == "Charm" and name not in progression_charms: + classification = ItemClassification.progression_skip_balancing + elif type in ("Map", "Journal"): + classification = ItemClassification.filler + elif type in ("Ore", "Vessel"): + classification = ItemClassification.useful + elif advancement: + classification = ItemClassification.progression + elif alt_radiance and type == "Mask": + classification = ItemClassification.progression_skip_balancing + else: + classification = ItemClassification.filler + super(HKItem, self).__init__(name, classification, code if code else None, player) + self.type = type + + +class HKLogicMixin(LogicMixin): + multiworld: MultiWorld + + def _hk_notches(self, player: int, *notches: int) -> int: + return sum(self.multiworld.worlds[player].charm_costs[notch] for notch in notches) + + def _hk_option(self, player: int, option_name: str) -> int: + return getattr(self.multiworld.worlds[player].options, option_name).value + + def _hk_start(self, player, start_location: str) -> bool: + return self.multiworld.worlds[player].options.StartLocation == start_location diff --git a/World/docs/en_Hollow Knight.md b/World/docs/en_Hollow Knight.md new file mode 100644 index 0000000..94398ec --- /dev/null +++ b/World/docs/en_Hollow Knight.md @@ -0,0 +1,24 @@ +# Hollow Knight + +## Where is the options page? + +The [player options page for this game](../player-options) contains all the options you need to configure and export a +config file. + +## What does randomization do to this game? + +Randomization swaps around the locations of items. The items being swapped around are chosen within your YAML. +Shop costs are presently always randomized. Items which could be randomized, but are not, will remain unmodified in +their usual locations. In particular, when the items at Grubfather and Seer are partially randomized, randomized items +will be obtained from a chest in the room, while unrandomized items will be given by the NPC as normal. + +## What Hollow Knight items can appear in other players' worlds? + +This is dependent entirely upon your YAML options. Some examples include: charms, grubs, lifeblood cocoons, geo, etc. + +## What does another world's item look like in Hollow Knight? + +When the Hollow Knight player picks up an item from a location and it is an item for another game it will appear in that +player's recent items display as an item being sent to another player. If the item is for another Hollow Knight player +then the sprite will be that of the item's original sprite. If the item belongs to a player that is not playing Hollow +Knight then the sprite will be the Archipelago logo. diff --git a/World/docs/es_Hollow Knight.md b/World/docs/es_Hollow Knight.md new file mode 100644 index 0000000..1a08608 --- /dev/null +++ b/World/docs/es_Hollow Knight.md @@ -0,0 +1,25 @@ +# Hollow Knight + +## ¿Dónde está la página de opciones? + +La [página de opciones de jugador para este juego](../player-options) contiene todas las opciones que necesitas para +configurar y exportar un archivo de configuración. + +## ¿Qué se randomiza en este juego? + +El randomizer cambia la ubicación de los objetos. Los objetos que se intercambian se eligen dentro de tu YAML. +Los costes de las tiendas son aleatorios. Los objetos que podrían ser aleatorios, pero no lo son, permanecerán sin +modificar en sus ubicaciones habituales. En particular, cuando los ítems con el PadreLarva y la Vidente están +parcialmente randomizados, los ítems randomizados se obtendrán de un cofre en la habitación, mientras que los ítems no +randomizados serán dados por el NPC de forma normal. + +## ¿Qué objetos de Hollow Knight pueden aparecer en los mundos de otros jugadores? + +Esto depende enteramente de tus opciones YAML. Algunos ejemplos son: amuletos, larvas, capullos de saviavida, geo, etc. + +## ¿Qué aspecto tienen los objetos de otro mundo en Hollow Knight? + +Cuando el jugador de Hollow Knight recoja un objeto de un lugar y sea un objeto para otro juego, aparecerá en la +pantalla de objetos recientes de ese jugador como un objeto enviado a otro jugador. Si el objeto es para otro jugador +de Hollow Knight entonces el sprite será el del sprite original del objeto. Si el objeto pertenece a un jugador que no +está jugando a Hollow Knight, el sprite será el logo del Archipiélago. \ No newline at end of file diff --git a/World/docs/setup_en.md b/World/docs/setup_en.md new file mode 100644 index 0000000..d49a400 --- /dev/null +++ b/World/docs/setup_en.md @@ -0,0 +1,58 @@ +# Hollow Knight for Archipelago Setup Guide + +## Required Software +* Download and unzip the Lumafly Mod Manager from the [Lumafly website](https://themulhima.github.io/Lumafly/). +* A legal copy of Hollow Knight. + * Steam, Gog, and Xbox Game Pass versions of the game are supported. + * Windows, Mac, and Linux (including Steam Deck) are supported. + +## Installing the Archipelago Mod using Lumafly +1. Launch Lumafly and ensure it locates your Hollow Knight installation directory. +2. Install the Archipelago mods by doing either of the following: + * Click one of the links below to allow Lumafly to install the mods. Lumafly will prompt for confirmation. + * [Archipelago and dependencies only](https://themulhima.github.io/Lumafly/commands/download/?mods=Archipelago) + * [Archipelago with rando essentials](https://themulhima.github.io/Lumafly/commands/download/?mods=Archipelago/Archipelago%20Map%20Mod/RecentItemsDisplay/DebugMod/RandoStats/Additional%20Timelines/CompassAlwaysOn/AdditionalMaps/) + (includes Archipelago Map Mod, RecentItemsDisplay, DebugMod, RandoStats, AdditionalTimelines, CompassAlwaysOn, + and AdditionalMaps). + * Click the "Install" button near the "Archipelago" mod entry. If desired, also install "Archipelago Map Mod" + to use as an in-game tracker. +3. Launch the game, you're all set! + +### What to do if Lumafly fails to find your installation directory +1. Find the directory manually. + * Xbox Game Pass: + 1. Enter the Xbox app and move your mouse over "Hollow Knight" on the left sidebar. + 2. Click the three points then click "Manage". + 3. Go to the "Files" tab and select "Browse...". + 4. Click "Hollow Knight", then "Content", then click the path bar and copy it. + * Steam: + 1. You likely put your Steam library in a non-standard place. If this is the case, you probably know where + it is. Find your steam library and then find the Hollow Knight folder and copy the path. + * Windows - `C:\Program Files (x86)\Steam\steamapps\common\Hollow Knight` + * Linux/Steam Deck - ~/.local/share/Steam/steamapps/common/Hollow Knight + * Mac - ~/Library/Application Support/Steam/steamapps/common/Hollow Knight/hollow_knight.app +2. Run Lumafly as an administrator and, when it asks you for the path, paste the path you copied. + +## Configuring your YAML File +### What is a YAML and why do I need one? +An YAML file is the way that you provide your player options to Archipelago. +See the [basic multiworld setup guide](/tutorial/Archipelago/setup/en) here on the Archipelago website to learn more. + +### Where do I get a YAML? +You can use the [game options page for Hollow Knight](/games/Hollow%20Knight/player-options) here on the Archipelago +website to generate a YAML using a graphical interface. + +## Joining an Archipelago Game in Hollow Knight +1. Start the game after installing all necessary mods. +2. Create a **new save game.** +3. Select the **Archipelago** game mode from the mode selection screen. +4. Enter the correct settings for your Archipelago server. +5. Hit **Start** to begin the game. The game will stall for a few seconds while it does all item placements. +6. The game will immediately drop you into the randomized game. + * If you are waiting for a countdown then wait for it to lapse before hitting Start. + * Or hit Start then pause the game once you're in it. + +## Hints and other commands +While playing in a multiworld, you can interact with the server using various commands listed in the +[commands guide](/tutorial/Archipelago/commands/en). You can use the Archipelago Text Client to do this, +which is included in the latest release of the [Archipelago software](https://github.com/ArchipelagoMW/Archipelago/releases/latest). diff --git a/World/docs/setup_es.md b/World/docs/setup_es.md new file mode 100644 index 0000000..13628c4 --- /dev/null +++ b/World/docs/setup_es.md @@ -0,0 +1,64 @@ +# Hollow Knight Archipelago + +## Software requerido +* Descarga y descomprime Lumafly Mod manager desde el [sitio web de Lumafly](https://themulhima.github.io/Lumafly/) +* Tener una copia legal de Hollow Knight. + * Las versiones de Steam, GOG y Xbox Game Pass son compatibles + * Las versiones de Windows, Mac y Linux (Incluyendo Steam Deck) son compatibles + +## Instalación del mod de Archipelago con Lumafly +1. Ejecuta Lumafly y asegurate de localizar la carpeta de instalación de Hollow Knight +2. Instala el mod de Archipiélago haciendo click en cualquiera de los siguientes: + * Haz clic en uno de los enlaces de abajo para permitir Lumafly para instalar los mods. Lumafly pedirá + confirmación. + * [Archipiélago y dependencias solamente](https://themulhima.github.io/Lumafly/commands/download/?mods=Archipelago) + * [Archipelago con rando essentials](https://themulhima.github.io/Lumafly/commands/download/?mods=Archipelago/Archipelago%20Map%20Mod/RecentItemsDisplay/DebugMod/RandoStats/Additional%20Timelines/CompassAlwaysOn/AdditionalMaps/) + (incluye Archipelago Map Mod, RecentItemsDisplay, DebugMod, RandoStats, AdditionalTimelines, CompassAlwaysOn, + y AdditionalMaps). + * Haz clic en el botón "Instalar" situado junto a la entrada del mod "Archipiélago". Si lo deseas, instala también + "Archipelago Map Mod" para utilizarlo como rastreador en el juego. + Si lo requieres (Y recomiendo hacerlo) busca e instala Archipelago Map Mod para usar un tracker in-game +3. Ejecuta el juego desde el apartado de inicio haciendo click en el botón Launch with Mods + +## Que hago si Lumafly no encontro la ruta de instalación de mi juego? +1. Busca el directorio manualmente + * En Xbox Game pass: + 1. Entra a la Xbox App y dirigete sobre el icono de Hollow Knight que esta a la izquierda. + 2. Haz click en los 3 puntitos y elige el apartado Administrar + 3. Dirigete al apartado Archivos Locales y haz click en Buscar + 4. Abre en Hollow Knight, luego Content y copia la ruta de archivos que esta en la barra de navegación. + * En Steam: + 1. Si instalaste Hollow Knight en algún otro disco que no sea el predeterminado, ya sabrás donde se encuentra + el juego, ve a esa carpeta, abrela y copia la ruta de archivos que se encuentra en la barra de navegación. + * En Windows, la ruta predeterminada suele ser:`C:\Program Files (x86)\Steam\steamapps\common\Hollow Knight` + * En linux/Steam Deck suele ser: ~/.local/share/Steam/steamapps/common/Hollow Knight + * En Mac suele ser: ~/Library/Application Support/Steam/steamapps/common/Hollow Knight/hollow_knight.app +2. Ejecuta Lumafly como administrador y, cuando te pregunte por la ruta de instalación, pega la ruta que copeaste + anteriormente. + +## Configuración de tu fichero YAML +### ¿Qué es un YAML y por qué necesito uno? +Un archivo YAML es la forma en la que proporcionas tus opciones de jugador a Archipelago. +Mira la [guía básica de configuración multiworld](/tutorial/Archipelago/setup/en) aquí en la web de Archipelago para +aprender más, (solo se encuentra en Inglés). + +### ¿Dónde consigo un YAML? +Puedes usar la [página de opciones de juego para Hollow Knight](/games/Hollow%20Knight/player-options) aquí en la web +de Archipelago para generar un YAML usando una interfaz gráfica. + +## Unete a una partida de Archipelago en Hollow Knight +1. Inicia el juego con los mods necesarios indicados anteriormente. +2. Crea una **nueva partida.** +3. Elige el modo **Archipelago** en la selección de modos de partida. +4. Introduce la configuración correcta para tu servidor de Archipelago. +5. Pulsa **Iniciar** para iniciar la partida. El juego se quedará con la pantalla en negro unos segundos mientras + coloca todos los objetos. +6. El juego debera comenzar y ya estaras dentro del servidor. + * Si estas esperando a que termine un contador/timer, procura presionar el boton Start cuando el contador/timer + termine. + * Otra manera es pausar el juego y esperar a que el contador/timer termine cuando ingreses a la partida. + +## Consejos y otros comandos +Mientras juegas en un multiworld, puedes interactuar con el servidor usando varios comandos listados en la +[guía de comandos](/tutorial/Archipelago/commands/en). Puedes usar el Cliente de Texto Archipelago para hacer esto, +que está incluido en la última versión del [software de Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases/latest). \ No newline at end of file diff --git a/World/docs/setup_pt_br.md b/World/docs/setup_pt_br.md new file mode 100644 index 0000000..14e54db --- /dev/null +++ b/World/docs/setup_pt_br.md @@ -0,0 +1,52 @@ +# Guia de configuração para Hollow Knight no Archipelago + +## Programas obrigatórios +* Baixe e extraia o Lumafly Mod Manager (gerenciador de mods Lumafly) do [Site Lumafly](https://themulhima.github.io/Lumafly/). +* Uma cópia legal de Hollow Knight. + * Versões Steam, Gog, e Xbox Game Pass do jogo são suportadas. + * Windows, Mac, e Linux (incluindo Steam Deck) são suportados. + +## Instalando o mod Archipelago Mod usando Lumafly +1. Abra o Lumafly e confirme que ele localizou sua pasta de instalação do Hollow Knight. +2. Clique em "Install (instalar)" perto da opção "Archipelago" mod. + * Se quiser, instale também o "Archipelago Map Mod (mod do mapa do archipelago)" para usá-lo como rastreador dentro do jogo. +3. Abra o jogo, tudo preparado! + +### O que fazer se o Lumafly falha em encontrar a sua pasta de instalação +1. Encontre a pasta manualmente. + * Xbox Game Pass: + 1. Entre no seu aplicativo Xbox e mova seu mouse em cima de "Hollow Knight" na sua barra da esquerda. + 2. Clique nos 3 pontos depois clique gerenciar. + 3. Vá nos arquivos e selecione procurar. + 4. Clique em "Hollow Knight", depois em "Content (Conteúdo)", depois clique na barra com o endereço e a copie. + * Steam: + 1. Você provavelmente colocou sua biblioteca Steam num local não padrão. Se esse for o caso você provavelmente sabe onde está. + Encontre sua biblioteca Steam, depois encontre a pasta do Hollow Knight e copie seu endereço. + * Windows - `C:\Program Files (x86)\Steam\steamapps\common\Hollow Knight` + * Linux/Steam Deck - `~/.local/share/Steam/steamapps/common/Hollow Knight` + * Mac - `~/Library/Application Support/Steam/steamapps/common/Hollow Knight/hollow_knight.app` +2. Rode o Lumafly como administrador e, quando ele perguntar pelo endereço do arquivo, cole o endereço do arquivo que você copiou. + +## Configurando seu arquivo YAML +### O que é um YAML e por que eu preciso de um? +Um arquivo YAML é a forma que você informa suas configurações do jogador para o Archipelago. +Olhe o [guia de configuração básica de um multiworld](/tutorial/Archipelago/setup/en) aqui no site do Archipelago para aprender mais. + +### Onde eu consigo o YAML? +Você pode usar a [página de configurações do jogador para Hollow Knight](/games/Hollow%20Knight/player-options) aqui no site do Archipelago +para gerar o YAML usando a interface gráfica. + +## Entrando numa partida de Archipelago no Hollow Knight +1. Começe o jogo depois de instalar todos os mods necessários. +2. Crie um **novo jogo salvo.** +3. Selecione o modo de jogo **Archipelago** do menu de seleção. +4. Coloque as configurações corretas do seu servidor Archipelago. +5. Aperte em **Começar**. O jogo vai travar por uns segundos enquanto ele coloca todos itens. +6. O jogo vai te colocar imediatamente numa partida randomizada. + * Se você está esperando uma contagem então espere ele cair antes de apertar começar. + * Ou clique em começar e pause o jogo enquanto estiver nele. + +## Dicas e outros comandos +Enquanto jogar um multiworld, você pode interagir com o servidor usando vários comandos listados no +[Guia de comandos](/tutorial/Archipelago/commands/en). Você pode usar o cliente de texto do Archipelago para isso, +que está incluido na ultima versão do [Archipelago software](https://github.com/ArchipelagoMW/Archipelago/releases/latest). diff --git a/World/templates/RulesTemplate.pyt b/World/templates/RulesTemplate.pyt new file mode 100644 index 0000000..7df258a --- /dev/null +++ b/World/templates/RulesTemplate.pyt @@ -0,0 +1,27 @@ +# This module is written by Extractor.py, do not edit manually!. +from functools import partial + +def set_generated_rules(hk_world, hk_set_rule): + player = hk_world.player + fn = partial(hk_set_rule, hk_world) + + # Events + {% for location, rule_text in event_rules.items() %} + fn("{{location}}", lambda state: {{rule_text}}) + {%- endfor %} + + # Locations + {% for location, rule_text in location_rules.items() %} + fn("{{location}}", lambda state: {{rule_text}}) + {%- endfor %} + + # Connectors + {% for entrance, rule_text in connectors_rules.items() %} + rule = lambda state: {{rule_text}} + entrance = world.get_entrance("{{entrance}}", player) + entrance.access_rule = rule + {%- if entrance not in one_ways %} + world.get_entrance("{{entrance}}_R", player).access_rule = lambda state, entrance= entrance: \ + rule(state) and entrance.can_reach(state) + {%- endif %} + {%- endfor %} \ No newline at end of file diff --git a/World/test/__init__.py b/World/test/__init__.py new file mode 100644 index 0000000..6759100 --- /dev/null +++ b/World/test/__init__.py @@ -0,0 +1,61 @@ +import typing +from argparse import Namespace +from BaseClasses import CollectionState, MultiWorld +from Options import ItemLinks +from worlds.AutoWorld import AutoWorldRegister, call_all +from .. import HKWorld + + +class linkedTestHK(): + run_default_tests = False + game = "Hollow Knight" + world: HKWorld + expected_grubs: int + item_link_group: typing.List[typing.Dict[str, typing.Any]] + + def setup_item_links(self, args): + setattr(args, "item_links", + { + 1: ItemLinks.from_any(self.item_link_group), + 2: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Grub"], + "link_replacement": False, + "replacement_item": "One_Geo", + }]) + }) + return args + + def world_setup(self) -> None: + """ + Create a multiworld with two players that share an itemlink + """ + self.multiworld = MultiWorld(2) + self.multiworld.game = {1: self.game, 2: self.game} + self.multiworld.player_name = {1: "Linker 1", 2: "Linker 2"} + self.multiworld.set_seed() + args = Namespace() + options_dataclass = AutoWorldRegister.world_types[self.game].options_dataclass + for name, option in options_dataclass.type_hints.items(): + setattr(args, name, { + 1: option.from_any(self.options.get(name, option.default)), + 2: option.from_any(self.options.get(name, option.default)) + }) + args = self.setup_item_links(args) + self.multiworld.set_options(args) + self.multiworld.set_item_links() + # groups get added to state during its constructor so this has to be after item links are set + self.multiworld.state = CollectionState(self.multiworld) + gen_steps = ("generate_early", "create_regions", "create_items", "set_rules", "generate_basic") + for step in gen_steps: + call_all(self.multiworld, step) + # link the items together and stop at prefill + self.multiworld.link_items() + self.multiworld._all_state = None + call_all(self.multiworld, "pre_fill") + + self.world = self.multiworld.worlds[self.player] + + def test_grub_count(self) -> None: + assert self.world.grub_count == self.expected_grubs, \ + f"Expected {self.expected_grubs} but found {self.world.grub_count}" diff --git a/World/test/test_grub_count.py b/World/test/test_grub_count.py new file mode 100644 index 0000000..a58293c --- /dev/null +++ b/World/test/test_grub_count.py @@ -0,0 +1,166 @@ +from test.bases import WorldTestBase +from Options import ItemLinks +from . import linkedTestHK + + +class test_grubcount_limited(linkedTestHK, WorldTestBase): + options = { + "RandomizeGrubs": True, + "GrubHuntGoal": 20, + "Goal": "any", + } + item_link_group = [{ + "name": "ItemLinkTest", + "item_pool": ["Grub"], + "link_replacement": True, + "replacement_item": "Grub", + }] + expected_grubs = 20 + + +class test_grubcount_default(linkedTestHK, WorldTestBase): + options = { + "RandomizeGrubs": True, + "Goal": "any", + } + item_link_group = [{ + "name": "ItemLinkTest", + "item_pool": ["Grub"], + "link_replacement": True, + "replacement_item": "Grub", + }] + expected_grubs = 46 + + +class test_grubcount_all_unlinked(linkedTestHK, WorldTestBase): + options = { + "RandomizeGrubs": True, + "GrubHuntGoal": "all", + "Goal": "any", + } + item_link_group = [] + expected_grubs = 46 + + +class test_grubcount_all_linked(linkedTestHK, WorldTestBase): + options = { + "RandomizeGrubs": True, + "GrubHuntGoal": "all", + "Goal": "any", + } + item_link_group = [{ + "name": "ItemLinkTest", + "item_pool": ["Grub"], + "link_replacement": True, + "replacement_item": "Grub", + }] + expected_grubs = 46 + 23 + + +class test_replacement_only(linkedTestHK, WorldTestBase): + options = { + "RandomizeGrubs": True, + "GrubHuntGoal": "all", + "Goal": "any", + } + expected_grubs = 46 + 18 # the count of grubs + skills removed from item links + + def setup_item_links(self, args): + setattr(args, "item_links", + { + 1: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Skills"], + "link_replacement": True, + "replacement_item": "Grub", + }]), + 2: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Skills"], + "link_replacement": True, + "replacement_item": "Grub", + }]) + }) + return args + + +class test_replacement_only_unlinked(linkedTestHK, WorldTestBase): + options = { + "RandomizeGrubs": True, + "GrubHuntGoal": "all", + "Goal": "any", + } + expected_grubs = 46 + 9 # Player1s replacement Grubs + + def setup_item_links(self, args): + setattr(args, "item_links", + { + 1: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Skills"], + "link_replacement": False, + "replacement_item": "Grub", + }]), + 2: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Skills"], + "link_replacement": False, + "replacement_item": "Grub", + }]) + }) + return args + + +class test_ignore_others(linkedTestHK, WorldTestBase): + options = { + "RandomizeGrubs": True, + "GrubHuntGoal": "all", + "Goal": "any", + } + # player2 has more than 46 grubs but they are unlinked so player1s grubs are vanilla + expected_grubs = 46 + + def setup_item_links(self, args): + setattr(args, "item_links", + { + 1: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Skills"], + "link_replacement": False, + "replacement_item": "One_Geo", + }]), + 2: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Skills"], + "link_replacement": False, + "replacement_item": "Grub", + }]) + }) + return args + + +class test_replacement_only_linked(linkedTestHK, WorldTestBase): + options = { + "RandomizeGrubs": True, + "GrubHuntGoal": "all", + "Goal": "any", + } + expected_grubs = 46 + 9 # Player2s linkreplacement grubs + + def setup_item_links(self, args): + setattr(args, "item_links", + { + 1: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Skills"], + "link_replacement": True, + "replacement_item": "One_Geo", + }]), + 2: ItemLinks.from_any([{ + "name": "ItemLinkTest", + "item_pool": ["Skills"], + "link_replacement": True, + "replacement_item": "Grub", + }]) + }) + return args