| 
									
										
										
										
											2024-07-15 06:09:02 -07:00
										 |  |  | from dataclasses import dataclass | 
					
						
							|  |  |  | from Options import Range, Toggle, DefaultOnToggle, Choice, DeathLink, PerGameCommonOptions | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class MinimumResourcePackAmount(Range): | 
					
						
							|  |  |  |     """The minimum amount of resources available in a resource pack""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Minimum resource pack amount" | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 15 | 
					
						
							|  |  |  |     default = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MaximumResourcePackAmount(Range): | 
					
						
							|  |  |  |     """The maximum amount of resources available in a resource pack""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Maximum resource pack amount" | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  |     range_start = 1 | 
					
						
							|  |  |  |     range_end = 15 | 
					
						
							|  |  |  |     default = 5 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DuplicateItems(Choice): | 
					
						
							| 
									
										
										
										
											2022-11-06 08:28:16 -06:00
										 |  |  |     """Adds duplicates of items to the item pool (if configured in Filler items). These will be selected alongside
 | 
					
						
							|  |  |  |     Resource Packs (if configured). Note that there are not many progression items, and selecting Progression may | 
					
						
							|  |  |  |     produce many of the same duplicate item."""
 | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Duplicate items" | 
					
						
							| 
									
										
										
										
											2022-09-03 12:25:04 -07:00
										 |  |  |     option_progression = 0 | 
					
						
							|  |  |  |     option_non_progression = 1 | 
					
						
							|  |  |  |     option_any = 2 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FillerItemTypes(Choice): | 
					
						
							|  |  |  |     """Determines whether to use Resource Packs, Duplicate Items (as configured), or both.""" | 
					
						
							|  |  |  |     display_name = "Filler items" | 
					
						
							|  |  |  |     option_resource_packs = 0 | 
					
						
							|  |  |  |     option_duplicates = 1 | 
					
						
							|  |  |  |     option_both = 2 | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class IslandFrequencyLocations(Choice): | 
					
						
							| 
									
										
										
										
											2024-06-29 16:18:09 -07:00
										 |  |  |     """Sets where frequencies for story islands are located.
 | 
					
						
							|  |  |  |     Vanilla will keep frequencies in their vanilla, non-randomized locations. | 
					
						
							|  |  |  |     Random On Island will randomize each frequency within its vanilla island, but will preserve island order. | 
					
						
							|  |  |  |     Random Island Order will change the order you visit islands, but will preserve the vanilla location of each frequency unlock. | 
					
						
							|  |  |  |     Random On Island Random Order will randomize the location containing the frequency on each island and randomize the order. | 
					
						
							|  |  |  |     Progressive will randomize the frequencies to anywhere, but will always unlock the frequencies in vanilla order as the frequency items are received. | 
					
						
							|  |  |  |     Anywhere will randomize the frequencies to anywhere, and frequencies will be received in any order."""
 | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Frequency locations" | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  |     option_vanilla = 0 | 
					
						
							|  |  |  |     option_random_on_island = 1 | 
					
						
							| 
									
										
										
										
											2022-09-03 12:25:04 -07:00
										 |  |  |     option_random_island_order = 2 | 
					
						
							|  |  |  |     option_random_on_island_random_order = 3 | 
					
						
							|  |  |  |     option_progressive = 4 | 
					
						
							|  |  |  |     option_anywhere = 5 | 
					
						
							|  |  |  |     default = 2 | 
					
						
							| 
									
										
										
										
											2024-07-15 06:09:02 -07:00
										 |  |  |     def is_filling_frequencies_in_world(self): | 
					
						
							|  |  |  |         return self.value <= self.option_random_on_island_random_order | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-05 19:37:08 -07:00
										 |  |  | class IslandGenerationDistance(Choice): | 
					
						
							|  |  |  |     """Sets how far away islands spawn from you when you input their coordinates into the Receiver.""" | 
					
						
							|  |  |  |     display_name = "Island distance" | 
					
						
							|  |  |  |     option_quarter = 2 | 
					
						
							|  |  |  |     option_half = 4 | 
					
						
							|  |  |  |     option_vanilla = 8 | 
					
						
							|  |  |  |     option_double = 16 | 
					
						
							|  |  |  |     option_quadrouple = 32 | 
					
						
							|  |  |  |     default = 8 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ExpensiveResearch(Toggle): | 
					
						
							| 
									
										
										
										
											2024-06-29 16:18:09 -07:00
										 |  |  |     """If No is selected, researching items and unlocking items in the Crafting Table works the same as vanilla Raft.
 | 
					
						
							|  |  |  |     If Yes is selected, each unlock in the Crafting Table will require its own set of researched items in order to unlock it."""
 | 
					
						
							| 
									
										
										
										
											2022-07-05 19:37:08 -07:00
										 |  |  |     display_name = "Expensive research" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  | class ProgressiveItems(DefaultOnToggle): | 
					
						
							|  |  |  |     """Makes some items, like the Bow and Arrow, progressive rather than raw unlocks.""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Progressive items" | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class BigIslandEarlyCrafting(Toggle): | 
					
						
							| 
									
										
										
										
											2022-11-06 08:28:16 -06:00
										 |  |  |     """Allows recipes that require items from big islands (eg leather) to lock earlygame items like the Receiver, Bolt,
 | 
					
						
							|  |  |  |     or Smelter. Big islands are available from the start of the game, however it can take a long time to find them."""
 | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Early recipes behind big islands" | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class PaddleboardMode(Toggle): | 
					
						
							| 
									
										
										
										
											2024-06-29 16:18:09 -07:00
										 |  |  |     """Sets later story islands to be in logic without an Engine or Steering Wheel. May require lots of paddling.""" | 
					
						
							| 
									
										
										
										
											2022-02-02 16:29:29 +01:00
										 |  |  |     display_name = "Paddleboard Mode" | 
					
						
							| 
									
										
										
										
											2022-01-21 13:41:53 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-15 06:09:02 -07:00
										 |  |  | @dataclass | 
					
						
							|  |  |  | class RaftOptions(PerGameCommonOptions): | 
					
						
							|  |  |  |     minimum_resource_pack_amount: MinimumResourcePackAmount | 
					
						
							|  |  |  |     maximum_resource_pack_amount: MaximumResourcePackAmount | 
					
						
							|  |  |  |     duplicate_items: DuplicateItems | 
					
						
							|  |  |  |     filler_item_types: FillerItemTypes | 
					
						
							|  |  |  |     island_frequency_locations: IslandFrequencyLocations | 
					
						
							|  |  |  |     island_generation_distance: IslandGenerationDistance | 
					
						
							|  |  |  |     expensive_research: ExpensiveResearch | 
					
						
							|  |  |  |     progressive_items: ProgressiveItems | 
					
						
							|  |  |  |     big_island_early_crafting: BigIslandEarlyCrafting | 
					
						
							|  |  |  |     paddleboard_mode: PaddleboardMode | 
					
						
							|  |  |  |     death_link: DeathLink |