| 
									
										
										
										
											2022-08-30 17:14:34 +02:00
										 |  |  | import functools | 
					
						
							| 
									
										
										
										
											2022-07-16 16:45:40 +02:00
										 |  |  | from typing import Dict, Set, List | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # EN Locale Creature Name to rough depth in meters found at | 
					
						
							|  |  |  | all_creatures: Dict[str, int] = { | 
					
						
							|  |  |  |     "Gasopod": 0, | 
					
						
							|  |  |  |     "Bladderfish": 0, | 
					
						
							|  |  |  |     "Ancient Floater": 0, | 
					
						
							|  |  |  |     "Skyray": 0, | 
					
						
							|  |  |  |     "Garryfish": 0, | 
					
						
							|  |  |  |     "Peeper": 0, | 
					
						
							|  |  |  |     "Shuttlebug": 0, | 
					
						
							|  |  |  |     "Rabbit Ray": 0, | 
					
						
							|  |  |  |     "Stalker": 0, | 
					
						
							|  |  |  |     "Floater": 0, | 
					
						
							|  |  |  |     "Holefish": 0, | 
					
						
							|  |  |  |     "Cave Crawler": 0, | 
					
						
							|  |  |  |     "Hoopfish": 0, | 
					
						
							|  |  |  |     "Crashfish": 0, | 
					
						
							|  |  |  |     "Hoverfish": 0, | 
					
						
							|  |  |  |     "Spadefish": 0, | 
					
						
							|  |  |  |     "Reefback Leviathan": 0, | 
					
						
							|  |  |  |     "Reaper Leviathan": 0, | 
					
						
							|  |  |  |     "Warper": 0, | 
					
						
							|  |  |  |     "Boomerang": 0, | 
					
						
							|  |  |  |     "Biter": 200, | 
					
						
							|  |  |  |     "Sand Shark": 200, | 
					
						
							|  |  |  |     "Bleeder": 200, | 
					
						
							|  |  |  |     "Crabsnake": 300, | 
					
						
							|  |  |  |     "Jellyray": 300, | 
					
						
							|  |  |  |     "Oculus": 300, | 
					
						
							|  |  |  |     "Mesmer": 300, | 
					
						
							|  |  |  |     "Eyeye": 300, | 
					
						
							|  |  |  |     "Reginald": 400, | 
					
						
							|  |  |  |     "Sea Treader Leviathan": 400, | 
					
						
							|  |  |  |     "Crabsquid": 400, | 
					
						
							|  |  |  |     "Ampeel": 400, | 
					
						
							|  |  |  |     "Boneshark": 400, | 
					
						
							|  |  |  |     "Rockgrub": 400, | 
					
						
							|  |  |  |     "Ghost Leviathan": 500, | 
					
						
							|  |  |  |     "Ghost Leviathan Juvenile": 500, | 
					
						
							|  |  |  |     "Spinefish": 600, | 
					
						
							|  |  |  |     "Blighter": 600, | 
					
						
							|  |  |  |     "Blood Crawler": 600, | 
					
						
							|  |  |  |     "Ghostray": 1000, | 
					
						
							|  |  |  |     "Amoeboid": 1000, | 
					
						
							|  |  |  |     "River Prowler": 1000, | 
					
						
							|  |  |  |     "Red Eyeye": 1300, | 
					
						
							|  |  |  |     "Magmarang": 1300, | 
					
						
							|  |  |  |     "Crimson Ray": 1300, | 
					
						
							|  |  |  |     "Lava Larva": 1300, | 
					
						
							|  |  |  |     "Lava Lizard": 1300, | 
					
						
							|  |  |  |     "Sea Dragon Leviathan": 1300, | 
					
						
							| 
									
										
										
										
											2022-08-22 23:35:41 +02:00
										 |  |  |     "Cuddlefish": 300, | 
					
						
							| 
									
										
										
										
											2022-07-16 16:45:40 +02:00
										 |  |  |     "Sea Emperor Juvenile": 1700, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | aggressive: Set[str] = { | 
					
						
							|  |  |  |     "Cave Crawler",  # is very easy without Stasis Rifle, but included for consistency | 
					
						
							|  |  |  |     "Crashfish", | 
					
						
							| 
									
										
										
										
											2022-08-30 17:14:34 +02:00
										 |  |  |     "Biter", | 
					
						
							| 
									
										
										
										
											2022-07-16 16:45:40 +02:00
										 |  |  |     "Bleeder", | 
					
						
							| 
									
										
										
										
											2022-08-30 17:14:34 +02:00
										 |  |  |     "Blighter", | 
					
						
							|  |  |  |     "Blood Crawler", | 
					
						
							| 
									
										
										
										
											2022-07-16 16:45:40 +02:00
										 |  |  |     "Mesmer", | 
					
						
							|  |  |  |     "Reaper Leviathan", | 
					
						
							|  |  |  |     "Crabsquid", | 
					
						
							|  |  |  |     "Warper", | 
					
						
							|  |  |  |     "Crabsnake", | 
					
						
							|  |  |  |     "Ampeel", | 
					
						
							| 
									
										
										
										
											2022-08-30 17:14:34 +02:00
										 |  |  |     "Stalker", | 
					
						
							|  |  |  |     "Sand Shark", | 
					
						
							| 
									
										
										
										
											2022-07-16 16:45:40 +02:00
										 |  |  |     "Boneshark", | 
					
						
							|  |  |  |     "Lava Lizard", | 
					
						
							|  |  |  |     "Sea Dragon Leviathan", | 
					
						
							|  |  |  |     "River Prowler", | 
					
						
							| 
									
										
										
										
											2022-09-02 03:35:41 +02:00
										 |  |  |     "Ghost Leviathan Juvenile", | 
					
						
							|  |  |  |     "Ghost Leviathan" | 
					
						
							| 
									
										
										
										
											2022-07-16 16:45:40 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-22 23:35:41 +02:00
										 |  |  | containment: Set[str] = {  # creatures that have to be raised from eggs | 
					
						
							|  |  |  |     "Cuddlefish", | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | hatchable: Set[str] = {  # aggressive creatures that can be grown from eggs as alternative to stasis | 
					
						
							|  |  |  |     "Ampeel",  # warning: electric shocks | 
					
						
							|  |  |  |     "Crabsquid",  # warning: electric shocks | 
					
						
							|  |  |  |     "Crabsnake", | 
					
						
							|  |  |  |     "Boneshark", | 
					
						
							|  |  |  |     "Crashfish", | 
					
						
							|  |  |  |     "Gasopod", | 
					
						
							|  |  |  |     "Lava Lizard", | 
					
						
							|  |  |  |     "Mesmer", | 
					
						
							|  |  |  |     "Sand Shark", | 
					
						
							|  |  |  |     "Stalker", | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 16:45:40 +02:00
										 |  |  | suffix: str = " Scan" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | creature_locations: Dict[str, int] = { | 
					
						
							| 
									
										
										
										
											2022-08-22 23:35:41 +02:00
										 |  |  |     creature + suffix: creature_id for creature_id, creature in enumerate(all_creatures, start=34000) | 
					
						
							| 
									
										
										
										
											2022-07-16 16:45:40 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-22 23:35:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-30 17:14:34 +02:00
										 |  |  | class Definitions: | 
					
						
							|  |  |  |     """Only compute lists if needed and then cache them.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @functools.cached_property | 
					
						
							|  |  |  |     def all_creatures_presorted(self) -> List[str]: | 
					
						
							|  |  |  |         return sorted(all_creatures) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @functools.cached_property | 
					
						
							|  |  |  |     def all_creatures_presorted_without_containment(self) -> List[str]: | 
					
						
							|  |  |  |         return [name for name in self.all_creatures_presorted if name not in containment] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @functools.cached_property | 
					
						
							|  |  |  |     def all_creatures_presorted_without_stasis(self) -> List[str]: | 
					
						
							|  |  |  |         return [name for name in self.all_creatures_presorted if name not in aggressive or name in hatchable] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @functools.cached_property | 
					
						
							|  |  |  |     def all_creatures_presorted_without_aggressive(self) -> List[str]: | 
					
						
							|  |  |  |         return [name for name in self.all_creatures_presorted if name not in aggressive] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # only singleton needed | 
					
						
							|  |  |  | Definitions: Definitions = Definitions() |