 60d1a27079
			
		
	
	60d1a27079
	
	
	
		
			
			* add forgotten aggressive creatures * fix logic requirements * added option to opt out of aggressive creature scans
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import typing
 | |
| 
 | |
| from Options import Choice, Range, DeathLink
 | |
| from .Creatures import all_creatures, Definitions
 | |
| 
 | |
| 
 | |
| class ItemPool(Choice):
 | |
|     """Valuable item pool leaves all filler items in their vanilla locations and
 | |
|     creates random duplicates of important items into freed spots."""
 | |
|     display_name = "Item Pool"
 | |
|     option_standard = 0
 | |
|     option_valuable = 1
 | |
| 
 | |
| 
 | |
| class Goal(Choice):
 | |
|     """Goal to complete.
 | |
|     Launch: Leave the planet.
 | |
|     Free: Disable quarantine.
 | |
|     Infected: Reach maximum infection level.
 | |
|     Drive: Repair the Aurora's Drive Core"""
 | |
|     auto_display_name = True
 | |
|     display_name = "Goal"
 | |
|     option_launch = 0
 | |
|     option_free = 1
 | |
|     option_infected = 2
 | |
|     option_drive = 3
 | |
| 
 | |
|     def get_event_name(self) -> str:
 | |
|         return {
 | |
|             self.option_launch: "Neptune Launch",
 | |
|             self.option_infected: "Full Infection",
 | |
|             self.option_free: "Disable Quarantine",
 | |
|             self.option_drive: "Repair Aurora Drive"
 | |
|         }[self.value]
 | |
| 
 | |
| 
 | |
| class CreatureScans(Range):
 | |
|     """Place items on specific, randomly chosen, creature scans.
 | |
|     Warning: Includes aggressive Leviathans."""
 | |
|     display_name = "Creature Scans"
 | |
|     range_end = len(all_creatures)
 | |
| 
 | |
| 
 | |
| class AggressiveScanLogic(Choice):
 | |
|     """By default (Stasis), aggressive Creature Scans are logically expected only with a Stasis Rifle.
 | |
|     Containment: Removes Stasis Rifle as expected solution and expects Alien Containment instead.
 | |
|     Either: Creatures may be expected to be scanned via Stasis Rifle or Containment, whichever is found first.
 | |
|     None: Aggressive Creatures are assumed to not need any tools to scan.
 | |
|     Removed: No Creatures needing Stasis or Containment will be in the pool at all.
 | |
| 
 | |
|     Note: Containment, Either and None adds Cuddlefish as an option for scans.
 | |
|     Note: Stasis, Either and None adds unhatchable aggressive species, such as Warper.
 | |
|     Note: This is purely a logic expectation, and does not affect gameplay, only placement."""
 | |
|     display_name = "Aggressive Creature Scan Logic"
 | |
|     option_stasis = 0
 | |
|     option_containment = 1
 | |
|     option_either = 2
 | |
|     option_none = 3
 | |
|     option_removed = 4
 | |
| 
 | |
|     def get_pool(self) -> typing.List[str]:
 | |
|         if self == self.option_removed:
 | |
|             return Definitions.all_creatures_presorted_without_aggressive
 | |
|         elif self == self.option_stasis:
 | |
|             return Definitions.all_creatures_presorted_without_containment
 | |
|         elif self == self.option_containment:
 | |
|             return Definitions.all_creatures_presorted_without_stasis
 | |
|         else:
 | |
|             return Definitions.all_creatures_presorted
 | |
| 
 | |
| 
 | |
| class SubnauticaDeathLink(DeathLink):
 | |
|     """When you die, everyone dies. Of course the reverse is true too.
 | |
|     Note: can be toggled via in-game console command "deathlink"."""
 | |
| 
 | |
| 
 | |
| options = {
 | |
|     "item_pool": ItemPool,
 | |
|     "goal": Goal,
 | |
|     "creature_scans": CreatureScans,
 | |
|     "creature_scan_logic": AggressiveScanLogic,
 | |
|     "death_link": SubnauticaDeathLink,
 | |
| }
 |