Aquaria: mega refactoring (#3810)

This PR is mainly refactoring. Here is what changed:
- Changing item names so that each words are capitalized (`Energy Form` instead of `Energy form`)
- Removing duplication of string literal by using:
  - Constants for items and locations,
  - Region's name attribute for entrances,
- Clarify some documentations,
- Adding some region to be more representative of the game and to remove listing of locations in the rules (prioritize entrance rules over individual location rules).

This is the other minor modifications that are not refactoring:
- Adding an early bind song option since that can be used to exit starting area.
- Changing Sun God to Lumerean God to be coherent with the other gods.
- Changing Home Water to Home Waters and Open Water to Open Waters to be coherent with the game.
- Removing a rules to have an attack to go in Mithalas Cathedral since you can to get some checks in it without an attack.
- Adding some options to slot data to be used with Poptracker.
- Fixing a little but still potentially logic breaking bug.
This commit is contained in:
Louis M 2024-12-08 20:18:00 -05:00 committed by GitHub
parent 1f712d9a87
commit 26f9720e69
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
26 changed files with 2125 additions and 1651 deletions

View File

@ -59,156 +59,316 @@ class ItemData:
type: ItemType type: ItemType
group: ItemGroup group: ItemGroup
def __init__(self, id: int, count: int, type: ItemType, group: ItemGroup): def __init__(self, aId: int, count: int, aType: ItemType, group: ItemGroup):
""" """
Initialisation of the item data Initialisation of the item data
@param id: The item ID @param aId: The item ID
@param count: the number of items in the pool @param count: the number of items in the pool
@param type: the importance type of the item @param aType: the importance type of the item
@param group: the usage of the item in the game @param group: the usage of the item in the game
""" """
self.id = id self.id = aId
self.count = count self.count = count
self.type = type self.type = aType
self.group = group self.group = group
class ItemNames:
"""
Constants used to represent the mane of every items.
"""
# Normal items
ANEMONE = "Anemone"
ARNASSI_STATUE = "Arnassi Statue"
BIG_SEED = "Big Seed"
GLOWING_SEED = "Glowing Seed"
BLACK_PEARL = "Black Pearl"
BABY_BLASTER = "Baby Blaster"
CRAB_ARMOR = "Crab Armor"
BABY_DUMBO = "Baby Dumbo"
TOOTH = "Tooth"
ENERGY_STATUE = "Energy Statue"
KROTITE_ARMOR = "Krotite Armor"
GOLDEN_STARFISH = "Golden Starfish"
GOLDEN_GEAR = "Golden Gear"
JELLY_BEACON = "Jelly Beacon"
JELLY_COSTUME = "Jelly Costume"
JELLY_PLANT = "Jelly Plant"
MITHALAS_DOLL = "Mithalas Doll"
MITHALAN_DRESS = "Mithalan Dress"
MITHALAS_BANNER = "Mithalas Banner"
MITHALAS_POT = "Mithalas Pot"
MUTANT_COSTUME = "Mutant Costume"
BABY_NAUTILUS = "Baby Nautilus"
BABY_PIRANHA = "Baby Piranha"
ARNASSI_ARMOR = "Arnassi Armor"
SEED_BAG = "Seed Bag"
KING_S_SKULL = "King's Skull"
SONG_PLANT_SPORE = "Song Plant Spore"
STONE_HEAD = "Stone Head"
SUN_KEY = "Sun Key"
GIRL_COSTUME = "Girl Costume"
ODD_CONTAINER = "Odd Container"
TRIDENT = "Trident"
TURTLE_EGG = "Turtle Egg"
JELLY_EGG = "Jelly Egg"
URCHIN_COSTUME = "Urchin Costume"
BABY_WALKER = "Baby Walker"
VEDHA_S_CURE_ALL = "Vedha's Cure-All"
ZUUNA_S_PEROGI = "Zuuna's Perogi"
ARCANE_POULTICE = "Arcane Poultice"
BERRY_ICE_CREAM = "Berry Ice Cream"
BUTTERY_SEA_LOAF = "Buttery Sea Loaf"
COLD_BORSCHT = "Cold Borscht"
COLD_SOUP = "Cold Soup"
CRAB_CAKE = "Crab Cake"
DIVINE_SOUP = "Divine Soup"
DUMBO_ICE_CREAM = "Dumbo Ice Cream"
FISH_OIL = "Fish Oil"
GLOWING_EGG = "Glowing Egg"
HAND_ROLL = "Hand Roll"
HEALING_POULTICE = "Healing Poultice"
HEARTY_SOUP = "Hearty Soup"
HOT_BORSCHT = "Hot Borscht"
HOT_SOUP = "Hot Soup"
ICE_CREAM = "Ice Cream"
LEADERSHIP_ROLL = "Leadership Roll"
LEAF_POULTICE = "Leaf Poultice"
LEECHING_POULTICE = "Leeching Poultice"
LEGENDARY_CAKE = "Legendary Cake"
LOAF_OF_LIFE = "Loaf of Life"
LONG_LIFE_SOUP = "Long Life Soup"
MAGIC_SOUP = "Magic Soup"
MUSHROOM_X_2 = "Mushroom x 2"
PEROGI = "Perogi"
PLANT_LEAF = "Plant Leaf"
PLUMP_PEROGI = "Plump Perogi"
POISON_LOAF = "Poison Loaf"
POISON_SOUP = "Poison Soup"
RAINBOW_MUSHROOM = "Rainbow Mushroom"
RAINBOW_SOUP = "Rainbow Soup"
RED_BERRY = "Red Berry"
RED_BULB_X_2 = "Red Bulb x 2"
ROTTEN_CAKE = "Rotten Cake"
ROTTEN_LOAF_X_8 = "Rotten Loaf x 8"
ROTTEN_MEAT = "Rotten Meat"
ROYAL_SOUP = "Royal Soup"
SEA_CAKE = "Sea Cake"
SEA_LOAF = "Sea Loaf"
SHARK_FIN_SOUP = "Shark Fin Soup"
SIGHT_POULTICE = "Sight Poultice"
SMALL_BONE_X_2 = "Small Bone x 2"
SMALL_EGG = "Small Egg"
SMALL_TENTACLE_X_2 = "Small Tentacle x 2"
SPECIAL_BULB = "Special Bulb"
SPECIAL_CAKE = "Special Cake"
SPICY_MEAT_X_2 = "Spicy Meat x 2"
SPICY_ROLL = "Spicy Roll"
SPICY_SOUP = "Spicy Soup"
SPIDER_ROLL = "Spider Roll"
SWAMP_CAKE = "Swamp Cake"
TASTY_CAKE = "Tasty Cake"
TASTY_ROLL = "Tasty Roll"
TOUGH_CAKE = "Tough Cake"
TURTLE_SOUP = "Turtle Soup"
VEDHA_SEA_CRISP = "Vedha Sea Crisp"
VEGGIE_CAKE = "Veggie Cake"
VEGGIE_ICE_CREAM = "Veggie Ice Cream"
VEGGIE_SOUP = "Veggie Soup"
VOLCANO_ROLL = "Volcano Roll"
HEALTH_UPGRADE = "Health Upgrade"
WOK = "Wok"
EEL_OIL_X_2 = "Eel Oil x 2"
FISH_MEAT_X_2 = "Fish Meat x 2"
FISH_OIL_X_3 = "Fish Oil x 3"
GLOWING_EGG_X_2 = "Glowing Egg x 2"
HEALING_POULTICE_X_2 = "Healing Poultice x 2"
HOT_SOUP_X_2 = "Hot Soup x 2"
LEADERSHIP_ROLL_X_2 = "Leadership Roll x 2"
LEAF_POULTICE_X_3 = "Leaf Poultice x 3"
PLANT_LEAF_X_2 = "Plant Leaf x 2"
PLANT_LEAF_X_3 = "Plant Leaf x 3"
ROTTEN_MEAT_X_2 = "Rotten Meat x 2"
ROTTEN_MEAT_X_8 = "Rotten Meat x 8"
SEA_LOAF_X_2 = "Sea Loaf x 2"
SMALL_BONE_X_3 = "Small Bone x 3"
SMALL_EGG_X_2 = "Small Egg x 2"
LI_AND_LI_SONG = "Li and Li Song"
SHIELD_SONG = "Shield Song"
BEAST_FORM = "Beast Form"
SUN_FORM = "Sun Form"
NATURE_FORM = "Nature Form"
ENERGY_FORM = "Energy Form"
BIND_SONG = "Bind Song"
FISH_FORM = "Fish Form"
SPIRIT_FORM = "Spirit Form"
DUAL_FORM = "Dual Form"
TRANSTURTLE_VEIL_TOP_LEFT = "Transturtle Veil top left"
TRANSTURTLE_VEIL_TOP_RIGHT = "Transturtle Veil top right"
TRANSTURTLE_OPEN_WATERS = "Transturtle Open Waters top right"
TRANSTURTLE_KELP_FOREST = "Transturtle Kelp Forest bottom left"
TRANSTURTLE_HOME_WATERS = "Transturtle Home Waters"
TRANSTURTLE_ABYSS = "Transturtle Abyss right"
TRANSTURTLE_BODY = "Transturtle Final Boss"
TRANSTURTLE_SIMON_SAYS = "Transturtle Simon Says"
TRANSTURTLE_ARNASSI_RUINS = "Transturtle Arnassi Ruins"
# Events name
BODY_TONGUE_CLEARED = "Body Tongue cleared"
HAS_SUN_CRYSTAL = "Has Sun Crystal"
FALLEN_GOD_BEATED = "Fallen God beated"
MITHALAN_GOD_BEATED = "Mithalan God beated"
DRUNIAN_GOD_BEATED = "Drunian God beated"
LUMEREAN_GOD_BEATED = "Lumerean God beated"
THE_GOLEM_BEATED = "The Golem beated"
NAUTILUS_PRIME_BEATED = "Nautilus Prime beated"
BLASTER_PEG_PRIME_BEATED = "Blaster Peg Prime beated"
MERGOG_BEATED = "Mergog beated"
MITHALAN_PRIESTS_BEATED = "Mithalan priests beated"
OCTOPUS_PRIME_BEATED = "Octopus Prime beated"
CRABBIUS_MAXIMUS_BEATED = "Crabbius Maximus beated"
MANTIS_SHRIMP_PRIME_BEATED = "Mantis Shrimp Prime beated"
KING_JELLYFISH_GOD_PRIME_BEATED = "King Jellyfish God Prime beated"
VICTORY = "Victory"
FIRST_SECRET_OBTAINED = "First Secret obtained"
SECOND_SECRET_OBTAINED = "Second Secret obtained"
THIRD_SECRET_OBTAINED = "Third Secret obtained"
"""Information data for every (not event) item.""" """Information data for every (not event) item."""
item_table = { item_table = {
# name: ID, Nb, Item Type, Item Group # name: ID, Nb, Item Type, Item Group
"Anemone": ItemData(698000, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_anemone ItemNames.ANEMONE: ItemData(698000, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_anemone
"Arnassi Statue": ItemData(698001, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_arnassi_statue ItemNames.ARNASSI_STATUE: ItemData(698001, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_arnassi_statue
"Big Seed": ItemData(698002, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_big_seed ItemNames.BIG_SEED: ItemData(698002, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_big_seed
"Glowing Seed": ItemData(698003, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_bio_seed ItemNames.GLOWING_SEED: ItemData(698003, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_bio_seed
"Black Pearl": ItemData(698004, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_blackpearl ItemNames.BLACK_PEARL: ItemData(698004, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_blackpearl
"Baby Blaster": ItemData(698005, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_blaster ItemNames.BABY_BLASTER: ItemData(698005, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_blaster
"Crab Armor": ItemData(698006, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_crab_costume ItemNames.CRAB_ARMOR: ItemData(698006, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_crab_costume
"Baby Dumbo": ItemData(698007, 1, ItemType.PROGRESSION, ItemGroup.UTILITY), # collectible_dumbo ItemNames.BABY_DUMBO: ItemData(698007, 1, ItemType.PROGRESSION, ItemGroup.UTILITY), # collectible_dumbo
"Tooth": ItemData(698008, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_energy_boss ItemNames.TOOTH: ItemData(698008, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_energy_boss
"Energy Statue": ItemData(698009, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_energy_statue ItemNames.ENERGY_STATUE: ItemData(698009, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_energy_statue
"Krotite Armor": ItemData(698010, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_energy_temple ItemNames.KROTITE_ARMOR: ItemData(698010, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_energy_temple
"Golden Starfish": ItemData(698011, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_gold_star ItemNames.GOLDEN_STARFISH: ItemData(698011, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_gold_star
"Golden Gear": ItemData(698012, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_golden_gear ItemNames.GOLDEN_GEAR: ItemData(698012, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_golden_gear
"Jelly Beacon": ItemData(698013, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_jelly_beacon ItemNames.JELLY_BEACON: ItemData(698013, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_jelly_beacon
"Jelly Costume": ItemData(698014, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_jelly_costume ItemNames.JELLY_COSTUME: ItemData(698014, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_jelly_costume
"Jelly Plant": ItemData(698015, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_jelly_plant ItemNames.JELLY_PLANT: ItemData(698015, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_jelly_plant
"Mithalas Doll": ItemData(698016, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mithala_doll ItemNames.MITHALAS_DOLL: ItemData(698016, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mithala_doll
"Mithalan Dress": ItemData(698017, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mithalan_costume ItemNames.MITHALAN_DRESS: ItemData(698017, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mithalan_costume
"Mithalas Banner": ItemData(698018, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mithalas_banner ItemNames.MITHALAS_BANNER: ItemData(698018, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mithalas_banner
"Mithalas Pot": ItemData(698019, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mithalas_pot ItemNames.MITHALAS_POT: ItemData(698019, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mithalas_pot
"Mutant Costume": ItemData(698020, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mutant_costume ItemNames.MUTANT_COSTUME: ItemData(698020, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mutant_costume
"Baby Nautilus": ItemData(698021, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_nautilus ItemNames.BABY_NAUTILUS: ItemData(698021, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_nautilus
"Baby Piranha": ItemData(698022, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_piranha ItemNames.BABY_PIRANHA: ItemData(698022, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_piranha
"Arnassi Armor": ItemData(698023, 1, ItemType.PROGRESSION, ItemGroup.UTILITY), # collectible_seahorse_costume ItemNames.ARNASSI_ARMOR: ItemData(698023, 1, ItemType.PROGRESSION, ItemGroup.UTILITY), # collectible_seahorse_costume
"Seed Bag": ItemData(698024, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_seed_bag ItemNames.SEED_BAG: ItemData(698024, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_seed_bag
"King's Skull": ItemData(698025, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_skull ItemNames.KING_S_SKULL: ItemData(698025, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_skull
"Song Plant Spore": ItemData(698026, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_spore_seed ItemNames.SONG_PLANT_SPORE: ItemData(698026, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_spore_seed
"Stone Head": ItemData(698027, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_stone_head ItemNames.STONE_HEAD: ItemData(698027, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_stone_head
"Sun Key": ItemData(698028, 1, ItemType.NORMAL, ItemGroup.COLLECTIBLE), # collectible_sun_key ItemNames.SUN_KEY: ItemData(698028, 1, ItemType.NORMAL, ItemGroup.COLLECTIBLE), # collectible_sun_key
"Girl Costume": ItemData(698029, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_teen_costume ItemNames.GIRL_COSTUME: ItemData(698029, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_teen_costume
"Odd Container": ItemData(698030, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_treasure_chest ItemNames.ODD_CONTAINER: ItemData(698030, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_treasure_chest
"Trident": ItemData(698031, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_trident_head ItemNames.TRIDENT: ItemData(698031, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_trident_head
"Turtle Egg": ItemData(698032, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_turtle_egg ItemNames.TURTLE_EGG: ItemData(698032, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_turtle_egg
"Jelly Egg": ItemData(698033, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_upsidedown_seed ItemNames.JELLY_EGG: ItemData(698033, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_upsidedown_seed
"Urchin Costume": ItemData(698034, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_urchin_costume ItemNames.URCHIN_COSTUME: ItemData(698034, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_urchin_costume
"Baby Walker": ItemData(698035, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_walker ItemNames.BABY_WALKER: ItemData(698035, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_walker
"Vedha's Cure-All-All": ItemData(698036, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_Vedha'sCure-All ItemNames.VEDHA_S_CURE_ALL: ItemData(698036, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_Vedha'sCure-All
"Zuuna's perogi": ItemData(698037, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_Zuuna'sperogi ItemNames.ZUUNA_S_PEROGI: ItemData(698037, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_Zuuna'sperogi
"Arcane poultice": ItemData(698038, 7, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_arcanepoultice ItemNames.ARCANE_POULTICE: ItemData(698038, 7, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_arcanepoultice
"Berry ice cream": ItemData(698039, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_berryicecream ItemNames.BERRY_ICE_CREAM: ItemData(698039, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_berryicecream
"Buttery sea loaf": ItemData(698040, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_butterysealoaf ItemNames.BUTTERY_SEA_LOAF: ItemData(698040, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_butterysealoaf
"Cold borscht": ItemData(698041, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_coldborscht ItemNames.COLD_BORSCHT: ItemData(698041, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_coldborscht
"Cold soup": ItemData(698042, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_coldsoup ItemNames.COLD_SOUP: ItemData(698042, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_coldsoup
"Crab cake": ItemData(698043, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_crabcake ItemNames.CRAB_CAKE: ItemData(698043, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_crabcake
"Divine soup": ItemData(698044, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_divinesoup ItemNames.DIVINE_SOUP: ItemData(698044, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_divinesoup
"Dumbo ice cream": ItemData(698045, 3, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_dumboicecream ItemNames.DUMBO_ICE_CREAM: ItemData(698045, 3, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_dumboicecream
"Fish oil": ItemData(698046, 2, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_fishoil ItemNames.FISH_OIL: ItemData(698046, 2, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_fishoil
"Glowing egg": ItemData(698047, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_glowingegg ItemNames.GLOWING_EGG: ItemData(698047, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_glowingegg
"Hand roll": ItemData(698048, 5, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_handroll ItemNames.HAND_ROLL: ItemData(698048, 5, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_handroll
"Healing poultice": ItemData(698049, 4, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_healingpoultice ItemNames.HEALING_POULTICE: ItemData(698049, 4, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_healingpoultice
"Hearty soup": ItemData(698050, 5, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_heartysoup ItemNames.HEARTY_SOUP: ItemData(698050, 5, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_heartysoup
"Hot borscht": ItemData(698051, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_hotborscht ItemNames.HOT_BORSCHT: ItemData(698051, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_hotborscht
"Hot soup": ItemData(698052, 3, ItemType.PROGRESSION, ItemGroup.RECIPE), # ingredient_hotsoup ItemNames.HOT_SOUP: ItemData(698052, 3, ItemType.PROGRESSION, ItemGroup.RECIPE), # ingredient_hotsoup
"Ice cream": ItemData(698053, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_icecream ItemNames.ICE_CREAM: ItemData(698053, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_icecream
"Leadership roll": ItemData(698054, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_leadershiproll ItemNames.LEADERSHIP_ROLL: ItemData(698054, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_leadershiproll
"Leaf poultice": ItemData(698055, 5, ItemType.PROGRESSION, ItemGroup.RECIPE), # ingredient_leafpoultice ItemNames.LEAF_POULTICE: ItemData(698055, 5, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_leafpoultice
"Leeching poultice": ItemData(698056, 4, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_leechingpoultice ItemNames.LEECHING_POULTICE: ItemData(698056, 4, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_leechingpoultice
"Legendary cake": ItemData(698057, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_legendarycake ItemNames.LEGENDARY_CAKE: ItemData(698057, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_legendarycake
"Loaf of life": ItemData(698058, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_loafoflife ItemNames.LOAF_OF_LIFE: ItemData(698058, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_loafoflife
"Long life soup": ItemData(698059, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_longlifesoup ItemNames.LONG_LIFE_SOUP: ItemData(698059, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_longlifesoup
"Magic soup": ItemData(698060, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_magicsoup ItemNames.MAGIC_SOUP: ItemData(698060, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_magicsoup
"Mushroom x 2": ItemData(698061, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_mushroom ItemNames.MUSHROOM_X_2: ItemData(698061, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_mushroom
"Perogi": ItemData(698062, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_perogi ItemNames.PEROGI: ItemData(698062, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_perogi
"Plant leaf": ItemData(698063, 3, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_plantleaf ItemNames.PLANT_LEAF: ItemData(698063, 3, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_plantleaf
"Plump perogi": ItemData(698064, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_plumpperogi ItemNames.PLUMP_PEROGI: ItemData(698064, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_plumpperogi
"Poison loaf": ItemData(698065, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_poisonloaf ItemNames.POISON_LOAF: ItemData(698065, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_poisonloaf
"Poison soup": ItemData(698066, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_poisonsoup ItemNames.POISON_SOUP: ItemData(698066, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_poisonsoup
"Rainbow mushroom": ItemData(698067, 4, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_rainbowmushroom ItemNames.RAINBOW_MUSHROOM: ItemData(698067, 4, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_rainbowmushroom
"Rainbow soup": ItemData(698068, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_rainbowsoup ItemNames.RAINBOW_SOUP: ItemData(698068, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_rainbowsoup
"Red berry": ItemData(698069, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_redberry ItemNames.RED_BERRY: ItemData(698069, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_redberry
"Red bulb x 2": ItemData(698070, 3, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_redbulb ItemNames.RED_BULB_X_2: ItemData(698070, 3, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_redbulb
"Rotten cake": ItemData(698071, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_rottencake ItemNames.ROTTEN_CAKE: ItemData(698071, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_rottencake
"Rotten loaf x 8": ItemData(698072, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_rottenloaf ItemNames.ROTTEN_LOAF_X_8: ItemData(698072, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_rottenloaf
"Rotten meat": ItemData(698073, 5, ItemType.JUNK, ItemGroup.INGREDIENT), # ingredient_rottenmeat ItemNames.ROTTEN_MEAT: ItemData(698073, 5, ItemType.JUNK, ItemGroup.INGREDIENT), # ingredient_rottenmeat
"Royal soup": ItemData(698074, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_royalsoup ItemNames.ROYAL_SOUP: ItemData(698074, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_royalsoup
"Sea cake": ItemData(698075, 4, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_seacake ItemNames.SEA_CAKE: ItemData(698075, 4, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_seacake
"Sea loaf": ItemData(698076, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_sealoaf ItemNames.SEA_LOAF: ItemData(698076, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_sealoaf
"Shark fin soup": ItemData(698077, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_sharkfinsoup ItemNames.SHARK_FIN_SOUP: ItemData(698077, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_sharkfinsoup
"Sight poultice": ItemData(698078, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_sightpoultice ItemNames.SIGHT_POULTICE: ItemData(698078, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_sightpoultice
"Small bone x 2": ItemData(698079, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smallbone ItemNames.SMALL_BONE_X_2: ItemData(698079, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smallbone
"Small egg": ItemData(698080, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smallegg ItemNames.SMALL_EGG: ItemData(698080, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smallegg
"Small tentacle x 2": ItemData(698081, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smalltentacle ItemNames.SMALL_TENTACLE_X_2: ItemData(698081, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smalltentacle
"Special bulb": ItemData(698082, 5, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_specialbulb ItemNames.SPECIAL_BULB: ItemData(698082, 5, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_specialbulb
"Special cake": ItemData(698083, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_specialcake ItemNames.SPECIAL_CAKE: ItemData(698083, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_specialcake
"Spicy meat x 2": ItemData(698084, 3, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_spicymeat ItemNames.SPICY_MEAT_X_2: ItemData(698084, 3, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_spicymeat
"Spicy roll": ItemData(698085, 11, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_spicyroll ItemNames.SPICY_ROLL: ItemData(698085, 11, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_spicyroll
"Spicy soup": ItemData(698086, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_spicysoup ItemNames.SPICY_SOUP: ItemData(698086, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_spicysoup
"Spider roll": ItemData(698087, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_spiderroll ItemNames.SPIDER_ROLL: ItemData(698087, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_spiderroll
"Swamp cake": ItemData(698088, 3, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_swampcake ItemNames.SWAMP_CAKE: ItemData(698088, 3, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_swampcake
"Tasty cake": ItemData(698089, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_tastycake ItemNames.TASTY_CAKE: ItemData(698089, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_tastycake
"Tasty roll": ItemData(698090, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_tastyroll ItemNames.TASTY_ROLL: ItemData(698090, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_tastyroll
"Tough cake": ItemData(698091, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_toughcake ItemNames.TOUGH_CAKE: ItemData(698091, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_toughcake
"Turtle soup": ItemData(698092, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_turtlesoup ItemNames.TURTLE_SOUP: ItemData(698092, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_turtlesoup
"Vedha sea crisp": ItemData(698093, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_vedhaseacrisp ItemNames.VEDHA_SEA_CRISP: ItemData(698093, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_vedhaseacrisp
"Veggie cake": ItemData(698094, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_veggiecake ItemNames.VEGGIE_CAKE: ItemData(698094, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_veggiecake
"Veggie ice cream": ItemData(698095, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_veggieicecream ItemNames.VEGGIE_ICE_CREAM: ItemData(698095, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_veggieicecream
"Veggie soup": ItemData(698096, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_veggiesoup ItemNames.VEGGIE_SOUP: ItemData(698096, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_veggiesoup
"Volcano roll": ItemData(698097, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_volcanoroll ItemNames.VOLCANO_ROLL: ItemData(698097, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_volcanoroll
"Health upgrade": ItemData(698098, 5, ItemType.NORMAL, ItemGroup.HEALTH), # upgrade_health_? ItemNames.HEALTH_UPGRADE: ItemData(698098, 5, ItemType.NORMAL, ItemGroup.HEALTH), # upgrade_health_?
"Wok": ItemData(698099, 1, ItemType.NORMAL, ItemGroup.UTILITY), # upgrade_wok ItemNames.WOK: ItemData(698099, 1, ItemType.NORMAL, ItemGroup.UTILITY), # upgrade_wok
"Eel oil x 2": ItemData(698100, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_eeloil ItemNames.EEL_OIL_X_2: ItemData(698100, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_eeloil
"Fish meat x 2": ItemData(698101, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_fishmeat ItemNames.FISH_MEAT_X_2: ItemData(698101, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_fishmeat
"Fish oil x 3": ItemData(698102, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_fishoil ItemNames.FISH_OIL_X_3: ItemData(698102, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_fishoil
"Glowing egg x 2": ItemData(698103, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_glowingegg ItemNames.GLOWING_EGG_X_2: ItemData(698103, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_glowingegg
"Healing poultice x 2": ItemData(698104, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_healingpoultice ItemNames.HEALING_POULTICE_X_2: ItemData(698104, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_healingpoultice
"Hot soup x 2": ItemData(698105, 1, ItemType.PROGRESSION, ItemGroup.RECIPE), # ingredient_hotsoup ItemNames.HOT_SOUP_X_2: ItemData(698105, 1, ItemType.PROGRESSION, ItemGroup.RECIPE), # ingredient_hotsoup
"Leadership roll x 2": ItemData(698106, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_leadershiproll ItemNames.LEADERSHIP_ROLL_X_2: ItemData(698106, 1, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_leadershiproll
"Leaf poultice x 3": ItemData(698107, 2, ItemType.PROGRESSION, ItemGroup.RECIPE), # ingredient_leafpoultice ItemNames.LEAF_POULTICE_X_3: ItemData(698107, 2, ItemType.NORMAL, ItemGroup.RECIPE), # ingredient_leafpoultice
"Plant leaf x 2": ItemData(698108, 2, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_plantleaf ItemNames.PLANT_LEAF_X_2: ItemData(698108, 2, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_plantleaf
"Plant leaf x 3": ItemData(698109, 4, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_plantleaf ItemNames.PLANT_LEAF_X_3: ItemData(698109, 4, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_plantleaf
"Rotten meat x 2": ItemData(698110, 1, ItemType.JUNK, ItemGroup.INGREDIENT), # ingredient_rottenmeat ItemNames.ROTTEN_MEAT_X_2: ItemData(698110, 1, ItemType.JUNK, ItemGroup.INGREDIENT), # ingredient_rottenmeat
"Rotten meat x 8": ItemData(698111, 1, ItemType.JUNK, ItemGroup.INGREDIENT), # ingredient_rottenmeat ItemNames.ROTTEN_MEAT_X_8: ItemData(698111, 1, ItemType.JUNK, ItemGroup.INGREDIENT), # ingredient_rottenmeat
"Sea loaf x 2": ItemData(698112, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_sealoaf ItemNames.SEA_LOAF_X_2: ItemData(698112, 1, ItemType.JUNK, ItemGroup.RECIPE), # ingredient_sealoaf
"Small bone x 3": ItemData(698113, 3, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smallbone ItemNames.SMALL_BONE_X_3: ItemData(698113, 3, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smallbone
"Small egg x 2": ItemData(698114, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smallegg ItemNames.SMALL_EGG_X_2: ItemData(698114, 1, ItemType.NORMAL, ItemGroup.INGREDIENT), # ingredient_smallegg
"Li and Li song": ItemData(698115, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_li ItemNames.LI_AND_LI_SONG: ItemData(698115, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_li
"Shield song": ItemData(698116, 1, ItemType.NORMAL, ItemGroup.SONG), # song_shield ItemNames.SHIELD_SONG: ItemData(698116, 1, ItemType.NORMAL, ItemGroup.SONG), # song_shield
"Beast form": ItemData(698117, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_beast ItemNames.BEAST_FORM: ItemData(698117, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_beast
"Sun form": ItemData(698118, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_sun ItemNames.SUN_FORM: ItemData(698118, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_sun
"Nature form": ItemData(698119, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_nature ItemNames.NATURE_FORM: ItemData(698119, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_nature
"Energy form": ItemData(698120, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_energy ItemNames.ENERGY_FORM: ItemData(698120, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_energy
"Bind song": ItemData(698121, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_bind ItemNames.BIND_SONG: ItemData(698121, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_bind
"Fish form": ItemData(698122, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_fish ItemNames.FISH_FORM: ItemData(698122, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_fish
"Spirit form": ItemData(698123, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_spirit ItemNames.SPIRIT_FORM: ItemData(698123, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_spirit
"Dual form": ItemData(698124, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_dual ItemNames.DUAL_FORM: ItemData(698124, 1, ItemType.PROGRESSION, ItemGroup.SONG), # song_dual
"Transturtle Veil top left": ItemData(698125, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_veil01 ItemNames.TRANSTURTLE_VEIL_TOP_LEFT: ItemData(698125, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_veil01
"Transturtle Veil top right": ItemData(698126, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_veil02 ItemNames.TRANSTURTLE_VEIL_TOP_RIGHT: ItemData(698126, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_veil02
"Transturtle Open Water top right": ItemData(698127, 1, ItemType.PROGRESSION, ItemNames.TRANSTURTLE_OPEN_WATERS: ItemData(698127, 1, ItemType.PROGRESSION,
ItemGroup.TURTLE), # transport_openwater03 ItemGroup.TURTLE), # transport_openwater03
"Transturtle Forest bottom left": ItemData(698128, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_forest04 ItemNames.TRANSTURTLE_KELP_FOREST: ItemData(698128, 1, ItemType.PROGRESSION, ItemGroup.TURTLE),
"Transturtle Home Water": ItemData(698129, 1, ItemType.NORMAL, ItemGroup.TURTLE), # transport_mainarea # transport_forest04
"Transturtle Abyss right": ItemData(698130, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_abyss03 ItemNames.TRANSTURTLE_HOME_WATERS: ItemData(698129, 1, ItemType.NORMAL, ItemGroup.TURTLE), # transport_mainarea
"Transturtle Final Boss": ItemData(698131, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_finalboss ItemNames.TRANSTURTLE_ABYSS: ItemData(698130, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_abyss03
"Transturtle Simon Says": ItemData(698132, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_forest05 ItemNames.TRANSTURTLE_BODY: ItemData(698131, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_finalboss
"Transturtle Arnassi Ruins": ItemData(698133, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_seahorse ItemNames.TRANSTURTLE_SIMON_SAYS: ItemData(698132, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_forest05
ItemNames.TRANSTURTLE_ARNASSI_RUINS: ItemData(698133, 1, ItemType.PROGRESSION, ItemGroup.TURTLE), # transport_seahorse
} }

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,10 @@ class IngredientRandomizer(Choice):
""" """
display_name = "Randomize Ingredients" display_name = "Randomize Ingredients"
option_off = 0 option_off = 0
alias_false = 0
option_common_ingredients = 1 option_common_ingredients = 1
alias_on = 1
alias_true = 1
option_all_ingredients = 2 option_all_ingredients = 2
default = 0 default = 0
@ -29,14 +32,43 @@ class TurtleRandomizer(Choice):
"""Randomize the transportation turtle.""" """Randomize the transportation turtle."""
display_name = "Turtle Randomizer" display_name = "Turtle Randomizer"
option_none = 0 option_none = 0
alias_off = 0
alias_false = 0
option_all = 1 option_all = 1
option_all_except_final = 2 option_all_except_final = 2
alias_on = 2
alias_true = 2
default = 2 default = 2
class EarlyEnergyForm(DefaultOnToggle): class EarlyBindSong(Choice):
""" Force the Energy Form to be in a location early in the game """ """
display_name = "Early Energy Form" Force the Bind song to be in a location early in the multiworld (or directly in your world if Early and Local is
selected).
"""
display_name = "Early Bind song"
option_off = 0
alias_false = 0
option_early = 1
alias_on = 1
alias_true = 1
option_early_and_local = 2
default = 1
class EarlyEnergyForm(Choice):
"""
Force the Energy form to be in a location early in the multiworld (or directly in your world if Early and Local is
selected).
"""
display_name = "Early Energy form"
option_off = 0
alias_false = 0
option_early = 1
alias_on = 1
alias_true = 1
option_early_and_local = 2
default = 1
class AquarianTranslation(Toggle): class AquarianTranslation(Toggle):
@ -47,7 +79,7 @@ class AquarianTranslation(Toggle):
class BigBossesToBeat(Range): class BigBossesToBeat(Range):
""" """
The number of big bosses to beat before having access to the creator (the final boss). The big bosses are The number of big bosses to beat before having access to the creator (the final boss). The big bosses are
"Fallen God", "Mithalan God", "Drunian God", "Sun God" and "The Golem". "Fallen God", "Mithalan God", "Drunian God", "Lumerean God" and "The Golem".
""" """
display_name = "Big bosses to beat" display_name = "Big bosses to beat"
range_start = 0 range_start = 0
@ -104,7 +136,7 @@ class LightNeededToGetToDarkPlaces(DefaultOnToggle):
display_name = "Light needed to get to dark places" display_name = "Light needed to get to dark places"
class BindSongNeededToGetUnderRockBulb(Toggle): class BindSongNeededToGetUnderRockBulb(DefaultOnToggle):
""" """
Make sure that the bind song can be acquired before having to obtain sing bulbs under rocks. Make sure that the bind song can be acquired before having to obtain sing bulbs under rocks.
""" """
@ -121,13 +153,18 @@ class BlindGoal(Toggle):
class UnconfineHomeWater(Choice): class UnconfineHomeWater(Choice):
""" """
Open the way out of the Home Water area so that Naija can go to open water and beyond without the bind song. Open the way out of the Home Waters area so that Naija can go to open water and beyond without the bind song.
Note that if you turn this option off, it is recommended to turn on the Early Energy form and Early Bind Song
options.
""" """
display_name = "Unconfine Home Water Area" display_name = "Unconfine Home Waters Area"
option_off = 0 option_off = 0
alias_false = 0
option_via_energy_door = 1 option_via_energy_door = 1
option_via_transturtle = 2 option_via_transturtle = 2
option_via_both = 3 option_via_both = 3
alias_on = 3
alias_true = 3
default = 0 default = 0
@ -142,6 +179,7 @@ class AquariaOptions(PerGameCommonOptions):
big_bosses_to_beat: BigBossesToBeat big_bosses_to_beat: BigBossesToBeat
turtle_randomizer: TurtleRandomizer turtle_randomizer: TurtleRandomizer
early_energy_form: EarlyEnergyForm early_energy_form: EarlyEnergyForm
early_bind_song: EarlyBindSong
light_needed_to_get_to_dark_places: LightNeededToGetToDarkPlaces light_needed_to_get_to_dark_places: LightNeededToGetToDarkPlaces
bind_song_needed_to_get_under_rock_bulb: BindSongNeededToGetUnderRockBulb bind_song_needed_to_get_under_rock_bulb: BindSongNeededToGetUnderRockBulb
unconfine_home_water: UnconfineHomeWater unconfine_home_water: UnconfineHomeWater

File diff suppressed because it is too large Load Diff

View File

@ -7,9 +7,10 @@ Description: Main module for Aquaria game multiworld randomizer
from typing import List, Dict, ClassVar, Any from typing import List, Dict, ClassVar, Any
from worlds.AutoWorld import World, WebWorld from worlds.AutoWorld import World, WebWorld
from BaseClasses import Tutorial, MultiWorld, ItemClassification from BaseClasses import Tutorial, MultiWorld, ItemClassification
from .Items import item_table, AquariaItem, ItemType, ItemGroup from .Items import item_table, AquariaItem, ItemType, ItemGroup, ItemNames
from .Locations import location_table from .Locations import location_table, AquariaLocationNames
from .Options import AquariaOptions from .Options import (AquariaOptions, IngredientRandomizer, TurtleRandomizer, EarlyBindSong, EarlyEnergyForm,
UnconfineHomeWater, Objective)
from .Regions import AquariaRegions from .Regions import AquariaRegions
@ -65,15 +66,15 @@ class AquariaWorld(World):
web: WebWorld = AquariaWeb() web: WebWorld = AquariaWeb()
"The web page generation informations" "The web page generation informations"
item_name_to_id: ClassVar[Dict[str, int]] =\ item_name_to_id: ClassVar[Dict[str, int]] = \
{name: data.id for name, data in item_table.items()} {name: data.id for name, data in item_table.items()}
"The name and associated ID of each item of the world" "The name and associated ID of each item of the world"
item_name_groups = { item_name_groups = {
"Damage": {"Energy form", "Nature form", "Beast form", "Damage": {ItemNames.ENERGY_FORM, ItemNames.NATURE_FORM, ItemNames.BEAST_FORM,
"Li and Li song", "Baby Nautilus", "Baby Piranha", ItemNames.LI_AND_LI_SONG, ItemNames.BABY_NAUTILUS, ItemNames.BABY_PIRANHA,
"Baby Blaster"}, ItemNames.BABY_BLASTER},
"Light": {"Sun form", "Baby Dumbo"} "Light": {ItemNames.SUN_FORM, ItemNames.BABY_DUMBO}
} }
"""Grouping item make it easier to find them""" """Grouping item make it easier to find them"""
@ -148,23 +149,32 @@ class AquariaWorld(World):
def create_items(self) -> None: def create_items(self) -> None:
"""Create every item in the world""" """Create every item in the world"""
precollected = [item.name for item in self.multiworld.precollected_items[self.player]] precollected = [item.name for item in self.multiworld.precollected_items[self.player]]
if self.options.turtle_randomizer.value > 0: if self.options.turtle_randomizer.value != TurtleRandomizer.option_none:
if self.options.turtle_randomizer.value == 2: if self.options.turtle_randomizer.value == TurtleRandomizer.option_all_except_final:
self.__pre_fill_item("Transturtle Final Boss", "Final Boss area, Transturtle", precollected) self.__pre_fill_item(ItemNames.TRANSTURTLE_BODY, AquariaLocationNames.FINAL_BOSS_AREA_TRANSTURTLE,
precollected)
else: else:
self.__pre_fill_item("Transturtle Veil top left", "The Veil top left area, Transturtle", precollected) self.__pre_fill_item(ItemNames.TRANSTURTLE_VEIL_TOP_LEFT,
self.__pre_fill_item("Transturtle Veil top right", "The Veil top right area, Transturtle", precollected) AquariaLocationNames.THE_VEIL_TOP_LEFT_AREA_TRANSTURTLE, precollected)
self.__pre_fill_item("Transturtle Open Water top right", "Open Water top right area, Transturtle", self.__pre_fill_item(ItemNames.TRANSTURTLE_VEIL_TOP_RIGHT,
AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_TRANSTURTLE, precollected)
self.__pre_fill_item(ItemNames.TRANSTURTLE_OPEN_WATERS,
AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_TRANSTURTLE,
precollected) precollected)
self.__pre_fill_item("Transturtle Forest bottom left", "Kelp Forest bottom left area, Transturtle", self.__pre_fill_item(ItemNames.TRANSTURTLE_KELP_FOREST,
AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_TRANSTURTLE,
precollected)
self.__pre_fill_item(ItemNames.TRANSTURTLE_HOME_WATERS, AquariaLocationNames.HOME_WATERS_TRANSTURTLE,
precollected)
self.__pre_fill_item(ItemNames.TRANSTURTLE_ABYSS, AquariaLocationNames.ABYSS_RIGHT_AREA_TRANSTURTLE,
precollected)
self.__pre_fill_item(ItemNames.TRANSTURTLE_BODY, AquariaLocationNames.FINAL_BOSS_AREA_TRANSTURTLE,
precollected) precollected)
self.__pre_fill_item("Transturtle Home Water", "Home Water, Transturtle", precollected)
self.__pre_fill_item("Transturtle Abyss right", "Abyss right area, Transturtle", precollected)
self.__pre_fill_item("Transturtle Final Boss", "Final Boss area, Transturtle", precollected)
# The last two are inverted because in the original game, they are special turtle that communicate directly # The last two are inverted because in the original game, they are special turtle that communicate directly
self.__pre_fill_item("Transturtle Simon Says", "Arnassi Ruins, Transturtle", precollected, self.__pre_fill_item(ItemNames.TRANSTURTLE_SIMON_SAYS, AquariaLocationNames.ARNASSI_RUINS_TRANSTURTLE,
ItemClassification.progression) precollected, ItemClassification.progression)
self.__pre_fill_item("Transturtle Arnassi Ruins", "Simon Says area, Transturtle", precollected) self.__pre_fill_item(ItemNames.TRANSTURTLE_ARNASSI_RUINS, AquariaLocationNames.SIMON_SAYS_AREA_TRANSTURTLE,
precollected)
for name, data in item_table.items(): for name, data in item_table.items():
if name not in self.exclude: if name not in self.exclude:
for i in range(data.count): for i in range(data.count):
@ -175,10 +185,17 @@ class AquariaWorld(World):
""" """
Launched when the Multiworld generator is ready to generate rules Launched when the Multiworld generator is ready to generate rules
""" """
if self.options.early_energy_form == EarlyEnergyForm.option_early:
self.multiworld.early_items[self.player][ItemNames.ENERGY_FORM] = 1
elif self.options.early_energy_form == EarlyEnergyForm.option_early_and_local:
self.multiworld.local_early_items[self.player][ItemNames.ENERGY_FORM] = 1
if self.options.early_bind_song == EarlyBindSong.option_early:
self.multiworld.early_items[self.player][ItemNames.BIND_SONG] = 1
elif self.options.early_bind_song == EarlyBindSong.option_early_and_local:
self.multiworld.local_early_items[self.player][ItemNames.BIND_SONG] = 1
self.regions.adjusting_rules(self.options) self.regions.adjusting_rules(self.options)
self.multiworld.completion_condition[self.player] = lambda \ self.multiworld.completion_condition[self.player] = lambda \
state: state.has("Victory", self.player) state: state.has(ItemNames.VICTORY, self.player)
def generate_basic(self) -> None: def generate_basic(self) -> None:
""" """
@ -186,13 +203,13 @@ class AquariaWorld(World):
Used to fill then `ingredients_substitution` list Used to fill then `ingredients_substitution` list
""" """
simple_ingredients_substitution = [i for i in range(27)] simple_ingredients_substitution = [i for i in range(27)]
if self.options.ingredient_randomizer.value > 0: if self.options.ingredient_randomizer.value > IngredientRandomizer.option_off:
if self.options.ingredient_randomizer.value == 1: if self.options.ingredient_randomizer.value == IngredientRandomizer.option_common_ingredients:
simple_ingredients_substitution.pop(-1) simple_ingredients_substitution.pop(-1)
simple_ingredients_substitution.pop(-1) simple_ingredients_substitution.pop(-1)
simple_ingredients_substitution.pop(-1) simple_ingredients_substitution.pop(-1)
self.random.shuffle(simple_ingredients_substitution) self.random.shuffle(simple_ingredients_substitution)
if self.options.ingredient_randomizer.value == 1: if self.options.ingredient_randomizer.value == IngredientRandomizer.option_common_ingredients:
simple_ingredients_substitution.extend([24, 25, 26]) simple_ingredients_substitution.extend([24, 25, 26])
dishes_substitution = [i for i in range(27, 76)] dishes_substitution = [i for i in range(27, 76)]
if self.options.dish_randomizer: if self.options.dish_randomizer:
@ -205,14 +222,19 @@ class AquariaWorld(World):
return {"ingredientReplacement": self.ingredients_substitution, return {"ingredientReplacement": self.ingredients_substitution,
"aquarian_translate": bool(self.options.aquarian_translation.value), "aquarian_translate": bool(self.options.aquarian_translation.value),
"blind_goal": bool(self.options.blind_goal.value), "blind_goal": bool(self.options.blind_goal.value),
"secret_needed": self.options.objective.value > 0, "secret_needed":
self.options.objective.value == Objective.option_obtain_secrets_and_kill_the_creator,
"minibosses_to_kill": self.options.mini_bosses_to_beat.value, "minibosses_to_kill": self.options.mini_bosses_to_beat.value,
"bigbosses_to_kill": self.options.big_bosses_to_beat.value, "bigbosses_to_kill": self.options.big_bosses_to_beat.value,
"skip_first_vision": bool(self.options.skip_first_vision.value), "skip_first_vision": bool(self.options.skip_first_vision.value),
"unconfine_home_water_energy_door": self.options.unconfine_home_water.value in [1, 3], "unconfine_home_water_energy_door":
"unconfine_home_water_transturtle": self.options.unconfine_home_water.value in [2, 3], self.options.unconfine_home_water.value == UnconfineHomeWater.option_via_energy_door
or self.options.unconfine_home_water.value == UnconfineHomeWater.option_via_both,
"unconfine_home_water_transturtle":
self.options.unconfine_home_water.value == UnconfineHomeWater.option_via_transturtle
or self.options.unconfine_home_water.value == UnconfineHomeWater.option_via_both,
"bind_song_needed_to_get_under_rock_bulb": bool(self.options.bind_song_needed_to_get_under_rock_bulb), "bind_song_needed_to_get_under_rock_bulb": bool(self.options.bind_song_needed_to_get_under_rock_bulb),
"no_progression_hard_or_hidden_locations": bool(self.options.no_progression_hard_or_hidden_locations), "no_progression_hard_or_hidden_locations": bool(self.options.no_progression_hard_or_hidden_locations),
"light_needed_to_get_to_dark_places": bool(self.options.light_needed_to_get_to_dark_places), "light_needed_to_get_to_dark_places": bool(self.options.light_needed_to_get_to_dark_places),
"turtle_randomizer": self.options.turtle_randomizer.value, "turtle_randomizer": self.options.turtle_randomizer.value
} }

View File

@ -24,7 +24,7 @@ The locations in the randomizer are:
* Beating Mithalan God boss * Beating Mithalan God boss
* Fish Cave puzzle * Fish Cave puzzle
* Beating Drunian God boss * Beating Drunian God boss
* Beating Sun God boss * Beating Lumerean God boss
* Breaking Li cage in the body * Breaking Li cage in the body
Note that, unlike the vanilla game, when opening sing bulbs, Mithalas urns and Sunken City crates, Note that, unlike the vanilla game, when opening sing bulbs, Mithalas urns and Sunken City crates,

View File

@ -6,211 +6,212 @@ Description: Base class for the Aquaria randomizer unit tests
from test.bases import WorldTestBase from test.bases import WorldTestBase
from ..Locations import AquariaLocationNames
# Every location accessible after the home water. # Every location accessible after the home water.
after_home_water_locations = [ after_home_water_locations = [
"Sun Crystal", AquariaLocationNames.SUN_CRYSTAL,
"Home Water, Transturtle", AquariaLocationNames.HOME_WATERS_TRANSTURTLE,
"Open Water top left area, bulb under the rock in the right path", AquariaLocationNames.OPEN_WATERS_TOP_LEFT_AREA_BULB_UNDER_THE_ROCK_IN_THE_RIGHT_PATH,
"Open Water top left area, bulb under the rock in the left path", AquariaLocationNames.OPEN_WATERS_TOP_LEFT_AREA_BULB_UNDER_THE_ROCK_IN_THE_LEFT_PATH,
"Open Water top left area, bulb to the right of the save crystal", AquariaLocationNames.OPEN_WATERS_TOP_LEFT_AREA_BULB_TO_THE_RIGHT_OF_THE_SAVE_CRYSTAL,
"Open Water top right area, bulb in the small path before Mithalas", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_BULB_IN_THE_SMALL_PATH_BEFORE_MITHALAS,
"Open Water top right area, bulb in the path from the left entrance", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_BULB_IN_THE_PATH_FROM_THE_LEFT_ENTRANCE,
"Open Water top right area, bulb in the clearing close to the bottom exit", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_BULB_IN_THE_CLEARING_CLOSE_TO_THE_BOTTOM_EXIT,
"Open Water top right area, bulb in the big clearing close to the save crystal", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_BULB_IN_THE_BIG_CLEARING_CLOSE_TO_THE_SAVE_CRYSTAL,
"Open Water top right area, bulb in the big clearing to the top exit", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_BULB_IN_THE_BIG_CLEARING_TO_THE_TOP_EXIT,
"Open Water top right area, first urn in the Mithalas exit", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_FIRST_URN_IN_THE_MITHALAS_EXIT,
"Open Water top right area, second urn in the Mithalas exit", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_SECOND_URN_IN_THE_MITHALAS_EXIT,
"Open Water top right area, third urn in the Mithalas exit", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_THIRD_URN_IN_THE_MITHALAS_EXIT,
"Open Water top right area, bulb in the turtle room", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_BULB_IN_THE_TURTLE_ROOM,
"Open Water top right area, Transturtle", AquariaLocationNames.OPEN_WATERS_TOP_RIGHT_AREA_TRANSTURTLE,
"Open Water bottom left area, bulb behind the chomper fish", AquariaLocationNames.OPEN_WATERS_BOTTOM_LEFT_AREA_BULB_BEHIND_THE_CHOMPER_FISH,
"Open Water bottom left area, bulb inside the lowest fish pass", AquariaLocationNames.OPEN_WATERS_BOTTOM_LEFT_AREA_BULB_INSIDE_THE_LOWEST_FISH_PASS,
"Open Water skeleton path, bulb close to the right exit", AquariaLocationNames.OPEN_WATERS_SKELETON_PATH_BULB_CLOSE_TO_THE_RIGHT_EXIT,
"Open Water skeleton path, bulb behind the chomper fish", AquariaLocationNames.OPEN_WATERS_SKELETON_PATH_BULB_BEHIND_THE_CHOMPER_FISH,
"Open Water skeleton path, King Skull", AquariaLocationNames.OPEN_WATERS_SKELETON_PATH_KING_SKULL,
"Arnassi Ruins, bulb in the right part", AquariaLocationNames.ARNASSI_RUINS_BULB_IN_THE_RIGHT_PART,
"Arnassi Ruins, bulb in the left part", AquariaLocationNames.ARNASSI_RUINS_BULB_IN_THE_LEFT_PART,
"Arnassi Ruins, bulb in the center part", AquariaLocationNames.ARNASSI_RUINS_BULB_IN_THE_CENTER_PART,
"Arnassi Ruins, Song Plant Spore", AquariaLocationNames.ARNASSI_RUINS_SONG_PLANT_SPORE,
"Arnassi Ruins, Arnassi Armor", AquariaLocationNames.ARNASSI_RUINS_ARNASSI_ARMOR,
"Arnassi Ruins, Arnassi Statue", AquariaLocationNames.ARNASSI_RUINS_ARNASSI_STATUE,
"Arnassi Ruins, Transturtle", AquariaLocationNames.ARNASSI_RUINS_TRANSTURTLE,
"Arnassi Ruins, Crab Armor", AquariaLocationNames.ARNASSI_RUINS_CRAB_ARMOR,
"Simon Says area, Transturtle", AquariaLocationNames.SIMON_SAYS_AREA_TRANSTURTLE,
"Mithalas City, first bulb in the left city part", AquariaLocationNames.MITHALAS_CITY_FIRST_BULB_IN_THE_LEFT_CITY_PART,
"Mithalas City, second bulb in the left city part", AquariaLocationNames.MITHALAS_CITY_SECOND_BULB_IN_THE_LEFT_CITY_PART,
"Mithalas City, bulb in the right part", AquariaLocationNames.MITHALAS_CITY_BULB_IN_THE_RIGHT_PART,
"Mithalas City, bulb at the top of the city", AquariaLocationNames.MITHALAS_CITY_BULB_AT_THE_TOP_OF_THE_CITY,
"Mithalas City, first bulb in a broken home", AquariaLocationNames.MITHALAS_CITY_FIRST_BULB_IN_A_BROKEN_HOME,
"Mithalas City, second bulb in a broken home", AquariaLocationNames.MITHALAS_CITY_SECOND_BULB_IN_A_BROKEN_HOME,
"Mithalas City, bulb in the bottom left part", AquariaLocationNames.MITHALAS_CITY_BULB_IN_THE_BOTTOM_LEFT_PART,
"Mithalas City, first bulb in one of the homes", AquariaLocationNames.MITHALAS_CITY_FIRST_BULB_IN_ONE_OF_THE_HOMES,
"Mithalas City, second bulb in one of the homes", AquariaLocationNames.MITHALAS_CITY_SECOND_BULB_IN_ONE_OF_THE_HOMES,
"Mithalas City, first urn in one of the homes", AquariaLocationNames.MITHALAS_CITY_FIRST_URN_IN_ONE_OF_THE_HOMES,
"Mithalas City, second urn in one of the homes", AquariaLocationNames.MITHALAS_CITY_SECOND_URN_IN_ONE_OF_THE_HOMES,
"Mithalas City, first urn in the city reserve", AquariaLocationNames.MITHALAS_CITY_FIRST_URN_IN_THE_CITY_RESERVE,
"Mithalas City, second urn in the city reserve", AquariaLocationNames.MITHALAS_CITY_SECOND_URN_IN_THE_CITY_RESERVE,
"Mithalas City, third urn in the city reserve", AquariaLocationNames.MITHALAS_CITY_THIRD_URN_IN_THE_CITY_RESERVE,
"Mithalas City, first bulb at the end of the top path", AquariaLocationNames.MITHALAS_CITY_FIRST_BULB_AT_THE_END_OF_THE_TOP_PATH,
"Mithalas City, second bulb at the end of the top path", AquariaLocationNames.MITHALAS_CITY_SECOND_BULB_AT_THE_END_OF_THE_TOP_PATH,
"Mithalas City, bulb in the top path", AquariaLocationNames.MITHALAS_CITY_BULB_IN_THE_TOP_PATH,
"Mithalas City, Mithalas Pot", AquariaLocationNames.MITHALAS_CITY_MITHALAS_POT,
"Mithalas City, urn in the Castle flower tube entrance", AquariaLocationNames.MITHALAS_CITY_URN_IN_THE_CASTLE_FLOWER_TUBE_ENTRANCE,
"Mithalas City, Doll", AquariaLocationNames.MITHALAS_CITY_DOLL,
"Mithalas City, urn inside a home fish pass", AquariaLocationNames.MITHALAS_CITY_URN_INSIDE_A_HOME_FISH_PASS,
"Mithalas City Castle, bulb in the flesh hole", AquariaLocationNames.MITHALAS_CITY_CASTLE_BULB_IN_THE_FLESH_HOLE,
"Mithalas City Castle, Blue Banner", AquariaLocationNames.MITHALAS_CITY_CASTLE_BLUE_BANNER,
"Mithalas City Castle, urn in the bedroom", AquariaLocationNames.MITHALAS_CITY_CASTLE_URN_IN_THE_BEDROOM,
"Mithalas City Castle, first urn of the single lamp path", AquariaLocationNames.MITHALAS_CITY_CASTLE_FIRST_URN_OF_THE_SINGLE_LAMP_PATH,
"Mithalas City Castle, second urn of the single lamp path", AquariaLocationNames.MITHALAS_CITY_CASTLE_SECOND_URN_OF_THE_SINGLE_LAMP_PATH,
"Mithalas City Castle, urn in the bottom room", AquariaLocationNames.MITHALAS_CITY_CASTLE_URN_IN_THE_BOTTOM_ROOM,
"Mithalas City Castle, first urn on the entrance path", AquariaLocationNames.MITHALAS_CITY_CASTLE_FIRST_URN_ON_THE_ENTRANCE_PATH,
"Mithalas City Castle, second urn on the entrance path", AquariaLocationNames.MITHALAS_CITY_CASTLE_SECOND_URN_ON_THE_ENTRANCE_PATH,
"Mithalas City Castle, beating the Priests", AquariaLocationNames.MITHALAS_CITY_CASTLE_BEATING_THE_PRIESTS,
"Mithalas City Castle, Trident Head", AquariaLocationNames.MITHALAS_CITY_CASTLE_TRIDENT_HEAD,
"Mithalas Cathedral, first urn in the top right room", AquariaLocationNames.MITHALAS_CATHEDRAL_FIRST_URN_IN_THE_TOP_RIGHT_ROOM,
"Mithalas Cathedral, second urn in the top right room", AquariaLocationNames.MITHALAS_CATHEDRAL_SECOND_URN_IN_THE_TOP_RIGHT_ROOM,
"Mithalas Cathedral, third urn in the top right room", AquariaLocationNames.MITHALAS_CATHEDRAL_THIRD_URN_IN_THE_TOP_RIGHT_ROOM,
"Mithalas Cathedral, urn in the flesh room with fleas", AquariaLocationNames.MITHALAS_CATHEDRAL_FIRST_URN_IN_THE_BOTTOM_RIGHT_PATH,
"Mithalas Cathedral, first urn in the bottom right path", AquariaLocationNames.MITHALAS_CATHEDRAL_SECOND_URN_IN_THE_BOTTOM_RIGHT_PATH,
"Mithalas Cathedral, second urn in the bottom right path", AquariaLocationNames.MITHALAS_CATHEDRAL_URN_BEHIND_THE_FLESH_VEIN,
"Mithalas Cathedral, urn behind the flesh vein", AquariaLocationNames.MITHALAS_CATHEDRAL_URN_IN_THE_TOP_LEFT_EYES_BOSS_ROOM,
"Mithalas Cathedral, urn in the top left eyes boss room", AquariaLocationNames.MITHALAS_CATHEDRAL_FIRST_URN_IN_THE_PATH_BEHIND_THE_FLESH_VEIN,
"Mithalas Cathedral, first urn in the path behind the flesh vein", AquariaLocationNames.MITHALAS_CATHEDRAL_SECOND_URN_IN_THE_PATH_BEHIND_THE_FLESH_VEIN,
"Mithalas Cathedral, second urn in the path behind the flesh vein", AquariaLocationNames.MITHALAS_CATHEDRAL_THIRD_URN_IN_THE_PATH_BEHIND_THE_FLESH_VEIN,
"Mithalas Cathedral, third urn in the path behind the flesh vein", AquariaLocationNames.MITHALAS_CATHEDRAL_FOURTH_URN_IN_THE_TOP_RIGHT_ROOM,
"Mithalas Cathedral, fourth urn in the top right room", AquariaLocationNames.MITHALAS_CATHEDRAL_MITHALAN_DRESS,
"Mithalas Cathedral, Mithalan Dress", AquariaLocationNames.MITHALAS_CATHEDRAL_URN_BELOW_THE_LEFT_ENTRANCE,
"Mithalas Cathedral, urn below the left entrance", AquariaLocationNames.MITHALAS_CATHEDRAL_BULB_IN_THE_FLESH_ROOM_WITH_FLEAS,
"Cathedral Underground, bulb in the center part", AquariaLocationNames.CATHEDRAL_UNDERGROUND_BULB_IN_THE_CENTER_PART,
"Cathedral Underground, first bulb in the top left part", AquariaLocationNames.CATHEDRAL_UNDERGROUND_FIRST_BULB_IN_THE_TOP_LEFT_PART,
"Cathedral Underground, second bulb in the top left part", AquariaLocationNames.CATHEDRAL_UNDERGROUND_SECOND_BULB_IN_THE_TOP_LEFT_PART,
"Cathedral Underground, third bulb in the top left part", AquariaLocationNames.CATHEDRAL_UNDERGROUND_THIRD_BULB_IN_THE_TOP_LEFT_PART,
"Cathedral Underground, bulb close to the save crystal", AquariaLocationNames.CATHEDRAL_UNDERGROUND_BULB_CLOSE_TO_THE_SAVE_CRYSTAL,
"Cathedral Underground, bulb in the bottom right path", AquariaLocationNames.CATHEDRAL_UNDERGROUND_BULB_IN_THE_BOTTOM_RIGHT_PATH,
"Mithalas boss area, beating Mithalan God", AquariaLocationNames.MITHALAS_BOSS_AREA_BEATING_MITHALAN_GOD,
"Kelp Forest top left area, bulb in the bottom left clearing", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_BULB_IN_THE_BOTTOM_LEFT_CLEARING,
"Kelp Forest top left area, bulb in the path down from the top left clearing", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_BULB_IN_THE_PATH_DOWN_FROM_THE_TOP_LEFT_CLEARING,
"Kelp Forest top left area, bulb in the top left clearing", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_BULB_IN_THE_TOP_LEFT_CLEARING,
"Kelp Forest top left area, Jelly Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_JELLY_EGG,
"Kelp Forest top left area, bulb close to the Verse Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_BULB_CLOSE_TO_THE_VERSE_EGG,
"Kelp Forest top left area, Verse Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_VERSE_EGG,
"Kelp Forest top right area, bulb under the rock in the right path", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BULB_UNDER_THE_ROCK_IN_THE_RIGHT_PATH,
"Kelp Forest top right area, bulb at the left of the center clearing", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BULB_AT_THE_LEFT_OF_THE_CENTER_CLEARING,
"Kelp Forest top right area, bulb in the left path's big room", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BULB_IN_THE_LEFT_PATH_S_BIG_ROOM,
"Kelp Forest top right area, bulb in the left path's small room", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BULB_IN_THE_LEFT_PATH_S_SMALL_ROOM,
"Kelp Forest top right area, bulb at the top of the center clearing", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BULB_AT_THE_TOP_OF_THE_CENTER_CLEARING,
"Kelp Forest top right area, Black Pearl", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BLACK_PEARL,
"Kelp Forest top right area, bulb in the top fish pass", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BULB_IN_THE_TOP_FISH_PASS,
"Kelp Forest bottom left area, bulb close to the spirit crystals", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_BULB_CLOSE_TO_THE_SPIRIT_CRYSTALS,
"Kelp Forest bottom left area, Walker Baby", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_WALKER_BABY,
"Kelp Forest bottom left area, Transturtle", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_TRANSTURTLE,
"Kelp Forest bottom right area, Odd Container", AquariaLocationNames.KELP_FOREST_BOTTOM_RIGHT_AREA_ODD_CONTAINER,
"Kelp Forest boss area, beating Drunian God", AquariaLocationNames.KELP_FOREST_BOSS_AREA_BEATING_DRUNIAN_GOD,
"Kelp Forest boss room, bulb at the bottom of the area", AquariaLocationNames.KELP_FOREST_BOSS_ROOM_BULB_AT_THE_BOTTOM_OF_THE_AREA,
"Kelp Forest bottom left area, Fish Cave puzzle", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_FISH_CAVE_PUZZLE,
"Kelp Forest sprite cave, bulb inside the fish pass", AquariaLocationNames.KELP_FOREST_SPRITE_CAVE_BULB_INSIDE_THE_FISH_PASS,
"Kelp Forest sprite cave, bulb in the second room", AquariaLocationNames.KELP_FOREST_SPRITE_CAVE_BULB_IN_THE_SECOND_ROOM,
"Kelp Forest sprite cave, Seed Bag", AquariaLocationNames.KELP_FOREST_SPRITE_CAVE_SEED_BAG,
"Mermog cave, bulb in the left part of the cave", AquariaLocationNames.MERMOG_CAVE_BULB_IN_THE_LEFT_PART_OF_THE_CAVE,
"Mermog cave, Piranha Egg", AquariaLocationNames.MERMOG_CAVE_PIRANHA_EGG,
"The Veil top left area, In Li's cave", AquariaLocationNames.THE_VEIL_TOP_LEFT_AREA_IN_LI_S_CAVE,
"The Veil top left area, bulb under the rock in the top right path", AquariaLocationNames.THE_VEIL_TOP_LEFT_AREA_BULB_UNDER_THE_ROCK_IN_THE_TOP_RIGHT_PATH,
"The Veil top left area, bulb hidden behind the blocking rock", AquariaLocationNames.THE_VEIL_TOP_LEFT_AREA_BULB_HIDDEN_BEHIND_THE_BLOCKING_ROCK,
"The Veil top left area, Transturtle", AquariaLocationNames.THE_VEIL_TOP_LEFT_AREA_TRANSTURTLE,
"The Veil top left area, bulb inside the fish pass", AquariaLocationNames.THE_VEIL_TOP_LEFT_AREA_BULB_INSIDE_THE_FISH_PASS,
"Turtle cave, Turtle Egg", AquariaLocationNames.TURTLE_CAVE_TURTLE_EGG,
"Turtle cave, bulb in Bubble Cliff", AquariaLocationNames.TURTLE_CAVE_BULB_IN_BUBBLE_CLIFF,
"Turtle cave, Urchin Costume", AquariaLocationNames.TURTLE_CAVE_URCHIN_COSTUME,
"The Veil top right area, bulb in the middle of the wall jump cliff", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_BULB_IN_THE_MIDDLE_OF_THE_WALL_JUMP_CLIFF,
"The Veil top right area, Golden Starfish", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_GOLDEN_STARFISH,
"The Veil top right area, bulb at the top of the waterfall", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_BULB_AT_THE_TOP_OF_THE_WATERFALL,
"The Veil top right area, Transturtle", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_TRANSTURTLE,
"The Veil bottom area, bulb in the left path", AquariaLocationNames.THE_VEIL_BOTTOM_AREA_BULB_IN_THE_LEFT_PATH,
"The Veil bottom area, bulb in the spirit path", AquariaLocationNames.THE_VEIL_BOTTOM_AREA_BULB_IN_THE_SPIRIT_PATH,
"The Veil bottom area, Verse Egg", AquariaLocationNames.THE_VEIL_BOTTOM_AREA_VERSE_EGG,
"The Veil bottom area, Stone Head", AquariaLocationNames.THE_VEIL_BOTTOM_AREA_STONE_HEAD,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"Octopus Cave, bulb in the path below the Octopus Cave path", AquariaLocationNames.OCTOPUS_CAVE_BULB_IN_THE_PATH_BELOW_THE_OCTOPUS_CAVE_PATH,
"Bubble Cave, bulb in the left cave wall", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_LEFT_CAVE_WALL,
"Bubble Cave, bulb in the right cave wall (behind the ice crystal)", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_RIGHT_CAVE_WALL_BEHIND_THE_ICE_CRYSTAL,
"Bubble Cave, Verse Egg", AquariaLocationNames.BUBBLE_CAVE_VERSE_EGG,
"Sun Temple, bulb in the top left part", AquariaLocationNames.SUN_TEMPLE_BULB_IN_THE_TOP_LEFT_PART,
"Sun Temple, bulb in the top right part", AquariaLocationNames.SUN_TEMPLE_BULB_IN_THE_TOP_RIGHT_PART,
"Sun Temple, bulb at the top of the high dark room", AquariaLocationNames.SUN_TEMPLE_BULB_AT_THE_TOP_OF_THE_HIGH_DARK_ROOM,
"Sun Temple, Golden Gear", AquariaLocationNames.SUN_TEMPLE_GOLDEN_GEAR,
"Sun Temple, first bulb of the temple", AquariaLocationNames.SUN_TEMPLE_FIRST_BULB_OF_THE_TEMPLE,
"Sun Temple, bulb on the right part", AquariaLocationNames.SUN_TEMPLE_BULB_ON_THE_RIGHT_PART,
"Sun Temple, bulb in the hidden room of the right part", AquariaLocationNames.SUN_TEMPLE_BULB_IN_THE_HIDDEN_ROOM_OF_THE_RIGHT_PART,
"Sun Temple, Sun Key", AquariaLocationNames.SUN_TEMPLE_SUN_KEY,
"Sun Worm path, first path bulb", AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_FIRST_PATH_BULB,
"Sun Worm path, second path bulb", AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_SECOND_PATH_BULB,
"Sun Worm path, first cliff bulb", AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_FIRST_CLIFF_BULB,
"Sun Worm path, second cliff bulb", AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_SECOND_CLIFF_BULB,
"Sun Temple boss area, beating Sun God", AquariaLocationNames.SUN_TEMPLE_BOSS_AREA_BEATING_LUMEREAN_GOD,
"Abyss left area, bulb in hidden path room", AquariaLocationNames.ABYSS_LEFT_AREA_BULB_IN_HIDDEN_PATH_ROOM,
"Abyss left area, bulb in the right part", AquariaLocationNames.ABYSS_LEFT_AREA_BULB_IN_THE_RIGHT_PART,
"Abyss left area, Glowing Seed", AquariaLocationNames.ABYSS_LEFT_AREA_GLOWING_SEED,
"Abyss left area, Glowing Plant", AquariaLocationNames.ABYSS_LEFT_AREA_GLOWING_PLANT,
"Abyss left area, bulb in the bottom fish pass", AquariaLocationNames.ABYSS_LEFT_AREA_BULB_IN_THE_BOTTOM_FISH_PASS,
"Abyss right area, bulb behind the rock in the whale room", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_BEHIND_THE_ROCK_IN_THE_WHALE_ROOM,
"Abyss right area, bulb in the middle path", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_IN_THE_MIDDLE_PATH,
"Abyss right area, bulb behind the rock in the middle path", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_BEHIND_THE_ROCK_IN_THE_MIDDLE_PATH,
"Abyss right area, bulb in the left green room", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_IN_THE_LEFT_GREEN_ROOM,
"Abyss right area, Transturtle", AquariaLocationNames.ABYSS_RIGHT_AREA_TRANSTURTLE,
"Ice Cave, bulb in the room to the right", AquariaLocationNames.ICE_CAVERN_BULB_IN_THE_ROOM_TO_THE_RIGHT,
"Ice Cave, first bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_FIRST_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, second bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_SECOND_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, third bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_THIRD_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, bulb in the left room", AquariaLocationNames.ICE_CAVERN_BULB_IN_THE_LEFT_ROOM,
"King Jellyfish Cave, bulb in the right path from King Jelly", AquariaLocationNames.KING_JELLYFISH_CAVE_BULB_IN_THE_RIGHT_PATH_FROM_KING_JELLY,
"King Jellyfish Cave, Jellyfish Costume", AquariaLocationNames.KING_JELLYFISH_CAVE_JELLYFISH_COSTUME,
"The Whale, Verse Egg", AquariaLocationNames.THE_WHALE_VERSE_EGG,
"Sunken City right area, crate close to the save crystal", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Sunken City right area, crate in the left bottom room", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_IN_THE_LEFT_BOTTOM_ROOM,
"Sunken City left area, crate in the little pipe room", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_IN_THE_LITTLE_PIPE_ROOM,
"Sunken City left area, crate close to the save crystal", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Sunken City left area, crate before the bedroom", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_BEFORE_THE_BEDROOM,
"Sunken City left area, Girl Costume", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_GIRL_COSTUME,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"The Body center area, breaking Li's cage", AquariaLocationNames.THE_BODY_CENTER_AREA_BREAKING_LI_S_CAGE,
"The Body center area, bulb on the main path blocking tube", AquariaLocationNames.THE_BODY_CENTER_AREA_BULB_ON_THE_MAIN_PATH_BLOCKING_TUBE,
"The Body left area, first bulb in the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_FIRST_BULB_IN_THE_TOP_FACE_ROOM,
"The Body left area, second bulb in the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_SECOND_BULB_IN_THE_TOP_FACE_ROOM,
"The Body left area, bulb below the water stream", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_BELOW_THE_WATER_STREAM,
"The Body left area, bulb in the top path to the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_TOP_FACE_ROOM,
"The Body left area, bulb in the bottom face room", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"The Body right area, bulb in the top face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_FACE_ROOM,
"The Body right area, bulb in the top path to the bottom face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_BOTTOM_FACE_ROOM,
"The Body right area, bulb in the bottom face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"The Body bottom area, bulb in the Jelly Zap room", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_JELLY_ZAP_ROOM,
"The Body bottom area, bulb in the nautilus room", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_NAUTILUS_ROOM,
"The Body bottom area, Mutant Costume", AquariaLocationNames.THE_BODY_BOTTOM_AREA_MUTANT_COSTUME,
"Final Boss area, first bulb in the turtle room", AquariaLocationNames.FINAL_BOSS_AREA_FIRST_BULB_IN_THE_TURTLE_ROOM,
"Final Boss area, second bulb in the turtle room", AquariaLocationNames.FINAL_BOSS_AREA_SECOND_BULB_IN_THE_TURTLE_ROOM,
"Final Boss area, third bulb in the turtle room", AquariaLocationNames.FINAL_BOSS_AREA_THIRD_BULB_IN_THE_TURTLE_ROOM,
"Final Boss area, Transturtle", AquariaLocationNames.FINAL_BOSS_AREA_TRANSTURTLE,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Simon Says area, beating Simon Says", AquariaLocationNames.SIMON_SAYS_AREA_BEATING_SIMON_SAYS,
"Beating Fallen God", AquariaLocationNames.BEATING_FALLEN_GOD,
"Beating Mithalan God", AquariaLocationNames.BEATING_MITHALAN_GOD,
"Beating Drunian God", AquariaLocationNames.BEATING_DRUNIAN_GOD,
"Beating Sun God", AquariaLocationNames.BEATING_LUMEREAN_GOD,
"Beating the Golem", AquariaLocationNames.BEATING_THE_GOLEM,
"Beating Nautilus Prime", AquariaLocationNames.BEATING_NAUTILUS_PRIME,
"Beating Blaster Peg Prime", AquariaLocationNames.BEATING_BLASTER_PEG_PRIME,
"Beating Mergog", AquariaLocationNames.BEATING_MERGOG,
"Beating Mithalan priests", AquariaLocationNames.BEATING_MITHALAN_PRIESTS,
"Beating Octopus Prime", AquariaLocationNames.BEATING_OCTOPUS_PRIME,
"Beating Crabbius Maximus", AquariaLocationNames.BEATING_CRABBIUS_MAXIMUS,
"Beating Mantis Shrimp Prime", AquariaLocationNames.BEATING_MANTIS_SHRIMP_PRIME,
"Beating King Jellyfish God Prime", AquariaLocationNames.BEATING_KING_JELLYFISH_GOD_PRIME,
"First secret", AquariaLocationNames.FIRST_SECRET,
"Second secret", AquariaLocationNames.SECOND_SECRET,
"Third secret", AquariaLocationNames.THIRD_SECRET,
"Sunken City cleared", AquariaLocationNames.SUNKEN_CITY_CLEARED,
"Objective complete", AquariaLocationNames.OBJECTIVE_COMPLETE,
] ]
class AquariaTestBase(WorldTestBase): class AquariaTestBase(WorldTestBase):

View File

@ -5,6 +5,8 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
class BeastFormAccessTest(AquariaTestBase): class BeastFormAccessTest(AquariaTestBase):
@ -13,16 +15,16 @@ class BeastFormAccessTest(AquariaTestBase):
def test_beast_form_location(self) -> None: def test_beast_form_location(self) -> None:
"""Test locations that require beast form""" """Test locations that require beast form"""
locations = [ locations = [
"Mermog cave, Piranha Egg", AquariaLocationNames.MERMOG_CAVE_PIRANHA_EGG,
"Kelp Forest top left area, Jelly Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_JELLY_EGG,
"Mithalas Cathedral, Mithalan Dress", AquariaLocationNames.MITHALAS_CATHEDRAL_MITHALAN_DRESS,
"The Veil top right area, bulb at the top of the waterfall", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_BULB_AT_THE_TOP_OF_THE_WATERFALL,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"Beating the Golem", AquariaLocationNames.BEATING_THE_GOLEM,
"Beating Mergog", AquariaLocationNames.BEATING_MERGOG,
"Beating Octopus Prime", AquariaLocationNames.BEATING_OCTOPUS_PRIME,
"Sunken City cleared", AquariaLocationNames.SUNKEN_CITY_CLEARED,
] ]
items = [["Beast form"]] items = [[ItemNames.BEAST_FORM]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -5,6 +5,8 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
class BeastForArnassiArmormAccessTest(AquariaTestBase): class BeastForArnassiArmormAccessTest(AquariaTestBase):
@ -13,27 +15,27 @@ class BeastForArnassiArmormAccessTest(AquariaTestBase):
def test_beast_form_arnassi_armor_location(self) -> None: def test_beast_form_arnassi_armor_location(self) -> None:
"""Test locations that require beast form or arnassi armor""" """Test locations that require beast form or arnassi armor"""
locations = [ locations = [
"Mithalas City Castle, beating the Priests", AquariaLocationNames.MITHALAS_CITY_CASTLE_BEATING_THE_PRIESTS,
"Arnassi Ruins, Crab Armor", AquariaLocationNames.ARNASSI_RUINS_CRAB_ARMOR,
"Arnassi Ruins, Song Plant Spore", AquariaLocationNames.ARNASSI_RUINS_SONG_PLANT_SPORE,
"Mithalas City, first bulb at the end of the top path", AquariaLocationNames.MITHALAS_CITY_FIRST_BULB_AT_THE_END_OF_THE_TOP_PATH,
"Mithalas City, second bulb at the end of the top path", AquariaLocationNames.MITHALAS_CITY_SECOND_BULB_AT_THE_END_OF_THE_TOP_PATH,
"Mithalas City, bulb in the top path", AquariaLocationNames.MITHALAS_CITY_BULB_IN_THE_TOP_PATH,
"Mithalas City, Mithalas Pot", AquariaLocationNames.MITHALAS_CITY_MITHALAS_POT,
"Mithalas City, urn in the Castle flower tube entrance", AquariaLocationNames.MITHALAS_CITY_URN_IN_THE_CASTLE_FLOWER_TUBE_ENTRANCE,
"Mermog cave, Piranha Egg", AquariaLocationNames.MERMOG_CAVE_PIRANHA_EGG,
"Mithalas Cathedral, Mithalan Dress", AquariaLocationNames.MITHALAS_CATHEDRAL_MITHALAN_DRESS,
"Kelp Forest top left area, Jelly Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_JELLY_EGG,
"The Veil top right area, bulb in the middle of the wall jump cliff", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_BULB_IN_THE_MIDDLE_OF_THE_WALL_JUMP_CLIFF,
"The Veil top right area, bulb at the top of the waterfall", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_BULB_AT_THE_TOP_OF_THE_WATERFALL,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"Beating the Golem", AquariaLocationNames.BEATING_THE_GOLEM,
"Beating Mergog", AquariaLocationNames.BEATING_MERGOG,
"Beating Crabbius Maximus", AquariaLocationNames.BEATING_CRABBIUS_MAXIMUS,
"Beating Octopus Prime", AquariaLocationNames.BEATING_OCTOPUS_PRIME,
"Beating Mithalan priests", AquariaLocationNames.BEATING_MITHALAN_PRIESTS,
"Sunken City cleared" AquariaLocationNames.SUNKEN_CITY_CLEARED
] ]
items = [["Beast form", "Arnassi Armor"]] items = [[ItemNames.BEAST_FORM, ItemNames.ARNASSI_ARMOR]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -6,31 +6,36 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase, after_home_water_locations from . import AquariaTestBase, after_home_water_locations
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
from ..Options import UnconfineHomeWater, EarlyBindSong
class BindSongAccessTest(AquariaTestBase): class BindSongAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of locations with and without the bind song""" """Unit test used to test accessibility of locations with and without the bind song"""
options = { options = {
"bind_song_needed_to_get_under_rock_bulb": False, "bind_song_needed_to_get_under_rock_bulb": False,
"unconfine_home_water": UnconfineHomeWater.option_off,
"early_bind_song": EarlyBindSong.option_off
} }
def test_bind_song_location(self) -> None: def test_bind_song_location(self) -> None:
"""Test locations that require Bind song""" """Test locations that require Bind song"""
locations = [ locations = [
"Verse Cave right area, Big Seed", AquariaLocationNames.VERSE_CAVE_RIGHT_AREA_BIG_SEED,
"Home Water, bulb in the path below Nautilus Prime", AquariaLocationNames.HOME_WATERS_BULB_IN_THE_PATH_BELOW_NAUTILUS_PRIME,
"Home Water, bulb in the bottom left room", AquariaLocationNames.HOME_WATERS_BULB_IN_THE_BOTTOM_LEFT_ROOM,
"Home Water, Nautilus Egg", AquariaLocationNames.HOME_WATERS_NAUTILUS_EGG,
"Song Cave, Verse Egg", AquariaLocationNames.SONG_CAVE_VERSE_EGG,
"Energy Temple first area, beating the Energy Statue", AquariaLocationNames.ENERGY_TEMPLE_FIRST_AREA_BEATING_THE_ENERGY_STATUE,
"Energy Temple first area, bulb in the bottom room blocked by a rock", AquariaLocationNames.ENERGY_TEMPLE_FIRST_AREA_BULB_IN_THE_BOTTOM_ROOM_BLOCKED_BY_A_ROCK,
"Energy Temple first area, Energy Idol", AquariaLocationNames.ENERGY_TEMPLE_ENERGY_IDOL,
"Energy Temple second area, bulb under the rock", AquariaLocationNames.ENERGY_TEMPLE_SECOND_AREA_BULB_UNDER_THE_ROCK,
"Energy Temple bottom entrance, Krotite Armor", AquariaLocationNames.ENERGY_TEMPLE_BOTTOM_ENTRANCE_KROTITE_ARMOR,
"Energy Temple third area, bulb in the bottom path", AquariaLocationNames.ENERGY_TEMPLE_THIRD_AREA_BULB_IN_THE_BOTTOM_PATH,
"Energy Temple boss area, Fallen God Tooth", AquariaLocationNames.ENERGY_TEMPLE_BOSS_AREA_FALLEN_GOD_TOOTH,
"Energy Temple blaster room, Blaster Egg", AquariaLocationNames.ENERGY_TEMPLE_BLASTER_ROOM_BLASTER_EGG,
*after_home_water_locations *after_home_water_locations
] ]
items = [["Bind song"]] items = [[ItemNames.BIND_SONG]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -7,6 +7,8 @@ Description: Unit test used to test accessibility of locations with and without
from . import AquariaTestBase from . import AquariaTestBase
from .test_bind_song_access import after_home_water_locations from .test_bind_song_access import after_home_water_locations
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
class BindSongOptionAccessTest(AquariaTestBase): class BindSongOptionAccessTest(AquariaTestBase):
@ -18,25 +20,25 @@ class BindSongOptionAccessTest(AquariaTestBase):
def test_bind_song_location(self) -> None: def test_bind_song_location(self) -> None:
"""Test locations that require Bind song with the bind song needed option activated""" """Test locations that require Bind song with the bind song needed option activated"""
locations = [ locations = [
"Verse Cave right area, Big Seed", AquariaLocationNames.VERSE_CAVE_RIGHT_AREA_BIG_SEED,
"Verse Cave left area, bulb under the rock at the end of the path", AquariaLocationNames.VERSE_CAVE_LEFT_AREA_BULB_UNDER_THE_ROCK_AT_THE_END_OF_THE_PATH,
"Home Water, bulb under the rock in the left path from the Verse Cave", AquariaLocationNames.HOME_WATERS_BULB_UNDER_THE_ROCK_IN_THE_LEFT_PATH_FROM_THE_VERSE_CAVE,
"Song Cave, bulb under the rock close to the song door", AquariaLocationNames.SONG_CAVE_BULB_UNDER_THE_ROCK_CLOSE_TO_THE_SONG_DOOR,
"Song Cave, bulb under the rock in the path to the singing statues", AquariaLocationNames.SONG_CAVE_BULB_UNDER_THE_ROCK_IN_THE_PATH_TO_THE_SINGING_STATUES,
"Naija's Home, bulb under the rock at the right of the main path", AquariaLocationNames.NAIJA_S_HOME_BULB_UNDER_THE_ROCK_AT_THE_RIGHT_OF_THE_MAIN_PATH,
"Home Water, bulb in the path below Nautilus Prime", AquariaLocationNames.HOME_WATERS_BULB_IN_THE_PATH_BELOW_NAUTILUS_PRIME,
"Home Water, bulb in the bottom left room", AquariaLocationNames.HOME_WATERS_BULB_IN_THE_BOTTOM_LEFT_ROOM,
"Home Water, Nautilus Egg", AquariaLocationNames.HOME_WATERS_NAUTILUS_EGG,
"Song Cave, Verse Egg", AquariaLocationNames.SONG_CAVE_VERSE_EGG,
"Energy Temple first area, beating the Energy Statue", AquariaLocationNames.ENERGY_TEMPLE_FIRST_AREA_BEATING_THE_ENERGY_STATUE,
"Energy Temple first area, bulb in the bottom room blocked by a rock", AquariaLocationNames.ENERGY_TEMPLE_FIRST_AREA_BULB_IN_THE_BOTTOM_ROOM_BLOCKED_BY_A_ROCK,
"Energy Temple first area, Energy Idol", AquariaLocationNames.ENERGY_TEMPLE_ENERGY_IDOL,
"Energy Temple second area, bulb under the rock", AquariaLocationNames.ENERGY_TEMPLE_SECOND_AREA_BULB_UNDER_THE_ROCK,
"Energy Temple bottom entrance, Krotite Armor", AquariaLocationNames.ENERGY_TEMPLE_BOTTOM_ENTRANCE_KROTITE_ARMOR,
"Energy Temple third area, bulb in the bottom path", AquariaLocationNames.ENERGY_TEMPLE_THIRD_AREA_BULB_IN_THE_BOTTOM_PATH,
"Energy Temple boss area, Fallen God Tooth", AquariaLocationNames.ENERGY_TEMPLE_BOSS_AREA_FALLEN_GOD_TOOTH,
"Energy Temple blaster room, Blaster Egg", AquariaLocationNames.ENERGY_TEMPLE_BLASTER_ROOM_BLASTER_EGG,
*after_home_water_locations *after_home_water_locations
] ]
items = [["Bind song"]] items = [[ItemNames.BIND_SONG]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -5,16 +5,17 @@ Description: Unit test used to test accessibility of region with the home water
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Options import UnconfineHomeWater, EarlyEnergyForm
class ConfinedHomeWaterAccessTest(AquariaTestBase): class ConfinedHomeWaterAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of region with the unconfine home water option disabled""" """Unit test used to test accessibility of region with the unconfine home water option disabled"""
options = { options = {
"unconfine_home_water": 0, "unconfine_home_water": UnconfineHomeWater.option_off,
"early_energy_form": False "early_energy_form": EarlyEnergyForm.option_off
} }
def test_confine_home_water_location(self) -> None: def test_confine_home_water_location(self) -> None:
"""Test region accessible with confined home water""" """Test region accessible with confined home water"""
self.assertFalse(self.can_reach_region("Open Water top left area"), "Can reach Open Water top left area") self.assertFalse(self.can_reach_region("Open Waters top left area"), "Can reach Open Waters top left area")
self.assertFalse(self.can_reach_region("Home Water, turtle room"), "Can reach Home Water, turtle room") self.assertFalse(self.can_reach_region("Home Waters, turtle room"), "Can reach Home Waters, turtle room")

View File

@ -5,22 +5,25 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
from ..Options import TurtleRandomizer
class LiAccessTest(AquariaTestBase): class LiAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of locations with and without the dual song""" """Unit test used to test accessibility of locations with and without the dual song"""
options = { options = {
"turtle_randomizer": 1, "turtle_randomizer": TurtleRandomizer.option_all,
} }
def test_li_song_location(self) -> None: def test_li_song_location(self) -> None:
"""Test locations that require the dual song""" """Test locations that require the dual song"""
locations = [ locations = [
"The Body bottom area, bulb in the Jelly Zap room", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_JELLY_ZAP_ROOM,
"The Body bottom area, bulb in the nautilus room", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_NAUTILUS_ROOM,
"The Body bottom area, Mutant Costume", AquariaLocationNames.THE_BODY_BOTTOM_AREA_MUTANT_COSTUME,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Objective complete" AquariaLocationNames.OBJECTIVE_COMPLETE
] ]
items = [["Dual form"]] items = [[ItemNames.DUAL_FORM]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -6,28 +6,31 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
from ..Options import EarlyEnergyForm
class EnergyFormAccessTest(AquariaTestBase): class EnergyFormAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of locations with and without the energy form""" """Unit test used to test accessibility of locations with and without the energy form"""
options = { options = {
"early_energy_form": False, "early_energy_form": EarlyEnergyForm.option_off
} }
def test_energy_form_location(self) -> None: def test_energy_form_location(self) -> None:
"""Test locations that require Energy form""" """Test locations that require Energy form"""
locations = [ locations = [
"Energy Temple second area, bulb under the rock", AquariaLocationNames.ENERGY_TEMPLE_SECOND_AREA_BULB_UNDER_THE_ROCK,
"Energy Temple third area, bulb in the bottom path", AquariaLocationNames.ENERGY_TEMPLE_THIRD_AREA_BULB_IN_THE_BOTTOM_PATH,
"The Body left area, first bulb in the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_FIRST_BULB_IN_THE_TOP_FACE_ROOM,
"The Body left area, second bulb in the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_SECOND_BULB_IN_THE_TOP_FACE_ROOM,
"The Body left area, bulb below the water stream", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_BELOW_THE_WATER_STREAM,
"The Body left area, bulb in the top path to the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_TOP_FACE_ROOM,
"The Body left area, bulb in the bottom face room", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"The Body right area, bulb in the top path to the bottom face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_BOTTOM_FACE_ROOM,
"The Body right area, bulb in the bottom face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Objective complete", AquariaLocationNames.OBJECTIVE_COMPLETE,
] ]
items = [["Energy form"]] items = [[ItemNames.ENERGY_FORM]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -5,88 +5,74 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
from ..Options import EarlyEnergyForm, TurtleRandomizer
class EnergyFormDualFormAccessTest(AquariaTestBase): class EnergyFormDualFormAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of locations with and without the energy form and dual form (and Li)""" """Unit test used to test accessibility of locations with and without the energy form and dual form (and Li)"""
options = { options = {
"early_energy_form": False, "early_energy_form": EarlyEnergyForm.option_off,
"turtle_randomizer": TurtleRandomizer.option_all
} }
def test_energy_form_or_dual_form_location(self) -> None: def test_energy_form_or_dual_form_location(self) -> None:
"""Test locations that require Energy form or dual form""" """Test locations that require Energy form or dual form"""
locations = [ locations = [
"Naija's Home, bulb after the energy door", AquariaLocationNames.NAIJA_S_HOME_BULB_AFTER_THE_ENERGY_DOOR,
"Home Water, Nautilus Egg", AquariaLocationNames.HOME_WATERS_NAUTILUS_EGG,
"Energy Temple second area, bulb under the rock", AquariaLocationNames.ENERGY_TEMPLE_SECOND_AREA_BULB_UNDER_THE_ROCK,
"Energy Temple bottom entrance, Krotite Armor", AquariaLocationNames.ENERGY_TEMPLE_BOTTOM_ENTRANCE_KROTITE_ARMOR,
"Energy Temple third area, bulb in the bottom path", AquariaLocationNames.ENERGY_TEMPLE_THIRD_AREA_BULB_IN_THE_BOTTOM_PATH,
"Energy Temple blaster room, Blaster Egg", AquariaLocationNames.ENERGY_TEMPLE_BLASTER_ROOM_BLASTER_EGG,
"Energy Temple boss area, Fallen God Tooth", AquariaLocationNames.ENERGY_TEMPLE_BOSS_AREA_FALLEN_GOD_TOOTH,
"Mithalas City Castle, beating the Priests", AquariaLocationNames.MITHALAS_CITY_CASTLE_BEATING_THE_PRIESTS,
"Mithalas boss area, beating Mithalan God", AquariaLocationNames.MITHALAS_BOSS_AREA_BEATING_MITHALAN_GOD,
"Mithalas Cathedral, first urn in the top right room", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_BULB_CLOSE_TO_THE_VERSE_EGG,
"Mithalas Cathedral, second urn in the top right room", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_VERSE_EGG,
"Mithalas Cathedral, third urn in the top right room", AquariaLocationNames.KELP_FOREST_BOSS_AREA_BEATING_DRUNIAN_GOD,
"Mithalas Cathedral, urn in the flesh room with fleas", AquariaLocationNames.MERMOG_CAVE_PIRANHA_EGG,
"Mithalas Cathedral, first urn in the bottom right path", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"Mithalas Cathedral, second urn in the bottom right path", AquariaLocationNames.SUN_TEMPLE_BOSS_AREA_BEATING_LUMEREAN_GOD,
"Mithalas Cathedral, urn behind the flesh vein", AquariaLocationNames.KING_JELLYFISH_CAVE_BULB_IN_THE_RIGHT_PATH_FROM_KING_JELLY,
"Mithalas Cathedral, urn in the top left eyes boss room", AquariaLocationNames.KING_JELLYFISH_CAVE_JELLYFISH_COSTUME,
"Mithalas Cathedral, first urn in the path behind the flesh vein", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Mithalas Cathedral, second urn in the path behind the flesh vein", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_IN_THE_LEFT_BOTTOM_ROOM,
"Mithalas Cathedral, third urn in the path behind the flesh vein", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_IN_THE_LITTLE_PIPE_ROOM,
"Mithalas Cathedral, fourth urn in the top right room", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Mithalas Cathedral, Mithalan Dress", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_BEFORE_THE_BEDROOM,
"Mithalas Cathedral, urn below the left entrance", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_GIRL_COSTUME,
"Kelp Forest top left area, bulb close to the Verse Egg", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"Kelp Forest top left area, Verse Egg", AquariaLocationNames.THE_BODY_CENTER_AREA_BREAKING_LI_S_CAGE,
"Kelp Forest boss area, beating Drunian God", AquariaLocationNames.THE_BODY_CENTER_AREA_BULB_ON_THE_MAIN_PATH_BLOCKING_TUBE,
"Mermog cave, Piranha Egg", AquariaLocationNames.THE_BODY_LEFT_AREA_FIRST_BULB_IN_THE_TOP_FACE_ROOM,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.THE_BODY_LEFT_AREA_SECOND_BULB_IN_THE_TOP_FACE_ROOM,
"Sun Temple boss area, beating Sun God", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_BELOW_THE_WATER_STREAM,
"King Jellyfish Cave, bulb in the right path from King Jelly", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_TOP_FACE_ROOM,
"King Jellyfish Cave, Jellyfish Costume", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"Sunken City right area, crate close to the save crystal", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_FACE_ROOM,
"Sunken City right area, crate in the left bottom room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_BOTTOM_FACE_ROOM,
"Sunken City left area, crate in the little pipe room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"Sunken City left area, crate close to the save crystal", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_JELLY_ZAP_ROOM,
"Sunken City left area, crate before the bedroom", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_NAUTILUS_ROOM,
"Sunken City left area, Girl Costume", AquariaLocationNames.THE_BODY_BOTTOM_AREA_MUTANT_COSTUME,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"The Body center area, breaking Li's cage", AquariaLocationNames.BEATING_FALLEN_GOD,
"The Body center area, bulb on the main path blocking tube", AquariaLocationNames.BEATING_BLASTER_PEG_PRIME,
"The Body left area, first bulb in the top face room", AquariaLocationNames.BEATING_MITHALAN_GOD,
"The Body left area, second bulb in the top face room", AquariaLocationNames.BEATING_DRUNIAN_GOD,
"The Body left area, bulb below the water stream", AquariaLocationNames.BEATING_LUMEREAN_GOD,
"The Body left area, bulb in the top path to the top face room", AquariaLocationNames.BEATING_THE_GOLEM,
"The Body left area, bulb in the bottom face room", AquariaLocationNames.BEATING_NAUTILUS_PRIME,
"The Body right area, bulb in the top face room", AquariaLocationNames.BEATING_MERGOG,
"The Body right area, bulb in the top path to the bottom face room", AquariaLocationNames.BEATING_MITHALAN_PRIESTS,
"The Body right area, bulb in the bottom face room", AquariaLocationNames.BEATING_OCTOPUS_PRIME,
"The Body bottom area, bulb in the Jelly Zap room", AquariaLocationNames.BEATING_KING_JELLYFISH_GOD_PRIME,
"The Body bottom area, bulb in the nautilus room", AquariaLocationNames.BEATING_THE_GOLEM,
"The Body bottom area, Mutant Costume", AquariaLocationNames.SUNKEN_CITY_CLEARED,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FIRST_SECRET,
"Final Boss area, first bulb in the turtle room", AquariaLocationNames.OBJECTIVE_COMPLETE
"Final Boss area, second bulb in the turtle room",
"Final Boss area, third bulb in the turtle room",
"Final Boss area, Transturtle",
"Beating Fallen God",
"Beating Blaster Peg Prime",
"Beating Mithalan God",
"Beating Drunian God",
"Beating Sun God",
"Beating the Golem",
"Beating Nautilus Prime",
"Beating Mergog",
"Beating Mithalan priests",
"Beating Octopus Prime",
"Beating King Jellyfish God Prime",
"Beating the Golem",
"Sunken City cleared",
"First secret",
"Objective complete"
] ]
items = [["Energy form", "Dual form", "Li and Li song", "Body tongue cleared"]] items = [[ItemNames.ENERGY_FORM, ItemNames.DUAL_FORM, ItemNames.LI_AND_LI_SONG, ItemNames.BODY_TONGUE_CLEARED]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -5,33 +5,36 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
from ..Options import TurtleRandomizer
class FishFormAccessTest(AquariaTestBase): class FishFormAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of locations with and without the fish form""" """Unit test used to test accessibility of locations with and without the fish form"""
options = { options = {
"turtle_randomizer": 1, "turtle_randomizer": TurtleRandomizer.option_all,
} }
def test_fish_form_location(self) -> None: def test_fish_form_location(self) -> None:
"""Test locations that require fish form""" """Test locations that require fish form"""
locations = [ locations = [
"The Veil top left area, bulb inside the fish pass", AquariaLocationNames.THE_VEIL_TOP_LEFT_AREA_BULB_INSIDE_THE_FISH_PASS,
"Energy Temple first area, Energy Idol", AquariaLocationNames.ENERGY_TEMPLE_ENERGY_IDOL,
"Mithalas City, Doll", AquariaLocationNames.MITHALAS_CITY_DOLL,
"Mithalas City, urn inside a home fish pass", AquariaLocationNames.MITHALAS_CITY_URN_INSIDE_A_HOME_FISH_PASS,
"Kelp Forest top right area, bulb in the top fish pass", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BULB_IN_THE_TOP_FISH_PASS,
"The Veil bottom area, Verse Egg", AquariaLocationNames.THE_VEIL_BOTTOM_AREA_VERSE_EGG,
"Open Water bottom left area, bulb inside the lowest fish pass", AquariaLocationNames.OPEN_WATERS_BOTTOM_LEFT_AREA_BULB_INSIDE_THE_LOWEST_FISH_PASS,
"Kelp Forest top left area, bulb close to the Verse Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_BULB_CLOSE_TO_THE_VERSE_EGG,
"Kelp Forest top left area, Verse Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_VERSE_EGG,
"Mermog cave, bulb in the left part of the cave", AquariaLocationNames.MERMOG_CAVE_BULB_IN_THE_LEFT_PART_OF_THE_CAVE,
"Mermog cave, Piranha Egg", AquariaLocationNames.MERMOG_CAVE_PIRANHA_EGG,
"Beating Mergog", AquariaLocationNames.BEATING_MERGOG,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"Octopus Cave, bulb in the path below the Octopus Cave path", AquariaLocationNames.OCTOPUS_CAVE_BULB_IN_THE_PATH_BELOW_THE_OCTOPUS_CAVE_PATH,
"Beating Octopus Prime", AquariaLocationNames.BEATING_OCTOPUS_PRIME,
"Abyss left area, bulb in the bottom fish pass" AquariaLocationNames.ABYSS_LEFT_AREA_BULB_IN_THE_BOTTOM_FISH_PASS
] ]
items = [["Fish form"]] items = [[ItemNames.FISH_FORM]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -5,41 +5,44 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
from ..Options import TurtleRandomizer
class LiAccessTest(AquariaTestBase): class LiAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of locations with and without Li""" """Unit test used to test accessibility of locations with and without Li"""
options = { options = {
"turtle_randomizer": 1, "turtle_randomizer": TurtleRandomizer.option_all,
} }
def test_li_song_location(self) -> None: def test_li_song_location(self) -> None:
"""Test locations that require Li""" """Test locations that require Li"""
locations = [ locations = [
"Sunken City right area, crate close to the save crystal", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Sunken City right area, crate in the left bottom room", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_IN_THE_LEFT_BOTTOM_ROOM,
"Sunken City left area, crate in the little pipe room", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_IN_THE_LITTLE_PIPE_ROOM,
"Sunken City left area, crate close to the save crystal", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Sunken City left area, crate before the bedroom", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_BEFORE_THE_BEDROOM,
"Sunken City left area, Girl Costume", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_GIRL_COSTUME,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"The Body center area, breaking Li's cage", AquariaLocationNames.THE_BODY_CENTER_AREA_BREAKING_LI_S_CAGE,
"The Body center area, bulb on the main path blocking tube", AquariaLocationNames.THE_BODY_CENTER_AREA_BULB_ON_THE_MAIN_PATH_BLOCKING_TUBE,
"The Body left area, first bulb in the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_FIRST_BULB_IN_THE_TOP_FACE_ROOM,
"The Body left area, second bulb in the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_SECOND_BULB_IN_THE_TOP_FACE_ROOM,
"The Body left area, bulb below the water stream", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_BELOW_THE_WATER_STREAM,
"The Body left area, bulb in the top path to the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_TOP_FACE_ROOM,
"The Body left area, bulb in the bottom face room", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"The Body right area, bulb in the top face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_FACE_ROOM,
"The Body right area, bulb in the top path to the bottom face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_BOTTOM_FACE_ROOM,
"The Body right area, bulb in the bottom face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"The Body bottom area, bulb in the Jelly Zap room", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_JELLY_ZAP_ROOM,
"The Body bottom area, bulb in the nautilus room", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_NAUTILUS_ROOM,
"The Body bottom area, Mutant Costume", AquariaLocationNames.THE_BODY_BOTTOM_AREA_MUTANT_COSTUME,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Beating the Golem", AquariaLocationNames.BEATING_THE_GOLEM,
"Sunken City cleared", AquariaLocationNames.SUNKEN_CITY_CLEARED,
"Objective complete" AquariaLocationNames.OBJECTIVE_COMPLETE
] ]
items = [["Li and Li song", "Body tongue cleared"]] items = [[ItemNames.LI_AND_LI_SONG, ItemNames.BODY_TONGUE_CLEARED]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -5,12 +5,15 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
from ..Options import TurtleRandomizer
class LightAccessTest(AquariaTestBase): class LightAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of locations with and without light""" """Unit test used to test accessibility of locations with and without light"""
options = { options = {
"turtle_randomizer": 1, "turtle_randomizer": TurtleRandomizer.option_all,
"light_needed_to_get_to_dark_places": True, "light_needed_to_get_to_dark_places": True,
} }
@ -19,52 +22,52 @@ class LightAccessTest(AquariaTestBase):
locations = [ locations = [
# Since the `assertAccessDependency` sweep for events even if I tell it not to, those location cannot be # Since the `assertAccessDependency` sweep for events even if I tell it not to, those location cannot be
# tested. # tested.
# "Third secret", # AquariaLocationNames.THIRD_SECRET,
# "Sun Temple, bulb in the top left part", # AquariaLocationNames.SUN_TEMPLE_BULB_IN_THE_TOP_LEFT_PART,
# "Sun Temple, bulb in the top right part", # AquariaLocationNames.SUN_TEMPLE_BULB_IN_THE_TOP_RIGHT_PART,
# "Sun Temple, bulb at the top of the high dark room", # AquariaLocationNames.SUN_TEMPLE_BULB_AT_THE_TOP_OF_THE_HIGH_DARK_ROOM,
# "Sun Temple, Golden Gear", # AquariaLocationNames.SUN_TEMPLE_GOLDEN_GEAR,
# "Sun Worm path, first path bulb", # AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_FIRST_PATH_BULB,
# "Sun Worm path, second path bulb", # AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_SECOND_PATH_BULB,
# "Sun Worm path, first cliff bulb", # AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_FIRST_CLIFF_BULB,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"Kelp Forest bottom right area, Odd Container", AquariaLocationNames.KELP_FOREST_BOTTOM_RIGHT_AREA_ODD_CONTAINER,
"Kelp Forest top right area, Black Pearl", AquariaLocationNames.KELP_FOREST_TOP_RIGHT_AREA_BLACK_PEARL,
"Abyss left area, bulb in hidden path room", AquariaLocationNames.ABYSS_LEFT_AREA_BULB_IN_HIDDEN_PATH_ROOM,
"Abyss left area, bulb in the right part", AquariaLocationNames.ABYSS_LEFT_AREA_BULB_IN_THE_RIGHT_PART,
"Abyss left area, Glowing Seed", AquariaLocationNames.ABYSS_LEFT_AREA_GLOWING_SEED,
"Abyss left area, Glowing Plant", AquariaLocationNames.ABYSS_LEFT_AREA_GLOWING_PLANT,
"Abyss left area, bulb in the bottom fish pass", AquariaLocationNames.ABYSS_LEFT_AREA_BULB_IN_THE_BOTTOM_FISH_PASS,
"Abyss right area, bulb behind the rock in the whale room", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_BEHIND_THE_ROCK_IN_THE_WHALE_ROOM,
"Abyss right area, bulb in the middle path", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_IN_THE_MIDDLE_PATH,
"Abyss right area, bulb behind the rock in the middle path", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_BEHIND_THE_ROCK_IN_THE_MIDDLE_PATH,
"Abyss right area, bulb in the left green room", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_IN_THE_LEFT_GREEN_ROOM,
"Ice Cave, bulb in the room to the right", AquariaLocationNames.ICE_CAVERN_BULB_IN_THE_ROOM_TO_THE_RIGHT,
"Ice Cave, first bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_FIRST_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, second bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_SECOND_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, third bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_THIRD_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, bulb in the left room", AquariaLocationNames.ICE_CAVERN_BULB_IN_THE_LEFT_ROOM,
"Bubble Cave, bulb in the left cave wall", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_LEFT_CAVE_WALL,
"Bubble Cave, bulb in the right cave wall (behind the ice crystal)", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_RIGHT_CAVE_WALL_BEHIND_THE_ICE_CRYSTAL,
"Bubble Cave, Verse Egg", AquariaLocationNames.BUBBLE_CAVE_VERSE_EGG,
"Beating Mantis Shrimp Prime", AquariaLocationNames.BEATING_MANTIS_SHRIMP_PRIME,
"King Jellyfish Cave, bulb in the right path from King Jelly", AquariaLocationNames.KING_JELLYFISH_CAVE_BULB_IN_THE_RIGHT_PATH_FROM_KING_JELLY,
"King Jellyfish Cave, Jellyfish Costume", AquariaLocationNames.KING_JELLYFISH_CAVE_JELLYFISH_COSTUME,
"Beating King Jellyfish God Prime", AquariaLocationNames.BEATING_KING_JELLYFISH_GOD_PRIME,
"The Whale, Verse Egg", AquariaLocationNames.THE_WHALE_VERSE_EGG,
"First secret", AquariaLocationNames.FIRST_SECRET,
"Sunken City right area, crate close to the save crystal", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Sunken City right area, crate in the left bottom room", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_IN_THE_LEFT_BOTTOM_ROOM,
"Sunken City left area, crate in the little pipe room", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_IN_THE_LITTLE_PIPE_ROOM,
"Sunken City left area, crate close to the save crystal", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Sunken City left area, crate before the bedroom", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_BEFORE_THE_BEDROOM,
"Sunken City left area, Girl Costume", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_GIRL_COSTUME,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"Sunken City cleared", AquariaLocationNames.SUNKEN_CITY_CLEARED,
"Beating the Golem", AquariaLocationNames.BEATING_THE_GOLEM,
"Beating Octopus Prime", AquariaLocationNames.BEATING_OCTOPUS_PRIME,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Objective complete", AquariaLocationNames.OBJECTIVE_COMPLETE,
] ]
items = [["Sun form", "Baby Dumbo", "Has sun crystal"]] items = [[ItemNames.SUN_FORM, ItemNames.BABY_DUMBO, ItemNames.HAS_SUN_CRYSTAL]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -5,53 +5,56 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
from ..Options import TurtleRandomizer
class NatureFormAccessTest(AquariaTestBase): class NatureFormAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of locations with and without the nature form""" """Unit test used to test accessibility of locations with and without the nature form"""
options = { options = {
"turtle_randomizer": 1, "turtle_randomizer": TurtleRandomizer.option_all,
} }
def test_nature_form_location(self) -> None: def test_nature_form_location(self) -> None:
"""Test locations that require nature form""" """Test locations that require nature form"""
locations = [ locations = [
"Song Cave, Anemone Seed", AquariaLocationNames.SONG_CAVE_ANEMONE_SEED,
"Energy Temple blaster room, Blaster Egg", AquariaLocationNames.ENERGY_TEMPLE_BLASTER_ROOM_BLASTER_EGG,
"Beating Blaster Peg Prime", AquariaLocationNames.BEATING_BLASTER_PEG_PRIME,
"Kelp Forest top left area, Verse Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_VERSE_EGG,
"Kelp Forest top left area, bulb close to the Verse Egg", AquariaLocationNames.KELP_FOREST_TOP_LEFT_AREA_BULB_CLOSE_TO_THE_VERSE_EGG,
"Mithalas City Castle, beating the Priests", AquariaLocationNames.MITHALAS_CITY_CASTLE_BEATING_THE_PRIESTS,
"Kelp Forest sprite cave, bulb in the second room", AquariaLocationNames.KELP_FOREST_SPRITE_CAVE_BULB_IN_THE_SECOND_ROOM,
"Kelp Forest sprite cave, Seed Bag", AquariaLocationNames.KELP_FOREST_SPRITE_CAVE_SEED_BAG,
"Beating Mithalan priests", AquariaLocationNames.BEATING_MITHALAN_PRIESTS,
"Abyss left area, bulb in the bottom fish pass", AquariaLocationNames.ABYSS_LEFT_AREA_BULB_IN_THE_BOTTOM_FISH_PASS,
"Bubble Cave, Verse Egg", AquariaLocationNames.BUBBLE_CAVE_VERSE_EGG,
"Beating Mantis Shrimp Prime", AquariaLocationNames.BEATING_MANTIS_SHRIMP_PRIME,
"Sunken City right area, crate close to the save crystal", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Sunken City right area, crate in the left bottom room", AquariaLocationNames.SUNKEN_CITY_RIGHT_AREA_CRATE_IN_THE_LEFT_BOTTOM_ROOM,
"Sunken City left area, crate in the little pipe room", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_IN_THE_LITTLE_PIPE_ROOM,
"Sunken City left area, crate close to the save crystal", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_CLOSE_TO_THE_SAVE_CRYSTAL,
"Sunken City left area, crate before the bedroom", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_CRATE_BEFORE_THE_BEDROOM,
"Sunken City left area, Girl Costume", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_GIRL_COSTUME,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"Beating the Golem", AquariaLocationNames.BEATING_THE_GOLEM,
"Sunken City cleared", AquariaLocationNames.SUNKEN_CITY_CLEARED,
"The Body center area, breaking Li's cage", AquariaLocationNames.THE_BODY_CENTER_AREA_BREAKING_LI_S_CAGE,
"The Body center area, bulb on the main path blocking tube", AquariaLocationNames.THE_BODY_CENTER_AREA_BULB_ON_THE_MAIN_PATH_BLOCKING_TUBE,
"The Body left area, first bulb in the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_FIRST_BULB_IN_THE_TOP_FACE_ROOM,
"The Body left area, second bulb in the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_SECOND_BULB_IN_THE_TOP_FACE_ROOM,
"The Body left area, bulb below the water stream", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_BELOW_THE_WATER_STREAM,
"The Body left area, bulb in the top path to the top face room", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_TOP_FACE_ROOM,
"The Body left area, bulb in the bottom face room", AquariaLocationNames.THE_BODY_LEFT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"The Body right area, bulb in the top face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_FACE_ROOM,
"The Body right area, bulb in the top path to the bottom face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_TOP_PATH_TO_THE_BOTTOM_FACE_ROOM,
"The Body right area, bulb in the bottom face room", AquariaLocationNames.THE_BODY_RIGHT_AREA_BULB_IN_THE_BOTTOM_FACE_ROOM,
"The Body bottom area, bulb in the Jelly Zap room", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_JELLY_ZAP_ROOM,
"The Body bottom area, bulb in the nautilus room", AquariaLocationNames.THE_BODY_BOTTOM_AREA_BULB_IN_THE_NAUTILUS_ROOM,
"The Body bottom area, Mutant Costume", AquariaLocationNames.THE_BODY_BOTTOM_AREA_MUTANT_COSTUME,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Objective complete" AquariaLocationNames.OBJECTIVE_COMPLETE
] ]
items = [["Nature form"]] items = [[ItemNames.NATURE_FORM]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -6,6 +6,7 @@ Description: Unit test used to test that no progression items can be put in hard
from . import AquariaTestBase from . import AquariaTestBase
from BaseClasses import ItemClassification from BaseClasses import ItemClassification
from ..Locations import AquariaLocationNames
class UNoProgressionHardHiddenTest(AquariaTestBase): class UNoProgressionHardHiddenTest(AquariaTestBase):
@ -15,31 +16,31 @@ class UNoProgressionHardHiddenTest(AquariaTestBase):
} }
unfillable_locations = [ unfillable_locations = [
"Energy Temple boss area, Fallen God Tooth", AquariaLocationNames.ENERGY_TEMPLE_BOSS_AREA_FALLEN_GOD_TOOTH,
"Mithalas boss area, beating Mithalan God", AquariaLocationNames.MITHALAS_BOSS_AREA_BEATING_MITHALAN_GOD,
"Kelp Forest boss area, beating Drunian God", AquariaLocationNames.KELP_FOREST_BOSS_AREA_BEATING_DRUNIAN_GOD,
"Sun Temple boss area, beating Sun God", AquariaLocationNames.SUN_TEMPLE_BOSS_AREA_BEATING_LUMEREAN_GOD,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"Home Water, Nautilus Egg", AquariaLocationNames.HOME_WATERS_NAUTILUS_EGG,
"Energy Temple blaster room, Blaster Egg", AquariaLocationNames.ENERGY_TEMPLE_BLASTER_ROOM_BLASTER_EGG,
"Mithalas City Castle, beating the Priests", AquariaLocationNames.MITHALAS_CITY_CASTLE_BEATING_THE_PRIESTS,
"Mermog cave, Piranha Egg", AquariaLocationNames.MERMOG_CAVE_PIRANHA_EGG,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"King Jellyfish Cave, bulb in the right path from King Jelly", AquariaLocationNames.KING_JELLYFISH_CAVE_BULB_IN_THE_RIGHT_PATH_FROM_KING_JELLY,
"King Jellyfish Cave, Jellyfish Costume", AquariaLocationNames.KING_JELLYFISH_CAVE_JELLYFISH_COSTUME,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Sun Worm path, first cliff bulb", AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_FIRST_CLIFF_BULB,
"Sun Worm path, second cliff bulb", AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_SECOND_CLIFF_BULB,
"The Veil top right area, bulb at the top of the waterfall", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_BULB_AT_THE_TOP_OF_THE_WATERFALL,
"Bubble Cave, bulb in the left cave wall", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_LEFT_CAVE_WALL,
"Bubble Cave, bulb in the right cave wall (behind the ice crystal)", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_RIGHT_CAVE_WALL_BEHIND_THE_ICE_CRYSTAL,
"Bubble Cave, Verse Egg", AquariaLocationNames.BUBBLE_CAVE_VERSE_EGG,
"Kelp Forest bottom left area, bulb close to the spirit crystals", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_BULB_CLOSE_TO_THE_SPIRIT_CRYSTALS,
"Kelp Forest bottom left area, Walker Baby", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_WALKER_BABY,
"Sun Temple, Sun Key", AquariaLocationNames.SUN_TEMPLE_SUN_KEY,
"The Body bottom area, Mutant Costume", AquariaLocationNames.THE_BODY_BOTTOM_AREA_MUTANT_COSTUME,
"Sun Temple, bulb in the hidden room of the right part", AquariaLocationNames.SUN_TEMPLE_BULB_IN_THE_HIDDEN_ROOM_OF_THE_RIGHT_PART,
"Arnassi Ruins, Arnassi Armor", AquariaLocationNames.ARNASSI_RUINS_ARNASSI_ARMOR,
] ]
def test_unconfine_home_water_both_location_fillable(self) -> None: def test_unconfine_home_water_both_location_fillable(self) -> None:

View File

@ -5,6 +5,7 @@ Description: Unit test used to test that progression items can be put in hard or
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Locations import AquariaLocationNames
class UNoProgressionHardHiddenTest(AquariaTestBase): class UNoProgressionHardHiddenTest(AquariaTestBase):
@ -14,31 +15,31 @@ class UNoProgressionHardHiddenTest(AquariaTestBase):
} }
unfillable_locations = [ unfillable_locations = [
"Energy Temple boss area, Fallen God Tooth", AquariaLocationNames.ENERGY_TEMPLE_BOSS_AREA_FALLEN_GOD_TOOTH,
"Mithalas boss area, beating Mithalan God", AquariaLocationNames.MITHALAS_BOSS_AREA_BEATING_MITHALAN_GOD,
"Kelp Forest boss area, beating Drunian God", AquariaLocationNames.KELP_FOREST_BOSS_AREA_BEATING_DRUNIAN_GOD,
"Sun Temple boss area, beating Sun God", AquariaLocationNames.SUN_TEMPLE_BOSS_AREA_BEATING_LUMEREAN_GOD,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"Home Water, Nautilus Egg", AquariaLocationNames.HOME_WATERS_NAUTILUS_EGG,
"Energy Temple blaster room, Blaster Egg", AquariaLocationNames.ENERGY_TEMPLE_BLASTER_ROOM_BLASTER_EGG,
"Mithalas City Castle, beating the Priests", AquariaLocationNames.MITHALAS_CITY_CASTLE_BEATING_THE_PRIESTS,
"Mermog cave, Piranha Egg", AquariaLocationNames.MERMOG_CAVE_PIRANHA_EGG,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"King Jellyfish Cave, bulb in the right path from King Jelly", AquariaLocationNames.KING_JELLYFISH_CAVE_BULB_IN_THE_RIGHT_PATH_FROM_KING_JELLY,
"King Jellyfish Cave, Jellyfish Costume", AquariaLocationNames.KING_JELLYFISH_CAVE_JELLYFISH_COSTUME,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Sun Worm path, first cliff bulb", AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_FIRST_CLIFF_BULB,
"Sun Worm path, second cliff bulb", AquariaLocationNames.SUN_TEMPLE_BOSS_PATH_SECOND_CLIFF_BULB,
"The Veil top right area, bulb at the top of the waterfall", AquariaLocationNames.THE_VEIL_TOP_RIGHT_AREA_BULB_AT_THE_TOP_OF_THE_WATERFALL,
"Bubble Cave, bulb in the left cave wall", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_LEFT_CAVE_WALL,
"Bubble Cave, bulb in the right cave wall (behind the ice crystal)", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_RIGHT_CAVE_WALL_BEHIND_THE_ICE_CRYSTAL,
"Bubble Cave, Verse Egg", AquariaLocationNames.BUBBLE_CAVE_VERSE_EGG,
"Kelp Forest bottom left area, bulb close to the spirit crystals", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_BULB_CLOSE_TO_THE_SPIRIT_CRYSTALS,
"Kelp Forest bottom left area, Walker Baby", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_WALKER_BABY,
"Sun Temple, Sun Key", AquariaLocationNames.SUN_TEMPLE_SUN_KEY,
"The Body bottom area, Mutant Costume", AquariaLocationNames.THE_BODY_BOTTOM_AREA_MUTANT_COSTUME,
"Sun Temple, bulb in the hidden room of the right part", AquariaLocationNames.SUN_TEMPLE_BULB_IN_THE_HIDDEN_ROOM_OF_THE_RIGHT_PART,
"Arnassi Ruins, Arnassi Armor", AquariaLocationNames.ARNASSI_RUINS_ARNASSI_ARMOR,
] ]
def test_unconfine_home_water_both_location_fillable(self) -> None: def test_unconfine_home_water_both_location_fillable(self) -> None:

View File

@ -5,6 +5,8 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
class SpiritFormAccessTest(AquariaTestBase): class SpiritFormAccessTest(AquariaTestBase):
@ -13,23 +15,23 @@ class SpiritFormAccessTest(AquariaTestBase):
def test_spirit_form_location(self) -> None: def test_spirit_form_location(self) -> None:
"""Test locations that require spirit form""" """Test locations that require spirit form"""
locations = [ locations = [
"The Veil bottom area, bulb in the spirit path", AquariaLocationNames.THE_VEIL_BOTTOM_AREA_BULB_IN_THE_SPIRIT_PATH,
"Mithalas City Castle, Trident Head", AquariaLocationNames.MITHALAS_CITY_CASTLE_TRIDENT_HEAD,
"Open Water skeleton path, King Skull", AquariaLocationNames.OPEN_WATERS_SKELETON_PATH_KING_SKULL,
"Kelp Forest bottom left area, Walker Baby", AquariaLocationNames.KELP_FOREST_BOTTOM_LEFT_AREA_WALKER_BABY,
"Abyss right area, bulb behind the rock in the whale room", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_BEHIND_THE_ROCK_IN_THE_WHALE_ROOM,
"The Whale, Verse Egg", AquariaLocationNames.THE_WHALE_VERSE_EGG,
"Ice Cave, bulb in the room to the right", AquariaLocationNames.ICE_CAVERN_BULB_IN_THE_ROOM_TO_THE_RIGHT,
"Ice Cave, first bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_FIRST_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, second bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_SECOND_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, third bulb in the top exit room", AquariaLocationNames.ICE_CAVERN_THIRD_BULB_IN_THE_TOP_EXIT_ROOM,
"Ice Cave, bulb in the left room", AquariaLocationNames.ICE_CAVERN_BULB_IN_THE_LEFT_ROOM,
"Bubble Cave, bulb in the left cave wall", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_LEFT_CAVE_WALL,
"Bubble Cave, bulb in the right cave wall (behind the ice crystal)", AquariaLocationNames.BUBBLE_CAVE_BULB_IN_THE_RIGHT_CAVE_WALL_BEHIND_THE_ICE_CRYSTAL,
"Bubble Cave, Verse Egg", AquariaLocationNames.BUBBLE_CAVE_VERSE_EGG,
"Sunken City left area, Girl Costume", AquariaLocationNames.SUNKEN_CITY_LEFT_AREA_GIRL_COSTUME,
"Beating Mantis Shrimp Prime", AquariaLocationNames.BEATING_MANTIS_SHRIMP_PRIME,
"First secret", AquariaLocationNames.FIRST_SECRET,
] ]
items = [["Spirit form"]] items = [[ItemNames.SPIRIT_FORM]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -5,6 +5,8 @@ Description: Unit test used to test accessibility of locations with and without
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Items import ItemNames
from ..Locations import AquariaLocationNames
class SunFormAccessTest(AquariaTestBase): class SunFormAccessTest(AquariaTestBase):
@ -13,16 +15,16 @@ class SunFormAccessTest(AquariaTestBase):
def test_sun_form_location(self) -> None: def test_sun_form_location(self) -> None:
"""Test locations that require sun form""" """Test locations that require sun form"""
locations = [ locations = [
"First secret", AquariaLocationNames.FIRST_SECRET,
"The Whale, Verse Egg", AquariaLocationNames.THE_WHALE_VERSE_EGG,
"Abyss right area, bulb behind the rock in the whale room", AquariaLocationNames.ABYSS_RIGHT_AREA_BULB_BEHIND_THE_ROCK_IN_THE_WHALE_ROOM,
"Octopus Cave, Dumbo Egg", AquariaLocationNames.OCTOPUS_CAVE_DUMBO_EGG,
"Beating Octopus Prime", AquariaLocationNames.BEATING_OCTOPUS_PRIME,
"Sunken City, bulb on top of the boss area", AquariaLocationNames.SUNKEN_CITY_BULB_ON_TOP_OF_THE_BOSS_AREA,
"Beating the Golem", AquariaLocationNames.BEATING_THE_GOLEM,
"Sunken City cleared", AquariaLocationNames.SUNKEN_CITY_CLEARED,
"Final Boss area, bulb in the boss third form room", AquariaLocationNames.FINAL_BOSS_AREA_BULB_IN_THE_BOSS_THIRD_FORM_ROOM,
"Objective complete" AquariaLocationNames.OBJECTIVE_COMPLETE
] ]
items = [["Sun form"]] items = [[ItemNames.SUN_FORM]]
self.assertAccessDependency(locations, items) self.assertAccessDependency(locations, items)

View File

@ -6,16 +6,17 @@ Description: Unit test used to test accessibility of region with the unconfined
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Options import UnconfineHomeWater, EarlyEnergyForm
class UnconfineHomeWaterBothAccessTest(AquariaTestBase): class UnconfineHomeWaterBothAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of region with the unconfine home water option enabled""" """Unit test used to test accessibility of region with the unconfine home water option enabled"""
options = { options = {
"unconfine_home_water": 3, "unconfine_home_water": UnconfineHomeWater.option_via_both,
"early_energy_form": False "early_energy_form": EarlyEnergyForm.option_off
} }
def test_unconfine_home_water_both_location(self) -> None: def test_unconfine_home_water_both_location(self) -> None:
"""Test locations accessible with unconfined home water via energy door and transportation turtle""" """Test locations accessible with unconfined home water via energy door and transportation turtle"""
self.assertTrue(self.can_reach_region("Open Water top left area"), "Cannot reach Open Water top left area") self.assertTrue(self.can_reach_region("Open Waters top left area"), "Cannot reach Open Waters top left area")
self.assertTrue(self.can_reach_region("Home Water, turtle room"), "Cannot reach Home Water, turtle room") self.assertTrue(self.can_reach_region("Home Waters, turtle room"), "Cannot reach Home Waters, turtle room")

View File

@ -5,16 +5,17 @@ Description: Unit test used to test accessibility of region with the unconfined
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Options import UnconfineHomeWater, EarlyEnergyForm
class UnconfineHomeWaterEnergyDoorAccessTest(AquariaTestBase): class UnconfineHomeWaterEnergyDoorAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of region with the unconfine home water option enabled""" """Unit test used to test accessibility of region with the unconfine home water option enabled"""
options = { options = {
"unconfine_home_water": 1, "unconfine_home_water": UnconfineHomeWater.option_via_energy_door,
"early_energy_form": False "early_energy_form": EarlyEnergyForm.option_off
} }
def test_unconfine_home_water_energy_door_location(self) -> None: def test_unconfine_home_water_energy_door_location(self) -> None:
"""Test locations accessible with unconfined home water via energy door""" """Test locations accessible with unconfined home water via energy door"""
self.assertTrue(self.can_reach_region("Open Water top left area"), "Cannot reach Open Water top left area") self.assertTrue(self.can_reach_region("Open Waters top left area"), "Cannot reach Open Waters top left area")
self.assertFalse(self.can_reach_region("Home Water, turtle room"), "Can reach Home Water, turtle room") self.assertFalse(self.can_reach_region("Home Waters, turtle room"), "Can reach Home Waters, turtle room")

View File

@ -5,16 +5,17 @@ Description: Unit test used to test accessibility of region with the unconfined
""" """
from . import AquariaTestBase from . import AquariaTestBase
from ..Options import UnconfineHomeWater, EarlyEnergyForm
class UnconfineHomeWaterTransturtleAccessTest(AquariaTestBase): class UnconfineHomeWaterTransturtleAccessTest(AquariaTestBase):
"""Unit test used to test accessibility of region with the unconfine home water option enabled""" """Unit test used to test accessibility of region with the unconfine home water option enabled"""
options = { options = {
"unconfine_home_water": 2, "unconfine_home_water": UnconfineHomeWater.option_via_transturtle,
"early_energy_form": False "early_energy_form": EarlyEnergyForm.option_off
} }
def test_unconfine_home_water_transturtle_location(self) -> None: def test_unconfine_home_water_transturtle_location(self) -> None:
"""Test locations accessible with unconfined home water via transportation turtle""" """Test locations accessible with unconfined home water via transportation turtle"""
self.assertTrue(self.can_reach_region("Home Water, turtle room"), "Cannot reach Home Water, turtle room") self.assertTrue(self.can_reach_region("Home Waters, turtle room"), "Cannot reach Home Waters, turtle room")
self.assertFalse(self.can_reach_region("Open Water top left area"), "Can reach Open Water top left area") self.assertFalse(self.can_reach_region("Open Waters top left area"), "Can reach Open Waters top left area")