Aquaria: Logic bug fixes (#3679)
* Fixing logic bugs * Require energy attack in the cathedral and energy form in the body * King Jelly can be beaten easily with only the Dual Form * I think that I have a problem with my left and right... * There is a monster that is blocking the path, soo need attack to pass * The Li cage is not accessible without the Sunken city boss * Removing useless space. Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com> * Two more minors logic modification * Adapting tests to af9b6cd * Reformat the Region file --------- Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
This commit is contained in:
parent
05ce29f7dc
commit
575c338aa3
|
@ -99,7 +99,7 @@ item_table = {
|
||||||
"Mutant Costume": ItemData(698020, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mutant_costume
|
"Mutant Costume": ItemData(698020, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_mutant_costume
|
||||||
"Baby Nautilus": ItemData(698021, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_nautilus
|
"Baby Nautilus": ItemData(698021, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_nautilus
|
||||||
"Baby Piranha": ItemData(698022, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_piranha
|
"Baby Piranha": ItemData(698022, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_piranha
|
||||||
"Arnassi Armor": ItemData(698023, 1, ItemType.NORMAL, ItemGroup.UTILITY), # collectible_seahorse_costume
|
"Arnassi Armor": ItemData(698023, 1, ItemType.PROGRESSION, ItemGroup.UTILITY), # collectible_seahorse_costume
|
||||||
"Seed Bag": ItemData(698024, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_seed_bag
|
"Seed Bag": ItemData(698024, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_seed_bag
|
||||||
"King's Skull": ItemData(698025, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_skull
|
"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
|
"Song Plant Spore": ItemData(698026, 1, ItemType.JUNK, ItemGroup.COLLECTIBLE), # collectible_spore_seed
|
||||||
|
|
|
@ -45,7 +45,7 @@ class AquariaLocations:
|
||||||
"Home Water, bulb below the grouper fish": 698058,
|
"Home Water, bulb below the grouper fish": 698058,
|
||||||
"Home Water, bulb in the path below Nautilus Prime": 698059,
|
"Home Water, bulb in the path below Nautilus Prime": 698059,
|
||||||
"Home Water, bulb in the little room above the grouper fish": 698060,
|
"Home Water, bulb in the little room above the grouper fish": 698060,
|
||||||
"Home Water, bulb in the end of the left path from the Verse Cave": 698061,
|
"Home Water, bulb in the end of the path close to the Verse Cave": 698061,
|
||||||
"Home Water, bulb in the top left path": 698062,
|
"Home Water, bulb in the top left path": 698062,
|
||||||
"Home Water, bulb in the bottom left room": 698063,
|
"Home Water, bulb in the bottom left room": 698063,
|
||||||
"Home Water, bulb close to Naija's Home": 698064,
|
"Home Water, bulb close to Naija's Home": 698064,
|
||||||
|
@ -67,7 +67,7 @@ class AquariaLocations:
|
||||||
|
|
||||||
locations_song_cave = {
|
locations_song_cave = {
|
||||||
"Song Cave, Erulian spirit": 698206,
|
"Song Cave, Erulian spirit": 698206,
|
||||||
"Song Cave, bulb in the top left part": 698071,
|
"Song Cave, bulb in the top right part": 698071,
|
||||||
"Song Cave, bulb in the big anemone room": 698072,
|
"Song Cave, bulb in the big anemone room": 698072,
|
||||||
"Song Cave, bulb in the path to the singing statues": 698073,
|
"Song Cave, bulb in the path to the singing statues": 698073,
|
||||||
"Song Cave, bulb under the rock in the path to the singing statues": 698074,
|
"Song Cave, bulb under the rock in the path to the singing statues": 698074,
|
||||||
|
@ -152,6 +152,9 @@ class AquariaLocations:
|
||||||
|
|
||||||
locations_arnassi_path = {
|
locations_arnassi_path = {
|
||||||
"Arnassi Ruins, Arnassi Statue": 698164,
|
"Arnassi Ruins, Arnassi Statue": 698164,
|
||||||
|
}
|
||||||
|
|
||||||
|
locations_arnassi_cave_transturtle = {
|
||||||
"Arnassi Ruins, Transturtle": 698217,
|
"Arnassi Ruins, Transturtle": 698217,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,9 +272,12 @@ class AquariaLocations:
|
||||||
}
|
}
|
||||||
|
|
||||||
locations_forest_bl = {
|
locations_forest_bl = {
|
||||||
|
"Kelp Forest bottom left area, Transturtle": 698212,
|
||||||
|
}
|
||||||
|
|
||||||
|
locations_forest_bl_sc = {
|
||||||
"Kelp Forest bottom left area, bulb close to the spirit crystals": 698054,
|
"Kelp Forest bottom left area, bulb close to the spirit crystals": 698054,
|
||||||
"Kelp Forest bottom left area, Walker Baby": 698186,
|
"Kelp Forest bottom left area, Walker Baby": 698186,
|
||||||
"Kelp Forest bottom left area, Transturtle": 698212,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
locations_forest_br = {
|
locations_forest_br = {
|
||||||
|
@ -370,7 +376,7 @@ class AquariaLocations:
|
||||||
|
|
||||||
locations_sun_temple_r = {
|
locations_sun_temple_r = {
|
||||||
"Sun Temple, first bulb of the temple": 698091,
|
"Sun Temple, first bulb of the temple": 698091,
|
||||||
"Sun Temple, bulb on the left part": 698092,
|
"Sun Temple, bulb on the right part": 698092,
|
||||||
"Sun Temple, bulb in the hidden room of the right part": 698093,
|
"Sun Temple, bulb in the hidden room of the right part": 698093,
|
||||||
"Sun Temple, Sun Key": 698182,
|
"Sun Temple, Sun Key": 698182,
|
||||||
}
|
}
|
||||||
|
@ -402,6 +408,9 @@ class AquariaLocations:
|
||||||
"Abyss right area, bulb in the middle path": 698110,
|
"Abyss right area, bulb in the middle path": 698110,
|
||||||
"Abyss right area, bulb behind the rock in the middle path": 698111,
|
"Abyss right area, bulb behind the rock in the middle path": 698111,
|
||||||
"Abyss right area, bulb in the left green room": 698112,
|
"Abyss right area, bulb in the left green room": 698112,
|
||||||
|
}
|
||||||
|
|
||||||
|
locations_abyss_r_transturtle = {
|
||||||
"Abyss right area, Transturtle": 698214,
|
"Abyss right area, Transturtle": 698214,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -499,6 +508,7 @@ location_table = {
|
||||||
**AquariaLocations.locations_skeleton_path_sc,
|
**AquariaLocations.locations_skeleton_path_sc,
|
||||||
**AquariaLocations.locations_arnassi,
|
**AquariaLocations.locations_arnassi,
|
||||||
**AquariaLocations.locations_arnassi_path,
|
**AquariaLocations.locations_arnassi_path,
|
||||||
|
**AquariaLocations.locations_arnassi_cave_transturtle,
|
||||||
**AquariaLocations.locations_arnassi_crab_boss,
|
**AquariaLocations.locations_arnassi_crab_boss,
|
||||||
**AquariaLocations.locations_sun_temple_l,
|
**AquariaLocations.locations_sun_temple_l,
|
||||||
**AquariaLocations.locations_sun_temple_r,
|
**AquariaLocations.locations_sun_temple_r,
|
||||||
|
@ -509,6 +519,7 @@ location_table = {
|
||||||
**AquariaLocations.locations_abyss_l,
|
**AquariaLocations.locations_abyss_l,
|
||||||
**AquariaLocations.locations_abyss_lb,
|
**AquariaLocations.locations_abyss_lb,
|
||||||
**AquariaLocations.locations_abyss_r,
|
**AquariaLocations.locations_abyss_r,
|
||||||
|
**AquariaLocations.locations_abyss_r_transturtle,
|
||||||
**AquariaLocations.locations_energy_temple_1,
|
**AquariaLocations.locations_energy_temple_1,
|
||||||
**AquariaLocations.locations_energy_temple_2,
|
**AquariaLocations.locations_energy_temple_2,
|
||||||
**AquariaLocations.locations_energy_temple_3,
|
**AquariaLocations.locations_energy_temple_3,
|
||||||
|
@ -530,6 +541,7 @@ location_table = {
|
||||||
**AquariaLocations.locations_forest_tr,
|
**AquariaLocations.locations_forest_tr,
|
||||||
**AquariaLocations.locations_forest_tr_fp,
|
**AquariaLocations.locations_forest_tr_fp,
|
||||||
**AquariaLocations.locations_forest_bl,
|
**AquariaLocations.locations_forest_bl,
|
||||||
|
**AquariaLocations.locations_forest_bl_sc,
|
||||||
**AquariaLocations.locations_forest_br,
|
**AquariaLocations.locations_forest_br,
|
||||||
**AquariaLocations.locations_forest_boss,
|
**AquariaLocations.locations_forest_boss,
|
||||||
**AquariaLocations.locations_forest_boss_entrance,
|
**AquariaLocations.locations_forest_boss_entrance,
|
||||||
|
|
|
@ -14,97 +14,112 @@ from worlds.generic.Rules import add_rule, set_rule
|
||||||
|
|
||||||
# Every condition to connect regions
|
# Every condition to connect regions
|
||||||
|
|
||||||
def _has_hot_soup(state:CollectionState, player: int) -> bool:
|
def _has_hot_soup(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the hotsoup item"""
|
"""`player` in `state` has the hotsoup item"""
|
||||||
return state.has("Hot soup", player)
|
return state.has_any({"Hot soup", "Hot soup x 2"}, player)
|
||||||
|
|
||||||
|
|
||||||
def _has_tongue_cleared(state:CollectionState, player: int) -> bool:
|
def _has_tongue_cleared(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the Body tongue cleared item"""
|
"""`player` in `state` has the Body tongue cleared item"""
|
||||||
return state.has("Body tongue cleared", player)
|
return state.has("Body tongue cleared", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_sun_crystal(state:CollectionState, player: int) -> bool:
|
def _has_sun_crystal(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the Sun crystal item"""
|
"""`player` in `state` has the Sun crystal item"""
|
||||||
return state.has("Has sun crystal", player) and _has_bind_song(state, player)
|
return state.has("Has sun crystal", player) and _has_bind_song(state, player)
|
||||||
|
|
||||||
|
|
||||||
def _has_li(state:CollectionState, player: int) -> bool:
|
def _has_li(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has Li in its team"""
|
"""`player` in `state` has Li in its team"""
|
||||||
return state.has("Li and Li song", player)
|
return state.has("Li and Li song", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_damaging_item(state:CollectionState, player: int) -> bool:
|
def _has_damaging_item(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the shield song item"""
|
"""`player` in `state` has the shield song item"""
|
||||||
return state.has_any({"Energy form", "Nature form", "Beast form", "Li and Li song", "Baby Nautilus",
|
return state.has_any({"Energy form", "Nature form", "Beast form", "Li and Li song", "Baby Nautilus",
|
||||||
"Baby Piranha", "Baby Blaster"}, player)
|
"Baby Piranha", "Baby Blaster"}, player)
|
||||||
|
|
||||||
|
|
||||||
def _has_shield_song(state:CollectionState, player: int) -> bool:
|
def _has_energy_attack_item(state: CollectionState, player: int) -> bool:
|
||||||
|
"""`player` in `state` has items that can do a lot of damage (enough to beat bosses)"""
|
||||||
|
return _has_energy_form(state, player) or _has_dual_form(state, player)
|
||||||
|
|
||||||
|
|
||||||
|
def _has_shield_song(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the shield song item"""
|
"""`player` in `state` has the shield song item"""
|
||||||
return state.has("Shield song", player)
|
return state.has("Shield song", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_bind_song(state:CollectionState, player: int) -> bool:
|
def _has_bind_song(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the bind song item"""
|
"""`player` in `state` has the bind song item"""
|
||||||
return state.has("Bind song", player)
|
return state.has("Bind song", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_energy_form(state:CollectionState, player: int) -> bool:
|
def _has_energy_form(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the energy form item"""
|
"""`player` in `state` has the energy form item"""
|
||||||
return state.has("Energy form", player)
|
return state.has("Energy form", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_beast_form(state:CollectionState, player: int) -> bool:
|
def _has_beast_form(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the beast form item"""
|
"""`player` in `state` has the beast form item"""
|
||||||
return state.has("Beast form", player)
|
return state.has("Beast form", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_nature_form(state:CollectionState, player: int) -> bool:
|
def _has_beast_and_soup_form(state: CollectionState, player: int) -> bool:
|
||||||
|
"""`player` in `state` has the beast form item"""
|
||||||
|
return _has_beast_form(state, player) and _has_hot_soup(state, player)
|
||||||
|
|
||||||
|
|
||||||
|
def _has_beast_form_or_arnassi_armor(state: CollectionState, player: int) -> bool:
|
||||||
|
"""`player` in `state` has the beast form item"""
|
||||||
|
return _has_beast_form(state, player) or state.has("Arnassi Armor", player)
|
||||||
|
|
||||||
|
|
||||||
|
def _has_nature_form(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the nature form item"""
|
"""`player` in `state` has the nature form item"""
|
||||||
return state.has("Nature form", player)
|
return state.has("Nature form", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_sun_form(state:CollectionState, player: int) -> bool:
|
def _has_sun_form(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the sun form item"""
|
"""`player` in `state` has the sun form item"""
|
||||||
return state.has("Sun form", player)
|
return state.has("Sun form", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_light(state:CollectionState, player: int) -> bool:
|
def _has_light(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the light item"""
|
"""`player` in `state` has the light item"""
|
||||||
return state.has("Baby Dumbo", player) or _has_sun_form(state, player)
|
return state.has("Baby Dumbo", player) or _has_sun_form(state, player)
|
||||||
|
|
||||||
|
|
||||||
def _has_dual_form(state:CollectionState, player: int) -> bool:
|
def _has_dual_form(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the dual form item"""
|
"""`player` in `state` has the dual form item"""
|
||||||
return _has_li(state, player) and state.has("Dual form", player)
|
return _has_li(state, player) and state.has("Dual form", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_fish_form(state:CollectionState, player: int) -> bool:
|
def _has_fish_form(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the fish form item"""
|
"""`player` in `state` has the fish form item"""
|
||||||
return state.has("Fish form", player)
|
return state.has("Fish form", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_spirit_form(state:CollectionState, player: int) -> bool:
|
def _has_spirit_form(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has the spirit form item"""
|
"""`player` in `state` has the spirit form item"""
|
||||||
return state.has("Spirit form", player)
|
return state.has("Spirit form", player)
|
||||||
|
|
||||||
|
|
||||||
def _has_big_bosses(state:CollectionState, player: int) -> bool:
|
def _has_big_bosses(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has beated every big bosses"""
|
"""`player` in `state` has beated every big bosses"""
|
||||||
return state.has_all({"Fallen God beated", "Mithalan God beated", "Drunian God beated",
|
return state.has_all({"Fallen God beated", "Mithalan God beated", "Drunian God beated",
|
||||||
"Sun God beated", "The Golem beated"}, player)
|
"Sun God beated", "The Golem beated"}, player)
|
||||||
|
|
||||||
|
|
||||||
def _has_mini_bosses(state:CollectionState, player: int) -> bool:
|
def _has_mini_bosses(state: CollectionState, player: int) -> bool:
|
||||||
"""`player` in `state` has beated every big bosses"""
|
"""`player` in `state` has beated every big bosses"""
|
||||||
return state.has_all({"Nautilus Prime beated", "Blaster Peg Prime beated", "Mergog beated",
|
return state.has_all({"Nautilus Prime beated", "Blaster Peg Prime beated", "Mergog beated",
|
||||||
"Mithalan priests beated", "Octopus Prime beated", "Crabbius Maximus beated",
|
"Mithalan priests beated", "Octopus Prime beated", "Crabbius Maximus beated",
|
||||||
"Mantis Shrimp Prime beated", "King Jellyfish God Prime beated"}, player)
|
"Mantis Shrimp Prime beated", "King Jellyfish God Prime beated"}, player)
|
||||||
|
|
||||||
|
|
||||||
def _has_secrets(state:CollectionState, player: int) -> bool:
|
def _has_secrets(state: CollectionState, player: int) -> bool:
|
||||||
return state.has_all({"First secret obtained", "Second secret obtained", "Third secret obtained"},player)
|
return state.has_all({"First secret obtained", "Second secret obtained", "Third secret obtained"}, player)
|
||||||
|
|
||||||
|
|
||||||
class AquariaRegions:
|
class AquariaRegions:
|
||||||
|
@ -134,6 +149,7 @@ class AquariaRegions:
|
||||||
skeleton_path: Region
|
skeleton_path: Region
|
||||||
skeleton_path_sc: Region
|
skeleton_path_sc: Region
|
||||||
arnassi: Region
|
arnassi: Region
|
||||||
|
arnassi_cave_transturtle: Region
|
||||||
arnassi_path: Region
|
arnassi_path: Region
|
||||||
arnassi_crab_boss: Region
|
arnassi_crab_boss: Region
|
||||||
simon: Region
|
simon: Region
|
||||||
|
@ -152,6 +168,7 @@ class AquariaRegions:
|
||||||
forest_tr: Region
|
forest_tr: Region
|
||||||
forest_tr_fp: Region
|
forest_tr_fp: Region
|
||||||
forest_bl: Region
|
forest_bl: Region
|
||||||
|
forest_bl_sc: Region
|
||||||
forest_br: Region
|
forest_br: Region
|
||||||
forest_boss: Region
|
forest_boss: Region
|
||||||
forest_boss_entrance: Region
|
forest_boss_entrance: Region
|
||||||
|
@ -179,6 +196,7 @@ class AquariaRegions:
|
||||||
abyss_l: Region
|
abyss_l: Region
|
||||||
abyss_lb: Region
|
abyss_lb: Region
|
||||||
abyss_r: Region
|
abyss_r: Region
|
||||||
|
abyss_r_transturtle: Region
|
||||||
ice_cave: Region
|
ice_cave: Region
|
||||||
bubble_cave: Region
|
bubble_cave: Region
|
||||||
bubble_cave_boss: Region
|
bubble_cave_boss: Region
|
||||||
|
@ -213,7 +231,7 @@ class AquariaRegions:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __add_region(self, hint: str,
|
def __add_region(self, hint: str,
|
||||||
locations: Optional[Dict[str, Optional[int]]]) -> Region:
|
locations: Optional[Dict[str, int]]) -> Region:
|
||||||
"""
|
"""
|
||||||
Create a new Region, add it to the `world` regions and return it.
|
Create a new Region, add it to the `world` regions and return it.
|
||||||
Be aware that this function have a side effect on ``world`.`regions`
|
Be aware that this function have a side effect on ``world`.`regions`
|
||||||
|
@ -280,6 +298,8 @@ class AquariaRegions:
|
||||||
self.arnassi = self.__add_region("Arnassi Ruins", AquariaLocations.locations_arnassi)
|
self.arnassi = self.__add_region("Arnassi Ruins", AquariaLocations.locations_arnassi)
|
||||||
self.arnassi_path = self.__add_region("Arnassi Ruins, back entrance path",
|
self.arnassi_path = self.__add_region("Arnassi Ruins, back entrance path",
|
||||||
AquariaLocations.locations_arnassi_path)
|
AquariaLocations.locations_arnassi_path)
|
||||||
|
self.arnassi_cave_transturtle = self.__add_region("Arnassi Ruins, transturtle area",
|
||||||
|
AquariaLocations.locations_arnassi_cave_transturtle)
|
||||||
self.arnassi_crab_boss = self.__add_region("Arnassi Ruins, Crabbius Maximus lair",
|
self.arnassi_crab_boss = self.__add_region("Arnassi Ruins, Crabbius Maximus lair",
|
||||||
AquariaLocations.locations_arnassi_crab_boss)
|
AquariaLocations.locations_arnassi_crab_boss)
|
||||||
|
|
||||||
|
@ -302,9 +322,9 @@ class AquariaRegions:
|
||||||
AquariaLocations.locations_cathedral_r)
|
AquariaLocations.locations_cathedral_r)
|
||||||
self.cathedral_underground = self.__add_region("Mithalas Cathedral underground",
|
self.cathedral_underground = self.__add_region("Mithalas Cathedral underground",
|
||||||
AquariaLocations.locations_cathedral_underground)
|
AquariaLocations.locations_cathedral_underground)
|
||||||
self.cathedral_boss_r = self.__add_region("Mithalas Cathedral, Mithalan God room",
|
self.cathedral_boss_r = self.__add_region("Mithalas Cathedral, Mithalan God room", None)
|
||||||
|
self.cathedral_boss_l = self.__add_region("Mithalas Cathedral, after Mithalan God room",
|
||||||
AquariaLocations.locations_cathedral_boss)
|
AquariaLocations.locations_cathedral_boss)
|
||||||
self.cathedral_boss_l = self.__add_region("Mithalas Cathedral, after Mithalan God room", None)
|
|
||||||
|
|
||||||
def __create_forest(self) -> None:
|
def __create_forest(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -320,6 +340,8 @@ class AquariaRegions:
|
||||||
AquariaLocations.locations_forest_tr_fp)
|
AquariaLocations.locations_forest_tr_fp)
|
||||||
self.forest_bl = self.__add_region("Kelp Forest bottom left area",
|
self.forest_bl = self.__add_region("Kelp Forest bottom left area",
|
||||||
AquariaLocations.locations_forest_bl)
|
AquariaLocations.locations_forest_bl)
|
||||||
|
self.forest_bl_sc = self.__add_region("Kelp Forest bottom left area, spirit crystals",
|
||||||
|
AquariaLocations.locations_forest_bl_sc)
|
||||||
self.forest_br = self.__add_region("Kelp Forest bottom right area",
|
self.forest_br = self.__add_region("Kelp Forest bottom right area",
|
||||||
AquariaLocations.locations_forest_br)
|
AquariaLocations.locations_forest_br)
|
||||||
self.forest_sprite_cave = self.__add_region("Kelp Forest spirit cave",
|
self.forest_sprite_cave = self.__add_region("Kelp Forest spirit cave",
|
||||||
|
@ -388,6 +410,8 @@ class AquariaRegions:
|
||||||
AquariaLocations.locations_abyss_l)
|
AquariaLocations.locations_abyss_l)
|
||||||
self.abyss_lb = self.__add_region("Abyss left bottom area", AquariaLocations.locations_abyss_lb)
|
self.abyss_lb = self.__add_region("Abyss left bottom area", AquariaLocations.locations_abyss_lb)
|
||||||
self.abyss_r = self.__add_region("Abyss right area", AquariaLocations.locations_abyss_r)
|
self.abyss_r = self.__add_region("Abyss right area", AquariaLocations.locations_abyss_r)
|
||||||
|
self.abyss_r_transturtle = self.__add_region("Abyss right area, transturtle",
|
||||||
|
AquariaLocations.locations_abyss_r_transturtle)
|
||||||
self.ice_cave = self.__add_region("Ice Cave", AquariaLocations.locations_ice_cave)
|
self.ice_cave = self.__add_region("Ice Cave", AquariaLocations.locations_ice_cave)
|
||||||
self.bubble_cave = self.__add_region("Bubble Cave", AquariaLocations.locations_bubble_cave)
|
self.bubble_cave = self.__add_region("Bubble Cave", AquariaLocations.locations_bubble_cave)
|
||||||
self.bubble_cave_boss = self.__add_region("Bubble Cave boss area", AquariaLocations.locations_bubble_cave_boss)
|
self.bubble_cave_boss = self.__add_region("Bubble Cave boss area", AquariaLocations.locations_bubble_cave_boss)
|
||||||
|
@ -455,7 +479,7 @@ class AquariaRegions:
|
||||||
"""
|
"""
|
||||||
Connect entrances of the different regions around `home_water`
|
Connect entrances of the different regions around `home_water`
|
||||||
"""
|
"""
|
||||||
self.__connect_regions("Menu", "Verse Cave right area",
|
self.__connect_one_way_regions("Menu", "Verse Cave right area",
|
||||||
self.menu, self.verse_cave_r)
|
self.menu, self.verse_cave_r)
|
||||||
self.__connect_regions("Verse Cave left area", "Verse Cave right area",
|
self.__connect_regions("Verse Cave left area", "Verse Cave right area",
|
||||||
self.verse_cave_l, self.verse_cave_r)
|
self.verse_cave_l, self.verse_cave_r)
|
||||||
|
@ -464,7 +488,8 @@ class AquariaRegions:
|
||||||
self.__connect_regions("Home Water", "Song Cave", self.home_water, self.song_cave)
|
self.__connect_regions("Home Water", "Song Cave", self.home_water, self.song_cave)
|
||||||
self.__connect_regions("Home Water", "Home Water, nautilus nest",
|
self.__connect_regions("Home Water", "Home Water, nautilus nest",
|
||||||
self.home_water, self.home_water_nautilus,
|
self.home_water, self.home_water_nautilus,
|
||||||
lambda state: _has_energy_form(state, self.player) and _has_bind_song(state, self.player))
|
lambda state: _has_energy_attack_item(state, self.player) and
|
||||||
|
_has_bind_song(state, self.player))
|
||||||
self.__connect_regions("Home Water", "Home Water transturtle room",
|
self.__connect_regions("Home Water", "Home Water transturtle room",
|
||||||
self.home_water, self.home_water_transturtle)
|
self.home_water, self.home_water_transturtle)
|
||||||
self.__connect_regions("Home Water", "Energy Temple first area",
|
self.__connect_regions("Home Water", "Energy Temple first area",
|
||||||
|
@ -472,7 +497,7 @@ class AquariaRegions:
|
||||||
lambda state: _has_bind_song(state, self.player))
|
lambda state: _has_bind_song(state, self.player))
|
||||||
self.__connect_regions("Home Water", "Energy Temple_altar",
|
self.__connect_regions("Home Water", "Energy Temple_altar",
|
||||||
self.home_water, self.energy_temple_altar,
|
self.home_water, self.energy_temple_altar,
|
||||||
lambda state: _has_energy_form(state, self.player) and
|
lambda state: _has_energy_attack_item(state, self.player) and
|
||||||
_has_bind_song(state, self.player))
|
_has_bind_song(state, self.player))
|
||||||
self.__connect_regions("Energy Temple first area", "Energy Temple second area",
|
self.__connect_regions("Energy Temple first area", "Energy Temple second area",
|
||||||
self.energy_temple_1, self.energy_temple_2,
|
self.energy_temple_1, self.energy_temple_2,
|
||||||
|
@ -482,28 +507,28 @@ class AquariaRegions:
|
||||||
lambda state: _has_fish_form(state, self.player))
|
lambda state: _has_fish_form(state, self.player))
|
||||||
self.__connect_regions("Energy Temple idol room", "Energy Temple boss area",
|
self.__connect_regions("Energy Temple idol room", "Energy Temple boss area",
|
||||||
self.energy_temple_idol, self.energy_temple_boss,
|
self.energy_temple_idol, self.energy_temple_boss,
|
||||||
lambda state: _has_energy_form(state, self.player))
|
lambda state: _has_energy_attack_item(state, self.player) and
|
||||||
|
_has_fish_form(state, self.player))
|
||||||
self.__connect_one_way_regions("Energy Temple first area", "Energy Temple boss area",
|
self.__connect_one_way_regions("Energy Temple first area", "Energy Temple boss area",
|
||||||
self.energy_temple_1, self.energy_temple_boss,
|
self.energy_temple_1, self.energy_temple_boss,
|
||||||
lambda state: _has_beast_form(state, self.player) and
|
lambda state: _has_beast_form(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
_has_energy_attack_item(state, self.player))
|
||||||
self.__connect_one_way_regions("Energy Temple boss area", "Energy Temple first area",
|
self.__connect_one_way_regions("Energy Temple boss area", "Energy Temple first area",
|
||||||
self.energy_temple_boss, self.energy_temple_1,
|
self.energy_temple_boss, self.energy_temple_1,
|
||||||
lambda state: _has_energy_form(state, self.player))
|
lambda state: _has_energy_attack_item(state, self.player))
|
||||||
self.__connect_regions("Energy Temple second area", "Energy Temple third area",
|
self.__connect_regions("Energy Temple second area", "Energy Temple third area",
|
||||||
self.energy_temple_2, self.energy_temple_3,
|
self.energy_temple_2, self.energy_temple_3,
|
||||||
lambda state: _has_bind_song(state, self.player) and
|
lambda state: _has_energy_form(state, self.player))
|
||||||
_has_energy_form(state, self.player))
|
|
||||||
self.__connect_regions("Energy Temple boss area", "Energy Temple blaster room",
|
self.__connect_regions("Energy Temple boss area", "Energy Temple blaster room",
|
||||||
self.energy_temple_boss, self.energy_temple_blaster_room,
|
self.energy_temple_boss, self.energy_temple_blaster_room,
|
||||||
lambda state: _has_nature_form(state, self.player) and
|
lambda state: _has_nature_form(state, self.player) and
|
||||||
_has_bind_song(state, self.player) and
|
_has_bind_song(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
_has_energy_attack_item(state, self.player))
|
||||||
self.__connect_regions("Energy Temple first area", "Energy Temple blaster room",
|
self.__connect_regions("Energy Temple first area", "Energy Temple blaster room",
|
||||||
self.energy_temple_1, self.energy_temple_blaster_room,
|
self.energy_temple_1, self.energy_temple_blaster_room,
|
||||||
lambda state: _has_nature_form(state, self.player) and
|
lambda state: _has_nature_form(state, self.player) and
|
||||||
_has_bind_song(state, self.player) and
|
_has_bind_song(state, self.player) and
|
||||||
_has_energy_form(state, self.player) and
|
_has_energy_attack_item(state, self.player) and
|
||||||
_has_beast_form(state, self.player))
|
_has_beast_form(state, self.player))
|
||||||
self.__connect_regions("Home Water", "Open Water top left area",
|
self.__connect_regions("Home Water", "Open Water top left area",
|
||||||
self.home_water, self.openwater_tl)
|
self.home_water, self.openwater_tl)
|
||||||
|
@ -520,7 +545,7 @@ class AquariaRegions:
|
||||||
self.openwater_tl, self.forest_br)
|
self.openwater_tl, self.forest_br)
|
||||||
self.__connect_regions("Open Water top right area", "Open Water top right area, turtle room",
|
self.__connect_regions("Open Water top right area", "Open Water top right area, turtle room",
|
||||||
self.openwater_tr, self.openwater_tr_turtle,
|
self.openwater_tr, self.openwater_tr_turtle,
|
||||||
lambda state: _has_beast_form(state, self.player))
|
lambda state: _has_beast_form_or_arnassi_armor(state, self.player))
|
||||||
self.__connect_regions("Open Water top right area", "Open Water bottom right area",
|
self.__connect_regions("Open Water top right area", "Open Water bottom right area",
|
||||||
self.openwater_tr, self.openwater_br)
|
self.openwater_tr, self.openwater_br)
|
||||||
self.__connect_regions("Open Water top right area", "Mithalas City",
|
self.__connect_regions("Open Water top right area", "Mithalas City",
|
||||||
|
@ -529,10 +554,9 @@ class AquariaRegions:
|
||||||
self.openwater_tr, self.veil_bl)
|
self.openwater_tr, self.veil_bl)
|
||||||
self.__connect_one_way_regions("Open Water top right area", "Veil bottom right",
|
self.__connect_one_way_regions("Open Water top right area", "Veil bottom right",
|
||||||
self.openwater_tr, self.veil_br,
|
self.openwater_tr, self.veil_br,
|
||||||
lambda state: _has_beast_form(state, self.player))
|
lambda state: _has_beast_form_or_arnassi_armor(state, self.player))
|
||||||
self.__connect_one_way_regions("Veil bottom right", "Open Water top right area",
|
self.__connect_one_way_regions("Veil bottom right", "Open Water top right area",
|
||||||
self.veil_br, self.openwater_tr,
|
self.veil_br, self.openwater_tr)
|
||||||
lambda state: _has_beast_form(state, self.player))
|
|
||||||
self.__connect_regions("Open Water bottom left area", "Open Water bottom right area",
|
self.__connect_regions("Open Water bottom left area", "Open Water bottom right area",
|
||||||
self.openwater_bl, self.openwater_br)
|
self.openwater_bl, self.openwater_br)
|
||||||
self.__connect_regions("Open Water bottom left area", "Skeleton path",
|
self.__connect_regions("Open Water bottom left area", "Skeleton path",
|
||||||
|
@ -551,10 +575,14 @@ class AquariaRegions:
|
||||||
self.arnassi, self.openwater_br)
|
self.arnassi, self.openwater_br)
|
||||||
self.__connect_regions("Arnassi", "Arnassi path",
|
self.__connect_regions("Arnassi", "Arnassi path",
|
||||||
self.arnassi, self.arnassi_path)
|
self.arnassi, self.arnassi_path)
|
||||||
|
self.__connect_regions("Arnassi ruins, transturtle area", "Arnassi path",
|
||||||
|
self.arnassi_cave_transturtle, self.arnassi_path,
|
||||||
|
lambda state: _has_fish_form(state, self.player))
|
||||||
self.__connect_one_way_regions("Arnassi path", "Arnassi crab boss area",
|
self.__connect_one_way_regions("Arnassi path", "Arnassi crab boss area",
|
||||||
self.arnassi_path, self.arnassi_crab_boss,
|
self.arnassi_path, self.arnassi_crab_boss,
|
||||||
lambda state: _has_beast_form(state, self.player) and
|
lambda state: _has_beast_form_or_arnassi_armor(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
(_has_energy_attack_item(state, self.player) or
|
||||||
|
_has_nature_form(state, self.player)))
|
||||||
self.__connect_one_way_regions("Arnassi crab boss area", "Arnassi path",
|
self.__connect_one_way_regions("Arnassi crab boss area", "Arnassi path",
|
||||||
self.arnassi_crab_boss, self.arnassi_path)
|
self.arnassi_crab_boss, self.arnassi_path)
|
||||||
|
|
||||||
|
@ -564,25 +592,23 @@ class AquariaRegions:
|
||||||
"""
|
"""
|
||||||
self.__connect_one_way_regions("Mithalas City", "Mithalas City top path",
|
self.__connect_one_way_regions("Mithalas City", "Mithalas City top path",
|
||||||
self.mithalas_city, self.mithalas_city_top_path,
|
self.mithalas_city, self.mithalas_city_top_path,
|
||||||
lambda state: _has_beast_form(state, self.player))
|
lambda state: _has_beast_form_or_arnassi_armor(state, self.player))
|
||||||
self.__connect_one_way_regions("Mithalas City_top_path", "Mithalas City",
|
self.__connect_one_way_regions("Mithalas City_top_path", "Mithalas City",
|
||||||
self.mithalas_city_top_path, self.mithalas_city)
|
self.mithalas_city_top_path, self.mithalas_city)
|
||||||
self.__connect_regions("Mithalas City", "Mithalas City home with fishpass",
|
self.__connect_regions("Mithalas City", "Mithalas City home with fishpass",
|
||||||
self.mithalas_city, self.mithalas_city_fishpass,
|
self.mithalas_city, self.mithalas_city_fishpass,
|
||||||
lambda state: _has_fish_form(state, self.player))
|
lambda state: _has_fish_form(state, self.player))
|
||||||
self.__connect_regions("Mithalas City", "Mithalas castle",
|
self.__connect_regions("Mithalas City", "Mithalas castle",
|
||||||
self.mithalas_city, self.cathedral_l,
|
self.mithalas_city, self.cathedral_l)
|
||||||
lambda state: _has_fish_form(state, self.player))
|
|
||||||
self.__connect_one_way_regions("Mithalas City top path", "Mithalas castle, flower tube",
|
self.__connect_one_way_regions("Mithalas City top path", "Mithalas castle, flower tube",
|
||||||
self.mithalas_city_top_path,
|
self.mithalas_city_top_path,
|
||||||
self.cathedral_l_tube,
|
self.cathedral_l_tube,
|
||||||
lambda state: _has_nature_form(state, self.player) and
|
lambda state: _has_nature_form(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
_has_energy_attack_item(state, self.player))
|
||||||
self.__connect_one_way_regions("Mithalas castle, flower tube area", "Mithalas City top path",
|
self.__connect_one_way_regions("Mithalas castle, flower tube area", "Mithalas City top path",
|
||||||
self.cathedral_l_tube,
|
self.cathedral_l_tube,
|
||||||
self.mithalas_city_top_path,
|
self.mithalas_city_top_path,
|
||||||
lambda state: _has_beast_form(state, self.player) and
|
lambda state: _has_nature_form(state, self.player))
|
||||||
_has_nature_form(state, self.player))
|
|
||||||
self.__connect_one_way_regions("Mithalas castle flower tube area", "Mithalas castle, spirit crystals",
|
self.__connect_one_way_regions("Mithalas castle flower tube area", "Mithalas castle, spirit crystals",
|
||||||
self.cathedral_l_tube, self.cathedral_l_sc,
|
self.cathedral_l_tube, self.cathedral_l_sc,
|
||||||
lambda state: _has_spirit_form(state, self.player))
|
lambda state: _has_spirit_form(state, self.player))
|
||||||
|
@ -592,33 +618,36 @@ class AquariaRegions:
|
||||||
self.__connect_regions("Mithalas castle", "Mithalas castle, spirit crystals",
|
self.__connect_regions("Mithalas castle", "Mithalas castle, spirit crystals",
|
||||||
self.cathedral_l, self.cathedral_l_sc,
|
self.cathedral_l, self.cathedral_l_sc,
|
||||||
lambda state: _has_spirit_form(state, self.player))
|
lambda state: _has_spirit_form(state, self.player))
|
||||||
self.__connect_regions("Mithalas castle", "Cathedral boss left area",
|
self.__connect_one_way_regions("Mithalas castle", "Cathedral boss right area",
|
||||||
self.cathedral_l, self.cathedral_boss_l,
|
self.cathedral_l, self.cathedral_boss_r,
|
||||||
lambda state: _has_beast_form(state, self.player) and
|
lambda state: _has_beast_form(state, self.player))
|
||||||
_has_energy_form(state, self.player) and
|
self.__connect_one_way_regions("Cathedral boss left area", "Mithalas castle",
|
||||||
_has_bind_song(state, self.player))
|
self.cathedral_boss_l, self.cathedral_l,
|
||||||
|
lambda state: _has_beast_form(state, self.player))
|
||||||
self.__connect_regions("Mithalas castle", "Mithalas Cathedral underground",
|
self.__connect_regions("Mithalas castle", "Mithalas Cathedral underground",
|
||||||
self.cathedral_l, self.cathedral_underground,
|
self.cathedral_l, self.cathedral_underground,
|
||||||
lambda state: _has_beast_form(state, self.player) and
|
lambda state: _has_beast_form(state, self.player))
|
||||||
_has_bind_song(state, self.player))
|
self.__connect_one_way_regions("Mithalas castle", "Mithalas Cathedral",
|
||||||
self.__connect_regions("Mithalas castle", "Mithalas Cathedral",
|
|
||||||
self.cathedral_l, self.cathedral_r,
|
self.cathedral_l, self.cathedral_r,
|
||||||
lambda state: _has_bind_song(state, self.player) and
|
lambda state: _has_bind_song(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
_has_energy_attack_item(state, self.player))
|
||||||
self.__connect_regions("Mithalas Cathedral", "Mithalas Cathedral underground",
|
self.__connect_one_way_regions("Mithalas Cathedral", "Mithalas Cathedral underground",
|
||||||
self.cathedral_r, self.cathedral_underground,
|
self.cathedral_r, self.cathedral_underground)
|
||||||
lambda state: _has_energy_form(state, self.player))
|
self.__connect_one_way_regions("Mithalas Cathedral underground", "Mithalas Cathedral",
|
||||||
self.__connect_one_way_regions("Mithalas Cathedral underground", "Cathedral boss left area",
|
self.cathedral_underground, self.cathedral_r,
|
||||||
self.cathedral_underground, self.cathedral_boss_r,
|
lambda state: _has_beast_form(state, self.player) and
|
||||||
lambda state: _has_energy_form(state, self.player) and
|
_has_energy_attack_item(state, self.player))
|
||||||
_has_bind_song(state, self.player))
|
self.__connect_one_way_regions("Mithalas Cathedral underground", "Cathedral boss right area",
|
||||||
self.__connect_one_way_regions("Cathedral boss left area", "Mithalas Cathedral underground",
|
self.cathedral_underground, self.cathedral_boss_r)
|
||||||
|
self.__connect_one_way_regions("Cathedral boss right area", "Mithalas Cathedral underground",
|
||||||
self.cathedral_boss_r, self.cathedral_underground,
|
self.cathedral_boss_r, self.cathedral_underground,
|
||||||
lambda state: _has_beast_form(state, self.player))
|
lambda state: _has_beast_form(state, self.player))
|
||||||
self.__connect_regions("Cathedral boss right area", "Cathedral boss left area",
|
self.__connect_one_way_regions("Cathedral boss right area", "Cathedral boss left area",
|
||||||
self.cathedral_boss_r, self.cathedral_boss_l,
|
self.cathedral_boss_r, self.cathedral_boss_l,
|
||||||
lambda state: _has_bind_song(state, self.player) and
|
lambda state: _has_bind_song(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
_has_energy_attack_item(state, self.player))
|
||||||
|
self.__connect_one_way_regions("Cathedral boss left area", "Cathedral boss right area",
|
||||||
|
self.cathedral_boss_l, self.cathedral_boss_r)
|
||||||
|
|
||||||
def __connect_forest_regions(self) -> None:
|
def __connect_forest_regions(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -628,6 +657,12 @@ class AquariaRegions:
|
||||||
self.forest_br, self.veil_bl)
|
self.forest_br, self.veil_bl)
|
||||||
self.__connect_regions("Forest bottom right", "Forest bottom left area",
|
self.__connect_regions("Forest bottom right", "Forest bottom left area",
|
||||||
self.forest_br, self.forest_bl)
|
self.forest_br, self.forest_bl)
|
||||||
|
self.__connect_one_way_regions("Forest bottom left area", "Forest bottom left area, spirit crystals",
|
||||||
|
self.forest_bl, self.forest_bl_sc,
|
||||||
|
lambda state: _has_energy_attack_item(state, self.player) or
|
||||||
|
_has_fish_form(state, self.player))
|
||||||
|
self.__connect_one_way_regions("Forest bottom left area, spirit crystals", "Forest bottom left area",
|
||||||
|
self.forest_bl_sc, self.forest_bl)
|
||||||
self.__connect_regions("Forest bottom right", "Forest top right area",
|
self.__connect_regions("Forest bottom right", "Forest top right area",
|
||||||
self.forest_br, self.forest_tr)
|
self.forest_br, self.forest_tr)
|
||||||
self.__connect_regions("Forest bottom left area", "Forest fish cave",
|
self.__connect_regions("Forest bottom left area", "Forest fish cave",
|
||||||
|
@ -641,7 +676,7 @@ class AquariaRegions:
|
||||||
self.forest_tl, self.forest_tl_fp,
|
self.forest_tl, self.forest_tl_fp,
|
||||||
lambda state: _has_nature_form(state, self.player) and
|
lambda state: _has_nature_form(state, self.player) and
|
||||||
_has_bind_song(state, self.player) and
|
_has_bind_song(state, self.player) and
|
||||||
_has_energy_form(state, self.player) and
|
_has_energy_attack_item(state, self.player) and
|
||||||
_has_fish_form(state, self.player))
|
_has_fish_form(state, self.player))
|
||||||
self.__connect_regions("Forest top left area", "Forest top right area",
|
self.__connect_regions("Forest top left area", "Forest top right area",
|
||||||
self.forest_tl, self.forest_tr)
|
self.forest_tl, self.forest_tr)
|
||||||
|
@ -649,7 +684,7 @@ class AquariaRegions:
|
||||||
self.forest_tl, self.forest_boss_entrance)
|
self.forest_tl, self.forest_boss_entrance)
|
||||||
self.__connect_regions("Forest boss area", "Forest boss entrance",
|
self.__connect_regions("Forest boss area", "Forest boss entrance",
|
||||||
self.forest_boss, self.forest_boss_entrance,
|
self.forest_boss, self.forest_boss_entrance,
|
||||||
lambda state: _has_energy_form(state, self.player))
|
lambda state: _has_energy_attack_item(state, self.player))
|
||||||
self.__connect_regions("Forest top right area", "Forest top right area fish pass",
|
self.__connect_regions("Forest top right area", "Forest top right area fish pass",
|
||||||
self.forest_tr, self.forest_tr_fp,
|
self.forest_tr, self.forest_tr_fp,
|
||||||
lambda state: _has_fish_form(state, self.player))
|
lambda state: _has_fish_form(state, self.player))
|
||||||
|
@ -663,7 +698,7 @@ class AquariaRegions:
|
||||||
self.__connect_regions("Fermog cave", "Fermog boss",
|
self.__connect_regions("Fermog cave", "Fermog boss",
|
||||||
self.mermog_cave, self.mermog_boss,
|
self.mermog_cave, self.mermog_boss,
|
||||||
lambda state: _has_beast_form(state, self.player) and
|
lambda state: _has_beast_form(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
_has_energy_attack_item(state, self.player))
|
||||||
|
|
||||||
def __connect_veil_regions(self) -> None:
|
def __connect_veil_regions(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -681,8 +716,7 @@ class AquariaRegions:
|
||||||
self.veil_b_sc, self.veil_br,
|
self.veil_b_sc, self.veil_br,
|
||||||
lambda state: _has_spirit_form(state, self.player))
|
lambda state: _has_spirit_form(state, self.player))
|
||||||
self.__connect_regions("Veil bottom right", "Veil top left area",
|
self.__connect_regions("Veil bottom right", "Veil top left area",
|
||||||
self.veil_br, self.veil_tl,
|
self.veil_br, self.veil_tl)
|
||||||
lambda state: _has_beast_form(state, self.player))
|
|
||||||
self.__connect_regions("Veil top left area", "Veil_top left area, fish pass",
|
self.__connect_regions("Veil top left area", "Veil_top left area, fish pass",
|
||||||
self.veil_tl, self.veil_tl_fp,
|
self.veil_tl, self.veil_tl_fp,
|
||||||
lambda state: _has_fish_form(state, self.player))
|
lambda state: _has_fish_form(state, self.player))
|
||||||
|
@ -691,20 +725,25 @@ class AquariaRegions:
|
||||||
self.__connect_regions("Veil top left area", "Turtle cave",
|
self.__connect_regions("Veil top left area", "Turtle cave",
|
||||||
self.veil_tl, self.turtle_cave)
|
self.veil_tl, self.turtle_cave)
|
||||||
self.__connect_regions("Turtle cave", "Turtle cave Bubble Cliff",
|
self.__connect_regions("Turtle cave", "Turtle cave Bubble Cliff",
|
||||||
self.turtle_cave, self.turtle_cave_bubble,
|
self.turtle_cave, self.turtle_cave_bubble)
|
||||||
lambda state: _has_beast_form(state, self.player))
|
|
||||||
self.__connect_regions("Veil right of sun temple", "Sun Temple right area",
|
self.__connect_regions("Veil right of sun temple", "Sun Temple right area",
|
||||||
self.veil_tr_r, self.sun_temple_r)
|
self.veil_tr_r, self.sun_temple_r)
|
||||||
self.__connect_regions("Sun Temple right area", "Sun Temple left area",
|
self.__connect_one_way_regions("Sun Temple right area", "Sun Temple left area",
|
||||||
self.sun_temple_r, self.sun_temple_l,
|
self.sun_temple_r, self.sun_temple_l,
|
||||||
lambda state: _has_bind_song(state, self.player))
|
lambda state: _has_bind_song(state, self.player) or
|
||||||
|
_has_light(state, self.player))
|
||||||
|
self.__connect_one_way_regions("Sun Temple left area", "Sun Temple right area",
|
||||||
|
self.sun_temple_l, self.sun_temple_r,
|
||||||
|
lambda state: _has_light(state, self.player))
|
||||||
self.__connect_regions("Sun Temple left area", "Veil left of sun temple",
|
self.__connect_regions("Sun Temple left area", "Veil left of sun temple",
|
||||||
self.sun_temple_l, self.veil_tr_l)
|
self.sun_temple_l, self.veil_tr_l)
|
||||||
self.__connect_regions("Sun Temple left area", "Sun Temple before boss area",
|
self.__connect_regions("Sun Temple left area", "Sun Temple before boss area",
|
||||||
self.sun_temple_l, self.sun_temple_boss_path)
|
self.sun_temple_l, self.sun_temple_boss_path,
|
||||||
|
lambda state: _has_light(state, self.player) or
|
||||||
|
_has_sun_crystal(state, self.player))
|
||||||
self.__connect_regions("Sun Temple before boss area", "Sun Temple boss area",
|
self.__connect_regions("Sun Temple before boss area", "Sun Temple boss area",
|
||||||
self.sun_temple_boss_path, self.sun_temple_boss,
|
self.sun_temple_boss_path, self.sun_temple_boss,
|
||||||
lambda state: _has_energy_form(state, self.player))
|
lambda state: _has_energy_attack_item(state, self.player))
|
||||||
self.__connect_one_way_regions("Sun Temple boss area", "Veil left of sun temple",
|
self.__connect_one_way_regions("Sun Temple boss area", "Veil left of sun temple",
|
||||||
self.sun_temple_boss, self.veil_tr_l)
|
self.sun_temple_boss, self.veil_tr_l)
|
||||||
self.__connect_regions("Veil left of sun temple", "Octo cave top path",
|
self.__connect_regions("Veil left of sun temple", "Octo cave top path",
|
||||||
|
@ -712,7 +751,7 @@ class AquariaRegions:
|
||||||
lambda state: _has_fish_form(state, self.player) and
|
lambda state: _has_fish_form(state, self.player) and
|
||||||
_has_sun_form(state, self.player) and
|
_has_sun_form(state, self.player) and
|
||||||
_has_beast_form(state, self.player) and
|
_has_beast_form(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
_has_energy_attack_item(state, self.player))
|
||||||
self.__connect_regions("Veil left of sun temple", "Octo cave bottom path",
|
self.__connect_regions("Veil left of sun temple", "Octo cave bottom path",
|
||||||
self.veil_tr_l, self.octo_cave_b,
|
self.veil_tr_l, self.octo_cave_b,
|
||||||
lambda state: _has_fish_form(state, self.player))
|
lambda state: _has_fish_form(state, self.player))
|
||||||
|
@ -734,10 +773,16 @@ class AquariaRegions:
|
||||||
self.body_c, self.abyss_lb)
|
self.body_c, self.abyss_lb)
|
||||||
self.__connect_regions("Abyss left area", "King jellyfish cave",
|
self.__connect_regions("Abyss left area", "King jellyfish cave",
|
||||||
self.abyss_l, self.king_jellyfish_cave,
|
self.abyss_l, self.king_jellyfish_cave,
|
||||||
lambda state: _has_energy_form(state, self.player) and
|
lambda state: (_has_energy_form(state, self.player) and
|
||||||
_has_beast_form(state, self.player))
|
_has_beast_form(state, self.player)) or
|
||||||
|
_has_dual_form(state, self.player))
|
||||||
self.__connect_regions("Abyss left area", "Abyss right area",
|
self.__connect_regions("Abyss left area", "Abyss right area",
|
||||||
self.abyss_l, self.abyss_r)
|
self.abyss_l, self.abyss_r)
|
||||||
|
self.__connect_one_way_regions("Abyss right area", "Abyss right area, transturtle",
|
||||||
|
self.abyss_r, self.abyss_r_transturtle)
|
||||||
|
self.__connect_one_way_regions("Abyss right area, transturtle", "Abyss right area",
|
||||||
|
self.abyss_r_transturtle, self.abyss_r,
|
||||||
|
lambda state: _has_light(state, self.player))
|
||||||
self.__connect_regions("Abyss right area", "Inside the whale",
|
self.__connect_regions("Abyss right area", "Inside the whale",
|
||||||
self.abyss_r, self.whale,
|
self.abyss_r, self.whale,
|
||||||
lambda state: _has_spirit_form(state, self.player) and
|
lambda state: _has_spirit_form(state, self.player) and
|
||||||
|
@ -747,13 +792,14 @@ class AquariaRegions:
|
||||||
lambda state: _has_spirit_form(state, self.player) and
|
lambda state: _has_spirit_form(state, self.player) and
|
||||||
_has_sun_form(state, self.player) and
|
_has_sun_form(state, self.player) and
|
||||||
_has_bind_song(state, self.player) and
|
_has_bind_song(state, self.player) and
|
||||||
_has_energy_form(state, self.player))
|
_has_energy_attack_item(state, self.player))
|
||||||
self.__connect_regions("Abyss right area", "Ice Cave",
|
self.__connect_regions("Abyss right area", "Ice Cave",
|
||||||
self.abyss_r, self.ice_cave,
|
self.abyss_r, self.ice_cave,
|
||||||
lambda state: _has_spirit_form(state, self.player))
|
lambda state: _has_spirit_form(state, self.player))
|
||||||
self.__connect_regions("Abyss right area", "Bubble Cave",
|
self.__connect_regions("Ice cave", "Bubble Cave",
|
||||||
self.ice_cave, self.bubble_cave,
|
self.ice_cave, self.bubble_cave,
|
||||||
lambda state: _has_beast_form(state, self.player))
|
lambda state: _has_beast_form(state, self.player) or
|
||||||
|
_has_hot_soup(state, self.player))
|
||||||
self.__connect_regions("Bubble Cave boss area", "Bubble Cave",
|
self.__connect_regions("Bubble Cave boss area", "Bubble Cave",
|
||||||
self.bubble_cave, self.bubble_cave_boss,
|
self.bubble_cave, self.bubble_cave_boss,
|
||||||
lambda state: _has_nature_form(state, self.player) and _has_bind_song(state, self.player)
|
lambda state: _has_nature_form(state, self.player) and _has_bind_song(state, self.player)
|
||||||
|
@ -772,7 +818,7 @@ class AquariaRegions:
|
||||||
self.sunken_city_l, self.sunken_city_boss,
|
self.sunken_city_l, self.sunken_city_boss,
|
||||||
lambda state: _has_beast_form(state, self.player) and
|
lambda state: _has_beast_form(state, self.player) and
|
||||||
_has_sun_form(state, self.player) and
|
_has_sun_form(state, self.player) and
|
||||||
_has_energy_form(state, self.player) and
|
_has_energy_attack_item(state, self.player) and
|
||||||
_has_bind_song(state, self.player))
|
_has_bind_song(state, self.player))
|
||||||
|
|
||||||
def __connect_body_regions(self) -> None:
|
def __connect_body_regions(self) -> None:
|
||||||
|
@ -780,11 +826,13 @@ class AquariaRegions:
|
||||||
Connect entrances of the different regions around The Body
|
Connect entrances of the different regions around The Body
|
||||||
"""
|
"""
|
||||||
self.__connect_regions("Body center area", "Body left area",
|
self.__connect_regions("Body center area", "Body left area",
|
||||||
self.body_c, self.body_l)
|
self.body_c, self.body_l,
|
||||||
|
lambda state: _has_energy_form(state, self.player))
|
||||||
self.__connect_regions("Body center area", "Body right area top path",
|
self.__connect_regions("Body center area", "Body right area top path",
|
||||||
self.body_c, self.body_rt)
|
self.body_c, self.body_rt)
|
||||||
self.__connect_regions("Body center area", "Body right area bottom path",
|
self.__connect_regions("Body center area", "Body right area bottom path",
|
||||||
self.body_c, self.body_rb)
|
self.body_c, self.body_rb,
|
||||||
|
lambda state: _has_energy_form(state, self.player))
|
||||||
self.__connect_regions("Body center area", "Body bottom area",
|
self.__connect_regions("Body center area", "Body bottom area",
|
||||||
self.body_c, self.body_b,
|
self.body_c, self.body_b,
|
||||||
lambda state: _has_dual_form(state, self.player))
|
lambda state: _has_dual_form(state, self.player))
|
||||||
|
@ -803,22 +851,12 @@ class AquariaRegions:
|
||||||
self.__connect_one_way_regions("final boss third form area", "final boss end",
|
self.__connect_one_way_regions("final boss third form area", "final boss end",
|
||||||
self.final_boss, self.final_boss_end)
|
self.final_boss, self.final_boss_end)
|
||||||
|
|
||||||
def __connect_transturtle(self, item_source: str, item_target: str, region_source: Region, region_target: Region,
|
def __connect_transturtle(self, item_source: str, item_target: str, region_source: Region,
|
||||||
rule=None) -> None:
|
region_target: Region) -> None:
|
||||||
"""Connect a single transturtle to another one"""
|
"""Connect a single transturtle to another one"""
|
||||||
if item_source != item_target:
|
if item_source != item_target:
|
||||||
if rule is None:
|
|
||||||
self.__connect_one_way_regions(item_source, item_target, region_source, region_target,
|
self.__connect_one_way_regions(item_source, item_target, region_source, region_target,
|
||||||
lambda state: state.has(item_target, self.player))
|
lambda state: state.has(item_target, self.player))
|
||||||
else:
|
|
||||||
self.__connect_one_way_regions(item_source, item_target, region_source, region_target, rule)
|
|
||||||
|
|
||||||
def __connect_arnassi_path_transturtle(self, item_source: str, item_target: str, region_source: Region,
|
|
||||||
region_target: Region) -> None:
|
|
||||||
"""Connect the Arnassi Ruins transturtle to another one"""
|
|
||||||
self.__connect_one_way_regions(item_source, item_target, region_source, region_target,
|
|
||||||
lambda state: state.has(item_target, self.player) and
|
|
||||||
_has_fish_form(state, self.player))
|
|
||||||
|
|
||||||
def _connect_transturtle_to_other(self, item: str, region: Region) -> None:
|
def _connect_transturtle_to_other(self, item: str, region: Region) -> None:
|
||||||
"""Connect a single transturtle to all others"""
|
"""Connect a single transturtle to all others"""
|
||||||
|
@ -827,24 +865,10 @@ class AquariaRegions:
|
||||||
self.__connect_transturtle(item, "Transturtle Open Water top right", region, self.openwater_tr_turtle)
|
self.__connect_transturtle(item, "Transturtle Open Water top right", region, self.openwater_tr_turtle)
|
||||||
self.__connect_transturtle(item, "Transturtle Forest bottom left", region, self.forest_bl)
|
self.__connect_transturtle(item, "Transturtle Forest bottom left", region, self.forest_bl)
|
||||||
self.__connect_transturtle(item, "Transturtle Home Water", region, self.home_water_transturtle)
|
self.__connect_transturtle(item, "Transturtle Home Water", region, self.home_water_transturtle)
|
||||||
self.__connect_transturtle(item, "Transturtle Abyss right", region, self.abyss_r)
|
self.__connect_transturtle(item, "Transturtle Abyss right", region, self.abyss_r_transturtle)
|
||||||
self.__connect_transturtle(item, "Transturtle Final Boss", region, self.final_boss_tube)
|
self.__connect_transturtle(item, "Transturtle Final Boss", region, self.final_boss_tube)
|
||||||
self.__connect_transturtle(item, "Transturtle Simon Says", region, self.simon)
|
self.__connect_transturtle(item, "Transturtle Simon Says", region, self.simon)
|
||||||
self.__connect_transturtle(item, "Transturtle Arnassi Ruins", region, self.arnassi_path,
|
self.__connect_transturtle(item, "Transturtle Arnassi Ruins", region, self.arnassi_cave_transturtle)
|
||||||
lambda state: state.has("Transturtle Arnassi Ruins", self.player) and
|
|
||||||
_has_fish_form(state, self.player))
|
|
||||||
|
|
||||||
def _connect_arnassi_path_transturtle_to_other(self, item: str, region: Region) -> None:
|
|
||||||
"""Connect the Arnassi Ruins transturtle to all others"""
|
|
||||||
self.__connect_arnassi_path_transturtle(item, "Transturtle Veil top left", region, self.veil_tl)
|
|
||||||
self.__connect_arnassi_path_transturtle(item, "Transturtle Veil top right", region, self.veil_tr_l)
|
|
||||||
self.__connect_arnassi_path_transturtle(item, "Transturtle Open Water top right", region,
|
|
||||||
self.openwater_tr_turtle)
|
|
||||||
self.__connect_arnassi_path_transturtle(item, "Transturtle Forest bottom left", region, self.forest_bl)
|
|
||||||
self.__connect_arnassi_path_transturtle(item, "Transturtle Home Water", region, self.home_water_transturtle)
|
|
||||||
self.__connect_arnassi_path_transturtle(item, "Transturtle Abyss right", region, self.abyss_r)
|
|
||||||
self.__connect_arnassi_path_transturtle(item, "Transturtle Final Boss", region, self.final_boss_tube)
|
|
||||||
self.__connect_arnassi_path_transturtle(item, "Transturtle Simon Says", region, self.simon)
|
|
||||||
|
|
||||||
def __connect_transturtles(self) -> None:
|
def __connect_transturtles(self) -> None:
|
||||||
"""Connect every transturtle with others"""
|
"""Connect every transturtle with others"""
|
||||||
|
@ -853,10 +877,10 @@ class AquariaRegions:
|
||||||
self._connect_transturtle_to_other("Transturtle Open Water top right", self.openwater_tr_turtle)
|
self._connect_transturtle_to_other("Transturtle Open Water top right", self.openwater_tr_turtle)
|
||||||
self._connect_transturtle_to_other("Transturtle Forest bottom left", self.forest_bl)
|
self._connect_transturtle_to_other("Transturtle Forest bottom left", self.forest_bl)
|
||||||
self._connect_transturtle_to_other("Transturtle Home Water", self.home_water_transturtle)
|
self._connect_transturtle_to_other("Transturtle Home Water", self.home_water_transturtle)
|
||||||
self._connect_transturtle_to_other("Transturtle Abyss right", self.abyss_r)
|
self._connect_transturtle_to_other("Transturtle Abyss right", self.abyss_r_transturtle)
|
||||||
self._connect_transturtle_to_other("Transturtle Final Boss", self.final_boss_tube)
|
self._connect_transturtle_to_other("Transturtle Final Boss", self.final_boss_tube)
|
||||||
self._connect_transturtle_to_other("Transturtle Simon Says", self.simon)
|
self._connect_transturtle_to_other("Transturtle Simon Says", self.simon)
|
||||||
self._connect_arnassi_path_transturtle_to_other("Transturtle Arnassi Ruins", self.arnassi_path)
|
self._connect_transturtle_to_other("Transturtle Arnassi Ruins", self.arnassi_cave_transturtle)
|
||||||
|
|
||||||
def connect_regions(self) -> None:
|
def connect_regions(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -893,7 +917,7 @@ class AquariaRegions:
|
||||||
self.__add_event_location(self.energy_temple_boss,
|
self.__add_event_location(self.energy_temple_boss,
|
||||||
"Beating Fallen God",
|
"Beating Fallen God",
|
||||||
"Fallen God beated")
|
"Fallen God beated")
|
||||||
self.__add_event_location(self.cathedral_boss_r,
|
self.__add_event_location(self.cathedral_boss_l,
|
||||||
"Beating Mithalan God",
|
"Beating Mithalan God",
|
||||||
"Mithalan God beated")
|
"Mithalan God beated")
|
||||||
self.__add_event_location(self.forest_boss,
|
self.__add_event_location(self.forest_boss,
|
||||||
|
@ -970,7 +994,8 @@ class AquariaRegions:
|
||||||
"""Since Urns need to be broken, add a damaging item to rules"""
|
"""Since Urns need to be broken, add a damaging item to rules"""
|
||||||
add_rule(self.multiworld.get_location("Open Water top right area, first urn in the Mithalas exit", self.player),
|
add_rule(self.multiworld.get_location("Open Water top right area, first urn in the Mithalas exit", self.player),
|
||||||
lambda state: _has_damaging_item(state, self.player))
|
lambda state: _has_damaging_item(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Open Water top right area, second urn in the Mithalas exit", self.player),
|
add_rule(
|
||||||
|
self.multiworld.get_location("Open Water top right area, second urn in the Mithalas exit", self.player),
|
||||||
lambda state: _has_damaging_item(state, self.player))
|
lambda state: _has_damaging_item(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Open Water top right area, third urn in the Mithalas exit", self.player),
|
add_rule(self.multiworld.get_location("Open Water top right area, third urn in the Mithalas exit", self.player),
|
||||||
lambda state: _has_damaging_item(state, self.player))
|
lambda state: _has_damaging_item(state, self.player))
|
||||||
|
@ -1019,13 +1044,9 @@ class AquariaRegions:
|
||||||
Modify rules for location that need soup
|
Modify rules for location that need soup
|
||||||
"""
|
"""
|
||||||
add_rule(self.multiworld.get_location("Turtle cave, Urchin Costume", self.player),
|
add_rule(self.multiworld.get_location("Turtle cave, Urchin Costume", self.player),
|
||||||
lambda state: _has_hot_soup(state, self.player) and _has_beast_form(state, self.player))
|
lambda state: _has_hot_soup(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Sun Worm path, first cliff bulb", self.player),
|
|
||||||
lambda state: _has_hot_soup(state, self.player) and _has_beast_form(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_location("Sun Worm path, second cliff bulb", self.player),
|
|
||||||
lambda state: _has_hot_soup(state, self.player) and _has_beast_form(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_location("The Veil top right area, bulb at the top of the waterfall", self.player),
|
add_rule(self.multiworld.get_location("The Veil top right area, bulb at the top of the waterfall", self.player),
|
||||||
lambda state: _has_hot_soup(state, self.player) and _has_beast_form(state, self.player))
|
lambda state: _has_beast_and_soup_form(state, self.player))
|
||||||
|
|
||||||
def __adjusting_under_rock_location(self) -> None:
|
def __adjusting_under_rock_location(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -1063,22 +1084,6 @@ class AquariaRegions:
|
||||||
lambda state: _has_light(state, self.player))
|
lambda state: _has_light(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Kelp Forest bottom right area, Odd Container", self.player),
|
add_rule(self.multiworld.get_location("Kelp Forest bottom right area, Odd Container", self.player),
|
||||||
lambda state: _has_light(state, self.player))
|
lambda state: _has_light(state, self.player))
|
||||||
add_rule(self.multiworld.get_entrance("Transturtle Veil top left to Transturtle Abyss right", self.player),
|
|
||||||
lambda state: _has_light(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_entrance("Transturtle Open Water top right to Transturtle Abyss right", self.player),
|
|
||||||
lambda state: _has_light(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_entrance("Transturtle Veil top right to Transturtle Abyss right", self.player),
|
|
||||||
lambda state: _has_light(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_entrance("Transturtle Forest bottom left to Transturtle Abyss right", self.player),
|
|
||||||
lambda state: _has_light(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_entrance("Transturtle Home Water to Transturtle Abyss right", self.player),
|
|
||||||
lambda state: _has_light(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_entrance("Transturtle Final Boss to Transturtle Abyss right", self.player),
|
|
||||||
lambda state: _has_light(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_entrance("Transturtle Simon Says to Transturtle Abyss right", self.player),
|
|
||||||
lambda state: _has_light(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_entrance("Transturtle Arnassi Ruins to Transturtle Abyss right", self.player),
|
|
||||||
lambda state: _has_light(state, self.player))
|
|
||||||
add_rule(self.multiworld.get_entrance("Body center area to Abyss left bottom area", self.player),
|
add_rule(self.multiworld.get_entrance("Body center area to Abyss left bottom area", self.player),
|
||||||
lambda state: _has_light(state, self.player))
|
lambda state: _has_light(state, self.player))
|
||||||
add_rule(self.multiworld.get_entrance("Veil left of sun temple to Octo cave top path", self.player),
|
add_rule(self.multiworld.get_entrance("Veil left of sun temple to Octo cave top path", self.player),
|
||||||
|
@ -1097,11 +1102,13 @@ class AquariaRegions:
|
||||||
def __adjusting_manual_rules(self) -> None:
|
def __adjusting_manual_rules(self) -> None:
|
||||||
add_rule(self.multiworld.get_location("Mithalas Cathedral, Mithalan Dress", self.player),
|
add_rule(self.multiworld.get_location("Mithalas Cathedral, Mithalan Dress", self.player),
|
||||||
lambda state: _has_beast_form(state, self.player))
|
lambda state: _has_beast_form(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Open Water bottom left area, bulb inside the lowest fish pass", self.player),
|
add_rule(
|
||||||
|
self.multiworld.get_location("Open Water bottom left area, bulb inside the lowest fish pass", self.player),
|
||||||
lambda state: _has_fish_form(state, self.player))
|
lambda state: _has_fish_form(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Kelp Forest bottom left area, Walker Baby", self.player),
|
add_rule(self.multiworld.get_location("Kelp Forest bottom left area, Walker Baby", self.player),
|
||||||
lambda state: _has_spirit_form(state, self.player))
|
lambda state: _has_spirit_form(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("The Veil top left area, bulb hidden behind the blocking rock", self.player),
|
add_rule(
|
||||||
|
self.multiworld.get_location("The Veil top left area, bulb hidden behind the blocking rock", self.player),
|
||||||
lambda state: _has_bind_song(state, self.player))
|
lambda state: _has_bind_song(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Turtle cave, Turtle Egg", self.player),
|
add_rule(self.multiworld.get_location("Turtle cave, Turtle Egg", self.player),
|
||||||
lambda state: _has_bind_song(state, self.player))
|
lambda state: _has_bind_song(state, self.player))
|
||||||
|
@ -1114,103 +1121,119 @@ class AquariaRegions:
|
||||||
add_rule(self.multiworld.get_location("Verse Cave right area, Big Seed", self.player),
|
add_rule(self.multiworld.get_location("Verse Cave right area, Big Seed", self.player),
|
||||||
lambda state: _has_bind_song(state, self.player))
|
lambda state: _has_bind_song(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Arnassi Ruins, Song Plant Spore", self.player),
|
add_rule(self.multiworld.get_location("Arnassi Ruins, Song Plant Spore", self.player),
|
||||||
lambda state: _has_beast_form(state, self.player))
|
lambda state: _has_beast_form_or_arnassi_armor(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Energy Temple first area, bulb in the bottom room blocked by a rock",
|
add_rule(self.multiworld.get_location("Energy Temple first area, bulb in the bottom room blocked by a rock",
|
||||||
self.player), lambda state: _has_energy_form(state, self.player))
|
self.player), lambda state: _has_bind_song(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Home Water, bulb in the bottom left room", self.player),
|
add_rule(self.multiworld.get_location("Home Water, bulb in the bottom left room", self.player),
|
||||||
lambda state: _has_bind_song(state, self.player))
|
lambda state: _has_bind_song(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Home Water, bulb in the path below Nautilus Prime", self.player),
|
add_rule(self.multiworld.get_location("Home Water, bulb in the path below Nautilus Prime", self.player),
|
||||||
lambda state: _has_bind_song(state, self.player))
|
lambda state: _has_bind_song(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Naija's Home, bulb after the energy door", self.player),
|
add_rule(self.multiworld.get_location("Naija's Home, bulb after the energy door", self.player),
|
||||||
lambda state: _has_energy_form(state, self.player))
|
lambda state: _has_energy_attack_item(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Abyss right area, bulb behind the rock in the whale room", self.player),
|
add_rule(self.multiworld.get_location("Abyss right area, bulb behind the rock in the whale room", self.player),
|
||||||
lambda state: _has_spirit_form(state, self.player) and
|
lambda state: _has_spirit_form(state, self.player) and
|
||||||
_has_sun_form(state, self.player))
|
_has_sun_form(state, self.player))
|
||||||
add_rule(self.multiworld.get_location("Arnassi Ruins, Arnassi Armor", self.player),
|
add_rule(self.multiworld.get_location("Arnassi Ruins, Arnassi Armor", self.player),
|
||||||
lambda state: _has_fish_form(state, self.player) and
|
lambda state: _has_fish_form(state, self.player) or
|
||||||
_has_spirit_form(state, self.player))
|
_has_beast_and_soup_form(state, self.player))
|
||||||
|
add_rule(self.multiworld.get_location("Mithalas City, urn inside a home fish pass", self.player),
|
||||||
|
lambda state: _has_damaging_item(state, self.player))
|
||||||
|
add_rule(self.multiworld.get_location("Mithalas City, urn in the Castle flower tube entrance", self.player),
|
||||||
|
lambda state: _has_damaging_item(state, self.player))
|
||||||
|
add_rule(self.multiworld.get_location(
|
||||||
|
"The Veil top right area, bulb in the middle of the wall jump cliff", self.player
|
||||||
|
), lambda state: _has_beast_form_or_arnassi_armor(state, self.player))
|
||||||
|
add_rule(self.multiworld.get_location("Kelp Forest top left area, Jelly Egg", self.player),
|
||||||
|
lambda state: _has_beast_form(state, self.player))
|
||||||
|
add_rule(self.multiworld.get_location("Sun Worm path, first cliff bulb", self.player),
|
||||||
|
lambda state: state.has("Sun God beated", self.player))
|
||||||
|
add_rule(self.multiworld.get_location("Sun Worm path, second cliff bulb", self.player),
|
||||||
|
lambda state: state.has("Sun God beated", self.player))
|
||||||
|
add_rule(self.multiworld.get_location("The Body center area, breaking Li's cage", self.player),
|
||||||
|
lambda state: _has_tongue_cleared(state, self.player))
|
||||||
|
|
||||||
def __no_progression_hard_or_hidden_location(self) -> None:
|
def __no_progression_hard_or_hidden_location(self) -> None:
|
||||||
self.multiworld.get_location("Energy Temple boss area, Fallen God Tooth",
|
self.multiworld.get_location("Energy Temple boss area, Fallen God Tooth",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Mithalas boss area, beating Mithalan God",
|
self.multiworld.get_location("Mithalas boss area, beating Mithalan God",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Kelp Forest boss area, beating Drunian God",
|
self.multiworld.get_location("Kelp Forest boss area, beating Drunian God",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Sun Temple boss area, beating Sun God",
|
self.multiworld.get_location("Sun Temple boss area, beating Sun God",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Sunken City, bulb on top of the boss area",
|
self.multiworld.get_location("Sunken City, bulb on top of the boss area",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Home Water, Nautilus Egg",
|
self.multiworld.get_location("Home Water, Nautilus Egg",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Energy Temple blaster room, Blaster Egg",
|
self.multiworld.get_location("Energy Temple blaster room, Blaster Egg",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Mithalas City Castle, beating the Priests",
|
self.multiworld.get_location("Mithalas City Castle, beating the Priests",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Mermog cave, Piranha Egg",
|
self.multiworld.get_location("Mermog cave, Piranha Egg",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Octopus Cave, Dumbo Egg",
|
self.multiworld.get_location("Octopus Cave, Dumbo Egg",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("King Jellyfish Cave, bulb in the right path from King Jelly",
|
self.multiworld.get_location("King Jellyfish Cave, bulb in the right path from King Jelly",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("King Jellyfish Cave, Jellyfish Costume",
|
self.multiworld.get_location("King Jellyfish Cave, Jellyfish Costume",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Final Boss area, bulb in the boss third form room",
|
self.multiworld.get_location("Final Boss area, bulb in the boss third form room",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Sun Worm path, first cliff bulb",
|
self.multiworld.get_location("Sun Worm path, first cliff bulb",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Sun Worm path, second cliff bulb",
|
self.multiworld.get_location("Sun Worm path, second cliff bulb",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("The Veil top right area, bulb at the top of the waterfall",
|
self.multiworld.get_location("The Veil top right area, bulb at the top of the waterfall",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Bubble Cave, bulb in the left cave wall",
|
self.multiworld.get_location("Bubble Cave, bulb in the left cave wall",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Bubble Cave, bulb in the right cave wall (behind the ice crystal)",
|
self.multiworld.get_location("Bubble Cave, bulb in the right cave wall (behind the ice crystal)",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Bubble Cave, Verse Egg",
|
self.multiworld.get_location("Bubble Cave, Verse Egg",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Kelp Forest bottom left area, bulb close to the spirit crystals",
|
self.multiworld.get_location("Kelp Forest bottom left area, bulb close to the spirit crystals",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Kelp Forest bottom left area, Walker Baby",
|
self.multiworld.get_location("Kelp Forest bottom left area, Walker Baby",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Sun Temple, Sun Key",
|
self.multiworld.get_location("Sun Temple, Sun Key",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("The Body bottom area, Mutant Costume",
|
self.multiworld.get_location("The Body bottom area, Mutant Costume",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Sun Temple, bulb in the hidden room of the right part",
|
self.multiworld.get_location("Sun Temple, bulb in the hidden room of the right part",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
self.multiworld.get_location("Arnassi Ruins, Arnassi Armor",
|
self.multiworld.get_location("Arnassi Ruins, Arnassi Armor",
|
||||||
self.player).item_rule =\
|
self.player).item_rule = \
|
||||||
lambda item: item.classification != ItemClassification.progression
|
lambda item: item.classification != ItemClassification.progression
|
||||||
|
|
||||||
def adjusting_rules(self, options: AquariaOptions) -> None:
|
def adjusting_rules(self, options: AquariaOptions) -> None:
|
||||||
"""
|
"""
|
||||||
Modify rules for single location or optional rules
|
Modify rules for single location or optional rules
|
||||||
"""
|
"""
|
||||||
|
self.multiworld.get_entrance("Before Final Boss to Final Boss", self.player)
|
||||||
self.__adjusting_urns_rules()
|
self.__adjusting_urns_rules()
|
||||||
self.__adjusting_crates_rules()
|
self.__adjusting_crates_rules()
|
||||||
self.__adjusting_soup_rules()
|
self.__adjusting_soup_rules()
|
||||||
|
@ -1234,7 +1257,7 @@ class AquariaRegions:
|
||||||
lambda state: _has_bind_song(state, self.player))
|
lambda state: _has_bind_song(state, self.player))
|
||||||
if options.unconfine_home_water.value in [0, 2]:
|
if options.unconfine_home_water.value in [0, 2]:
|
||||||
add_rule(self.multiworld.get_entrance("Home Water to Open Water top left area", self.player),
|
add_rule(self.multiworld.get_entrance("Home Water to Open Water top left area", self.player),
|
||||||
lambda state: _has_bind_song(state, self.player) and _has_energy_form(state, self.player))
|
lambda state: _has_bind_song(state, self.player) and _has_energy_attack_item(state, self.player))
|
||||||
if options.early_energy_form:
|
if options.early_energy_form:
|
||||||
self.multiworld.early_items[self.player]["Energy form"] = 1
|
self.multiworld.early_items[self.player]["Energy form"] = 1
|
||||||
|
|
||||||
|
@ -1274,6 +1297,7 @@ class AquariaRegions:
|
||||||
self.multiworld.regions.append(self.arnassi)
|
self.multiworld.regions.append(self.arnassi)
|
||||||
self.multiworld.regions.append(self.arnassi_path)
|
self.multiworld.regions.append(self.arnassi_path)
|
||||||
self.multiworld.regions.append(self.arnassi_crab_boss)
|
self.multiworld.regions.append(self.arnassi_crab_boss)
|
||||||
|
self.multiworld.regions.append(self.arnassi_cave_transturtle)
|
||||||
self.multiworld.regions.append(self.simon)
|
self.multiworld.regions.append(self.simon)
|
||||||
|
|
||||||
def __add_mithalas_regions_to_world(self) -> None:
|
def __add_mithalas_regions_to_world(self) -> None:
|
||||||
|
@ -1300,6 +1324,7 @@ class AquariaRegions:
|
||||||
self.multiworld.regions.append(self.forest_tr)
|
self.multiworld.regions.append(self.forest_tr)
|
||||||
self.multiworld.regions.append(self.forest_tr_fp)
|
self.multiworld.regions.append(self.forest_tr_fp)
|
||||||
self.multiworld.regions.append(self.forest_bl)
|
self.multiworld.regions.append(self.forest_bl)
|
||||||
|
self.multiworld.regions.append(self.forest_bl_sc)
|
||||||
self.multiworld.regions.append(self.forest_br)
|
self.multiworld.regions.append(self.forest_br)
|
||||||
self.multiworld.regions.append(self.forest_boss)
|
self.multiworld.regions.append(self.forest_boss)
|
||||||
self.multiworld.regions.append(self.forest_boss_entrance)
|
self.multiworld.regions.append(self.forest_boss_entrance)
|
||||||
|
@ -1337,6 +1362,7 @@ class AquariaRegions:
|
||||||
self.multiworld.regions.append(self.abyss_l)
|
self.multiworld.regions.append(self.abyss_l)
|
||||||
self.multiworld.regions.append(self.abyss_lb)
|
self.multiworld.regions.append(self.abyss_lb)
|
||||||
self.multiworld.regions.append(self.abyss_r)
|
self.multiworld.regions.append(self.abyss_r)
|
||||||
|
self.multiworld.regions.append(self.abyss_r_transturtle)
|
||||||
self.multiworld.regions.append(self.ice_cave)
|
self.multiworld.regions.append(self.ice_cave)
|
||||||
self.multiworld.regions.append(self.bubble_cave)
|
self.multiworld.regions.append(self.bubble_cave)
|
||||||
self.multiworld.regions.append(self.bubble_cave_boss)
|
self.multiworld.regions.append(self.bubble_cave_boss)
|
||||||
|
|
|
@ -141,7 +141,7 @@ after_home_water_locations = [
|
||||||
"Sun Temple, bulb at the top of the high dark room",
|
"Sun Temple, bulb at the top of the high dark room",
|
||||||
"Sun Temple, Golden Gear",
|
"Sun Temple, Golden Gear",
|
||||||
"Sun Temple, first bulb of the temple",
|
"Sun Temple, first bulb of the temple",
|
||||||
"Sun Temple, bulb on the left part",
|
"Sun Temple, bulb on the right part",
|
||||||
"Sun Temple, bulb in the hidden room of the right part",
|
"Sun Temple, bulb in the hidden room of the right part",
|
||||||
"Sun Temple, Sun Key",
|
"Sun Temple, Sun Key",
|
||||||
"Sun Worm path, first path bulb",
|
"Sun Worm path, first path bulb",
|
||||||
|
|
|
@ -13,36 +13,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 = [
|
||||||
"Mithalas City Castle, beating the Priests",
|
|
||||||
"Arnassi Ruins, Crab Armor",
|
|
||||||
"Arnassi Ruins, Song Plant Spore",
|
|
||||||
"Mithalas City, first bulb at the end of the top path",
|
|
||||||
"Mithalas City, second bulb at the end of the top path",
|
|
||||||
"Mithalas City, bulb in the top path",
|
|
||||||
"Mithalas City, Mithalas Pot",
|
|
||||||
"Mithalas City, urn in the Castle flower tube entrance",
|
|
||||||
"Mermog cave, Piranha Egg",
|
"Mermog cave, Piranha Egg",
|
||||||
|
"Kelp Forest top left area, Jelly Egg",
|
||||||
"Mithalas Cathedral, Mithalan Dress",
|
"Mithalas Cathedral, Mithalan Dress",
|
||||||
"Turtle cave, bulb in Bubble Cliff",
|
|
||||||
"Turtle cave, Urchin Costume",
|
|
||||||
"Sun Worm path, first cliff bulb",
|
|
||||||
"Sun Worm path, second cliff bulb",
|
|
||||||
"The Veil top right area, bulb at the top of the waterfall",
|
"The Veil top right area, bulb at the top of the waterfall",
|
||||||
"Bubble Cave, bulb in the left cave wall",
|
|
||||||
"Bubble Cave, bulb in the right cave wall (behind the ice crystal)",
|
|
||||||
"Bubble Cave, Verse Egg",
|
|
||||||
"Sunken City, bulb on top of the boss area",
|
"Sunken City, bulb on top of the boss area",
|
||||||
"Octopus Cave, Dumbo Egg",
|
"Octopus Cave, Dumbo Egg",
|
||||||
"Beating the Golem",
|
"Beating the Golem",
|
||||||
"Beating Mergog",
|
"Beating Mergog",
|
||||||
"Beating Crabbius Maximus",
|
|
||||||
"Beating Octopus Prime",
|
"Beating Octopus Prime",
|
||||||
"Beating Mantis Shrimp Prime",
|
"Sunken City cleared",
|
||||||
"King Jellyfish Cave, Jellyfish Costume",
|
|
||||||
"King Jellyfish Cave, bulb in the right path from King Jelly",
|
|
||||||
"Beating King Jellyfish God Prime",
|
|
||||||
"Beating Mithalan priests",
|
|
||||||
"Sunken City cleared"
|
|
||||||
]
|
]
|
||||||
items = [["Beast form"]]
|
items = [["Beast form"]]
|
||||||
self.assertAccessDependency(locations, items)
|
self.assertAccessDependency(locations, items)
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
"""
|
||||||
|
Author: Louis M
|
||||||
|
Date: Thu, 18 Apr 2024 18:45:56 +0000
|
||||||
|
Description: Unit test used to test accessibility of locations with and without the beast form or arnassi armor
|
||||||
|
"""
|
||||||
|
|
||||||
|
from . import AquariaTestBase
|
||||||
|
|
||||||
|
|
||||||
|
class BeastForArnassiArmormAccessTest(AquariaTestBase):
|
||||||
|
"""Unit test used to test accessibility of locations with and without the beast form or arnassi armor"""
|
||||||
|
|
||||||
|
def test_beast_form_arnassi_armor_location(self) -> None:
|
||||||
|
"""Test locations that require beast form or arnassi armor"""
|
||||||
|
locations = [
|
||||||
|
"Mithalas City Castle, beating the Priests",
|
||||||
|
"Arnassi Ruins, Crab Armor",
|
||||||
|
"Arnassi Ruins, Song Plant Spore",
|
||||||
|
"Mithalas City, first bulb at the end of the top path",
|
||||||
|
"Mithalas City, second bulb at the end of the top path",
|
||||||
|
"Mithalas City, bulb in the top path",
|
||||||
|
"Mithalas City, Mithalas Pot",
|
||||||
|
"Mithalas City, urn in the Castle flower tube entrance",
|
||||||
|
"Mermog cave, Piranha Egg",
|
||||||
|
"Mithalas Cathedral, Mithalan Dress",
|
||||||
|
"Kelp Forest top left area, Jelly Egg",
|
||||||
|
"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",
|
||||||
|
"Sunken City, bulb on top of the boss area",
|
||||||
|
"Octopus Cave, Dumbo Egg",
|
||||||
|
"Beating the Golem",
|
||||||
|
"Beating Mergog",
|
||||||
|
"Beating Crabbius Maximus",
|
||||||
|
"Beating Octopus Prime",
|
||||||
|
"Beating Mithalan priests",
|
||||||
|
"Sunken City cleared"
|
||||||
|
]
|
||||||
|
items = [["Beast form", "Arnassi Armor"]]
|
||||||
|
self.assertAccessDependency(locations, items)
|
|
@ -17,55 +17,16 @@ class EnergyFormAccessTest(AquariaTestBase):
|
||||||
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 = [
|
||||||
"Home Water, Nautilus Egg",
|
|
||||||
"Naija's Home, bulb after the energy door",
|
|
||||||
"Energy Temple first area, bulb in the bottom room blocked by a rock",
|
|
||||||
"Energy Temple second area, bulb under the rock",
|
"Energy Temple second area, bulb under the rock",
|
||||||
"Energy Temple bottom entrance, Krotite Armor",
|
|
||||||
"Energy Temple third area, bulb in the bottom path",
|
"Energy Temple third area, bulb in the bottom path",
|
||||||
"Energy Temple boss area, Fallen God Tooth",
|
"The Body left area, first bulb in the top face room",
|
||||||
"Energy Temple blaster room, Blaster Egg",
|
"The Body left area, second bulb in the top face room",
|
||||||
"Mithalas City Castle, beating the Priests",
|
"The Body left area, bulb below the water stream",
|
||||||
"Mithalas Cathedral, first urn in the top right room",
|
"The Body left area, bulb in the top path to the top face room",
|
||||||
"Mithalas Cathedral, second urn in the top right room",
|
"The Body left area, bulb in the bottom face room",
|
||||||
"Mithalas Cathedral, third urn in the top right room",
|
"The Body right area, bulb in the top path to the bottom face room",
|
||||||
"Mithalas Cathedral, urn in the flesh room with fleas",
|
"The Body right area, bulb in the bottom face room",
|
||||||
"Mithalas Cathedral, first urn in the bottom right path",
|
|
||||||
"Mithalas Cathedral, second urn in the bottom right path",
|
|
||||||
"Mithalas Cathedral, urn behind the flesh vein",
|
|
||||||
"Mithalas Cathedral, urn in the top left eyes boss room",
|
|
||||||
"Mithalas Cathedral, first urn in the path behind the flesh vein",
|
|
||||||
"Mithalas Cathedral, second urn in the path behind the flesh vein",
|
|
||||||
"Mithalas Cathedral, third urn in the path behind the flesh vein",
|
|
||||||
"Mithalas Cathedral, fourth urn in the top right room",
|
|
||||||
"Mithalas Cathedral, Mithalan Dress",
|
|
||||||
"Mithalas Cathedral, urn below the left entrance",
|
|
||||||
"Mithalas boss area, beating Mithalan God",
|
|
||||||
"Kelp Forest top left area, bulb close to the Verse Egg",
|
|
||||||
"Kelp Forest top left area, Verse Egg",
|
|
||||||
"Kelp Forest boss area, beating Drunian God",
|
|
||||||
"Mermog cave, Piranha Egg",
|
|
||||||
"Octopus Cave, Dumbo Egg",
|
|
||||||
"Sun Temple boss area, beating Sun God",
|
|
||||||
"Arnassi Ruins, Crab Armor",
|
|
||||||
"King Jellyfish Cave, bulb in the right path from King Jelly",
|
|
||||||
"King Jellyfish Cave, Jellyfish Costume",
|
|
||||||
"Sunken City, bulb on top of the boss area",
|
|
||||||
"Final Boss area, bulb in the boss third form room",
|
"Final Boss area, bulb in the boss third form room",
|
||||||
"Beating Fallen God",
|
|
||||||
"Beating Mithalan God",
|
|
||||||
"Beating Drunian God",
|
|
||||||
"Beating Sun God",
|
|
||||||
"Beating the Golem",
|
|
||||||
"Beating Nautilus Prime",
|
|
||||||
"Beating Blaster Peg Prime",
|
|
||||||
"Beating Mergog",
|
|
||||||
"Beating Mithalan priests",
|
|
||||||
"Beating Octopus Prime",
|
|
||||||
"Beating Crabbius Maximus",
|
|
||||||
"Beating King Jellyfish God Prime",
|
|
||||||
"First secret",
|
|
||||||
"Sunken City cleared",
|
|
||||||
"Objective complete",
|
"Objective complete",
|
||||||
]
|
]
|
||||||
items = [["Energy form"]]
|
items = [["Energy form"]]
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
"""
|
||||||
|
Author: Louis M
|
||||||
|
Date: Thu, 18 Apr 2024 18:45:56 +0000
|
||||||
|
Description: Unit test used to test accessibility of locations with and without the energy form and dual form (and Li)
|
||||||
|
"""
|
||||||
|
|
||||||
|
from . import AquariaTestBase
|
||||||
|
|
||||||
|
|
||||||
|
class EnergyFormDualFormAccessTest(AquariaTestBase):
|
||||||
|
"""Unit test used to test accessibility of locations with and without the energy form and dual form (and Li)"""
|
||||||
|
options = {
|
||||||
|
"early_energy_form": False,
|
||||||
|
}
|
||||||
|
|
||||||
|
def test_energy_form_or_dual_form_location(self) -> None:
|
||||||
|
"""Test locations that require Energy form or dual form"""
|
||||||
|
locations = [
|
||||||
|
"Naija's Home, bulb after the energy door",
|
||||||
|
"Home Water, Nautilus Egg",
|
||||||
|
"Energy Temple second area, bulb under the rock",
|
||||||
|
"Energy Temple bottom entrance, Krotite Armor",
|
||||||
|
"Energy Temple third area, bulb in the bottom path",
|
||||||
|
"Energy Temple blaster room, Blaster Egg",
|
||||||
|
"Energy Temple boss area, Fallen God Tooth",
|
||||||
|
"Mithalas City Castle, beating the Priests",
|
||||||
|
"Mithalas boss area, beating Mithalan God",
|
||||||
|
"Mithalas Cathedral, first urn in the top right room",
|
||||||
|
"Mithalas Cathedral, second urn in the top right room",
|
||||||
|
"Mithalas Cathedral, third urn in the top right room",
|
||||||
|
"Mithalas Cathedral, urn in the flesh room with fleas",
|
||||||
|
"Mithalas Cathedral, first urn in the bottom right path",
|
||||||
|
"Mithalas Cathedral, second urn in the bottom right path",
|
||||||
|
"Mithalas Cathedral, urn behind the flesh vein",
|
||||||
|
"Mithalas Cathedral, urn in the top left eyes boss room",
|
||||||
|
"Mithalas Cathedral, first urn in the path behind the flesh vein",
|
||||||
|
"Mithalas Cathedral, second urn in the path behind the flesh vein",
|
||||||
|
"Mithalas Cathedral, third urn in the path behind the flesh vein",
|
||||||
|
"Mithalas Cathedral, fourth urn in the top right room",
|
||||||
|
"Mithalas Cathedral, Mithalan Dress",
|
||||||
|
"Mithalas Cathedral, urn below the left entrance",
|
||||||
|
"Kelp Forest top left area, bulb close to the Verse Egg",
|
||||||
|
"Kelp Forest top left area, Verse Egg",
|
||||||
|
"Kelp Forest boss area, beating Drunian God",
|
||||||
|
"Mermog cave, Piranha Egg",
|
||||||
|
"Octopus Cave, Dumbo Egg",
|
||||||
|
"Sun Temple boss area, beating Sun God",
|
||||||
|
"King Jellyfish Cave, bulb in the right path from King Jelly",
|
||||||
|
"King Jellyfish Cave, Jellyfish Costume",
|
||||||
|
"Sunken City right area, crate close to the save crystal",
|
||||||
|
"Sunken City right area, crate in the left bottom room",
|
||||||
|
"Sunken City left area, crate in the little pipe room",
|
||||||
|
"Sunken City left area, crate close to the save crystal",
|
||||||
|
"Sunken City left area, crate before the bedroom",
|
||||||
|
"Sunken City left area, Girl Costume",
|
||||||
|
"Sunken City, bulb on top of the boss area",
|
||||||
|
"The Body center area, breaking Li's cage",
|
||||||
|
"The Body center area, bulb on the main path blocking tube",
|
||||||
|
"The Body left area, first bulb in the top face room",
|
||||||
|
"The Body left area, second bulb in the top face room",
|
||||||
|
"The Body left area, bulb below the water stream",
|
||||||
|
"The Body left area, bulb in the top path to the top face room",
|
||||||
|
"The Body left area, bulb in the bottom face room",
|
||||||
|
"The Body right area, bulb in the top face room",
|
||||||
|
"The Body right area, bulb in the top path to the bottom face room",
|
||||||
|
"The Body right area, bulb in the bottom face room",
|
||||||
|
"The Body bottom area, bulb in the Jelly Zap room",
|
||||||
|
"The Body bottom area, bulb in the nautilus room",
|
||||||
|
"The Body bottom area, Mutant Costume",
|
||||||
|
"Final Boss area, bulb in the boss third form room",
|
||||||
|
"Final Boss area, first bulb in the turtle room",
|
||||||
|
"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"]]
|
||||||
|
self.assertAccessDependency(locations, items)
|
|
@ -17,6 +17,7 @@ class FishFormAccessTest(AquariaTestBase):
|
||||||
"""Test locations that require fish form"""
|
"""Test locations that require fish form"""
|
||||||
locations = [
|
locations = [
|
||||||
"The Veil top left area, bulb inside the fish pass",
|
"The Veil top left area, bulb inside the fish pass",
|
||||||
|
"Energy Temple first area, Energy Idol",
|
||||||
"Mithalas City, Doll",
|
"Mithalas City, Doll",
|
||||||
"Mithalas City, urn inside a home fish pass",
|
"Mithalas City, urn inside a home fish pass",
|
||||||
"Kelp Forest top right area, bulb in the top fish pass",
|
"Kelp Forest top right area, bulb in the top fish pass",
|
||||||
|
@ -30,8 +31,7 @@ class FishFormAccessTest(AquariaTestBase):
|
||||||
"Octopus Cave, Dumbo Egg",
|
"Octopus Cave, Dumbo Egg",
|
||||||
"Octopus Cave, bulb in the path below the Octopus Cave path",
|
"Octopus Cave, bulb in the path below the Octopus Cave path",
|
||||||
"Beating Octopus Prime",
|
"Beating Octopus Prime",
|
||||||
"Abyss left area, bulb in the bottom fish pass",
|
"Abyss left area, bulb in the bottom fish pass"
|
||||||
"Arnassi Ruins, Arnassi Armor"
|
|
||||||
]
|
]
|
||||||
items = [["Fish form"]]
|
items = [["Fish form"]]
|
||||||
self.assertAccessDependency(locations, items)
|
self.assertAccessDependency(locations, items)
|
||||||
|
|
|
@ -39,7 +39,6 @@ class LightAccessTest(AquariaTestBase):
|
||||||
"Abyss right area, bulb in the middle path",
|
"Abyss right area, bulb in the middle path",
|
||||||
"Abyss right area, bulb behind the rock in the middle path",
|
"Abyss right area, bulb behind the rock in the middle path",
|
||||||
"Abyss right area, bulb in the left green room",
|
"Abyss right area, bulb in the left green room",
|
||||||
"Abyss right area, Transturtle",
|
|
||||||
"Ice Cave, bulb in the room to the right",
|
"Ice Cave, bulb in the room to the right",
|
||||||
"Ice Cave, first bulb in the top exit room",
|
"Ice Cave, first bulb in the top exit room",
|
||||||
"Ice Cave, second bulb in the top exit room",
|
"Ice Cave, second bulb in the top exit room",
|
||||||
|
|
|
@ -30,7 +30,6 @@ class SpiritFormAccessTest(AquariaTestBase):
|
||||||
"Sunken City left area, Girl Costume",
|
"Sunken City left area, Girl Costume",
|
||||||
"Beating Mantis Shrimp Prime",
|
"Beating Mantis Shrimp Prime",
|
||||||
"First secret",
|
"First secret",
|
||||||
"Arnassi Ruins, Arnassi Armor",
|
|
||||||
]
|
]
|
||||||
items = [["Spirit form"]]
|
items = [["Spirit form"]]
|
||||||
self.assertAccessDependency(locations, items)
|
self.assertAccessDependency(locations, items)
|
||||||
|
|
Loading…
Reference in New Issue